Portainer 是一个轻量级的图形化 Docker 管理面板,适用于个人服务器管理、容器项目可视化操作、多服务部署维护等场景。本文记录了使用 Docker Compose 安装 Portainer CE 的完整流程,并通过 Nginx + FRP 实现公网安全访问。


🧱 系统结构概览

  • Portainer 容器部署主机:本地内网服务器(记作 Host A)
  • Nginx 反向代理主机:内网另一台服务器(记作 Host B)
  • 公网 VPS 主机:部署 FRP 客户端与提供公网入口(记作 VPS)

访问链路为:

公网 → VPS:[公网端口] → FRPC → Host B:[反代端口] → Nginx → Host A:[容器端口] → Portainer 容器:[内部端口]

✅ 步骤一:在内网主机上部署 Portainer(Host A)

创建目录:

mkdir -p ~/my_projects/portainer
cd ~/my_projects/portainer

编写 docker-compose.yml 文件:

version: "3.8"

services:
  portainer:
    image: portainer/portainer-ce:latest
    container_name: portainer
    restart: always
    ports:
      - "[宿主机端口]:[容器端口]"  # 替换为实际端口映射
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - portainer_data:/data

volumes:
  portainer_data:

启动服务:

docker-compose up -d

✅ 步骤二:Nginx 反向代理配置(Host B)

在 Nginx 中添加如下配置(监听代理端口,转发至 Host A):

server {
    listen [反代端口] ssl;
    server_name portainer.example.com;  # 替换为实际域名

    ssl_certificate     /etc/nginx/certs/fullchain.pem;
    ssl_certificate_key /etc/nginx/certs/privkey.pem;

    location / {
        proxy_pass https://[内网IP]:[宿主机端口];  # Host A 的局域网 IP
        proxy_ssl_verify off;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

✅ 步骤三:FRP 穿透配置(VPS + Host B)

VPS 上 FRPS 配置(已有可跳过):

确保已开放指定端口,并配置好 frps.ini

Host B 上 FRPC 配置:

[portainer_tls]
type = tcp
local_ip = 127.0.0.1
local_port = [反代端口]
remote_port = [公网端口]

启动 FRPC 后,通过 https://your-domain.com:[公网端口] 即可访问 Portainer。


✅ 第一次登录与使用建议

  • 访问 https://your-domain.com:[公网端口]
  • 设置管理员用户名(推荐使用非默认如:qsadmin)
  • 推荐密码格式:包含大写、小写、数字和特殊字符,长度不小于 12 位,例如:S3cure@Dock#Pass1 Adm1n!Login#Safe9
  • 登录后,可添加 Stack 管理多个 Compose 项目,统一可视化控制

🧠 总结

本方案将 Portainer 运行于局域网,通过 Nginx 反代 + FRP 实现加密公网访问,具有如下优势:

  • ✅ 图形化集中管理所有容器
  • ✅ 数据卷与容器不丢失,部署即用
  • ✅ 安全隔离(容器不直接暴露)
  • ✅ 可持续扩展更多服务

Leave a Reply

Your email address will not be published. Required fields are marked *