技术选型
使用阿里云搭建博客最简单的方式就是选择阿里云提供的 WordPress 镜像初始化ECS实例,当然为了实战刚刚学习的 Docker 技术,我们尝试使用 Docker 自行搭建 WordPress 博客平台.
利用 Docker ,我们可以将博客划分为业务容器,数据库容器和反向代理容器,将三个服务分别有三个容器承载,也可以理解为一个微服务架构.
具体的,三个容器分别使用
- PHP + WordPress: 博客主题业务服务
- Mysql:为WordPress提供数据库服务
- 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
0 条评论