In this post we’ll show how to run Portainer Community Edition on a computer using docker-compose and systemd. In case you haven’t installed docker
or docker-compose
, see How to install docker and docker-compose on Ubuntu in 30 seconds.
If you already have a Portainer instance and want to run a Portainer Edge Agent on a remote computer, see Running Portainer Edge Agent using docker-compose and systemd!
First, create the directory where the docker-compose.yml
will live and edit it:
sudo mkdir -p /var/lib/portainer sudo nano /var/lib/portainer/docker-compose.yml
Now paste this config file:
version: '2' 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 this case, we’re exposing the Web UI on port 9192
since we’re using a reverse proxy setup in order to access the web UI. Using Portainer over HTTP without a HTTPS frontend is a security risk!
This is my nginx config that is used to reverse proxy my Portainer instance. Note that I generate the HTTPS config using certbot --nginx
, hence it’s not shown here:
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; }
Now we can create the systemd service that will automatically start Portainer:
sudo nano /etc/systemd/system/portainer.service
[Unit] Description=Portainer Requires=docker.service After=docker.service [Service] Restart=always User=root Group=docker WorkingDirectory=/var/lib/portainer # Shutdown container (if running) when unit is stopped ExecStartPre=/usr/local/bin/docker-compose -f docker-compose.yml down # Start container when unit is started ExecStart=/usr/local/bin/docker-compose -f docker-compose.yml up # Stop container when unit is stopped ExecStop=/usr/local/bin/docker-compose -f docker-compose.yml down [Install] WantedBy=multi-user.target
Now we can can enable autostart on boot and start Portainer:
sudo systemctl enable portainer.service sudo systemctl start portainer.service