🐳

portainer

1 notes  •  Containers & Orchestration

Install Portainer with Nginx SSL Reverse Proxy

How to install Portainer (Docker management UI) and expose it securely via Nginx with SSL.

Prerequisites

  • Docker installed and running
  • Nginx installed
  • SSL certificate for your domain (e.g., via Let's Encrypt)
  • Domain pointing to the server (e.g., portainer.example.com)

Step 1 — Run Portainer

docker volume create portainer_data

docker run -d \
  --name portainer \
  --restart=always \
  -p 9000:9000 \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -v portainer_data:/data \
  portainer/portainer-ce:latest

Step 2 — Obtain SSL Certificate

sudo certbot certonly --nginx -d portainer.example.com

Step 3 — Configure Nginx

# /etc/nginx/sites-available/portainer
server {
    listen 80;
    server_name portainer.example.com;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl;
    listen [::]:443 ssl;
    server_name portainer.example.com;

    ssl_certificate     /etc/letsencrypt/live/portainer.example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/portainer.example.com/privkey.pem;

    client_max_body_size 0;

    location / {
        resolver 127.0.0.1 valid=30s;
        proxy_pass          http://localhost:9000;
        proxy_http_version  1.1;
        proxy_set_header    Upgrade $http_upgrade;
        proxy_set_header    Connection "upgrade";
        proxy_set_header    Host $host;
        proxy_set_header    X-Real-IP $remote_addr;
        proxy_set_header    X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header    X-Forwarded-Proto $scheme;
    }
}

Step 4 — Enable the Site

sudo ln -s /etc/nginx/sites-available/portainer /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx

Step 5 — Verify

curl -I https://portainer.example.com
# Should return HTTP 200

Then navigate to https://portainer.example.com to complete the Portainer setup wizard.