之前使用nginx + wordpress搭建过wordpress博客,但是整个过程过于复杂和繁琐,最近开发项目中使用到了docker和docker-compose感觉到项目自动部署和配置的便捷,这次我们选用 docker 和 wordpress 来进行 wordpress 的部署。nginx 作为外围网关,当然你也可以将 nginx 放入 docker 中。
1. docker 和 docker-compose 安装
首先我们准备好 docker 和 docker-compose,docker 直接使用官方的安装脚本进行安装。安装命令如下:curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
你也可以使用国内一键安装的脚本:curl -sSL https://get.daoclound.io/docker | sh
Linux 上我们可以从 Github 上下载它的二进制包来使用,最新发行的版本地址:https://github.com/docker/compose/releases。
运行以下命令以下载 Docker Compose 的当前稳定版本:sudo curl -L "https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
要安装其他版本的 Compose,请替换 1.24.1。
将可执行权限应用于二进制文件:sudo chmod +x /usr/local/bin/docker-compose
创建软链:sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
2. docker-compose.yml 文件的编写
在 docker 中启动 mysql 和 wordpress 两个容器,将 mysql 和 wordpress 的数据挂载在宿主机中方便将来做数据的迁移。具体的配置文件如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
| version: "3"
services: mysql-wordpress: image: mysql:8.0 container_name: wordpress-mysql volumes: - ./data/mysql-wordpress:/var/lib/mysql restart: always environment: MYSQL_ROOT_PASSWORD: wordpress MYSQL_DATABASE: wordpress MYSQL_USER: wordpress MYSQL_PASSWORD: wordpress
wordpress: depends_on: - mysql-wordpress image: wordpress:latest container_name: wordpress volumes: - ./data/wordpres:/var/www/html ports: - "8000:80" restart: always environment: WORDPRESS_DB_HOST: mysql-wordpress:3306 WORDPRESS_DB_USER: wordpress WORDPRESS_DB_PASSWORD: wordprses WORDPRESS_DB_NAME: wordpress
|
3. 宿主机 nginx 配置
首先将 nginx 配置使用 http 访问 wordpress,将 wordpress 初始化。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| upstream wordpress { server localhost:8000; }
server { listen 80; server_name blog.wttch.com;
location / { proxy_pass http://wordpress; proxy_redirect off;
proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Server $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header Host $host; } }
|
此时就可以通过 http://blog.wttch.com 访问 wordpress 了。
附加. 配置 https
通过 https://github.com/acmesh-official/acme.sh 你可以配置 https 证书的自动配置,然后将生成的证书配置到 nginx 中。在此之前要记得将 wordpress 的 site_url 和 home 连接修改为 https,不然后面会出现 mixed content 错误。
nginx https 的具体配置如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
| upstream wordpress { server localhost:8000; }
server { listen 80; server_name blog.wttch.com;
rewrite ^/(.*?)$ https://blog.wttch.com/$1 permanent; }
server { listen 443 ssl; server_name blog.wttch.com;
location / { proxy_pass http://wordpress; proxy_redirect off;
proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Server $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header Host $host; } ssl_certificate /etc/nginx/https/cert.pem; ssl_certificate_key /etc/nginx/https/key.pem;
ssl_session_timeout 5m; ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on; }
|