1. Docker Hub上有关于wordpress部署方式的说明,我们使用docker stack方式部署wordpress,为便于部署其它应用,在wordpress前面部署了nginx进行反向代理,docker-compose.yml文件内容如下:
-
- nginx处在frontend和backend网络中
- wordpress处在backend网络中
- mysql处在backend网络中
- nginx的配置文件夹,html目录内容,log文件夹镜像到主机上(文件夹映射会自动在host与container之间同步,文件则不会,所以volumes bind最好用文件夹)
- mysql的数据文件夹镜像到主机上
- wordpress的完整目录(/var/www/html)镜像到主机上
- wordpress安装目录下的wp-content文件夹保存了所有的插件及上传文件,但主程序(.php文件)在上层文件位中,为了以后的主程序升级,我们把整个目录镜像出去备份
version: "3.3" services: nginx: image: nginx:1.13.8 deploy: mode: "global" labels: - "position=frontend" resources: limits: cpus: "0.1" memory: 50M restart_policy: condition: any ports: - "80:80" volumes: - type: "bind" source: "/etc/nginx/" target: "/etc/nginx/" read_only: true - type: "bind" source: "/var/www/html/" target: "/usr/share/nginx/html" read_only: true - type: "bind" source: "/var/log/nginx/" target: "/var/log/nginx/" networks: - frontend - backend mysql5_7: image: mysql:5.7 deploy: labels: - "position=backend" placement: constraints: - "node.role == manager" restart_policy: condition: any volumes: - type: "bind" source: "/var/lib/mysql5_7" target: "/var/lib/mysql" #restart: always environment: MYSQL_ROOT_PASSWORD: "**********" MYSQL_DATABASE: wordpress MYSQL_USER: wordpress MYSQL_PASSWORD: "**********" networks: - backend wordpress: depends_on: - mysql5_7 image: wordpress:4.9.5-apache deploy: labels: - "position=backend" restart_policy: condition: any volumes: - type: "bind" source: "/var/lib/wordpress" target: "/var/www/html" environment: WORDPRESS_DB_HOST: mysql5_7:3306 WORDPRESS_DB_USER: wordpress WORDPRESS_DB_PASSWORD: "***************" networks: - backend networks: frontend: backend:
2. nginx中配置转发
nginx.conf内容
http { server { listen 80; location / { proxy_pass http://wordpress:80; proxy_set_header Host www.blog.org; proxy_pass_request_headers on; } } }
3. 以stack方式部署, stack名称为web
#docker stack deploy -c docker-compose.yml web
4. 问题解决
wordpress实例在docker container中以www-data用户运行,用户id为33,如下图,在文件上传或插件更新时会提示没有文件夹写权限
通过修改主机上的镜像文件夹owner解决,虽然该用户id在主机上并不存在:#chown -R 33:33 /var/lib/wordpress/
5. 不提供FTP信息自动完成WordPress更新
WordPress默认更新时需要提供FTP信息远程更新, 通过配置可能设置自动更新:
修改wp-config.php, 添加如下内容:
define('FS_METHOD','direct');
同时确保wordpress根目录的Owner已经修改为33