在阿里云中安装WordPress

Nginx、Certbot以及OpenVAS都安装在docker中

How To Install and Use Docker on Ubuntu 22.04 | DigitalOcean

步骤 1: 创建所需目录和文件

  1. /home/xia0sheng 下创建所需的目录

    打开终端,执行以下命令:

    mkdir -p /home/xia0sheng/docker/conf
    mkdir -p /home/xia0sheng/docker/log
    mkdir -p /home/xia0sheng/docker/nginx
    mkdir -p /home/xia0sheng/docker/certbot/www
  2. 创建 Docker Compose 文件 (docker-compose.yml)

    /home/ubuntu/docker 目录下创建 docker-compose.yml 文件,内容如下:

    version: '3'
    
    services:
     db:
       image: mysql:latest
       volumes:
         - db_data:/var/lib/mysql
         - ./conf/my.cnf:/etc/mysql/my.cnf
         - ./log:/var/log/mysql
         - /etc/timezone:/etc/timezone:ro
         - /etc/localtime:/etc/localtime:ro
       environment:
         MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
         MYSQL_DATABASE: ${MYSQL_DATABASE}
         MYSQL_USER: ${MYSQL_USER}
         MYSQL_PASSWORD: ${MYSQL_PASSWORD}
       restart: always
    
     wordpress:
       depends_on:
         - db
       image: wordpress:latest
       volumes:
         - wordpress_data:/var/www/html
       environment:
         WORDPRESS_DB_HOST: db:3306
         WORDPRESS_DB_USER: ${MYSQL_USER}       # 从 .env 文件中读取
         WORDPRESS_DB_PASSWORD: ${MYSQL_PASSWORD} # 从 .env 文件中读取
       restart: always
    
     nginx:
       depends_on:
         - wordpress
       image: nginx:latest
       ports:
         - "80:80"
         - "443:443"
       volumes:
         - ./nginx:/etc/nginx/conf.d
         - certbot-etc:/etc/letsencrypt
         - ./certbot/www:/var/www/certbot
       restart: always
    
     certbot:
       depends_on:
         - nginx
       image: certbot/certbot:latest
       volumes:
         - certbot-etc:/etc/letsencrypt
         - ./certbot/www:/var/www/certbot
       entrypoint: "/bin/sh -c 'trap exit TERM; while :; do certbot renew; sleep 12h & wait $${!}; done;'"
    
    volumes:
     db_data:
     wordpress_data:
     certbot-etc:
  3. 创建 Nginx 配置文件 (luoluo.com.conf)

    /home/ubuntu/docker/nginx 目录下创建 lunluo.conf 文件,内容如下:

    server {
       listen 80;
       server_name lunluo.com www.lunluo.com;
    
       location /.well-known/acme-challenge/ {
           root /var/www/certbot;
       }
       location / {
           return 301 https://$host$request_uri;
       }
    }
    
    server {
       #listen 443 ssl;
       server_name lunluo.com www.lunluo.com;
    
       #ssl_certificate /etc/letsencrypt/live/lunluo.com/fullchain.pem;
       #ssl_certificate_key /etc/letsencrypt/live/lunluo.com/privkey.pem;
    
       location / {
           proxy_pass ;
           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;
       }
    }

4、vim /home/xia0sheng/docker/.env

MYSQL_ROOT_PASSWORD = PASSWORD
MYSQL_DATABASE = wordpress
MYSQL_USER = wordpress
MYSQL_PASSWORD = PASSWORD

步骤 2: 运行 Mysql、WrodPress、Nginx 和 Certbot 容器

  1. 启动 Mysql、WrodPress、Nginx 和 Certbot 容器

    /home/xia0sheng/docker 目录下,运行以下命令来启动 Nginx 和 Certbot 容器:

    cd /home/xia0sheng/docker
    docker compose up -d

    这将根据您的 docker-compose.yml 文件配置启动 Nginx 和 Certbot 容器。

  2. 生成 SSL 证书

    您可以直接在运行中的 Certbot 容器内部执行命令来生成新域名的证书:

    docker exec -it docker-certbot-1 certbot certonly --webroot --webroot-path=/var/www/certbot -d lunluo.com --expand --force-renewal
  3. 删除下面三处的注释

    server {
       #listen 443 ssl;
       server_name lunluo.com www.lunluo.com;
    
       #ssl_certificate /etc/letsencrypt/live/lunluo.com/fullchain.pem;
       #ssl_certificate_key /etc/letsencrypt/live/lunluo.com/privkey.pem;
    
    }
  4. 重启nginx

    cd /home/xia0sheng/docker
    sudo docker compose restart nginx
  5. 访问 WordPress Web 界面

    阿里云安全组里别忘了放行443端口,然后使用浏览器访问 https://lunluo.com,检查是否能够成功加载 OpenVAS 的 Web 界面。

  6. 检查 SSL 证书

    确认浏览器显示的 SSL 证书正确且有效。

  7. 监测 Certbot 证书更新

    确认 Certbot 是否定期尝试续订 SSL 证书,并且 Nginx 是否使用更新后的证书。

