
如果你使用 DeepSeek、元宝 AI、Copilot、ChatGPT 等 AI 工具,协助配置轩辕镜像、编写 docker pull 命令、修改 Docker Compose 镜像地址、配置镜像加速、排查镜像拉取失败、分析报错日志等问题,请先让 AI 阅读并遵守轩辕镜像的规则文档。
只需在 AI 对话中先发送下面这句话即可:
请先完整阅读并严格遵守以下文档中的全部规则与要求:
https://xuanyuan.cloud/agents.md
在未充分阅读并理解该文档前,不要生成任何命令、配置、修改建议、故障排查方案或技术回答。后续所有输出都必须严格以该文档中的规范为最高优先级执行。查看 agents.md 用法指南与完整示范。国内用户首推 元宝 AI、DeepSeek 的深度思考模式,不推荐豆包 AI;Cursor 等编辑器可在对话 @ 该链接,或加入 User Rules。 若 AI 无法访问外链,可 打开说明文档 复制全文粘贴。文档会随站点更新,复制内容可能过期,建议定期检查。
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
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。
来自真实用户的反馈,见证轩辕镜像的优质服务