手把手搭建一个容器化+代理网关+可视化管理环境

2849b08ac82d88696bc646007c0fc05a.gif

作者 | togettoyou

来源 | SuperGopher

前言

本文主要分享个人服务器的应用部署方案现状,容器化+代理网关+可视化管理。

准备阶段

我购买的是腾讯云服务器(2 核 4GB 3Mbps)

b61a3b32caa49e6abc010c6da8120293.png

域名也是在腾讯云备案过的,提前准备域名解析

2bff98f427cc9f6491c20b17ff75d1c6.png

配置环境

安装 Docker

curl -sSL https://get.daocloud.io/docker | sh

安装 Docker Compose

curl -L https://get.daocloud.io/docker/compose/releases/download/1.29.2/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose

设置镜像加速和开机自启

mkdir /etc/docker
echo '{"registry-mirrors":["https://reg-mirror.qiniu.com/"]}' > /etc/docker/daemon.json
sudo systemctl daemon-reload
sudo systemctl restart docker
sudo systemctl enable docker

部署 Traefik

创建 Traefik 目录,并在该目录下进行系列操作

cd ~
mkdir traefik
cd traefik/

创建 Traefik 的启动配置

vi traefik.yml
# 定义监听端口:web(80) 和 websecure(443)
entryPoints:
  web:
    address: ":80"
  websecure:
    address: ":443"
# 配置发现提供者,这里为 docker
providers:
  docker: {}
# 开启 Traefik 面板访问 (8080端口)
api:
  dashboard: true
  insecure: true
# 创建名称为 open-https 的  tls 配置(会使用 Let's Encrypt 自动生成 https 证书)
certificatesResolvers:
  open-https:
    acme:
      email: "youremail@qq.com"
      storage: "acme.json"
      httpChallenge:
        entryPoint: web

创建名称为 traefik 的 Docker 网络环境,后续 Traefik 和需要代理的应用容器都需要部署在该网络环境下才可以被访问到

docker network create traefik

创建 docker-compose 配置

vi docker-compose.yml
version: '3'
services:
  traefik:
    image: traefik:v2.4
    # 需要将本地的 /var/run/docker.sock 挂载到 Traefik 容器内,才可以使用到 docker 配置发现
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - $PWD/traefik.yml:/etc/traefik/traefik.yml
    restart: always
    # 把 Traefik 容器监听的 80 和 443 端口映射到宿主机(以后宿主机只要暴露 80 和 443 就可以了,所有流量通过 Traefik 代理)
    ports:
      - "80:80"
      - "443:443"
    # 使用自定义的 traefik 网络
    networks:
      - traefik
    # 标签配置,Traefik 的配置发现是通过标签抓取的
    labels:
      # 开启 redirectscheme 中间件,中间件名称为 redirect-https ,该中间件可以重定向 http 到 https ,达到强制 https 的目的
      - "traefik.http.middlewares.redirect-https.redirectscheme.scheme=https"

      # 配置一个名称为 traefik-service 的服务,容器内端口为 8080
      - "traefik.http.services.traefik-service.loadbalancer.server.port=8080"

      # 配置一个名称为 https-traefik 的路由,代理服务为 traefik-service
      # 监听域名为 traefik.togettoyou.com ,端口为 websecure (443) 的流量请求
      # 开启 tls ,使用 open-https ,自动签发证书
      - "traefik.http.routers.https-traefik.service=traefik-service"
      - "traefik.http.routers.https-traefik.rule=Host(`traefik.togettoyou.com`)"
      - "traefik.http.routers.https-traefik.entrypoints=websecure"
      - "traefik.http.routers.https-traefik.tls=true"
      - "traefik.http.routers.https-traefik.tls.certresolver=open-https"

      # 配置一个名称为 http-traefik 的路由,代理服务为 traefik-service
      # 监听域名为 traefik.togettoyou.com ,端口为 web (80) 的流量请求
      # 使用 redirect-https 中间件,将 http 请求重定向到 https,即重定向到了上面配置的 https-traefik 路由
      - "traefik.http.routers.http-traefik.service=traefik-service"
      - "traefik.http.routers.http-traefik.rule=Host(`traefik.togettoyou.com`)"
      - "traefik.http.routers.http-traefik.entrypoints=web"
      - "traefik.http.routers.http-traefik.middlewares=redirect-https"

