本文介绍使用Docker和Docker Compose容器化部署WordPress,实现快速迁移和环境一致的网站部署。
Docker优势
| 优势 | 说明 |
|---|---|
| 环境一致 | 开发生产环境相同 |
| 快速部署 | 几分钟完成 |
| 易于迁移 | 打包整个环境 |
| 资源隔离 | 互不影响 |
| 版本控制 | 容器版本管理 |
安装Docker
Ubuntu
sudo apt update
sudo apt install apt-transport-https ca-certificates curl gnupg lsb-release
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io docker-compose -y
sudo systemctl start docker
sudo systemctl enable docker
测试安装
docker --version
docker-compose --version
sudo docker run hello-world
Docker Compose配置
目录结构
mkdir wordpress-docker
cd wordpress-docker
mkdir -p mysql data html nginx ssl
docker-compose.yml
version: '3.8'
services:
mysql:
image: mysql:8.0
container_name: wp_mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: your_strong_password
MYSQL_DATABASE: wordpress
MYSQL_USER: wp_user
MYSQL_PASSWORD: wp_password
volumes:
- ./mysql:/var/lib/mysql
networks:
- wp_network
wordpress:
image: wordpress:latest
container_name: wp_wordpress
depends_on:
- mysql
restart: always
ports:
- "8080:80"
environment:
WORDPRESS_DB_HOST: mysql:3306
WORDPRESS_DB_USER: wp_user
WORDPRESS_DB_PASSWORD: wp_password
WORDPRESS_DB_NAME: wordpress
volumes:
- ./html:/var/www/html
networks:
- wp_network
nginx:
image: nginx:latest
container_name: wp_nginx
depends_on:
- wordpress
restart: always
ports:
- "80:80"
- "443:443"
volumes:
- ./nginx/conf.d:/etc/nginx/conf.d
- ./html:/var/www/html
- ./ssl:/etc/nginx/ssl
networks:
- wp_network
networks:
wp_network:
driver: bridge
Nginx配置
创建 nginx/conf.d/default.conf:
server {
listen 80;
server_name example.com www.example.com;
root /var/www/html;
index index.php index.html;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
client_max_body_size 100M;
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
fastcgi_pass wordpress:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /var/www/html$fastcgi_script_name;
include fastcgi_params;
}
location ~ /\.ht {
deny all;
}
}
启动服务
docker-compose up -d
docker-compose ps
docker-compose logs -f wordpress
日常维护
备份
docker exec wp_mysql mysqldump -u wp_user -p wp_password wordpress > backup_$(date +%Y%m%d).sql
tar -czf html_backup_$(date +%Y%m%d).tar.gz html/
更新
docker-compose pull
docker-compose up -d
清理
docker image prune -a
docker container prune
docker volume prune
SSL配置
使用Let's Encrypt
sudo apt install certbot python3-certbot-nginx
docker exec wp_nginx certbot --nginx -d example.com -d www.example.com
自签名证书(测试用)
openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
-keyout ./ssl/key.pem \
-out ./ssl/cert.pem
迁移指南
导出原站数据
wp plugin list --format=json > plugins.json
wp theme list --format=json > themes.json
mysqldump -u root -p wordpress > wordpress.sql
导入到Docker
cp -r /var/www/html/* ./html/
docker exec -i wp_mysql mysql -u wp_user -p wp_password wordpress < wordpress.sql
docker exec wp_wordpress chown -R www-data:www-data /var/www/html
常见问题
| 问题 | 解决方案 |
|---|---|
| 权限错误 | docker exec wp_wordpress chown -R www-data:www-data /var/www/html |
| 连接失败 | 检查mysql容器网络 |
| 端口冲突 | 修改docker-compose.yml端口映射 |
通过Docker部署WordPress,环境配置简单,迁移方便,是现代化运维的最佳实践。
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

评论(0)