GPT-ubuntu-install-npm

🚀 在 Ubuntu VPS 安装 Docker 版 Nginx Proxy Manager(NPM)

用于通过 Web 面板管理 VPS 上的本地服务与端口

本教程适用于:Ubuntu 20.04 / 22.04 / 24.04

安装完成后,你能:

  • ✔ 通过网页操作全部反向代理
  • ✔ 管理 VPS 本地运行的任意服务
  • ✔ 给每个服务绑定域名
  • ✔ 自动申请 HTTPS
  • ✔ 不再需要 SSH 操作端口

✅ 1. 一键安装 Docker + Docker Compose + NPM

复制下面全部执行(适用于全新 VPS):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
curl -fsSL https://get.docker.com | bash
systemctl enable docker --now

mkdir -p /opt/npm
cat > /opt/npm/docker-compose.yml << 'EOF'
version: "3"

services:
npm:
image: jc21/nginx-proxy-manager:latest
container_name: npm
restart: unless-stopped
ports:
- "80:80"
- "81:81"
- "443:443"
environment:
DISABLE_IPV6: "true"
volumes:
- ./data:/data
- ./letsencrypt:/etc/letsencrypt
extra_hosts:
- "host.docker.internal:host-gateway"
EOF

cd /opt/npm
docker compose up -d

✅ 2. 登录 NPM 管理面板(从这里开始全程 Web 操作)

浏览器访问:

1
http://你的VPSIP:81

默认账号:

首次登录后会要求修改邮箱与密码。

之后 所有操作都在网页完成


🧠 3. NPM 如何访问 VPS 本地服务?

在 docker-compose 中我们加入了:

1
2
extra_hosts:
- "host.docker.internal:host-gateway"

因此在 NPM 中:

1
host.docker.internal = VPS 的本机(127.0.0.1)

无论你的服务是:

  • Node.js(3000)
  • Python Flask(5000)
  • FileBrowser(8080)
  • PHP 程序(9000)
  • 其他任意程序

只要运行在 VPS 本地,NPM 都能反代。


🔧 4. 在 NPM 中设置反向代理(管理任意服务)

在 NPM Web 面板中:

1
Proxy Hosts → Add Proxy Host

填写:

① Domain Name(绑定的域名)

例如:

1
app.yourdomain.com

② Forward Hostname / IP

填写:

1
host.docker.internal

③ Forward Port

例如你的服务在:

1
2
3
Node.js → 3000
Flask → 5000
FileBrowser → 8080

则填:

1
3000 或 5000 或 8080

④ 启用以下选项

  • ✔ Cache Assets
  • ✔ Block Common Exploits
  • ✔ Websockets Support(如果你的服务需要)

⑤ 申请 HTTPS(推荐)

进入 SSL 标签:

  • 选择:Request a new SSL Certificate
  • 勾选:
    ✔ Force SSL
    ✔ HTTP/2
    ✔ HSTS(可选)

完成后,你的服务就能通过:

1
https://app.yourdomain.com

访问。


📌 5. 示例:代理常见服务


示例 A:代理 FileBrowser

FileBrowser 运行在 VPS:

1
http://127.0.0.1:8080

NPM 配置:

1
2
3
4
5
Domain: files.yourdomain.com
Forward IP: host.docker.internal
Forward Port: 8080
SSL: 启用
Websockets: 启用

示例 B:代理 Node.js 应用

服务端运行:

1
node server.js (监听 3000)

NPM 填写:

1
2
3
4
5
Domain: api.yourdomain.com
Forward IP: host.docker.internal
Forward Port: 3000
SSL: 启用
Websockets: 如需则启用

示例 C:代理 Python Flask / FastAPI

服务运行:

1
uvicorn main:app --host 0.0.0.0 --port 5000

NPM 填:

1
2
3
4
Domain: web.yourdomain.com
Forward IP: host.docker.internal
Forward Port: 5000
SSL: 启用

🔥 6. 服务必须监听 0.0.0.0(重要)

为了让 NPM 能访问,服务必须监听:

1
0.0.0.0

示例:

Node.js:

1
app.listen(3000, '0.0.0.0');

Flask:

1
app.run(host='0.0.0.0', port=5000)

如果服务只监听 127.0.0.1,可能无法访问。


🔓 7. UFW 防火墙(如有开启)

1
2
3
4
sudo ufw allow 80
sudo ufw allow 81
sudo ufw allow 443
sudo ufw reload

你的服务端口(如 3000、5000、8080)不需要暴露——只要由 NPM 反代即可。


🔄 8. 更新 NPM(可选)

以后若需更新版本:

1
2
3
cd /opt/npm
docker compose pull
docker compose up -d

🎉 总结

你现在的 VPS:

  • ✔ 已安装 Docker + NPM
  • ✔ 强制映射 host.docker.internal,可代理 VPS 本地所有服务
  • ✔ 以后全部管理在 Web 页面完成
  • ✔ 自动申请 HTTPS
  • ✔ 适用于所有 Web 服务(Node/Python/PHP/FileBrowser 等)