Docker Portainer 啟用SSL https訪問
warning:
这篇文章距离上次修改已过1476天,其中的内容可能已经有所变动。
docker run -d -p 9000:9000 -p 8000:8000 --name portainer --restart always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainerportainer啟用https有兩種方法, 第一種:使用nginx反向代理,在nginx中使用ssl,這樣能很容易實現,並且域名後可以不用加端口訪問。 nginx配置如下
server { listen 80; listen 443 ssl http2; server_name 你的域名; #SSL-START SSL相关配置,请勿删除或修改下一行带注释的404规则 if ($server_port !~ 443){ rewrite ^(/.*)$ https://$host$1 permanent; } #HTTP_TO_HTTPS_END ssl_certificate 證書路徑/XXX.cer; ssl_certificate_key 密匙路徑/XXX.xyz.key; ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE; ssl_prefer_server_ciphers on; ssl_session_cache shared:SSL:10m; ssl_session_timeout 10m; add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload"; error_page 497 https://$host$request_uri; #SSL-END #禁止访问的文件或目录 location ~ ^/(.user.ini|.htaccess|.git|.svn|.project|LICENSE|README.md) return 404; } location ~ .well-known{ allow all; } location / { proxy_redirect off; 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; proxy_pass http://127.0.0.1:23900;#這裡的端口號是你Portainer映射到host的端口號 } }
這樣就用nginx反向代理實現了portainer的ssl加密
第二種方式,利用portainer自身實現ssl加密。一般443端口會被nginx佔用,這樣訪問時就只能在域名後面加端口號訪問了。
https://portainer.readthedocs.io/en/stable/deployment.html官方說明連接
docker run -d -p 443:9000 -p 8000:8000 --name portainer --restart always -v ~/local-certs:/certs -v portainer_data:/data portainer/portainer --ssl --sslcert /certs/portainer.crt --sslkey /certs/portainer.key其中-v ~/local-certs:/certs 是要映射你本地的證書路徑, --ssl --sslcert /certs/portainer.crt --sslkey /certs/portainer.key 這個命令就是啟用了ssl,注意portainer.crt和portainer.key需要和本地的名字保持一致。 這樣你就能使用https訪問portainer的管理頁面了。 下圖是portainer的管理頁面的配置,在command裏面加入了--ssl --sslcert /certs/portainer.crt --sslkey /certs/portainer.key 在volumes里,我是直接用了文件映射。 第二種方式比較適合沒有公網IP,使用frp做內網穿透的。