networks:
  traefik:
    external: true

启动 Traefik

docker-compose up -d

访问 http://traefik.togettoyou.com 时会发现被 302 重定向到了 https://traefik.togettoyou.com ,并且自动配置了证书

查看面板也可以发现和我们预期的一致

e41d935ad80dbb1d6bc8bfc06c8bda86.png

29474aa9cd9ed6ad02fccd26cd0131a1.png

部署 Docker 可视化工具

Portainer 是一个 Docker 的可视化图形工具。

同理,我们创建 Portainer 目录,并在该目录进行系列操作

cd ~
mkdir portainer
cd portainer/

创建 docker-compose 配置

vi docker-compose.yml
version: '3'
services:
  portainer:
    image: portainer/portainer-ce
    # 挂载 /var/run/docker.sock ,并持久化 portainer 数据
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - $PWD/data:/data
    restart: always
    # 使用自定义的 traefik 网络
    networks:
      - traefik
    labels:
      # 配置一个名称为 portainer-service 的服务,容器内端口为 9000
      - "traefik.http.services.portainer-service.loadbalancer.server.port=9000"

      # 配置一个名称为 https-portainer 的路由,代理服务为 portainer-service
      # 监听域名为 docker.togettoyou.com ,端口为 websecure (443) 的流量请求
      # 开启 tls ,使用 open-https ,自动签发证书
      - "traefik.http.routers.https-portainer.service=portainer-service"
      - "traefik.http.routers.https-portainer.rule=Host(`docker.togettoyou.com`)"
      - "traefik.http.routers.https-portainer.entrypoints=websecure"
      - "traefik.http.routers.https-portainer.tls=true"
      - "traefik.http.routers.https-portainer.tls.certresolver=open-https"

      # 配置一个名称为 http-portainer 的路由,代理服务为 portainer-service
      # 监听域名为 docker.togettoyou.com ,端口为 web (80) 的流量请求
      # 使用 redirect-https 中间件,将 http 请求重定向到 https,即重定向到了上面配置的  https-portainer 路由
      - "traefik.http.routers.http-portainer.service=portainer-service"
      - "traefik.http.routers.http-portainer.rule=Host(`docker.togettoyou.com`)"
      - "traefik.http.routers.http-portainer.entrypoints=web"
      - "traefik.http.routers.http-portainer.middlewares=redirect-https"

networks:
  traefik:
    external: true

启动 Portainer

docker-compose up -d

查看面板

991df717174db4db77f3fc68af83950d.png

访问 docker.togettoyou.com

f01c37d8deac0aa719b6b960313a38b3.png

总结

利用 Docker + Traefik + Portainer ,极大方便了我们个人服务器应用部署。Traefik 监听着 80 和 443 端口,因此服务器只需要暴露出这两个端口,其他的流量请求都交由 Traefik 来代理,基于 Traefik 的配置发现机制,在部署我们的容器应用时只要在 Label 加上 Traefik 的规则即可;对于容器应用的启动停止、日志查看等使用 Portainer 绰绰有余,几乎不需要登陆到服务器上操作查看。

a17c42b71f366a46d097087f332a54c0.gif

往期推荐

Spring 完美导入 IDEA

k8s集群居然可以图形化安装了?

使用这个库,让你的服务操作 Redis 速度飞起

将 k8s 制作成 3D 射击游戏,好玩到停不下来

f8791180debeb5b889574350001db245.gif

点分享

718aa8dcf7da3db94f8b674cdbdc11bd.gif

点收藏

e63d14a406d354e00bb6ab8505ef5480.gif

点点赞

419bb75d0f3506259475f4a8c34aa72d.gif

点在看

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值