前言
Nginx 是运行在 Linux上 的 web 服务器软件,通过监听 VPS 的80、443端口来处理 web 相关请求。还可以将搭建的项目请求路径由IP:端口号改为自己的域名,但是需要自己编写反向代理配置。
Nginx Proxy Manager 是一个 Nginx 的代理管理器。即使没有 Nginx 基础,也能轻松地用它来完成反向代理的操作,而且因为自带面板,操作极其简单,一键即可申请 Let’s Encrypt 的 SSL 证书,每三个月自动续期,非常适合配合 docker 搭建的应用使用。
项目展示 [无图]
内存占用:115M,缓慢增长
开始安装
参考教程:
扩展阅读:
简易流程:
安装 Docker
我们通过Docker来部署NPM,所以需要先安装Docker Compose。
参考:【VPS实用项目搭建】Docker Compose 安装及常用命令整理
安装 NPM
创建安装目录
1sudo -i2
3mkdir -p /root/data/docker_data/npm4
5cd /root/data/docker_data/npm编辑 docker-compose.yml 配置文件
1vim docker-compose.yml填入以下内容
1version: '3.8'2services:3 app:4 image: 'jc21/nginx-proxy-manager:latest'5 restart: unless-stopped6 ports:7 - '80:80' # 保持默认即可,不建议修改左侧的808 - '81:81' # 冒号左边可以改成自己服务器未被占用的端口9 - '443:443' # 保持默认即可,不建议修改左侧的44310 volumes:11 - ./data:/data # 冒号左边可以改路径,现在是表示把数据存放在在当前文件夹下的 data 文件夹中12 - ./letsencrypt:/etc/letsencrypt # 冒号左边可以改路径,现在是表示把数据存放在在当前文件夹下的 letsencrypt 文件夹中vim编辑器使用方法: 在文件内按
i开启编辑模式,按ESC退出编辑模式 按ctrl+:输入指令,wq指令为保存并退出
检查一下端口占用
1lsof -i:81如果啥也没出现则表示端口未被占用,否则要在 docker-compose.yml 修改 :81 左侧为其他未被占用端口。
1# 如果报错2-bash: lsof: command not found3
4# 那就安装一下再检查5apt install lsof此外要在安全组/防火墙中开放81端口
根据配置文件创建并在后台运行容器
1docker compose up -d2
3docker compose logs -f # 查看日志(可选)这样就安装好了 Nginx Proxy Manager。此时输入 IP:81 即可打开NPM管理面板。
默认登录账号密码为
1Email: [email protected]2Password: changeme进入面板后可以先改一下账号信息。
申请泛域名SSL证书
对Docker进行反代,如果域名需要使用https协议,则需要SSL证书。NPM可以为我们一键申请由Let’s Encript 颁发的SSL证书。通过申请泛域名证书,则可以一次性为某个域名及其子域名申请一张证书,不用每个项目都申请一次证书,方便。
参考教程:【Docker系列】反向代理神器NginxProxyManager——通配符SSL证书申请 | 爱玩实验室 (iwanlab.com)
打开NPM->SSL Certificates->Add SSL Certificate,填入域名:xxx.com和*.xxx.com,填入邮箱,勾选I agree xxx。
保存后即可使用该证书。
配置反向代理
后续用Docker搭建的应用都可以用NPM来配置反向代理。也可以为自身配置反代。
1# 查看本机Docker内部默认网关2ip addr show docker03
4# 查看本机VPS的IP5curl ip.sb打开NPM,Add Proxy Host,
在Details中:域名例如npm.lumengde.com,Scheme为http,IP为本机IP或docker内部默认网关172.17.0.1,勾选后两项。
在SSL中:选中对上一步申请的SSL证书即可,勾选Force SSL。
此外,在DNS服务商处添加该子域名解析。
然后等一会,访问对应的域名即可成功访问网站。
更新&卸载
更新NPM
1cd /root/data/docker_data/npm2
3docker compose down4
5cp -r /root/data/docker_data/npm /root/data/docker_data/npm.archive # 备份6
7docker compose pull8
9docker compose up -d10
11docker image prune卸载NPM
1cd /root/data/docker_data/npm2
3docker compose down4
5rm -rf /root/data/docker_data/npm通过CF DNS获取SSL证书
如果域名改用CloudFlare的DNS,则NPM申请SSL证书需要通过CD的API Token。
打开CloudFlare->头像->My Profile->API Tokens->Create Token->Edit zone DNS->Zone Resources选All zones->Continue to summary->Create Token
然后会得到类似这样的令牌和测试可用性代码。
令牌:fl5s-SQqful_DkyDFlU7syMLmb2fXA2UoiqnZ1nN
测试可用性代码:
1curl -X GET "https://api.cloudflare.com/client/v4/user/tokens/verify" \ -H "Authorization: Bearer fl5s-SQqful_DkyDFlU7syMLmb2fXA2UoiqnZ1nN" \ -H "Content-Type:application/json"可以先执行代码看下令牌可用性。
打开NPM->SSL Certificates->Add SSL Certificate,输入泛域名,勾选Use a DNS challenge,选择Cloudflare。在dns_cloudflare_api_token =后替换自己的令牌,勾选I agree xxx…,点击保存即可。
后续域名在CF添加解析记录即可。
通过Aliyun DNS获取SSL证书
参考:https://www.suiu.cc/archives/npm
阿里的那就参考阿里云文档 - 创建AccessKey,创建AccessKey,得到AccessKey ID和AccessKey Secret,这两个就是dns_aliyun_access_key和dns_aliyun_access_key_secret的值。建议先刷新Nginx Proxy Manager网站,并确定自己域名用的是阿里的DNS,然后再添加Let’s Encrypt证书。不行就等一会再试。