公司代码架构 - Docker + Jenkins + Gogs + Portainer(一)
介绍
公司研发项目时,遇到git作为版本控制时,很常见的问题是部署比较麻烦(相比较麻烦),需要先克隆在拉到服务器部署,代码提交频率过高时,就会出现一天很多次提交代码,部署代码,浪费了大量的人力物力,于是乎大量的架构师技术总监们开始研究各类解决方案,各种上线前review代码,这是一件非常痛苦的事情,这里简单记录一下公司代码架构的部署,来解决公司代码架构上的诸多问题,也是自己做一个笔记,文章内如有错误,还请各位指出。
Tips:该环境并不适用于个人用户以及小微企业,适用于项目众多且开发人员大于30人的公司
搭建环境
- 服务器1 :Virmach 水牛城 RAM1.8G 2C 10GSSD(黑五机器)
- 操作系统 :Ubuntu16.04
- 部署环境 :LNMP1.6 (我是军哥铁粉)
这里说明一下,多台服务器是为了解耦,说是解耦,实则认为承受不住,且大部分公司已经有一套完整的git服务器了,本节要做的就是加个自动构建而已,git服务器可自选环境,后面会讲如何搭建Gogs,如果有高配置服务器的公司或个人,可以尝试使用单服务器多部署,本文所需共三台服务器。
服务器1:搭建Jenkins中转服务器,做代码自动构建使用
服务器2:生产环境服务器,实则测试服务器,部署代码使用
服务器3:Gogs服务器,Git版本库服务器,做代码版本控制使用
服务器1的配置属于中下配置,该机型一年 13刀,属于大部分人都承受的起的价格,请注意,本文标注的配置仅用于配置自动构建服务器,并不用于部署代码以及Git服务,个人用户小鸡多的可以尝试
Ubuntu16.04/Ubuntu18.04 安装 Docker
Docker可以说是非常的牛X了,关于他的概念不多说,牛就牛在管理太方便了,就好像是 WHMCS 用母鸡开小鸡一样,母鸡永远不考虑小鸡的运作,只需要配合就好,Docker也一样,我们只需要创建容器,管理容器就够了,剩下的交给Docker来处理,且Docker可以做负载均衡,后续做架构的时候可以开多个Docker做集群,按需来做
安装
删除旧版本,更新apt-get,安装docker1
2
3sudo apt-get remove docker docker-engine docker-ce docker.io
sudo apt-get update
sudo apt install docker.io
启动Docker并查看版本
启动docker1
2
3systemctl start docker
systemctl enable docker
docker --version
我这里安装的是 18.09版本
安装Jenkins
安装
安装Jenkins可以选择多种方式安装,我这里采用的是Docker的方式安装的,由于我们上面已经安装过Docker,按照Jenkins官方给的安装方案就可以了,首先pull一个稳定版本的 Jenkins 镜像
镜像地址 : jenkinsci/blueocean1
2docker pull jenkinsci/blueocean
docker images
查看当前Jenkins版本1
docker inspect [IMAGE ID]
这里的 IMAGE ID 则是上面 查看镜像的 IMAGE ID
红框内则是 对应版本号
1 | 创建一个存放Jenkins Docker的目录 |
输入命令进入 Docker内部1
2
3docker exec -it jenkins bash
获取密码
cat /var/jenkins_home/secrets/initialAdminPassword
重启Docker1
docker restart [CONTAINER ID]
[CONTAINER ID] 为当前Jenkins的版本号 例如 2.164.3 则输入 docker restart 2.164.3
Nginx反代Jenkins,绑定域名
由于众所周知的水牛城服务器卡,国内环境必须搭配CloudFlare才可以使用,否则太卡了,因此安装LNMP环境,后续自动构建时也可以构建到这里
- 安装方法一:
LNMP环境安装教程 : LNMP一键安装包 - 安装教程
懒得打开的话,可以直接输入1
wget http://soft.vpser.net/lnmp/lnmp1.6.tar.gz -cO lnmp1.6.tar.gz && tar zxf lnmp1.6.tar.gz && cd lnmp1.6 && ./install.sh lnmp
我这里安装的是 1.6稳定版,需要其他版本的可以自行修改版本号安装
- 安装方法二:
apt-get安装,建议先更新apt-get1
apt-get install nginx
打开NGINX配置文件目录,创建一个新的配置文件(这里是lnmp环境的配置文件地址,apt-get安装的nginx配置文件存放于 /etc/nginx/conf.d 中)
1 | vi /usr/local/nginx/conf/vhost/jenkins.conf |
输入以下内容,请注意替换掉下面的 jenkins.0161.org1
2
3
4
5
6
7
8
9
10
11
12
13
14server {
listen 80;
server_name jenkins.0161.org;
client_max_body_size 60M;
client_body_buffer_size 512k;
location / {
proxy_pass
http://localhost:8081;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
重启lnmp使配置生效1
lnmp reload
打开CloudFlare绑定域名,增加CDN支持,此处比较简单,不多赘述
结语
一个完整的架构,需要很多的付出,并非一朝一夕,本文所属架构并不适用于所有公司或者个人,大型公司还需要K8s集群,承受多少并发取决于很多因素,任何架构都不能通杀所有类型的公司