前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >手把手搭建一个容器化+代理网关+可视化管理环境

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

作者头像
gopher云原生
发布2021-10-18 11:09:10
1.2K0
发布2021-10-18 11:09:10
举报
文章被收录于专栏:gopher云原生

前言

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

准备阶段

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

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

配置环境

安装 Docker

代码语言:javascript
复制
curl -sSL https://get.daocloud.io/docker | sh

安装 Docker Compose

代码语言:javascript
复制
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

设置镜像加速和开机自启

代码语言:javascript
复制
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 目录,并在该目录下进行系列操作

代码语言:javascript
复制
cd ~
mkdir traefik
cd traefik/

创建 Traefik 的启动配置

代码语言:javascript
复制
vi traefik.yml
代码语言:javascript
复制
# 定义监听端口: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 和需要代理的应用容器都需要部署在该网络环境下才可以被访问到

代码语言:javascript
复制
docker network create traefik

创建 docker-compose 配置

代码语言:javascript
复制
vi docker-compose.yml
代码语言:javascript
复制
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

代码语言:javascript
复制
docker-compose up -d

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

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

部署 Docker 可视化工具

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

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

代码语言:javascript
复制
cd ~
mkdir portainer
cd portainer/

创建 docker-compose 配置

代码语言:javascript
复制
vi docker-compose.yml
代码语言:javascript
复制
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

代码语言:javascript
复制
docker-compose up -d

查看面板

访问 docker.togettoyou.com

总结

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-08-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 gopher云原生 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 准备阶段
  • 配置环境
  • 部署 Traefik
  • 部署 Docker 可视化工具
  • 总结
相关产品与服务
容器镜像服务
容器镜像服务(Tencent Container Registry,TCR)为您提供安全独享、高性能的容器镜像托管分发服务。您可同时在全球多个地域创建独享实例,以实现容器镜像的就近拉取,降低拉取时间,节约带宽成本。TCR 提供细颗粒度的权限管理及访问控制,保障您的数据安全。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档