Portainer mit docker-compose und systemd betreiben

English Deutsch

In diesem Beitrag zeigen wir, wie man Portainer Community Edition auf einem Computer mit docker-compose und systemd betreibt. Falls Sie docker oder docker-compose noch nicht installiert haben, siehe Docker und docker-compose auf Ubuntu in 30 Sekunden installieren.

Wenn Sie bereits eine Portainer-Instanz haben und einen Portainer Edge Agent auf einem entfernten Computer betreiben möchten, siehe Portainer Edge Agent mit docker-compose und systemd betreiben!

Erstellen Sie zuerst das Verzeichnis, in dem die docker-compose.yml liegen soll, und bearbeiten Sie diese:

create-portainer-dir.sh
sudo mkdir -p /var/lib/portainer
sudo nano /var/lib/portainer/docker-compose.yml

Fügen Sie nun diese Konfigurationsdatei ein:

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:

In diesem Fall exponieren wir die Web-UI auf Port 9192, da wir ein Reverse-Proxy-Setup verwenden, um auf die Web-UI zuzugreifen. Portainer über HTTP ohne ein HTTPS-Frontend zu verwenden ist ein Sicherheitsrisiko!

Dies ist meine nginx-Konfiguration, die als Reverse-Proxy für meine Portainer-Instanz verwendet wird. Beachten Sie, dass ich die HTTPS-Konfiguration mit certbot --nginx generiere, daher ist sie hier nicht gezeigt:

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;
}

Nun können wir den systemd-Dienst erstellen, der Portainer automatisch startet:

create-portainer-service.sh
sudo nano /etc/systemd/system/portainer.service
portainer.service
[Unit]
Description=Portainer
Requires=docker.service
After=docker.service

[Service]
Restart=always
User=root
Group=docker
WorkingDirectory=/var/lib/portainer
# Container herunterfahren (falls laufend) wenn Unit gestoppt wird
ExecStartPre=/usr/local/bin/docker-compose -f docker-compose.yml down
# Container starten wenn Unit gestartet wird
ExecStart=/usr/local/bin/docker-compose -f docker-compose.yml up
# Container stoppen wenn Unit gestoppt wird
ExecStop=/usr/local/bin/docker-compose -f docker-compose.yml down

[Install]
WantedBy=multi-user.target

Nun können wir den Autostart beim Booten aktivieren und Portainer starten:

enable-start-portainer.sh
sudo systemctl enable portainer.service
sudo systemctl start portainer.service

Check out similar posts by category: Container, Docker, Linux, Portainer