技术选型

使用阿里云搭建博客最简单的方式就是选择阿里云提供的 WordPress 镜像初始化ECS实例,当然为了实战刚刚学习的 Docker 技术,我们尝试使用 Docker 自行搭建 WordPress 博客平台.

利用 Docker ,我们可以将博客划分为业务容器,数据库容器和反向代理容器,将三个服务分别有三个容器承载,也可以理解为一个微服务架构.

具体的,三个容器分别使用

  1. PHP + WordPress: 博客主题业务服务
  2. Mysql:为WordPress提供数据库服务
  3. Nginx:提供反向代理服务

docker compose

Docker Compose 通过 YAML 文件声明式的定义应用程序的多个服务,在实际管理中,可以由单个命令完成应用的创建和启动.当然如果不使用 Docker Compose ,也可以手动的在创建容器的时候添加link.

安装docker compose

可以自行从Github上下载release(修改文件名为”docker compose”),也可以通过curl下载:

$ curl -L "https://github.com/docker/compose/releases/download/1.25.3/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

赋予运行权限

$ chmod +x /usr/local/bin/docker-compose

测试

$ docker compose --version

详见官方文档

创建compose

首先创建 Compse 的 YAML 配置文件

# 创建目录
$ mkdir mywordpress
$ cd mywordpress/

# 创建配置文件
$ touch docker-compose.yml

# 打开配置文件添加
$ vim docker-compose.yml

创建 Compose 的关键是编写完整正确的 YAML 文件, Docker 官网有使用 Compose 运行 WordPress的简单说明,这里根据需要对齐进行了修改,需要注意的主要包括以下几个方面:

  • 分别指定每个Image的具体版本,人工进行版本控制,避免使用最新版带来的适配风险.
  • 通过volumes对各个容器中的必要的数据进行持久化.
  • 使用Nginx反向代理将容器内的80和443映射到服务器的80和443端口.
  • nginx-proxy中的wp_certs保存了SSL证书.
  • wordpress中的./uploads.ini保存了博客上传配置,可以修改PHP最大上传限制.

配置文件具体如下:

version: '3'

services:
   db:
     image: mysql:5.7
     volumes:
       - db_data:/var/lib/mysql
     restart: always
     environment:
       MYSQL_ROOT_PASSWORD: 123123
       MYSQL_DATABASE: wordpress
       MYSQL_USER: wordpress
       MYSQL_PASSWORD: wordpress

   wordpress:
     depends_on:
       - db
     image: wordpress:5.3.2
     volumes:
        - wp_site:/var/www/html
        - ./uploads.ini:/usr/local/etc/php/conf.d/uploads.ini
     expose:
       - 80
     restart: always
     environment:
       VIRTUAL_HOST: www.littlepeanut.top,littlepeanut.top
       WORDPRESS_DB_HOST: db:3306
       WORDPRESS_DB_USER: wordpress
       WORDPRESS_DB_PASSWORD: wordpress

   nginx-proxy:
     image: jwilder/nginx-proxy
     container_name: nginx-proxy
     restart: always
     ports:
       - "80:80"
       - "443:443"
     volumes:
       - /var/run/docker.sock:/tmp/docker.sock:ro
       - wp_certs:/etc/nginx/certs:ro

volumes:
    db_data:
    wp_site:
    wp_certs: # nginx证书命名卷(named volume)

networks:
  default:
    external:
      name: nginx-proxy

完成配置文件后,启动Compse

$ docker-compose up -d

配置SSL证书

# 新建秘钥文件www.littlepeanut.top.key,将下载的证书文件.key填入
cd /var/lib/docker/volumes/wordpress_wp_certs/_data && sudo vim www.littlepeanut.top.key
# 新建证书文件www.littlepeanut.top.crt,将下载的证书文件.pem填入
cd /var/lib/docker/volumes/wordpress_wp_certs/_data && sudo vim www.littlepeanut.top.crt

SSL证书可以在阿里云免费申请并下载Nginx格式,也可以通过Let’s encrypt,FreeSSL等申请.
重启docker-compose

$ docker-compose down && docker-compose up -d 

其他常用操作

# 停止
$ docker-compose down

# 停止,删除数据
$ docker-compose down --volumes

# 删除,删除数据
$ docker-compose rm

# 更新wordpress版本
$ docker-compose down
$ docker-compose pull && docker-compose up -d

使用Let’s encrypt获取SSL

阿里云中可以简单的获取证书,这里也介绍下在本地通过Let’s Encrypt获取SSL证书.Let’s Encrypt的证书有效期为一年左右,下面是获取证书的具体步骤.

$ mkdir ~/mywordpress/SSL && cd ~/mywordpress/SSL
$ wget https://dl.eff.org/certbot-auto
$ chmod a+x certbot-auto
$ ./certbot-auto certonly -d "*.littlepeanut.top" --manual --preferred-challenges dns-01 --server https://acme-v02.api.letsencrypt.org/directory

依次按提示输入邮箱,A,N,Y.

按提示添加一条DNS解析,类型为TXT,主机记录和记录值见提示.

生成的 SSL 证书保存在 /etc/letsencrypt/live下。

P.S.

在使用博客过程中,PHP默认上传文件不能大于2M,通过修改映射的wordpress中的./uploads.ini可以解决该问题.

file_uploads = On
memory_limit = 500M
upload_max_filesize = 30M
post_max_size = 30M
max_execution_time = 600
分类: Docker博客

0 条评论

发表评论

电子邮件地址不会被公开。 必填项已用*标注