前言
我一直使用着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 #构建容器启用完成
浏览器输入【docker主机ip:81】,成功进入web页面,初次登录使用邮箱:admin@example.com,密码:changeme。
DNS验证
选择SSL。
右侧点击 Add 后选择 Let's Encrypt 即可进入申请界面。
点击 Use a DNS Challenge,由于我的域名在腾讯云,优先选择 dnspod 提供商,申请*.bluhe.cn 泛域名后,其他二级域名都可以使用。
DNSPod 密钥获取
打开页面 https://console.dnspod.cn/account/token/token,找到 DNSPod Token,然后点 创建秘钥。
你登录账号的邮箱、获取的id,key等信息填入申请界面。
dns_dnspod_email = "xxx@xxx.com"
dns_dnspod_api_token = "423396,0c7d774cb408132bf8249dac09d21ade"
最后保存即可。
Proxy Host 申请ssl
一般域名也可直接在 Proxy Host (反代配置)完成后 选择ssl。申请失败,需进入容器内安装 zope 模块,pip install zope
自动完成申请,不需要DNS麻烦的验证,在DNS申请不了的情况下,主要方式是这种。
结尾
Nginx Proxy Manager 也可以导入证书开启https,多种选择方便许多。
« 夜游平南明珠楼
DNS认证里,找不到华为云。在华为注册的域名无法申请SSL证书
没用过华为云,如果华为云有免费证书的话,也可以在npm里面导入证书,一样能用。
收藏备用。
我是怕忘记,重新搭建的时候可以快速回忆