内容简介:我博客最早的时候使用 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-apikey
、shangxianapp-aliyun-xuexb-secret
- 阿里云相关令牌 -
shangxianapp-namecom-xuexb-apikey
、shangxianapp-namecom-xuexb-secret
- name.com 相关令牌 -
shangxianapp-shadowsocks-port
、shangxianapp-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
服务
搭建好基础服务后,随手搞了几个可视化的服务
- https://shangxian.app - Shangxian APP
- https://jenkins.shangxian.app - Jenkins
- https://netdata.shangxian.app - 服务器性能监控,基于 netdata
- https://portainer.shangxian.app - Docker Web 可视化管理平台,基于 Portainer
Todo
- 迁移博客和周边各个服务
- 启用 Jenkins 自动备份任务,每天在静悄悄的深夜里自动备份数据源到数据盘
- 重要服务日志接入 Kibana
- 有问题时自动回滚,现在当配置有问题时重启直接挂了。。。
所有上线相关的配置和脚本都在: https://github.com/shangxianapp
以上所述就是小编给大家介绍的《开始使用 Docker 线上部署》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- 入门教程 | 从安装部署开始学习 Elasticsearch
- Golang入门:从安装、部署以及GoLand的安装开始
- Gitlab-ci:从零开始的前端自动化部署
- 初识Kubernetes(K8s):从一个单机部署实现Java Web应用例子开始
- GraphQL:从头开始
- 开始编写GO
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。