快速启用traefik+portainer作为集群管理工具

说明

domain.com 为某个你自己拥有的域名
cloud.domain.com 用来解析访问portainer服务

启用swarm集群

1
docker swarm init

创建network

1
docker network create --driver=overlay traefik-net --attachable

创建traefik服务

创建数据目录

1
mkdir -p /data/traefik

增加配置traefik.toml

1
touch /data/traefik/traefik.toml

需将相关的域名,邮箱更改为自己的

debug = false

logLevel = "ERROR"
defaultEntryPoints = ["https","http"]

[entryPoints]
  [entryPoints.http]
  address = ":80"
  [entryPoints.https]
  address = ":443"
  [entryPoints.https.tls]

[retry]

[docker]
endpoint = "unix:///var/run/docker.sock"
#update
domain = "domain.com"
watch = true
exposedByDefault = false

[acme]
#update
email = "cloud@domain.com"
storage = "acme.json"
entryPoint = "https"
onHostRule = true

[acme.httpChallenge]
entryPoint = "http"

增加acme.json文件

用于存放证书数据

1
2
touch /data/traefik/acme.json
chmod 600 /data/traefik/acme.json

创建服务命令

需将相关的域名更改为自己的

1
2
3
4
5
6
7
8
9
10
11
12
docker service create \
--name traefik \
--constraint=node.role==manager \
--publish 80:80 --publish 443:443 --publish 8080:8080 \
--mount type=bind,source=/var/run/docker.sock,target=/var/run/docker.sock \
--mount type=bind,source=/data/traefik/traefik.toml,target=/etc/traefik/traefik.toml \
--mount type=bind,source=/data/traefik/acme.json,target=/acme.json \
--network traefik-net \
traefik \
--docker \
--docker.watch \
--api

创建portainer数据卷

1
2
3
4
5
docker volume create --driver local \
--opt device=/data/portainer \
--opt o=bind \
--opt type=none \
portainer_data

创建portainer服务

1
2
3
4
5
6
7
8
9
10
11
docker service create \
--name="portainer" \
--mount type=volume,source=portainer_data,destination=/data \
--network traefik-net \
--container-label traefik.backend="portainer" \
--container-label traefik.frontend.entryPoints="http,https" \
--container-label traefik.frontend.rule="Host: cloud.domain.com" \
--container-label traefik.port='9000' \
--container-label traefik.protocol='http' \
--replicas 1 \
portainer/portainer:1.19.2

访问

现在访问cloud.domain.com应当能够出现web界面,在出现的界面中可设置portainer访问密码。

如不能访问,请检查:
1.主机防火墙是否开启80,443端口访问
2.主机平台安全策略限制,如阿里云安全组策略
3.检查docker service logs portainer 是否出错等