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 实现加密公网访问,具有如下优势:
- ✅ 图形化集中管理所有容器
- ✅ 数据卷与容器不丢失,部署即用
- ✅ 安全隔离(容器不直接暴露)
- ✅ 可持续扩展更多服务