返回

Docker 环境中使用 Nginx 和 ACME,轻松部署证书

后端

前言:SSL 证书的重要性

在当今互联网世界中,安全是重中之重。SSL(安全套接字层)证书扮演着至关重要的角色,它可以对在客户端和服务器之间传输的数据进行加密,保护信息免遭窃取和篡改。通过使用 SSL 证书,你可以向你的网站访问者传达安全和信任的信号,同时确保你的网站符合行业标准和法规要求。

准备工作

在开始之前,确保你已经拥有以下环境:

  • Docker:一个轻量级的容器化平台,用于在本地或云端运行应用程序。
  • Docker Compose:一个用来定义和管理多容器 Docker 应用的工具。
  • Nginx:一个流行的开源 Web 服务器,作为反向代理,负责处理 SSL 证书并提供安全连接。
  • ACME 客户端:一个命令行工具,可以从 Let's Encrypt 颁发机构获取免费的 SSL 证书。

第一步:设置 Docker 环境

安装并配置好 Docker 和 Docker Compose 后,创建一个目录来保存你的程序运行相关的文件。例如,在 /opt/nginx-acme 目录下创建以下文件结构:

├── docker-compose.yml
├── nginx
│   ├── nginx.conf
│   ├── sites-available
│   │   └── example.com
│   └── sites-enabled
└── acme.sh

第二步:配置 Nginx

接下来,配置 Nginx 作为反向代理服务器。在 /nginx/nginx.conf 文件中添加以下配置:

server {
    listen 443 ssl;
    server_name example.com;

    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256;

    location / {
        proxy_pass http://localhost:80;
    }
}

记得替换 example.com 为你的实际域名。

第三步:安装 ACME 客户端

使用以下命令安装 ACME 客户端:

curl https://get.acme.sh | sh

第四步:获取并部署 SSL 证书

执行以下命令获取 SSL 证书:

acme.sh --issue -d example.com --webroot /nginx/acme.sh

这将为你颁发一个免费的 SSL 证书并将其部署到 /etc/letsencrypt/live/example.com 目录。

第五步:配置 Docker Compose

创建 /docker-compose.yml 文件,并添加以下内容:

version: '3.7'

services:
  nginx:
    image: nginx:latest
    volumes:
      - ./nginx/nginx.conf:/etc/nginx/nginx.conf:ro
      - ./nginx/sites-available:/etc/nginx/sites-available
      - ./nginx/sites-enabled:/etc/nginx/sites-enabled
      - ./nginx/acme.sh:/acme.sh
    ports:
      - "80:80"
      - "443:443"
  app:
    image: your-app-image
    ports:
      - "80:80"

记得替换 your-app-image 为你的应用程序镜像。

第六步:运行 Docker Compose

执行以下命令运行 Docker Compose:

docker-compose up -d

第七步:测试 SSL 证书

在浏览器中访问你的网站,确保可以看到安全锁图标,并确认你的网站已启用 HTTPS。

结语

通过使用 Docker、Nginx 和 ACME,你已经成功地在 Docker 环境中快速部署了 SSL 证书。现在,你的网站或应用程序将受到 SSL 证书的保护,为用户提供安全可靠的访问环境。