阿里云(Centos Stream)容器化构建 WordPress
·
安装 Docker
安装管理 DNF 仓库的插件并设置 Docker 仓库
dnf -y install dnf-plugins-core
dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
删除原 docker repo 源
rm -f /etc/yum.repos.d/docker-ce.repo
使用阿里云 Docker CE 国内源
添加国内 repo
dnf config-manager --add-repo \
https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
确认:
dnf repolist | grep docker
安装
dnf clean all
dnf makecache
dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
启动 Docker 引擎并开机自启
systemctl enable --now docker
新建目录
mkdir -p /opt/wordpress;cd /opt/wordpress/
编写 docker-compose.yml
使用本地Docker下载wordpress_php8.2.tar
sudo docker pull wordpress:php8.2-apache
sudo docker save wordpress:php8.2-apache -o wordpress_php8.2.tar
将wordpress_php8.2.tar放在/opt/wordpress/
加载镜像
cd /opt/wordpress
docker load -i wordpress_php8.2.tar
编辑挂载文件
vim docker-compose.yml
version: "3.8"
services:
db:
image: mysql:8.0
container_name: wp-mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: rootpass123
MYSQL_DATABASE: wordpress
MYSQL_USER: wpuser
MYSQL_PASSWORD: wppass123
volumes:
- db_data:/var/lib/mysql
command: --default-authentication-plugin=mysql_native_password
wordpress:
image: wordpress:php8.2-apache
container_name: wp-app
restart: always
ports:
- "8080:80"
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_USER: wpuser
WORDPRESS_DB_PASSWORD: wppass123
WORDPRESS_DB_NAME: wordpress
volumes:
- wp_data:/var/www/html
- ./php/uploads.ini:/usr/local/etc/php/conf.d/uploads.ini
depends_on:
- db
volumes:
db_data:
wp_data:
配置 Docker 镜像加速
编辑 daemon.json
vi /etc/docker/daemon.json
{
"registry-mirrors": [
"https://xwqf6d1y.mirror.aliyuncs.com"
]
}
如何获取你的阿里云镜像加速器地址
- 登录 阿里云控制台
- 搜索 容器镜像服务 ACR
- 左侧 → 镜像工具 → 镜像加速器
重启 Docker(非常重要)
systemctl daemon-reload
systemctl restart docker
确认生效:
docker info | grep -A 5 "Registry Mirrors"
启动WordPress
在 /opt/wordpress 目录下执行:
docker compose up -d
状态:
docker compose ps
模板上传限制解决
创建 PHP 配置目录
mkdir -p /opt/wordpress/php
新建 PHP 配置文件
rm -rf uploads.ini/
vim /opt/wordpress/php/uploads.ini
建议值:
file_uploads = On
upload_max_filesize = 64M
post_max_size = 64M
memory_limit = 256M
max_execution_time = 300
max_input_time = 300
重启
cd /opt/wordpress
docker compose down
docker compose up -d
校验
docker compose ps
应该看到:
wp-mysql running
wp-app running
验证 PHP 配置是否生效
docker exec -it wp-app php -i | grep upload_max_filesize
期望输出:
upload_max_filesize => 64M
安装插件
Markup Markdown
模板
https://github.com/seatonjiang/kratos
E:\配置命令\阿里云网站搭建部署\kratos\footer.php删除第48行
开启https
用 Nginx + Let’s Encrypt
安装 Nginx
yum install nginx -y # CentOS/阿里云默认
systemctl enable nginx --now
配置反向代理到 Docker 容器
创建一个 Nginx 配置文件 /etc/nginx/conf.d/wordpress.conf:
vim /etc/nginx/conf.d/wordpress.conf
server {
listen 80;
server_name wenyifan.xyz www.wenyifan.xyz;
location / {
proxy_pass http://127.0.0.1:8080; # WordPress 容器端口
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-Proto $scheme;
}
}
- 把
yourdomain.com换成自己的域名 - 保存后测试配置:
nginx -t
systemctl reload nginx
此时访问 http://yourdomain.com 应该可以访问 WordPress。
安装 Certbot(自动生成免费 SSL)
yum install epel-release -y
yum install certbot python3-certbot-nginx -y
自动申请证书并配置 HTTPS
certbot --nginx -d wenyifan.xyz -d www.wenyifan.xyz
自动续期
systemctl enable certbot-renew.timer
systemctl start certbot-renew.timer
新建或修改站点配置
vim /etc/nginx/conf.d/wenyifan.xyz.conf
写完整配置(HTTP + HTTPS)
# HTTP:仅用于跳转到 HTTPS
server {
listen 80;
server_name wenyifan.xyz www.wenyifan.xyz;
location / {
return 301 https://$host$request_uri;
}
}
# HTTPS 主站
server {
listen 443 ssl http2;
server_name wenyifan.xyz www.wenyifan.xyz;
ssl_certificate /etc/letsencrypt/live/wenyifan.xyz/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/wenyifan.xyz/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
client_max_body_size 100M;
location / {
proxy_pass http://127.0.0.1:8080; # 注意: 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-Proto https;
}
}
proxy_pass→127.0.0.1:8080- 因为你 WordPress 容器是
8080:80
检查 & 重载 Nginx
nginx -t
看到:
syntax is ok
test is successful
再执行:
systemctl reload nginx更多推荐
所有评论(0)