版本信息:
镜像版本:yisier1/nps 和 yisier1/npc (社区维护活跃版)
网络模式:Host 模式 (无需繁琐映射端口,配置即时生效)
更新时间:2026-01-23
第一部分:服务端部署 (NPS Server)
部署位置:云服务器 (腾讯云/阿里云/VPS)
核心逻辑:先建立目录结构 -> 初始化防崩溃数据库文件 -> 编写配置文件 -> 启动容器。
1. 初始化目录与数据库 (必做)
NPS 容器启动时会直接读取挂载目录下的 .json 数据文件。如果这些文件不存在,容器会直接报错退出。我们需要手动创建它们并写入空的 JSON 数组 []。
# 1. 创建项目主目录 (建议放在 /opt 或 /data 下)
mkdir -p /opt/nps/conf
# 2. 进入配置目录
cd /opt/nps/conf
# 3. 初始化核心数据库文件 (至关重要!)
# clients.json: 存储所有客户端(NPC)的验证密钥、备注等信息
echo "[]" > clients.json
# tasks.json: 存储所有隧道(TCP/UDP)的端口映射规则
echo "[]" > tasks.json
# hosts.json: 存储域名解析规则 (如果不使用泛域名解析,此文件为空但也必须存在)
echo "[]" > hosts.json
2. 创建核心配置文件 (nps.conf)
这是 NPS 的大脑,决定了端口、密码和运行模式。
# 在 /opt/nps/conf 目录下创建
vi nps.conf
nps.conf 详细配置内容:
# --- 基础配置 ---
appname = nps
# 运行模式:dev(开发) 或 pro(生产),dev 模式下日志更详细
runmode = dev
# --- 核心通信端口 ---
# [重要] 客户端(NPC)连接服务端的端口
# 需要在云服务器防火墙放行此端口 (TCP)
bridge_port=28024
# --- Web 管理后台配置 ---
# Web 管理界面访问端口 (如 http://IP:8080)
# 需要在云服务器防火墙放行此端口 (TCP)
web_port=28080
# Web 界面登录用户名
web_username=admin
# [必改] Web 界面登录密码 (请务必修改为强密码)
web_password=123
# --- 端口防冲突配置 ---
# 为了防止 NPS 占用了服务器原本的 80/443 端口 (通常被 Nginx/1Panel 占用)
# 我们将 NPS 的 HTTP 代理端口改为非常规端口
http_proxy_port=18080
https_proxy_port=18443
# 绑定 IP,0.0.0.0 代表允许所有外网连接
bridge_ip=0.0.0.0
# --- 高级限制与鉴权 ---
# 最大并发隧道数量
max_tunnel_num=100
# 最大客户端连接数
max_client_num=50
# 默认的公共连接密钥 (通常用不上,我们在网页端为每个客户端单独设置 vkey)
public_vkey=123
# 是否允许在 Web 界面进行用户注册 (个人使用建议关闭,更安全)
allow_user_login=false
allow_user_register=false
# --- 端口开放范围 ---
# 限制网页上可以随意开启的端口范围,防止误占用系统端口
allow_ports=900-65500
3. 编写 Docker Compose (docker-compose.yml)
Bash
# 回到项目主目录 /opt/nps
cd /opt/nps
vi docker-compose.yml
docker-compose.yml 内容:
YAML
services:
nps:
# 使用社区维护的活跃镜像,替代原版 ffdfgdfg (已停更)
image: yisier1/nps
container_name: nps
restart: always
# [核心配置] Network Mode: Host
# 容器直接共享宿主机(云服务器)的网络栈。
# 优势:
# 1. 性能最好,没有 NAT 损耗。
# 2. 网页后台新增端口映射时,无需修改 compose 文件,无需重启容器,立即生效。
network_mode: host
volumes:
# 将宿主机的配置目录挂载到容器内部
# 包含了 nps.conf 和我们刚才初始化的 json 数据库
- ./conf:/conf
4. 启动与防火墙设置
Bash
# 启动服务
docker-compose up -d
# 查看日志 (确认无报错)
docker logs -f nps
⚠️ 防火墙放行提醒:
请务必去腾讯云/阿里云控制台的安全组,放行以下 TCP 端口:
28080: 用于 Web 管理。
28024: 用于 NPC 客户端连接。
后续: 以后每增加一个穿透端口 (如 38080),都要记得来这里放行,如果采用反代策略则忽略这条。
评论区