← Вернуться к списку

Создайте WordPress+docker+nginx+MySQL+sl с помощью сервераcentos7

itadol5j


I. Экологическая готовность

  1. Обновление системы и установка инструмента
# 更新系统
sudo yum update -y

# 安装基础工具
sudo yum install -y yum-utils device-mapper-persistent-data lvm2 curl vim

# 关闭SELinux(可选)
sudo setenforce 0
sudo sed -i 's/^SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
  1. Конфигурация Firewall
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload

II. Установка среды Docker

  1. Скачать Docker CE
# 添加Docker仓库
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

# 安装Docker引擎
sudo yum install -y docker-ce docker-ce-cli containerd.io

# 启动并设置开机自启
sudo systemctl start docker
sudo systemctl enable docker
  1. Установить Docker Company
# 下载最新版本(可替换为最新版本号)
sudo curl -L "https://github.com/docker/compose/releases/download/v2.27.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

# 赋予执行权限
sudo chmod +x /usr/local/bin/docker-compose

# 验证安装
docker-compose --version

III. Создание проектной структуры

# 创建项目目录
mkdir -p ~/wordpress/{nginx,db_data,wordpress,certbot}

# 目录结构说明:
# db_data     -> MySQL数据库文件
# wordpress   -> WordPress程序文件
# nginx       -> Nginx配置文件
# certbot     -> SSL证书存储

IV. Настройка docker-compose.yml

vim ~/wordpress/docker-compose.yml
version: '3.8'

services:
  db:
    image: mysql:5.7
    container_name: wp_db
    volumes:
      - ./db_data:/var/lib/mysql  # MySQL数据持久化
    environment:
      MYSQL_ROOT_PASSWORD: your_secure_root_password  # 替换为强密码
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wp_user
      MYSQL_PASSWORD: your_wp_db_password  # 替换为数据库密码
    networks:
      - wp_net
    restart: unless-stopped

  wordpress:
    image: wordpress:php8.2
    container_name: wp_app
    depends_on:
      - db
    volumes:
      - ./wordpress:/var/www/html  # WordPress代码持久化
    environment:
      WORDPRESS_DB_HOST: db:3306
      WORDPRESS_DB_USER: wp_user
      WORDPRESS_DB_PASSWORD: your_wp_db_password
    networks:
      - wp_net
    restart: unless-stopped

  nginx:
    image: nginx:alpine
    container_name: wp_nginx
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./nginx:/etc/nginx/conf.d  # Nginx配置持久化
      - ./certbot:/etc/letsencrypt  # SSL证书持久化
      - ./wordpress:/var/www/html
    depends_on:
      - wordpress
    networks:
      - wp_net
    restart: unless-stopped

networks:
  wp_net:
    driver: bridge

volumes:
  db_data:
  wordpress:
  certbot:

V. Конфигурация Nginx

  1. Создайте профиль Nginx
vim ~/wordpress/nginx/wordpress.conf
# HTTP重定向到HTTPS
server {
    listen 80;
    server_name yourdomain.com www.yourdomain.com;
    return 301 https://$host$request_uri;
}

# HTTPS服务器配置
server {
    listen 443 ssl http2;
    server_name yourdomain.com www.yourdomain.com;

    # SSL证书路径
    ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem;

    # SSL协议配置
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256;
    ssl_prefer_server_ciphers off;
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 1d;

    # 反向代理配置
    location / {
        proxy_pass http://wp_app:80;
        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;
    }

    # 静态文件缓存
    location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ {
        expires 30d;
        add_header Cache-Control "public, no-transform";
        proxy_pass http://wp_app:80;
    }

    # 禁止访问敏感文件
    location ~ /\.ht {
        deny all;
    }
}

Доступ к SSL сертификатам

  1. Начать базовые услуги
cd ~/wordpress
docker-compose up -d db wordpress  # 先启动数据库和WordPress
  1. Промежуточный сертификат контейнера Nginx
docker run -it --rm --name temp_nginx \
  -v ~/wordpress/certbot:/etc/letsencrypt \
  -v ~/wordpress/wordpress:/var/www/html \
  -p 80:80 \
  nginx:alpine
  1. Новый терминал выполнит сертификат приложения Certbot
docker run -it --rm --name certbot \
  -v "/root/wordpress/certbot:/etc/letsencrypt" \
  -v "/root/wordpress/wordpress:/var/www/html" \
  certbot/certbot certonly --webroot -w /var/www/html \
  -d yourdomain.com -d www.yourdomain.com \
  --email admin@yourdomain.com --agree-tos --non-interactive
  1. Остановить временный контейнер Nginx
docker stop temp_nginx

VII. Запуск полноценных сервисов

# 启动所有服务
docker-compose up -d

# 检查容器状态
docker-compose ps

VIII. Юрисдикция и опыт

  1. Установите разрешения файлов
# WordPress目录权限
sudo chown -R 33:33 ~/wordpress/wordpress  # www-data用户(UID33)

# Nginx配置权限
sudo chmod 644 ~/wordpress/nginx/*.conf
  1. Настройка автоматического обновления
# 创建续期脚本
vim ~/wordpress/renew_cert.sh
#!/bin/bash
docker-compose stop nginx
docker run --rm --name certbot \
  -v "/root/wordpress/certbot:/etc/letsencrypt" \
  -v "/root/wordpress/wordpress:/var/www/html" \
  certbot/certbot renew --quiet --webroot -w /var/www/html
docker-compose start nginx
# 添加定时任务
(crontab -l 2>/dev/null; echo "0 3 * * 1 /bin/bash /root/wordpress/renew_cert.sh >> /var/log/certbot-renew.log 2>&1") | crontab -

IX. Программа резервного копирования данных

  1. Ежедневная резервная копия базы данных
# 创建备份脚本
vim ~/wordpress/backup_db.sh
#!/bin/bash
BACKUP_DIR="/root/wordpress/backups"
DATE=$(date +%Y%m%d)
docker exec wp_db mysqldump -uroot -p'your_secure_root_password' wordpress > ${BACKUP_DIR}/wordpress_db_${DATE}.sql
find ${BACKUP_DIR} -name "*.sql" -mtime +7 -exec rm {} \;
  1. Настройка Timeback
chmod +x ~/wordpress/backup_db.sh
(crontab -l 2>/dev/null; echo "0 2 * * * /bin/bash /root/wordpress/backup_db.sh") | crontab -

Сертификация и техническое обслуживание

  1. Аутентификация доступа
    • Доступ к браузеру https://yourdomain.com
    • Завершенный мастер установки WordPress
  2. Общие команды технического обслуживания
# 查看实时日志
docker-compose logs -f

# 更新容器
docker-compose pull
docker-compose up -d

# 清理旧镜像
docker image prune -a

XI. Руководство по устранению неполадок

явления Решения
502 Плохие ворота Проверьте, работает ли контейнер WordPress:docker-compose ps
SSL сертификат является недействительным Путь аутентификации сертификата:ls ~/wordpress/certbot/live/yourdomain.com
Разрешения на загрузку файлов Осуществление:chown -R 33:33 ~/wordpress/wordpress
Подключение базы данных провалилось Проверьте MySQL log:docker logs wp_db

Конечный эффект
Ваш сайт WordPress будет иметь:

  • Полная автоматическая поддержка HTTPS
  • Ежедневное резервное копирование базы данных + автоматическое обновление SSL
  • Оптимизированный статический кэш ресурса
  • Полная и долговечная система хранения
  • Командный набор One-Key

Любые проблемы, через которые вы можете пройти docker-compose logs [服务名] Посмотреть подробные журналы.