
airwp Docker镜像包含多个容器组件,用于构建和运行WidePath Web应用生态系统。该镜像提供了完整的应用服务架构,包括Web应用、代理服务、PHP处理节点、后台任务处理、日志收集等核心功能,支持开发环境搭建与生产环境部署。
安装Multipass:
bashbrew install multipass
启动Docker虚拟机:
bashmultipass launch docker --name=docker multipass exec docker -- sudo bash
配置Docker服务:
bashsystemctl edit docker
在编辑器中添加:
[Service] ExecStart= ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 --containerd=/run/containerd/containerd.sock
重启Docker并登录:
bashsystemctl restart docker docker login
拉取镜像并创建网络:
bashdocker pull widepath/phpfpm:release-0.0.98 docker network create widepath_localbackend
安装依赖并启动数据库:
bashapt install s3cmd zip docker run -d --name=mysql -e MYSQL_ROOT_PASSWORD=root --network widepath_localbackend -p 3306:3306 mariadb:10.4
启动worker服务:
bashansible_user=root ansible_pass= MYSQL_ROOT_PASSWORD=root ansible_port=22 WP_UID_FILES=1001 WP_GID_FILES=1001 nodemon
将节点IP添加至Mongo的nodes集合
暴露Docker API:
bashdocker 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.sock
运行SSH容器模拟PHP节点文件系统:
bashdocker run -d -p 2222:22 rastasheep/ubuntu-sshd
安装sshpass以支持密码SSH连接:
bashapt install sshpass
本地端口转发Mongo:
bashkubectl port-forward <mongo-pod> 27017:27017
启动portal-meteor应用:
bashmeteor run
在另一个终端启动meteor shell:
bashmeteor shell
加载并运行脚本:
bash.load <脚本物理路径>
输出将显示在portal-meteor应用终端
bashdocker build --platform=linux/amd64 -t <镜像名称>:<版本> .
必须添加
--platform=linux/amd64参数
worker-ansible-phpnode.key
bashssh-keygen -m PEM -t rsa -f worker-ansible-phpnode.key
bashkubectl create secret generic worker-ansible-phpnode --from-file=worker-ansible-phpnode.key
其他密钥
app节点生成私钥并在php节点授权,供sftpd容器SSH连接php节点computation节点生成私钥并在php节点授权,供worker容器通过Ansible执行备份等操作~/.ssh/id_rsa密钥配置文件
./deploy/kube/secret-nodesftpd-phpnodes.yml: nodesftpd与php节点通信密钥./deploy/kube/secret-worker-ansible-phpnodes.yml: worker与php节点通信密钥复制regcred密钥到kube-logging命名空间
bashkubectl get secret regcred --namespace=default -o yaml | grep -v '^\s*namespace:\s' | kubectl apply --namespace=kube-logging -f -
备份
bashmongodump --db=dbname --gzip --archive=wp.gz
恢复
bashmongorestore --gzip --archive=wp.gz
基础设置
~/.ssh/id_rsabashexport DO_API_TOKEN=<你的API令牌>
bashdoctl compute tag create phpnode
bashansible-playbook -i launch-inventory launch.yml
新增PHP节点
设置API令牌:
bashexport DO_AUTH_TOKEN=abc123
进入Ansible目录:
bashcd ./deploy/ansible
在./deploy/ansible/phpnode-provision/launch-inventory-php添加新节点
创建节点:
bashansible-playbook -i phpnode-provision/launch-inventory-php phpnode-provision/launch-php.yml
部署所需包和配置:
bashansible-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"
安装密钥到新节点:
bashssh-keygen -y -f worker-ansible-phpnode.key > worker-ansible-phpnode.pub ansible-playbook phpnode-provision/keys.yml --limit "phpXX"
创建phpnode服务:
bashansible-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中添加节点:
bashnode app-cli/app-cli node add phpXX <private_ip> "websitesca" "docker-standalone"
在Cloudflare添加DNS记录:
A phpXX.tor1.airwp.com >> public_ip
定义源节点和目标节点:
bashsrc=phpX1 dst=phpX2
导出数据库:
bashcandidates=$(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.sql
导出权限:
bashMYSQL_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.sql
编辑grants.sql移除无关内容
导入数据库和权限到目标节点:
bashmysql -u root -p -h $dst < all.sql mysql -u root -p -h $dst < grants.sql
同步站点文件:
bashrsync -chavzP --stats $src:/mnt/airwp/sites/ ./sites rmdir sites/_trash rsync -chavzP --stats ./sites/* $dst:/mnt/airwp/sites
更新站点节点信息:
bashapp-cli site list --nodename=$src | jq "[.[].siteStub]" > ~/Desktop/nodes/$src.json cat ~/Desktop/nodes/$src.json | python deploy/script/node-change-all.js $dst
权限修复:
bashchown -R wp:wp * find . -type f -exec chmod 644 {} \; find . -type d -exec chmod 755 {} \; find . -regex '.*.archive.zip' -exec rm {} \;
创建配置文件:
~/.ansible/airwp.cfg (从./deploy/ansible.cfg.sample复制)~/.ansible/airwp-ssh.cfg (从./deploy/ssh.cfg.sample复制)设置环境变量:
bashexport ANSIBLE_CONFIG=~/.ansible/airwp.cfg
确保inventory可用(需设置DO_API_TOKEN环境变量)
密钥生成与认证
生成适用于ssh2模块的密钥:
bashssh-keygen -m PEM -t rsa -f /path/to/wp_key
将生成私钥(/path/to/wp_key)和公钥(/path/to/wp_key.pub)
wpcli命令
添加Formidable Pro API密钥:
bashwp option add frmpro-credentials 'a:1:{s:7:\"license\";s:23:\"BDN68-YZF5W-GZHKY-YOJJL\";}'
添加Akismet API密钥:
bashwp option add wordpress_api_key 92f0f8e7bee3
重置角色并设置管理员:
bashwp role reset --all wp user set-role websitesca administrator wp user update websitesca --nickname=websitesca
卸载默认插件和主题:
bashsudo -u \#$WP_UID_FILES wp plugin uninstall hello sudo -u \#$WP_UID_FILES wp theme uninstall twentyfifteen twentysixteen
容器内存使用查询
bashkubectl exec -it app-d86fcdd6c-lwp9d cat /sys/fs/cgroup/memory/memory.usage_in_bytes
清理挂起的备份
bash# 列出所有挂起的备份 db.sites.find({backups:{$elemMatch:{'status.pending':true}}}).map(x=>x.siteStub) # 删除所有挂起的备份 db.sites.update({}, {$pull:{backups:{'status.pending':true}}}, {multi:true})
直接访问源服务器
使用httpie:
bashhttp --headers https://phpX.origin-tor1.widepath.app Host:<sitestub>.widepath.app X-OriginalHost:<hostname> X-SiteStub:<sitestub> --verify=no
使用curl:
bashcurl -I [***] -H "X-OriginalHost: <host>" -H "X-SiteStub: <sitestub>" -H "Host: <sitestub>.widepath.app" -k
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。

探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录认证访问私有仓库
无需登录使用专属域名
Kubernetes 集群配置 Containerd
K3s 轻量级 Kubernetes 镜像加速
VS Code Dev Containers 配置
Podman 容器引擎配置
HPC 科学计算容器配置
ghcr、Quay、nvcr 等镜像仓库
Harbor Proxy Repository 对接专属域名
Portainer Registries 加速拉取
Nexus3 Docker Proxy 内网缓存
需要其他帮助?请查看我们的 常见问题Docker 镜像访问常见问题解答 或 提交工单
docker search 限制
站内搜不到镜像
离线 save/load
插件要用 plugin install
WSL 拉取慢
安全与 digest
新手拉取配置
镜像合规机制
manifest unknown
no matching manifest(架构)
invalid tar header(解压)
TLS 证书失败
DNS 超时
域名连通性排查
410 Gone 排查
402 与流量用尽
401 认证失败
429 限流
D-Bus 凭证提示
413 与超大单层
来自真实用户的反馈,见证轩辕镜像的优质服务