作者 | togettoyou

来源 | SuperGopher

前言

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

准备阶段

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

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

配置环境

安装 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: trueinsecure: 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.ymlrestart: 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 ,并且自动配置了证书

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

部署 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:/datarestart: always# 使用自定义的 traefik 网络networks:- traefiklabels:# 配置一个名称为 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

查看面板

访问 docker.togettoyou.com

总结

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

往期推荐

Spring 完美导入 IDEA

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

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

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

点分享

点收藏

点点赞

点在看

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

  1. 手把手教你搭建一个中式菜谱知识图谱可视化系统

    手把手教你搭建一个中式菜谱知识图谱可视化系统 中式菜谱知识图谱 1.系统功能 2.先来看看效果 实体间关联关系及实体信息显示 不同类型实体开关显示 搜索功能展示 3.系统实现流程 3.1 数据爬取 3 ...

  2. Kubernetes集群搭建及容器化部署

    Kubernetes集群搭建及容器化部署 目录 一.k8s 集群部署 2 1.k8s 快速入门 2 2.k8s 集群安装 10 二.k8s 容器化部署 18 1.Kubectl命令行部署 18 2.K ...

  3. python代理池_用Python搭建一个简单的代理池

    其实每次爬东西的时候,特怕IP被封,所以每次都要把时间延迟设置得长一点...这次用Python搭建一个简单的代理池.获取代理IP,然后验证其有效性.不过结果好像不是很理想,为什么西刺代理的高匿代理都能 ...

  4. go环境搭建_容器化 Go 开发环境的尝试

    Go语言中文网,致力于每日分享编码知识,欢迎关注我,会有意想不到的收获! 01 写在前面 昨天上午"起早"到附近的影院看<波西米亚狂想曲>,选的座位比较靠前,最后的二十 ...

  5. 手把手搭建一个SSM项目(适合新手)

    ssm项目整合(Spring+SpringMVC+Mybatis) 该项目实现的功能有 1.用户登录 2.新增用户信息 3.返回所有用户信息 4.更新用户信息 5删除用户信息 项目源码下载 项目结构: ...

  6. 利用 ELK 搭建 Docker 容器化应用日志中心

    概述 应用一旦容器化以后,需要考虑的就是如何采集位于 Docker 容器中的应用程序的打印日志供运维分析.典型的比如SpringBoot应用的日志收集. 本文即将阐述如何利用ELK日志中心来收集容器化 ...

  7. java 组件化_(原创)搭建一个组件化的监控平台

    最近看到一位同事正在开发一个监控软件,要求就是通过针对服务器现有的一些接口,通过这些接口返回的数据进行分析,如果监控的值到达预先设定的范围则通过短信的方式发送给管理员. 从整个开发的功能上来看是一个比 ...

  8. 手把手教你如何搭建一个网红教师的网络教学环境

    网络教学环境搭建 店铺地址:https://shop66907778.taobao.com/ 参考链接:https://blog.csdn.net/weixin_41486034/article/de ...

  9. 手把手搭建一个redis集群

    文章目录 前言 安装的含义 安装redis redis编译安装 redis集群 redis集群的使用 C++工程连接使用redis-cluster hiredis-cluster 总结 前言 所谓&q ...

最新文章

  1. 强化学习(四) - 蒙特卡洛方法(Monte Carlo Methods)及实例
  2. NAR:gcMeta——全球微生物组数据存储和标准化分析平台
  3. igstk 学习笔记
  4. 分析时间复杂度和空间复杂度(一级)
  5. 11.Excel数据分析-复合型饼图与漏斗图
  6. linux怎么删web应用程序错误,Ubuntu 20.04将删除Amazon Web应用程序,但用户可另行安装...
  7. Python笔记(5) 变量类型
  8. 蓝桥杯 算法训练 Sticks
  9. RS232 RS422 RS485 DB9公座脚定义
  10. 深入理解 Spring 事务原理
  11. L19.linux命令每日一练 -- 第三章 文件过滤及内容编辑处理命令 -- tailf和cut命令
  12. 如何使用手机裁剪图片大小?
  13. 为什么年轻人会活的越来越难?
  14. QTextEdit添加输入提示语
  15. Redis 6.2的过期删除策略源码分析(定期删除)
  16. 作为零基础的新手,如何自学Java和JavaEE开发技术?
  17. (Frontend Newbie) Web三要素(一)
  18. 【系统运维-Linux】使用U盘安装Linux
  19. 【香水】区分迪奥小姐Miss Dior中样式相似的几款香水
  20. dva的使用,附带一个Demo

热门文章

  1. LeetCode笔记】剑指 Offer 35. 复杂链表的复制(Java、哈希表、原地算法)
  2. 双用户windows linux系统,Windows与Linux合二为一?终于能在windows上运行Linux了!
  3. css文本行高是哪个属性_CSS中的line-height行高属性的使用技巧小结
  4. 诺奖得主:中国机制促成抗疫成功经济复苏
  5. 最高201万!华为高薪招应届生!专业是...
  6. 中国最好学科排名发布:北大14个学科全国第一,北京高校上榜数居首
  7. 致诺奖得主:低报酬、超工时,为什么我们要追求科学事业?
  8. MATLAB视角下的七夕节
  9. 这个神器火了,做个高大上的PPT演示竟然就这么简单!
  10. suse linux 11如何分区,新手发帖,关于SUSE11挂载磁盘阵列并分区的问题