Option 1: Install the Docker and cri-dockerd (Recommended)
To install the Docker Container Runtime and the cri-dockerd, follow the steps below:
Install the Docker:
Install cri-dockerd:
Option 2: Install the Docker and theContainerd
Install the Docker:
To install Containerd on your system:
Optional-Setup a docker registry server
If you are using the docker and you have only one node, the step can be skipped.
If you have deployed a Kubernetes cluster with multiple nodes, it is recommended to set up a private Docker Registry to allow other nodes to quickly pull images within the intranet.
Create a directory /docker_repo on your docker server. It will be mounted on the registry container as persistent storage for our docker registry.
<Your_registry_server_IP>: the intranet IP address of your registry server.
Finally, you can check the installation by the command:
docker system info
Create a Kubernetes Cluster
To create a Kubernetes cluster, you can use a container management tool like kubeadm. The below steps can be followed:
Install the Network Plugin
Calico is an open-source networking and network security solution for containers, virtual machines, and native host-based workloads. Calico supports a broad range of platforms including Kubernetes, OpenShift, Mirantis Kubernetes Engine (MKE), OpenStack, and bare metal services.
step 1: Install the Tigera Calico operator and custom resource definitions
If your computing provider wants to provide a GPU resource, the NVIDIA Plugin should be installed, please follow the steps:
Recommend NVIDIA Linux drivers version should be 470.xx+
If you have installed it correctly, you can see the result shown in the figure by the command kubectl get po -n kube-system
Install the Ingress-nginx Controller
The ingress-nginx is an ingress controller for Kubernetes using NGINX as a reverse proxy and load balancer. You can run the following command to install it:
If you have installed it correctly, you can see the result shown in the figure by the command:
Run kubectl get po -n ingress-nginx
Run kubectl get svc -n ingress-nginx
Install and config the Nginx
Install Nginx service to the Server
sudo apt update
sudo apt install nginx
Add a configuration for your Domain name Assume your domain name is *.example.com
vi /etc/nginx/conf.d/example.conf
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
server {
listen 80;
listen [::]:80;
server_name *.example.com; # need to your domain
return 301 https://$host$request_uri;
#client_max_body_size 1G;
}
server {
listen 443 ssl;
listen [::]:443 ssl;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; # need to config SSL certificate
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; # need to config SSL certificate
server_name *.example.com; # need to config your domain
location / {
proxy_pass http://127.0.0.1:<port>; # Need to configure the Intranet port corresponding to ingress-nginx-controller service port 80
proxy_set_header Host $http_host;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
}
}
Note:
server_name: a generic domain name
ssl_certificate and ssl_certificate_key: certificate for https.
proxy_pass: The port should be the Intranet port corresponding to ingress-nginx-controller service port 80
Reload the Nginx config
sudo nginx -s reload
Map your "catch-all (wildcard) subdomain(*.example.com)" to a public IP address
Install the Hardware resource-exporter
The resource-exporter plugin is developed to collect the node resource constantly, computing provider will report the resource to the Lagrange Auction Engine to match the space requirement. To get the computing task, every node in the cluster must install the plugin. You just need to run the following command:
By default, the CP's repo is ~/.swan/computing, you can configure it by export CP_PATH="<YOUR_CP_PATH>"
The CP service port (8085 by default) must be mapped to the public IP address and port
Update config.toml
Edit the necessary configuration files according to your deployment requirements.
```
[API]
Port = 8085 # The port number that the web server listens on
MultiAddress = "/ip4/<public_ip>/tcp/<port>" # The multiAddress for libp2p
Domain = "" # The domain name
NodeName = "" # The computing-provider node name
WalletWhiteList = "" # CP only accepts user addresses from this whitelist for space deployment
WalletBlackList = "" # CP reject user addresses from this blacklist for space deployment
[UBI]
UbiEnginePk = "0xB5aeb540B4895cd024c1625E146684940A849ED9" # UBI Engine's public key, CP only accept the task from this UBI engine
[LOG]
CrtFile = "/YOUR_DOMAIN_NAME_CRT_PATH/server.crt" # Your domain name SSL .crt file path
KeyFile = "/YOUR_DOMAIN_NAME_KEY_PATH/server.key" # Your domain name SSL .key file path
[HUB]
ServerUrl = "https://orchestrator-mainnet-api.swanchain.io" # The Orchestrator's API address
AccessToken = "" # The Orchestrator's access token, Acquired from "https://orchestrator.swanchain.io", and switch to the `mainnet network` and use the owner address
BalanceThreshold= 10 # The cp’s collateral balance threshold
OrchestratorPk = "0x4B98086A20f3C19530AF32D21F85Bc6399358e20" # Orchestrator's public key, CP only accept the task from this Orchestrator
VerifySign = true # Verify that the task signature is from Orchestrator
[MCS]
ApiKey = "" # Acquired from "https://www.multichain.storage" -> setting -> Create API Key
BucketName = "" # Acquired from "https://www.multichain.storage" -> bucket -> Add Bucket
Network = "polygon.mainnet" # polygon.mainnet for mainnet, polygon.mumbai for testnet
[Registry]
ServerAddress = "" # The docker container image registry address, if only a single node, you can ignore
UserName = "" # The login username, if only a single node, you can ignore
Password = "" # The login password, if only a single node, you can ignore
[RPC]
SWAN_CHAIN_RPC = "https://mainnet-rpc01.swanchain.io" # Swan chain RPC
Note:
Initialize a Wallet and Deposit SwanETH
Generate a new wallet address or import the previous wallet:
computing-provider wallet new
Example output:
0x7791f48931DB81668854921fA70bFf0eB85B8211
or import your wallet:
# Import wallet using the private key
computing-provider wallet import <YOUR_PRIVATE_KEY_FILE>
Note:<YOUR_PRIVATE_KEY_FILE> is a file that contains the private key
If you need to run FCP and ECP at the same time, you need to set it to 1,2,3,4
Step 4: Account Management
Use computing-provider account subcommands to update CP details:
computing-provider account -h
NAME:
computing-provider account - Manage account info of CP
USAGE:
computing-provider account command [command options] [arguments...]
COMMANDS:
create Create a cp account to chain
changeMultiAddress Update MultiAddress of CP (/ip4/<public_ip>/tcp/<port>)
changeOwnerAddress Update OwnerAddress of CP
changeWorkerAddress Update workerAddress of CP
changeBeneficiaryAddress Update beneficiaryAddress of CP
changeTaskTypes Update taskTypes of CP (1:Fil-C2-512M, 2:Aleo, 3: AI, 4:Fil-C2-32G), separated by commas
help, h Shows a list of commands or help for one command
OPTIONS:
--help, -h show help
Step 6: Check the Status of ZK task;
To check the ZK task list, use the following command:
computing-provider ubi list --show-failed
Example output:
TASK ID TASK TYPE ZK TYPE TRANSACTION HASH STATUS REWARD CREATE TIME
2 CPU fil-c2-512M 0xb06b3a8c2b2b96b564777a3866e27ce7c61631f77e5de3196e93eb916b0d2575 success 2.0 2024-01-20 03:30:30
33 CPU fil-c2-512M 0x7567435e83a4a019a6356da8cf33e64a071f2d3355fce5289b9c17cf0144f282 success 2.0 2024-01-18 15:58:21
13 CPU fil-c2-512M 0x7b3081314891aad3788c84935c67f9be0a8acc6b4fc77c5aa6fdfda728877fde success 2.0 2024-01-20 04:27:40
238 CPU fil-c2-512M 0xb8eb1f7b3cfc8210fa5546adc528f230241110e5cc9b4900725a9da28895aad9 success 2.0 2024-01-18 17:08:21
Restart the Computing Provider
You can run computing-provider using the following command
export CP_PATH=<YOUR_CP_PATH>
nohup computing-provider run >> cp.log 2>&1 &
CLI of Computing Provider
Check the current list of tasks running on CP, display detailed information for tasks using -v
computing-provider task list
Retrieve detailed information for a specific task using task_uuid
computing-provider task get [task_uuid]
Delete task by task_uuid
computing-provider task delete [task_uuid]
Getting Help
License
Apache
If you plan to run a Kubernetes cluster, you need to install a container runtime into each node in the cluster so that Pods can run there, refer to . And you just need to choose one option to install the Container Runtime Environment
Please refer to the official documentation from .
cri-dockerd is a CRI (Container Runtime Interface) implementation for Docker. You can install it refer to .
Please refer to the official documentation from .
Containerd is an industry-standard container runtime that can be used as an alternative to Docker. To install containerd on your system, follow the instructions on .
1
2
.
To install Calico, you can follow the below steps, more information can be found .
3
.
.
4
5
6
7
Example [api].WalletWhiteList hosted on GitHub can be found .
Example [api].WalletBlackList hosted on GitHub can be found .
Note: If you don't have SwanETH and SWANC, please follow to , and as collaterals.
For more device choices, please refer to this page:
For usage questions or issues reach out to the Swan team either in the or open a new issue here on GitHub.