前言
每次使用nginx
做反向代理都需要进入服务器, 使用命令行操作配置文件, 非常麻烦,且时间一久很容易忘记.
Nginx Proxy Manager
(后面简称npm
)为用户提供一个易于使用的web
界面,用于管理虚拟主机、反向代理、SSL
证书和访问控制等功能.
查看官方文档
也有第三方基于npm
制作了中文版查看DockerHub 查看GitHub
在下面的docker-compose.yml
文件中将 'jc21/nginx-proxy-manager:latest'
改为 chishin/nginx-proxy-manager-zh:release
即可
本教程使用
docker-compose
安装,如果没有安装docker
及docker-compose
请查看 Docker 系列 基础系列 docker 及 docker-compose 安装
一、安装
npm
需要使用到mysql
, 再加上redis
三者皆是常见项目需要用到的服务, 故放在一个docker-composer
文件里创建, 统一部署, 方便之后复用没有
redis
需求的, 可以在docker-compose.yml
的代码中删除redis
及其之后的代码
1. 安装位置
个人习惯所有docker
项目文件, 都在/root/docker
目录下, 以项目命名文件夹.方便管理统一管理
例如:
2. 安装
在npm
目录下创建docker-composer.yml
文件
mkdir -p /root/docker/npm
cd /root/docker/npm
vi docker-compose.yml
输入:
version: '3'
services:
app:
image: 'jc21/nginx-proxy-manager:latest'
container_name: npm
restart: unless-stopped
ports:
- '80:80' # Public HTTP Port
- '443:443' # Public HTTPS Port
- '81:81' # Admin Web npm 后台的端口
environment:
DB_MYSQL_HOST: "db" # 数据库容器名
DB_MYSQL_PORT: 3306 # 数据库容器端口
DB_MYSQL_USER: "npm" #用户名
DB_MYSQL_PASSWORD: "npm" #密码
DB_MYSQL_NAME: "npm" #数据库
volumes:
- ./data:/data
- ./letsencrypt:/etc/letsencrypt
depends_on:
- db
db:
image: mysql:5.7
container_name: db
restart: always
ports:
- "3306:3306"
environment:
MYSQL_ROOT_PASSWORD: root # 管理员密码
MYSQL_DATABASE: npm # npm用到的数据库
MYSQL_USER: npm # npm用到的用户名
MYSQL_PASSWORD: npm # npm用到的密码
command:
- --default_authentication_plugin=mysql_native_password
- --character-set-server=utf8mb4
- --collation-server=utf8mb4_unicode_ci
volumes:
- ../mysql/data:/var/lib/mysql #mysql数据
- ../mysql/conf.d:/etc/mysql/conf.d #mysql配置文件
redis:
image: redis:alpine
container_name: redis
restart: always
volumes:
- ../redis/data:/data
container_name
: 容器名, 有大用, 可以在大部分地方使用容器名连接, 而不是难记的ip
地址
保存退出
启动
docker-compose up -d
二、基本使用
-
安装好npm后, 登录, 根据提示修改账户密码
-
完成域名解析
-
回到npm设置代理
-
基本的nginx认证【让网站更安全!开启NginxProxyManager网站访问登陆限制功能】
-
反向代理的三种地址设置方式
-
推荐 使用容器名+容器端口 (容器名就是上面
docker-composer
中的container_name
优点无需开放宿主机端口, 无需记录ip) -
不推荐 使用容器ip+端口 (可能在重启容器后ip改变, 不方便)
-
不推荐 使用宿主机ip+映射的外部端口 (需要服务器开放对应端口, 不安全)
-
三、申请泛域名 SSL 证书
视频教程, 申请 Let’s Encrypt 泛域名 SSL 证书, 后面就无需每个二级域名都要申请ssl证书了
根据你们的域名解析商选择合适的申请入口
我这里是用的DNSPOD
,点击去申请 APIKEY
记住下图中5和6, 单独备份好
回到Nginx Proxy Manager
图中1, 记得使用通配符
*
图中2填写账户邮箱
图中3选择
DNSPod
图中4填写
DNSPod
的邮箱账户图中5填写上面申请的
DNSPOD
的APIKEY
的ID
和token
点击Save
如果出现zope
报错
可以进入容器内部
docker exec -it <容器名> /bin/bash
安装zope
就行
sudo apt install python3-zope
或者
pip install zope
再点击Save
重新保存一下即可
- 如果还不行, 中文版的 GitHub 仓库中也有解决方式, 可以参考