使用 docker-compose 和 systemd 运行 Portainer
在这篇文章中,我们将展示如何使用 docker-compose 和 systemd 在计算机上运行 Portainer 社区版。如果你还没有安装 docker 或 docker-compose,请参见如何在 30 秒内在 Ubuntu 上安装 docker 和 docker-compose。
如果你已经有 Portainer 实例并想在远程计算机上运行 Portainer Edge Agent,请参见使用 docker-compose 和 systemd 运行 Portainer Edge Agent!
首先,创建 docker-compose.yml 将存放的目录并编辑它:
create-portainer-dir.sh
sudo mkdir -p /var/lib/portainer
sudo nano /var/lib/portainer/docker-compose.yml现在粘贴此配置文件:
docker-compose.yml
services:
portainer:
image: portainer/portainer
command: -H unix:///var/run/docker.sock
restart: always
ports:
- 9192:9000
- 8000:8000
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- portainer_data:/data
volumes:
portainer_data:在这种情况下,我们在端口 9192 上暴露 Web UI,因为我们使用反向代理设置来访问 Web UI。在没有 HTTPS 前端的情况下通过 HTTP 使用 Portainer 是安全风险!
这是我用于反向代理 Portainer 实例的 nginx 配置。注意我使用 certbot --nginx 生成 HTTPS 配置,因此这里不显示:
portainer.nginx.conf
server {
server_name portainer.mydomain.com;
location / {
proxy_pass http://localhost:9192/;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_redirect default;
}
listen 80;
}现在我们可以创建将自动启动 Portainer 的 systemd 服务:
create-portainer-service.sh
sudo nano /etc/systemd/system/portainer.serviceportainer.service
[Unit]
Description=Portainer
Requires=docker.service
After=docker.service
[Service]
Restart=always
User=root
Group=docker
WorkingDirectory=/var/lib/portainer
# 单元停止时关闭容器(如果正在运行)
ExecStartPre=/usr/local/bin/docker-compose -f docker-compose.yml down
# 单元启动时启动容器
ExecStart=/usr/local/bin/docker-compose -f docker-compose.yml up
# 单元停止时停止容器
ExecStop=/usr/local/bin/docker-compose -f docker-compose.yml down
[Install]
WantedBy=multi-user.target现在我们可以启用开机自动启动并启动 Portainer:
enable-start-portainer.sh
sudo systemctl enable portainer.service
sudo systemctl start portainer.serviceIf this post helped you, please consider buying me a coffee or donating via PayPal to support research & publishing of new posts on TechOverflow