开始使用 Docker 线上部署

栏目: Java · 发布时间: 5年前

内容简介:我博客最早的时候使用 FTP 上传到虚拟空间以达到上线,后来认识到 SVN && Git ,就使用版本控制来上线,但也是笨笨的手动登录到服务器。再后来认识了 Jenkins ,发现原来上线可以如此美好,我把相关所有的服务的部署、上线使用 Jenkins 来完成,一切都是如此的美好。但后来服务器硬盘出了点问题,Jenkins 相关的配置丢失了,等到我再搭建 Jenkins 时,发现那么配置是何等『复杂』,主要是依赖太多,再加上 SSL 证书到期后『续命』脚本出了问题,真是祸不单行,又回到了登录服务器执行代码的

我博客最早的时候使用 FTP 上传到虚拟空间以达到上线,后来认识到 SVN && Git ,就使用版本控制来上线,但也是笨笨的手动登录到服务器。再后来认识了 Jenkins ,发现原来上线可以如此美好,我把相关所有的服务的部署、上线使用 Jenkins 来完成,一切都是如此的美好。

但后来服务器硬盘出了点问题,Jenkins 相关的配置丢失了,等到我再搭建 Jenkins 时,发现那么配置是何等『复杂』,主要是依赖太多,再加上 SSL 证书到期后『续命』脚本出了问题,真是祸不单行,又回到了登录服务器执行代码的时代,并且这个时代直到现在还是这样。。。

前段时间注册了个 shangxian.app ,最近也正好在研究 Jenkins 和 Docker 相关的技术 ,于是我又燃气了自动化上线的想法,也为了更好的练习各类服务,那就干吧!

服务器

本身现在我已经有新加坡(sg01)、日本(jp01)和北京(bj01)服务器,但由于穷,服务器都是 1U1G 的,想跑一些服务肯定顶不住的。于是便看上了阿里去新加坡 4U16G 服务器,看上了好几天,但就如 @健驰 所说,只要心中有草了,最终肯定会买的。。。于是在一个阳光明媚的上午,我用本来打算买 LG 5K 屏幕的钱买了台服务器。心疼好几天。。。

注:新加坡比国内要稍微贵些,好处是不用备案,阿里云新加坡还是比较稳的。

  • 新加坡低配 sg01 - SS、MTProxy、前端小武 博客海外解析,其实只是为了练习多机部署、主从数据库
  • 新加坡高配 sg02 - Jenkins、Kibana、Netdata、Portainer 等
  • 北京 bj01 - 博客
  • 日本 - SS、MTProxy

Docker

所有的服务器上都安装 Docker && Docker Compose ,所有服务均是以 Docker 方式运行,这样好处是配置化、轻依赖、方便迁移。

Jenkins Pipeline

所有的 Jenkins Job 都是以 Jenkins Pipeline 方式编写脚本,以防再次丢失,以 SCM 方式运行。

授权

为了避免 Jenkins Job Console Log 明文出现密钥,使用 Jenkins 凭据管理,且把密钥、Token 等也存放在凭证里,使用统一的命名规则,如:

  • shangxianapp-xiaowu-ssh-key - 登录各个服务器 @xiaowu 帐号的密钥
  • shangxianapp-github-xuexb-ssh-key - GitHub @xuexb 用户的密钥
  • shangxianapp-github-xuexb-access-token - GitHub @xuexb 用户的 Access Token
  • shangxianapp-aliyun-xuexb-apikeyshangxianapp-aliyun-xuexb-secret - 阿里云相关令牌
  • shangxianapp-namecom-xuexb-apikeyshangxianapp-namecom-xuexb-secret - name.com 相关令牌
  • shangxianapp-shadowsocks-portshangxianapp-shadowsocks-pwd - SS 相关令牌

这些凭据可以直接在 Jenkins Job 或者 Jenkins Pipeline 脚本使用,并且会以 **** 显示。

Nginx Proxy

由于在服务器中肯定是有多个 Web Server 的,而使用 Docker 容器化后需要对外暴露端口,但由于端口只能占用一个(比如:80、443),那么就在每个服务器中专门启用一个 Nginx Proxy Docker 专门来反向代理各个虚拟主机( Web Server ),约定好统一的目录,比如:

  • DOCKER_NGINX_VHOST_DIR - 虚拟主机配置目录,以 域名.conf 存放配置文件
  • DOCKER_NGINX_CA_DIR - SSL 证书存放目录,以 域名 为子目录存放
  • DOCKER_NGINX_DIR - Nginx 运行目录,配置文件更新后可以运行 /bin/sh ${DOCKER_NGINX_DIR}/reload.sh 来刷新 Nginx Proxy Docker
  • WWWROOT_DIR - 网站目录映射,以 域名 为子目录存放,可以在 Nginx 配置文件里使用,比如设置 root 目录

更多 Nginx Proxy Docker 请看: https://github.com/shangxianapp/docker-sg02-nginx-proxy

为了更好的在 Nginx 配置文件中读取变量,专门创建了支持 Lua 、echo-nginx 的 Nginx:alpine 镜像: https://github.com/shangxianapp/docker-nginx-alpine

SSL 证书同步

由于是需要多个服务器同步证书,启用了一个 Jenkins Job 来每三个月处理证书,由于证书有好几个,使用 Jenkins Pipeline 脚本生成,这样也可以直接使用 Jenkins 凭据密钥,再结合 Jenkins Pipeline parallel 并行生成证书,并同步到各个服务器,最后再重启 Nginx Proxy Docker 。

脚本见: https://github.com/shangxianapp/docker-auto-ssl

服务

搭建好基础服务后,随手搞了几个可视化的服务

Todo

  • 迁移博客和周边各个服务
  • 启用 Jenkins 自动备份任务,每天在静悄悄的深夜里自动备份数据源到数据盘
  • 重要服务日志接入 Kibana
  • 有问题时自动回滚,现在当配置有问题时重启直接挂了。。。

所有上线相关的配置和脚本都在: https://github.com/shangxianapp


以上所述就是小编给大家介绍的《开始使用 Docker 线上部署》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

The Intersectional Internet

The Intersectional Internet

Safiya Umoja Noble、Brendesha M. Tynes / Peter Lang Publishing / 2016

From race, sex, class, and culture, the multidisciplinary field of Internet studies needs theoretical and methodological approaches that allow us to question the organization of social relations that ......一起来看看 《The Intersectional Internet》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

MD5 加密
MD5 加密

MD5 加密工具