系统需求
- Linux
本次部署将使用 TencentOS Server 3.1*
*TencentOS Server 是腾讯云针对云的场景研发的 Linux 操作系统,提供特定的功能及性能优化,为云服务器实例中的应用程序提供更高的性能及更加安全可靠的运行环境, TencentOS Server 用户态环境与 CentOS 保持兼容,在 CentOS 上开发的应用程序可直接在 TencentOS Server 上运行。
*TencentOS Server 3.1 内核是基于社区5.4 LTS 深度优化的 tkernel4。
安装 Docker Engine
根据自身系统,参考以下文章安装 Docker Engine
- CentOS 安装 Docker CE – IT Tech. (kingsonho.com)
- Debian 安装 Docker CE – IT Tech. (kingsonho.com)
- Ubuntu 安装 Docker CE – IT Tech. (kingsonho.com)
TencentOS 3.1(以下简称tlinux 3.1)默认已经安装好 Docker Engine,因此无需手动安装。
使用 Docker secrets
敏感数据可以使用 Docker secrets 进行管理,例如密码,用户名或账号等,数据将会被加密储存在 Docker swarm 中,并且数据在传输中亦保持加密。
初始化 Docker swarm
启动 Docker Engine
sudo systemctl start docker
初始化 Docker swarm
docker swarm init
创建 secrets
有两种方法可以创建 secrets
第一:创建文件写入数据,读取文件内的数据并创建 secrets,最后删除文件
sudo nano my_secret_data
docker secret create my_secret_data my_secret_data
sudo rm my_secret_data
第二:直接创建 secrets
printf "This is a secret" | docker secret create my_secret_data -
查看所有创建的 secrets
*不会显示 secrets 的原内容
docker secret ls
查看创建 secret 的详细信息
*不会显示 secrets 的原内容
docker secret inspect my_secret_data
使用 Docker 部署 WordPress
WordPress 官方镜像支持的 Docker secrets 环境变量
WORDPRESS_DB_HOST
, WORDPRESS_DB_USER
, WORDPRESS_DB_PASSWORD
, WORDPRESS_DB_NAME
, WORDPRESS_AUTH_KEY
, WORDPRESS_SECURE_AUTH_KEY
, WORDPRESS_LOGGED_IN_KEY
, WORDPRESS_NONCE_KEY
, WORDPRESS_AUTH_SALT
, WORDPRESS_SECURE_AUTH_SALT
, WORDPRESS_LOGGED_IN_SALT
, WORDPRESS_NONCE_SALT
, WORDPRESS_TABLE_PREFIX
, and WORDPRESS_DEBUG
*使用 secret 时需要在环境变量后加上 _FILE
,例如 WORDPRESS_DB_PASSWORD_FILE
创建所需的 secrets
打开 https://api.wordpress.org/secret-key/1.1/salt/ 获取对应 WORDPRESS_AUTH_KEY
, WORDPRESS_SECURE_AUTH_KEY
, WORDPRESS_LOGGED_IN_KEY
, WORDPRESS_NONCE_KEY
, WORDPRESS_AUTH_SALT
, WORDPRESS_SECURE_AUTH_SALT
, WORDPRESS_LOGGED_IN_SALT
, WORDPRESS_NONCE_SALT
的数值,并创建 secrets。
例如:
创建 WORDPRESS_AUTH_KEY
secret
sudo nano wordpress_auth_key
docker secrets create wordpress_auth_key wordpress_auth_key
sudo rm wordpress_auth_key
创建 yaml 文件
version: '3.9'
services:
wordpress:
image: wordpress:latest
ports:
- 80:80
environment:
- WORDPRESS_DB_HOST=db
- WORDPRESS_DB_USER=wpuser
- WORDPRESS_DB_PASSWORD_FILE=/run/secrets/wordpress_db_password
- WORDPRESS_DB_NAME=wpdb
- WORDPRESS_AUTH_KEY_FILE=/run/secrets/wordpress_auth_key
- WORDPRESS_SECURE_AUTH_KEY_FILE=/run/secrets/wordpress_secure_auth_key
- WORDPRESS_LOGGED_IN_KEY_FILE=/run/secrets/wordpress_logged_in_key
- WORDPRESS_NONCE_KEY_FILE=/run/secrets/wordpress_nonce_key
- WORDPRESS_AUTH_SALT_FILE=/run/secrets/wordpress_auth_salt
- WORDPRESS_SECURE_AUTH_SALT_FILE=/run/secrets/wordpress_secure_auth_salt
- WORDPRESS_LOGGED_IN_SALT_FILE=/run/secrets/wordpress_logged_in_salt
- WORDPRESS_NONCE_SALT_FILE=/run/secrets/wordpress_nonce_salt
volumes:
- wordpress:/www/wwwroot/www.kingsonho.com
secrets:
- wordpress_db_password
- wordpress_auth_key
- wordpress_secure_auth_key
- wordpress_logged_in_key
- wordpress_nonce_key
- wordpress_auth_salt
- wordpress_secure_auth_salt
- wordpress_logged_in_salt
- wordpress_nonce_salt
db:
image: mysql:latest
environment:
- MYSQL_DATABASE=wpdb
- MYSQL_USER=wpuser
- MYSQL_PASSWORD_FILE=/run/secrets/wordpress_db_password
- MYSQL_RANDOM_ROOT_PASSWORD='1'
volumes:
- mysql:/var/lib/mysql
secrets:
- wordpress_db_password
secrets:
wordpress_db_password:
external: true
wordpress_auth_key:
external: true
wordpress_secure_auth_key:
external: true
wordpress_logged_in_key:
external: true
wordpress_nonce_key:
external: true
wordpress_auth_salt:
external: true
wordpress_secure_auth_salt:
external: true
wordpress_logged_in_salt:
external: true
wordpress_nonce_salt:
external: true
volumes:
wordpress:
mysql:
*Docker volumes 将会保存(持久化)数据在本地 /var/lib/docker/volumes
这个目录,删除 docker container 时 并不会自动删除 volume,需要使用 docker volume
命令手动管理 volume。
使用Docker stack 启动 WordPress
运行以下命令
docker stack deploy -c stack.yml wordpress
等待 WordPress 初始化后,即可通过 80 端口访问你的网站。
查看 docker stack 运行的服务
docker stack ls
关闭 WordPress
docker stack rm wordpress
*由于数据已经持久化在本地 volumes,关闭 WordPress container并不会造成任何数据损失。
Docker WordPress 使用 HTTPS
WordPress Docker官方镜像内置使用 Apache,在 Docker 外部将使用 Nginx 反向代理来使用 HTTPS。
安装 Nginx
sudo yum install nginx
sudo systemctl start nginx
sudo systemctl enable nginx
更改 WordPress yaml 文件中 HTTP 端口,使用 8080
ports:
- 8080:80
编辑 Nginx WordPress conf 文件
server {
listen 80;
server_name www.example.com;
server_tokens off;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2;
server_name www.example.com;
server_tokens off;
ssl_certificate /etc/letsencrypt/live/www.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/www.example.com/privkey.pem;
proxy_set_header X-Forwarded-For $remote_addr;
location / {
proxy_pass http://172.18.0.2:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $server_name;
proxy_read_timeout 1200s;
proxy_set_header X-Forwarded-Proto https;
}
}
完成后先在 WordPress 设置界面更改网址为 HTTPS,再重启Docker 和 Nginx, 此时再进入就会自动跳转到 HTTPS。
*proxy_pass 为 Docker 内部 WordPress 地址
参考文档
- TencentOS Server 产品概述-产品简介-文档中心-腾讯云
- WordPress – Official Image | Docker Hub
- Manage sensitive data with Docker secrets | Docker Documentation
发表评论须遵守中华人民共和国相关法律法规。违规评论将会被删除。
Comments must subject to the relevant laws and regulations of the People’s Republic of China. Offending comments will be deleted.