
widepath/phpfpmairwp 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参数
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节点通信密钥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
设置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)
添加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 [***] 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

manifest unknown 错误
TLS 证书验证失败
DNS 解析超时
410 错误:版本过低
402 错误:流量耗尽
身份认证失败错误
429 限流错误
凭证保存错误
来自真实用户的反馈,见证轩辕镜像的优质服务