本文介绍使用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,环境配置简单,迁移方便,是现代化运维的最佳实践。

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。