手把手搭建一个容器化+代理网关+可视化管理环境
作者 | 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.系统功能 2.先来看看效果 实体间关联关系及实体信息显示 不同类型实体开关显示 搜索功能展示 3.系统实现流程 3.1 数据爬取 3 ...
- Kubernetes集群搭建及容器化部署
Kubernetes集群搭建及容器化部署 目录 一.k8s 集群部署 2 1.k8s 快速入门 2 2.k8s 集群安装 10 二.k8s 容器化部署 18 1.Kubectl命令行部署 18 2.K ...
- python代理池_用Python搭建一个简单的代理池
其实每次爬东西的时候,特怕IP被封,所以每次都要把时间延迟设置得长一点...这次用Python搭建一个简单的代理池.获取代理IP,然后验证其有效性.不过结果好像不是很理想,为什么西刺代理的高匿代理都能 ...
- go环境搭建_容器化 Go 开发环境的尝试
Go语言中文网,致力于每日分享编码知识,欢迎关注我,会有意想不到的收获! 01 写在前面 昨天上午"起早"到附近的影院看<波西米亚狂想曲>,选的座位比较靠前,最后的二十 ...
- 手把手搭建一个SSM项目(适合新手)
ssm项目整合(Spring+SpringMVC+Mybatis) 该项目实现的功能有 1.用户登录 2.新增用户信息 3.返回所有用户信息 4.更新用户信息 5删除用户信息 项目源码下载 项目结构: ...
- 利用 ELK 搭建 Docker 容器化应用日志中心
概述 应用一旦容器化以后,需要考虑的就是如何采集位于 Docker 容器中的应用程序的打印日志供运维分析.典型的比如SpringBoot应用的日志收集. 本文即将阐述如何利用ELK日志中心来收集容器化 ...
- java 组件化_(原创)搭建一个组件化的监控平台
最近看到一位同事正在开发一个监控软件,要求就是通过针对服务器现有的一些接口,通过这些接口返回的数据进行分析,如果监控的值到达预先设定的范围则通过短信的方式发送给管理员. 从整个开发的功能上来看是一个比 ...
- 手把手教你如何搭建一个网红教师的网络教学环境
网络教学环境搭建 店铺地址:https://shop66907778.taobao.com/ 参考链接:https://blog.csdn.net/weixin_41486034/article/de ...
- 手把手搭建一个redis集群
文章目录 前言 安装的含义 安装redis redis编译安装 redis集群 redis集群的使用 C++工程连接使用redis-cluster hiredis-cluster 总结 前言 所谓&q ...
最新文章
- 强化学习(四) - 蒙特卡洛方法(Monte Carlo Methods)及实例
- NAR:gcMeta——全球微生物组数据存储和标准化分析平台
- igstk 学习笔记
- 分析时间复杂度和空间复杂度(一级)
- 11.Excel数据分析-复合型饼图与漏斗图
- linux怎么删web应用程序错误,Ubuntu 20.04将删除Amazon Web应用程序,但用户可另行安装...
- Python笔记(5) 变量类型
- 蓝桥杯 算法训练 Sticks
- RS232 RS422 RS485 DB9公座脚定义
- 深入理解 Spring 事务原理
- L19.linux命令每日一练 -- 第三章 文件过滤及内容编辑处理命令 -- tailf和cut命令
- 如何使用手机裁剪图片大小?
- 为什么年轻人会活的越来越难?
- QTextEdit添加输入提示语
- Redis 6.2的过期删除策略源码分析(定期删除)
- 作为零基础的新手,如何自学Java和JavaEE开发技术?
- (Frontend Newbie) Web三要素(一)
- 【系统运维-Linux】使用U盘安装Linux
- 【香水】区分迪奥小姐Miss Dior中样式相似的几款香水
- dva的使用,附带一个Demo
热门文章
- LeetCode笔记】剑指 Offer 35. 复杂链表的复制(Java、哈希表、原地算法)
- 双用户windows linux系统,Windows与Linux合二为一?终于能在windows上运行Linux了!
- css文本行高是哪个属性_CSS中的line-height行高属性的使用技巧小结
- 诺奖得主:中国机制促成抗疫成功经济复苏
- 最高201万!华为高薪招应届生!专业是...
- 中国最好学科排名发布:北大14个学科全国第一,北京高校上榜数居首
- 致诺奖得主:低报酬、超工时,为什么我们要追求科学事业?
- MATLAB视角下的七夕节
- 这个神器火了,做个高大上的PPT演示竟然就这么简单!
- suse linux 11如何分区,新手发帖,关于SUSE11挂载磁盘阵列并分区的问题