widepath/phpfpmbrew install multipassmultipass launch docker --name=dockermultipass exec docker -- sudo bashansible_user into ./.ssh/authorized_keyssystemctl edit docker
[Service] ExecStart= ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 --containerd=/run/containerd/containerd.sock
multipass exec docker -- sudo bashsystemctl restart dockerdocker logindocker pull widepath/phpfpm:release-0.0.98docker network create widepath_localbackendapt install s3cmd zipdocker run -d --name=mysql -e MYSQL_ROOT_PASSWORD=root --network widepath_localbackend -p 3306:3306 mariadb:10.4worker like this: ansible_user=root ansible_pass= MYSQL_ROOT_PASSWORD=root ansible_port=22 WP_UID_FILES=1001 WP_GID_FILES=1001 nodemonnodes collectiondocker run -d -v /var/run/docker.sock:/var/run/docker.sock -p 127.0.0.1:2375:2375 bobrik/socat TCP-LISTEN:2375,fork UNIX-CONNECT:/var/run/docker.sockrastasheep/ubuntu-sshd to emulate the filesystem of a phpnode and sshd on a custom portsshpass to allow ansible to connect the rastasheep/ubuntu-sshd container over ssh using passwords`meteor shell.load <physical path to script>docker build --platform=linux/amd64 -t <image-name>:<version> .--platform=linux/amd64worker-ansible-phpnode.key
workerPrivate key generated on app nodes then authorized on php nodes - this is so the sftpd container can mount the key and ssh to the php nodes
Private keys generated on computation nodes then authorized on php nodes - this is so the worker container can ansible to php nodes in order to do backups, etc
Install ssh key (just copy paste to ~/.ssh/id_rsa) to bastion host
./deploy/kube/secret-nodesftpd-phpnodes.yml and ./deploy/kube/secret-worker-ansible-phpnodes.yml are the keys that grant nodesftpd and worker to communicate with phpnodes.
To copy the regcred secret to the kube-logging namespace: kubectl get secret regcred --namespace=default -o yaml | grep -v '^\s*namespace:\s' | kubectl apply --namespace=kube-logging -f -
Mailgun SMTP credentials for *** are used for
MAIL_URL in production kube widepath-secret-prodsmtp-relay daemon SMTP_OUTBOUND_PASSWORD in deploy/ansible/phpnode-service/smtp-relay.ymlmonitormongodump --db=dbname --gzip --archive=wp.gzmongorestore --gzip --archive=wp.gzbastion manually and make sure to install ssh private key in ~/.ssh/id_rsaDO_API_TOKEN is required as an environment variable to make the dynamic inventory workdoctl compute tag create phpnodelaunch-inventory is static and represents the base instances. This means, run the launch.yml playbook like this: ansible-playbook -i launch-inventory launch.ymlcurl -X GET -H 'Content-Type: application/json' -H 'Authorization: Bearer $DO_API_TOKEN' "[***]" or doctl compute ssh-key listexport DO_AUTH_TOKEN=abc123cd ./deploy/ansible./deploy/ansible/phpnode-provision/launch-inventory-php fileansible-playbook -i phpnode-provision/launch-inventory-php phpnode-provision/launch-php.ymlansible-playbook phpnode-provision/droplet-basics.yml --limit "phpXX"ansible-playbook phpnode-provision/docker.yml --limit "phpXX"ansible-playbook phpnode-provision/php.yml --limit "phpXX"ansible-playbook phpnode-provision/php-packages-outside-docker.yml --limit "phpXX"ansible-playbook phpnode-provision/python.yml --limit "phpXX"ansible-playbook phpnode-provision/reinstall-docker-sdk.yml --limit "phpXX"ansible-playbook phpnode-provision/block-storage.yml --limit "phpXX"ssh-keygen -y -f worker-ansible-phpnode.key > worker-ansible-phpnode.pubansible-playbook phpnode-provision/keys.yml --limit "phpXX"ansible-playbook phpnode-service/caddy-phpnode.yml --limit "phpXX"ansible-playbook phpnode-service/vector/vector-phpnode.yml --limit "phpXX"ansible-playbook phpnode-service/mysql.yml --limit "phpXX"ansible-playbook phpnode-service/purger.yml --limit "phpXX"ansible-playbook phpnode-service/smtp-relay.yml --limit "phpXX"app: node app-cli/app-cli node add phpXX <private_ip> "websitesca" "docker-standalone"A phpXX.tor1.airwp.com >> public_ipsrc=phpX1dst=phpX2candidates=$(echo "show databases" | mysql -u root -p -h $src | grep -Ev "^(Database|mysql|performance_schema|information_schema)$")mysqldump --databases $candidates -u root -p -h $src > all.sqlMYSQL_CONN="-uroot -p -h $src"mysql ${MYSQL_CONN} --skip-column-names -A -e"SELECT CONCAT('SHOW GRANTS FOR ''',user,'''@''',host,''';') FROM mysql.user WHERE user<>''" | mysql ${MYSQL_CONN} --skip-column-names -A | sed 's/$/;/g' > grants.sqlmysql -u root -p -h $dst < all.sqlmysql -u root -p -h $dst < grants.sqlrsync -chavzP --stats $src:/mnt/airwp/sites/ ./sitesrmdir sites/_trashrsync -chavzP --stats ./sites/* $dst:/mnt/airwp/sitesapp-cli site list --nodename=$src | jq "[.[].siteStub]" > ~/Desktop/nodes/$src.jsoncat ~/Desktop/nodes/$src.json | python deploy/script/node-change-all.js $dst~/.ansible/airwp.cfg (get from ./deploy/ansible.cfg.sample)~/.ansible/airwp-ssh.cfg (get from ./deploy/ssh.cfg.sample)export ANSIBLE_CONFIG=~/.ansible/airwp.cfgansible-playbook in any folder and it will find the inventoryDO_API_TOKEN environment variableSftpd server for WidePath.
Keys need to be generated in a specific format for use with the ssh2 module.
ssh-keygen -m PEM -t rsa -f /path/to/wp_keyThis will generate /path/to/wp_key (the private key) and /path/to/wp_key.pub (the public key)
Can use ssh-copy-id to authorize the public key on the destination server or use the ansible modules authorized_key.
The format seems to be RSA PKCS#8 ASN1 with a containing public key RSA X.509 ASN1
The app nodes need to be able to ssh to the php nodes. This means we can generate keys on the app nodes then authorize those keys on the php nodes.
In dev, we just authorize a key from main to php1.
From jump node:
export source=php6export dest=php10candidates=$(echo "show databases" | mysql -u root -p -h $source | grep -Ev "^(Database|mysql|performance_schema|information_schema)$")mysqldump --databases $candidates -u root -p -h $source > all.sqlexport MYSQL_CONN="-uroot -p -h $sourcemysql ${MYSQL_CONN} --skip-column-names -A -e"SELECT CONCAT('SHOW GRANTS FOR ''',user,'''@''',host,''';') FROM mysql.user WHERE user<>''" | mysql ${MYSQL_CONN} --skip-column-names -A | sed 's/$/;/g' > grants.sqlEdit grants and remove weird stuff
mysql -u root -p -h $dest < all.sqlmysql -u root -p -h $dest < grants.sqlrsync -chavzP --stats $source:/mnt/airwp/sites/ ./sitesrmdir sites/_trashrsync -chavzP --stats ./sites/* $dest:/mnt/airwp/sitesapp-cli site list --nodename=$source | jq "[.[].siteStub]" > ~/Desktop/nodes/$source.jsoncat ~/Desktop/nodes/$source.json | python deploy/script/node-change-all.js $destClean up
chown -R wp:wp *find . -type f -exec chmod 644 {} \;find . -type d -exec chmod 755 {} \;find . -regex '.*.archive.zip' -exec rm {} \;wp option add frmpro-credentials 'a:1:{s:7:\"license\";s:23:\"BDN68-YZF5W-GZHKY-YOJJL\";}'wp option add wordpress_api_key 92f0f8e7bee3wp role reset --all wp user set-role websitesca administrator wp user update websitesca --nickname=websitesca sudo -u \#$WP_UID_FILES wp plugin uninstall hello sudo -u \#$WP_UID_FILES wp theme uninstall twentyfifteen twentysixteen
See memory usage of a container: kubectl exec -it app-d86fcdd6c-lwp9d cat /sys/fs/cgroup/memory/memory.usage_in_bytes
apt-get install libfcgi0ldbldb.sites.find({backups:{$elemMatch:{'status.pending':true}}}).map(x=>x.siteStub)db.sites.update({}, {$pull:{backups:{'status.pending':true}}}, {multi:true})BucketLifecycle rules via api (can't even use doctl).scripts/update_do_spaces_widepath_lifecycle.pyhttp --headers [***] Host:<sitestub>.widepath.app X-OriginalHost:<hostname> X-SiteStub:<sitestub> --verify=nocurl -I [***] -H "X-OriginalHost: <host>" -H "X-SiteStub: <sitestub>" -H "Host: <sitestub>.widepath.app" -k探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录认证访问私有仓库
在 Linux 系统配置镜像服务
在 Docker Desktop 配置镜像
Docker Compose 项目配置
Kubernetes 集群配置 Containerd
K3s 轻量级 Kubernetes 镜像加速
VS Code Dev Containers 配置
MacOS OrbStack 容器配置
在宝塔面板一键配置镜像
Synology 群晖 NAS 配置
飞牛 fnOS 系统配置镜像
极空间 NAS 系统配置服务
爱快 iKuai 路由系统配置
绿联 NAS 系统配置镜像
QNAP 威联通 NAS 配置
Podman 容器引擎配置
HPC 科学计算容器配置
ghcr、Quay、nvcr 等镜像仓库
无需登录使用专属域名
需要其他帮助?请查看我们的 常见问题Docker 镜像访问常见问题解答 或 提交工单
免费版仅支持 Docker Hub 访问,不承诺可用性和速度;专业版支持更多镜像源,保证可用性和稳定速度,提供优先客服响应。
专业版支持 docker.io、gcr.io、ghcr.io、registry.k8s.io、nvcr.io、quay.io、mcr.microsoft.com、docker.elastic.co 等;免费版仅支持 docker.io。
当返回 402 Payment Required 错误时,表示流量已耗尽,需要充值流量包以恢复服务。
通常由 Docker 版本过低导致,需要升级到 20.x 或更高版本以支持 V2 协议。
先检查 Docker 版本,版本过低则升级;版本正常则验证镜像信息是否正确。
使用 docker tag 命令为镜像打上新标签,去掉域名前缀,使镜像名称更简洁。
来自真实用户的反馈,见证轩辕镜像的优质服务