WordPress + Nginx + Docker建站

一、环境准备:

  • 申请好的网站域名,域名做好备案(阿里云大概周期3-23个工作日左右)
  • 一台Linux 虚拟机 (个人使用阿里云2核2G主机, Centos)

二、关键处理步骤:

1. WordPress 安装与启动

  • docker & docker-compose 安装(参考其他博文)

  • docker-compose.yml文件准备, 将其放入博客文件夹根目录如 ~/my-word-press-blog/

    version: '3'
    
    services:
    wordpress:
      image: wordpress
      ports:
        - "8000:80"
      environment:
        WORDPRESS_DB_HOST: db
        WORDPRESS_DB_USER: wordpress
        WORDPRESS_DB_PASSWORD: wordpress
        WORDPRESS_DB_NAME: wordpress
      volumes:
        - ./my-word-press-blog:/var/www/html
      depends_on:
        - db
      restart: always
    
    db:
      image: mysql:5.7
      ports:
        - "3306:3306"
      environment:
        MYSQL_DATABASE: wordpress
        MYSQL_USER: wordpress
        MYSQL_PASSWORD: wordpress
        MYSQL_RANDOM_ROOT_PASSWORD: '1'
      volumes:
        - ./mysql-data-of-docker:/var/lib/mysql
      restart: always
  • 启动wordpress容器和其使用的mysql数据库

    进入博客根目录,运行docker-compose up -d, 启动完成后会看到根目录下多了两个目录,一个是数据库数据文件夹,一个是博客相关信息文件夹

  • 验证,查看两个容器均正常运行,再使用curl http://localhost:8000 查看正常返回网页信息即可

    $ docker container ps
    CONTAINER ID   IMAGE       COMMAND                  CREATED       STATUS       PORTS                                                  NAMES
    e042be85773b   wordpress   "docker-entrypoint.s…"   4 hours ago   Up 4 hours   0.0.0.0:8000->80/tcp, :::8000->80/tcp                  mywordpressblog_wordpress_1
    27f045b37f1b   mysql:5.7   "docker-entrypoint.s…"   4 hours ago   Up 4 hours   0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp   mywordpressblog_db_1

2. nginx安装与启动

  • nginx安装

    sudo yum install nginx

  • nginx配置文件准备(放到/etc/nginx/conf.d/word-press.conf)

    # 定义HTTP服务器
    server {              
      listen 80; # 监听端口
      server_name blog.leon.kylins.tech;    # 域名
     # 配置代理路径  
      location / {
          proxy_pass http://localhost:8000/;        # 转发请求的目标地址
          proxy_set_header Host $host;             # 设置请求头中的Host字段
          proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                          # 设置HTTP头中的X-Forwarded-For字段,表示客户端真实IP,多个IP用逗号隔开
          proxy_set_header X-Real-IP $remote_addr; # 设置请求头中的X-Real-IP字段,表示客户端真实IP
          proxy_set_header X-Forwarded-Proto https;
         proxy_set_header Upgrade $http_upgrade;
         proxy_set_header Connection "upgrade";
         proxy_read_timeout 86400;
      }
      # 配置错误页面
      error_page 404 /404.html;           # 404错误页
      location = /404.html {
          internal;                       # 不接受外部访问
          root /usr/share/nginx/html;     # 404错误页文件所在目录
      }
    }
  • 启动 sudo systemctl start nginx

3. 网络端口开放及域名绑定

  • 开放网络端口80和443

    通过阿里云平台安全策略配置开放端口(云服务商都有对应的网络策略配置)。

  • 域名绑定

    通过阿里云域名解析服务将域名绑定到云服务器公网IP。

  • 通过浏览器验证http服务请求是否正常 http://blog.leon.kylins.tech

4. 应用初始化

访问http://blog.leon.kylins.tech进行管理员信息及其他初始化设置(按需即可)

5. HTTPS支持

  • 证书安装(免费的证书供应商有很多,这里选择Let's encryt ,官方已经针对不同场景提供的详细的操作步骤)这里选择使用Certbot ACME 客户端自动安装,安装完成后Certbot会自动检测并修改nginx配置,增加443端口监听已经ssl证书信息。关键要求:

    • 具有命令行权限
    • 能通过http访问到网站
  • 证书续期

    证书有效期为1年,Certbot ACME 客户端安装https支持时会自动添加一个定时任务进行证书的续期(renew)

6. 站点根目录更新

站点调整为https访问后,需要修改站点的url,将http替换为https(登录管理平台 -> 设定-> WordPress地址站点地址两项 )或者登录数据库直接修改表wp_options中siteurl和home两个option的value

三、避坑

  1. 谨记端口权限开放
  2. 更换为https后可能文件上传功能报错, 修改增加用户写权限,目录为/my-word-press-blog/wp-content/uploads
  3. 安装卸载插件要求输入ftp服务器密码,简单粗暴的方式为在文件wp-config.php中增加define('FS_METHOD', "direct"); . 插件安装过程中也可能出现文件权限导致的安装失败,将对应文件增加写权限即可(plugins,upgrade), 主题安装失败同理。

发表评论