ky818smKy818sm  2025-11-24 13:10 旷野小站 隐藏边栏 |   抢沙发  4 
文章评分 0 次,平均分 0.0

下载了linux_amd64_server.tar.gz和linux_amd64_client.tar.gz两个文件并且在说明文档上看到server的安装启动是:./nps install 和nps start
客户端的安装启动是:npc.exe install 其他参数(例如-server=xx -vkey=xx或者-config=xxx)和npc.exe start
要用ubuntu:22.04镜像构建nps和npc两个镜像

构建NPS(服务端)镜像

将以下内容保存为 Dockerfile.nps:

# 使用 Ubuntu 22.04 作为基础镜像
FROM ubuntu:22.04

# 设置环境变量,避免交互式安装时弹出时区选择等对话框
ENV DEBIAN_FRONTEND=noninteractive

# 安装必要的软件包,创建目录并清理缓存以减小镜像体积
RUN apt-get update && \
    apt-get install -y --no-install-recommends wget && \
    rm -rf /var/lib/apt/lists/* && \
    mkdir -p /app/conf /app/data

# 将宿主机的 NPS 二进制文件和配置文件复制到镜像中
COPY linux_amd64_server.tar.gz /tmp/
RUN tar -zxvf /tmp/linux_amd64_server.tar.gz -C /app/ && \
    rm -f /tmp/linux_amd64_server.tar.gz && \
    chmod +x /app/nps

# 设置工作目录
WORKDIR /app

# 复制默认配置文件(如果宿主机构建目录下有 conf 文件夹,可选用)
# COPY conf /app/conf

# 暴露 NPS 常用端口
# 8080:Web管理界面, 8024:客户端连接, 80:HTTP代理, 443:HTTPS代理
EXPOSE 8080 8024 80 443

# 设置容器启动命令
CMD ["./nps"]

构建NPC(客户端)镜像

将以下内容保存为 Dockerfile.npc:

# 使用 Ubuntu 22.04 作为基础镜像
FROM ubuntu:22.04

# 设置环境变量
ENV DEBIAN_FRONTEND=noninteractive

# 安装必要的软件包,创建目录并清理缓存
RUN apt-get update && \
    apt-get install -y --no-install-recommends wget && \
    rm -rf /var/lib/apt/lists/* && \
    mkdir -p /app/conf

# 将宿主机的 NPC 二进制文件复制到镜像中
COPY linux_amd64_client.tar.gz /tmp/
RUN tar -zxvf /tmp/linux_amd64_client.tar.gz -C /app/ && \
    rm -f /tmp/linux_amd64_client.tar.gz && \
    chmod +x /app/npc

# 设置工作目录
WORKDIR /app

# 设置容器启动命令
# 注意:这里使用环境变量,方便运行容器时覆盖
ENV NPC_SERVER=""
ENV NPC_VKEY=""
ENV NPC_TYPE="tcp"

CMD ./npc -server=${NPC_SERVER} -vkey=${NPC_VKEY} -type=${NPC_TYPE}

构建镜像
在包含 Dockerfile 和 .tar.gz 文件的目录下,执行以下命令构建镜像:

# 构建 NPS 服务端镜像
docker build -t my-nps -f Dockerfile.nps .

# 构建 NPC 客户端镜像
docker build -t my-npc -f Dockerfile.npc .

运行NPS服务端容器

建议使用 --net=host 模式运行NPS服务端,这样可以简化端口映射

# 首次运行生成默认配置文件
docker run -d --name nps-temp --net=host -v /path/to/nps/conf:/app/conf my-nps
# 等待几秒让容器生成默认配置文件
sleep 5
# 停止并删除临时容器
docker stop nps-temp && docker rm nps-temp

# 修改配置文件(根据实际情况调整)
# 主要修改 /path/to/nps/conf/nps.conf 中的 web_username, web_password, web_port, bridge_port 等[citation:3]
# 例如:web_username=admin, web_password=你的强密码, web_port=8080, bridge_port=8024

# 正式运行NPS服务端
docker run -d \
  --name nps-server \
  --restart=always \
  --net=host \
  -v /path/to/nps/conf:/app/conf \
  -v /path/to/nps/data:/app/data \
  my-nps

关键配置说明:

  • --net=host:容器使用宿主机的网络栈,直接绑定宿主机端口,无需 -p 映射。
  • -v /path/to/nps/conf:/app/conf:将配置目录挂载到宿主机,防止容器删除后配置丢失。请将 /path/to/nps/conf 替换为你宿主机上的实际路径。
  • -v /path/to/nps/data:/app/data:挂载数据目录,用于持久化存储。

运行NPC客户端容器

同样可以使用 --net=host 模式。

docker run -d \
  --name npc-client \
  --restart=always \
  --net=host \
  -e NPC_SERVER="你的NPS服务端IP:8024" \
  -e NPC_VKEY="在NPS Web界面中添加客户端时生成的验证密钥" \
  -e NPC_TYPE="tcp" \
  my-npc

参数解释:

  • NPC_SERVER:你的NPS服务端的IP地址和端口(默认8024)。
  • NPC_VKEY:在NPS Web管理界面(通常为 http://你的服务端IP:8080)中添加客户端时生成的"验证密钥"。这是客户端与服务端建立连接的核心凭证。
  • NPC_TYPE:连接类型,一般使用tcp。

🔧 验证与调试

验证NPS服务端:

  • 构建并运行NPS服务端容器后,访问 http://你的服务端IP:8080,使用你设置的账号密码登录Web管理界面。
  • 查看NPC客户端连接:
    登录NPS Web管理界面,在"客户端"页面查看对应Vkey的客户端连接状态。
  • 日志排查:
    如果客户端未能正常连接,可以查看其日志:docker logs npc-client。

💡 进阶优化

  1. 镜像体积优化:上述Dockerfile使用了Ubuntu基础镜像。若追求更小的镜像体积,可考虑使用Alpine Linux作为基础镜像,但需注意二进制文件的依赖兼容性。
  2. 使用Docker Compose:你可以编写 docker-compose.yml 文件来统一管理NPS和NPC服务的启动配置。
  3. 配置文件细化:NPS服务端的功能非常丰富,你可以在 nps.conf 中进一步配置隧道、代理等。

使用 Docker Compose 运行 NPS 和 NPC 的完整配置方案:

项目目录结构

nps-docker/
├── docker-compose.yml
├── nps-server/
│   ├── conf/
│   └── data/
└── npc-clients/
    └── client1/
        └── conf/

Docker Compose 配置

方案1:基础版本(推荐)
# docker-compose.yml
version: '3.8'

services:
  # NPS 服务端
  nps-server:
    build:
      context: .
      dockerfile: Dockerfile.nps
    container_name: nps-server
    restart: always
    network_mode: "host"
    volumes:
      - ./nps-server/conf:/app/conf
      - ./nps-server/data:/app/data
    # 首次运行需要生成配置,取消下面的注释
    # command: ["./nps"]
    # 正常运行时使用默认CMD

  # NPC 客户端示例 1
  npc-client-1:
    build:
      context: .
      dockerfile: Dockerfile.npc
    container_name: npc-client-1
    restart: always
    network_mode: "host"
    environment:
      - NPC_SERVER=你的服务端IP:8024
      - NPC_VKEY=客户端1的验证密钥
      - NPC_TYPE=tcp
    depends_on:
      - nps-server

  # NPC 客户端示例 2(多个客户端)
  npc-client-2:
    build:
      context: .
      dockerfile: Dockerfile.npc
    container_name: npc-client-2
    restart: always
    network_mode: "host"
    environment:
      - NPC_SERVER=你的服务端IP:8024
      - NPC_VKEY=客户端2的验证密钥
      - NPC_TYPE=tcp
    depends_on:
      - nps-server
方案2:使用端口映射(不用 host 模式)
# docker-compose.yml
version: '3.8'

services:
  nps-server:
    build:
      context: .
      dockerfile: Dockerfile.nps
    container_name: nps-server
    restart: always
    ports:
      - "8080:8080"    # Web管理界面
      - "8024:8024"    # 客户端连接
      - "80:80"        # HTTP代理
      - "443:443"      # HTTPS代理
      - "8081-8090:8081-8090"  # 其他代理端口范围
    volumes:
      - ./nps-server/conf:/app/conf
      - ./nps-server/data:/app/data
    networks:
      - nps-network

  npc-client-1:
    build:
      context: .
      dockerfile: Dockerfile.npc
    container_name: npc-client-1
    restart: always
    environment:
      - NPC_SERVER=nps-server:8024  # 使用服务名而不是IP
      - NPC_VKEY=客户端1的验证密钥
      - NPC_TYPE=tcp
    networks:
      - nps-network
    depends_on:
      - nps-server

networks:
  nps-network:
    driver: bridge
方案3:完整生产版本
# docker-compose.yml
version: '3.8'

x-npc-template: &npc-template
  build:
    context: .
    dockerfile: Dockerfile.npc
  restart: unless-stopped
  network_mode: "host"
  environment:
    NPC_TYPE: "tcp"
  healthcheck:
    test: ["CMD", "ps", "aux", "|", "grep", "npc"]
    interval: 30s
    timeout: 10s
    retries: 3

services:
  # NPS 服务端
  nps-server:
    build:
      context: .
      dockerfile: Dockerfile.nps
    container_name: nps-server
    restart: unless-stopped
    network_mode: "host"
    volumes:
      - ./nps-server/conf:/app/conf
      - ./nps-server/data:/app/data
      - /etc/localtime:/etc/localtime:ro  # 同步时间
    logging:
      driver: "json-file"
      options:
        max-size: "10m"
        max-file: "3"
    healthcheck:
      test: ["CMD", "netstat", "-tulnp", "|", "grep", ":8024"]
      interval: 30s
      timeout: 10s
      retries: 3

  # 多个NPC客户端
  npc-web-server:
    <<: *npc-template
    container_name: npc-web-server
    environment:
      - NPC_SERVER=你的服务端IP:8024
      - NPC_VKEY=web服务器的验证密钥

  npc-database:
    <<: *npc-template
    container_name: npc-database
    environment:
      - NPC_SERVER=你的服务端IP:8024
      - NPC_VKEY=数据库的验证密钥

  npc-ssh-server:
    <<: *npc-template
    container_name: npc-ssh-server
    environment:
      - NPC_SERVER=你的服务端IP:8024
      - NPC_VKEY=ssh服务器的验证密钥

部署步骤

准备目录和文件
# 创建项目目录
mkdir nps-docker && cd nps-docker

# 创建必要的目录
mkdir -p nps-server/{conf,data}
mkdir -p npc-clients/{client1,client2}/conf

# 确保有 Dockerfile 和二进制文件
cp /path/to/linux_amd64_server.tar.gz .
cp /path/to/linux_amd64_client.tar.gz .
首次运行生成配置
# 临时运行NPS生成默认配置
docker compose run --rm nps-server

# 等待几秒后停止,配置文件会生成在 nps-server/conf/ 目录
# 按 Ctrl+C 停止

# 编辑配置文件
vim nps-server/conf/nps.conf

修改关键配置:

web_username=admin
web_password=你的强密码
web_port=8080
bridge_port=8024
启动所有服务

# 启动所有服务
docker compose up -d

# 查看运行状态
docker compose ps

# 查看日志
docker compose logs -f

# 查看特定服务日志
docker compose logs nps-server
docker compose logs npc-client-1

管理命令
# 启动服务
docker compose start

# 停止服务
docker compose stop

# 重启服务
docker compose restart

# 停止并删除容器
docker compose down

# 重新构建并启动
docker compose up -d --build

# 查看服务状态
docker compose ps

# 查看所有日志
docker compose logs

# 进入容器
docker compose exec nps-server bash
环境变量配置

创建 .env 文件

# .env
NPS_SERVER_IP=你的公网IP
NPC_VKEY_WEB=web服务器的vkey
NPC_VKEY_DB=数据库的vkey
NPC_VKEY_SSH=ssh服务器的vkey

然后在 docker-compose.yml 中使用:

environment:
  - NPC_SERVER=${NPS_SERVER_IP}:8024
  - NPC_VKEY=${NPC_VKEY_WEB}
完整的部署脚本
#!/bin/bash
# deploy-nps.sh

set -e

echo "开始部署 NPS 服务..."

# 创建目录
mkdir -p {nps-server,npc-clients}/{conf,data}

# 复制二进制文件
cp linux_amd64_server.tar.gz linux_amd64_client.tar.gz .

# 生成配置(首次运行)
echo "生成默认配置..."
docker compose run --rm nps-server &
sleep 10
docker compose down

# 修改默认密码
echo "请编辑 nps-server/conf/nps.conf 修改默认密码"
echo "主要修改: web_password=你的强密码"
read -p "按回车继续..."

# 启动服务
echo "启动服务..."
docker compose up -d

echo "部署完成!"
echo "Web管理界面: http://你的服务器IP:8080"
echo "查看状态: docker compose ps"
echo "查看日志: docker compose logs -f"
使用说明

首次部署:

  • 运行部署脚本或手动执行上述步骤
  • 访问 Web 界面添加客户端获取 VKEY
  • 更新 docker-compose.yml 中的 VKEY

日常管理:

# 启动所有服务
docker compose up -d

# 停止所有服务  
docker compose down

# 更新配置后重启
docker compose restart nps-server

故障排查:

# 查看所有服务状态
docker compose ps

# 查看服务日志
docker compose logs nps-server

# 进入容器检查
docker compose exec nps-server bash

这种 Docker Compose 的方式可以让你轻松管理多个 NPC 客户端,并且配置清晰、易于维护。

声明:本站许多内容均从网上收集整理,若有内容侵犯到您的权益,请通过邮件【6167555@qq.com】联系本站,我们将及时删除!

有问题请点我联系站长

「点点赞赏,手留余香」
HIDE

声明:本文为原创文章,版权归所有,欢迎分享本文,转载请保留出处!

发表评论

表情 格式 链接 私密 签到
扫一扫二维码分享