Nginx Proxy Manager 申请SSL证书


叙述4416 阅4 评

前言

我一直使用着Nginx Proxy Manage 实现站点的反代角色,觉得使用其他面板工具功能过于缭乱,这类Docker能满足我的需求,无论是在更新、备份、还原都有极大的便捷。

相关地址

GitHub地址:https://github.com/jc21/nginx-proxy-manager
参考作者文章:https://blog.laoda.de/archives/nginxproxymanager

搭建环境

  • 系统:Debian 11.1(仅代表我的版本)
  • 安装好Docker,Docker-Compose

Docker搭建

如已安装Docker,请跳转至 Nginx Proxy Manager安装

apt update   #获得系统上所有包的最新信息
sudo apt upgrade   #把这些包下载和升级到最新版本
apt install curl vim wget gnupg dpkg apt-transport-https lsb-release ca-certificates -y  #安装必要的软件包

国内机器可以用清华 TUNA的国内源:

curl -sS https://download.docker.com/linux/debian/gpg | gpg --dearmor > /usr/share/keyrings/docker-ce.gpg 
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-ce.gpg] https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/debian $(lsb_release -sc) stable" > /etc/apt/sources.list.d/docker.list

更新系统后即可安装 Docker CE:

apt update
apt install docker-ce docker-ce-cli containerd.io docker-compose-plugin  -y

验证docker是否安装成功

docker version #使用命令检查

安装docker-compose

sudo apt  install docker-compose  

恭喜你成功安装Docker,Docker-Compose

修改 Docker 配置

以下配置会增加一段自定义内网 IPv6 地址,开启容器的 IPv6 功能,以及限制日志文件大小,防止 Docker 日志塞满硬盘:

cat > /etc/docker/daemon.json << EOF
{
    "log-driver": "json-file",
    "log-opts": {
        "max-size": "20m",
        "max-file": "3"
    },
    "ipv6": true,
    "fixed-cidr-v6": "fd00:dead:beef:c0::/80",
    "experimental":true,
    "ip6tables":true
}
EOF

重启 Docker 服务:

systemctl restart docker

设置系统启动时自动运行

sudo systemctl restart docker  #开机自启
sudo systemctl enable docker  #启动

Nginx Proxy Manager 安装

mkdir -p /root/data/docker/npm ; cd /root/data/docker/npm

创建构造文件docker-compose.yml,并把下方内容粘贴入

version: "3"
services:
  app:
    image: 'jc21/nginx-proxy-manager:latest'
    restart: unless-stopped
    ports:
      # These ports are in format <host-port>:<container-port>
      - '80:80' # Public HTTP Port
      - '443:443' # Public HTTPS Port
      - '81:81' # Admin Web Port
      # Add any other Stream port you want to expose
      # - '21:21' # FTP
    environment:
      DB_MYSQL_HOST: "db"
      DB_MYSQL_PORT: 3306
      DB_MYSQL_USER: "npm"
      DB_MYSQL_PASSWORD: "npm"
      DB_MYSQL_NAME: "npm"
      # Uncomment this if IPv6 is not enabled on your host
      # DISABLE_IPV6: 'true'
    volumes:
      - ./data:/data
      - ./letsencrypt:/etc/letsencrypt
    depends_on:
      - db

  db:
    image: 'jc21/mariadb-aria:latest'
    restart: unless-stopped
    environment:
      MYSQL_ROOT_PASSWORD: 'npm'
      MYSQL_DATABASE: 'npm'
      MYSQL_USER: 'npm'
      MYSQL_PASSWORD: 'npm'
    volumes:
      - ./data/mysql:/var/lib/mysql
docker-compose up -d  #构建容器启用完成

2023-07-02_114528.jpg

浏览器输入【docker主机ip:81】,成功进入web页面,初次登录使用邮箱:admin@example.com,密码:changeme。

DNS验证

2023-07-02_121004.jpg

选择SSL。
2023-07-02_121129.jpg

右侧点击 Add 后选择 Let's Encrypt 即可进入申请界面。
2023-07-02_122039.png

点击 Use a DNS Challenge,由于我的域名在腾讯云,优先选择 dnspod 提供商,申请*.bluhe.cn 泛域名后,其他二级域名都可以使用。
QQ图片20230702120820.jpg

DNSPod 密钥获取

2023-07-02_121620.jpg

打开页面 https://console.dnspod.cn/account/token/token,找到 DNSPod Token,然后点 创建秘钥。
2023-07-02_121633.jpg

你登录账号的邮箱、获取的id,key等信息填入申请界面。

dns_dnspod_email = "xxx@xxx.com"
dns_dnspod_api_token = "423396,0c7d774cb408132bf8249dac09d21ade"

2023-07-02_123924.jpg

最后保存即可。

Proxy Host 申请ssl

QQ截图20230702124917.jpg

一般域名也可直接在 Proxy Host (反代配置)完成后 选择ssl。申请失败,需进入容器内安装 zope 模块,pip install zope
QQ图片20230702124549.jpg

自动完成申请,不需要DNS麻烦的验证,在DNS申请不了的情况下,主要方式是这种。

结尾

Nginx Proxy Manager 也可以导入证书开启https,多种选择方便许多。

最后更新 2024-06-13
评论 ( 4 )
隐私评论
  1. 小薏米

    DNS认证里,找不到华为云。在华为注册的域名无法申请SSL证书

    2024-01-18 20:55河南省郑州市回复
    1. 寻鹤 博主
      @小薏米

      没用过华为云,如果华为云有免费证书的话,也可以在npm里面导入证书,一样能用。

      2024-01-19 19:18广西南宁市回复
  2. wu先生

    收藏备用。

    2023-07-03 21:40湖北省黄冈市回复
    1. 寻鹤 博主
      @wu先生

      我是怕忘记,重新搭建的时候可以快速回忆

      2023-07-06 10:42广西回复