按照这些步骤操作后,您应该能够成功在 Docker 中设置并运行 OpenVAS,并通过 Nginx 安全地访问它,同时由 Certbot 管理 SSL 证书。如果在任何步骤中遇到问题,请提供具体的错误信息或日志,以便进行进一步的故障排查和解决。

重点总结

1. 查看 Nginx 日志和重新启动 Nginx

  • 查看 Nginx 日志: 在 /home/ubuntu/docker 目录下,运行以下命令来查看 Nginx 容器的日志:

    docker compose logs nginx

    这将显示 Nginx 容器的日志输出,有助于诊断任何问题或错误。

  • 重新启动 Nginx 容器: 同样在 /home/ubuntu/docker 目录下,运行以下命令来单独重新启动 Nginx 容器:

    docker compose restart nginx

    这个命令将停止然后重新启动 Nginx 容器,用于应用配置更改或刷新服务。

2. Docker 命令介绍

  • docker network ls: 此命令列出所有 Docker 网络。它显示网络的 ID、名称、驱动和范围。这对于了解 Docker 网络的配置和连接的容器非常有用。
  • docker ps: 此命令显示当前正在运行的所有 Docker 容器。它提供容器的 ID、创建时间、状态、端口映射等信息。
  • docker volume inspect: 此命令用于查看 Docker 卷的详细信息,如卷的挂载点、驱动、标签等。使用时需要指定卷的名称。例如:

    docker volume inspect [卷名称]

3. Certbot 配置中的 .well-known/acme-challenge/

  • 在 Nginx 配置中,设置 location /.well-known/acme-challenge/ 是为了允许 Certbot 验证域名所有权并颁发 SSL 证书。这是 Let's Encrypt 自动化颁发证书的过程的一部分。
  • 如果不设置这个配置,Certbot 在尝试进行 HTTP-01 挑战时可能无法找到验证文件,从而导致证书颁发过程失败。

4. 在 Nginx 配置中写明 listen 443 ssl

  • 在 Nginx 配置文件中,listen 443 ssl 指明 Nginx 应该在端口 443 上监听 HTTPS 连接。这里的 ssl 关键字告诉 Nginx 使用 SSL 加密。
  • 不包含 ssl 关键字,Nginx 将不会使用 SSL,即使配置了 SSL 证书和密钥路径也不会启用 HTTPS。

其他需要总结的点

  • Docker 网络和容器通信:理解 Docker 网络和如何使不同的容器在同一网络下通信是关键。特别是当服务需要相互交互时,如

Nginx 容器需要代理到 OpenVAS 容器。

  • SSL 证书自动续订:Certbot 容器配置中的 entrypoint 脚本包含了一个循环,用于定期检查并续订 SSL 证书。确保 Nginx 可以访问 Certbot 在 .well-known/acme-challenge/ 路径下创建的验证文件非常重要。
  • 容器健康状况检查:定期检查容器的状态和日志可以帮助及时发现和解决问题。例如,使用 docker ps 查看容器状态,使用 docker logs 查看日志。
  • Docker Compose 命令:理解 docker compose 命令的用法对于管理和操作由 docker-compose.yml 文件定义的多容器应用至关重要。
  • Nginx 配置调整:在调整 Nginx 配置(例如更改 proxy_pass 地址或更新 SSL 证书路径)后,记得重新启动 Nginx 容器以应用更改。
  • 安全性和网络策略:确保 Docker 容器和主机之间的网络策略符合安全要求,并且不会阻止必要的通信。
  • 数据持久化:理解 Docker 卷的使用,特别是在处理诸如证书文件这样的重要数据时,确保它们正确地持久化和备份。

通过遵循这些指南和最佳实践,您可以确保 Docker 环境的稳定性和安全性,同时有效地管理您的服务。如果遇到具体问题或有进一步的疑问,随时可以寻求帮助。

发表评论

您的电子邮箱地址不会被公开。 必填项已用 * 标注

滚动至顶部