基于Docker使用Gogs,Drone以及drone-runner-docker的前端代码自动化部署
Gogs是基于Go语言编写的可以替代gitlab的代码托管平台,它没有gitlab那么庞大且不需要占用大量资源,对小型服务器相对于比较友好,我们甚至可以使用树莓派搭建。
系统要求
* 操作系统:CentOS 7 以上 64bit(位)
* 服务器规格:CPU【1核】 内存【2GB】 以上即可
* 磁盘:系统盘60GB
安装过程(一):docker环境准备
(1)yum 包更新到最新
sudo yum update
(2)安装需要的软件包, yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依赖的
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
(3)设置yum源为阿里云
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
(4)安装docker
sudo yum install docker-ce 或者 sudo yum install docker
(5)安装后查看docker版本
docker -v
2.3 Docker的启动与停止
启动docker:
systemctl start docker 或 service docker start
停止docker:
systemctl stop docker 或 sudo service docker restart
重启docker:
systemctl restart docker 或 sudo service restart docker
查看docker状态:
systemctl status docker 或 sudo service status docker
开机启动:
systemctl enable docker 或 sudo service enable docker
查看docker概要信息:
docker info
查看docker帮助文档:
docker --help
常用命令
查看镜像 | docker images |
---|---|
搜索镜像 | docker search 镜像名称 |
拉取镜像 | docker pull 镜像名称 |
删除镜像 | docker rmi 镜像ID |
删除所有镜像 | docker rmi docker images -q |
查看正在运行的容器 | docker ps |
查看所有容器 | docker ps –a |
查看最后一次运行的容器 | docker ps –l |
查看停止的容器 | docker ps -f status=exited |
docker cp 容器名称:容器目录 需要拷贝的文件或目录 | docker cp 需要拷贝的文件或目录 容器名称:容器目录 |
删除镜像 | docker rmi 镜像id |
删除id相同的多个镜像 | docker rmi 镜像名:tag |
删除容器 | docker rm 容器id |
镜像重命名 | docker tag nginx:latest sswang-nginx:v1.0 |
镜像重命名 | docker tag [old_image]:[old_version] [new_image]:[new_version] |
想进入到容器中查看日志 | docker logs 容器id |
查看指定时间后的日志,只显示最后100行 | docker logs -f -t --since="2019-10-24" --tail=100 CONTAINER_ID |
只打印最后50行日志 | docker logs --tail=50 容器id |
查看最近30分钟的日志 | docker logs --since 30m 容器id |
查看某时间之后的日志 | docker logs -t --since="2019-10-24T13:23:37" CONTAINER_ID |
查看某时间段日志 | docker logs -t --since="2019-10-24T13:23:37" --until "2019-10-25T12:23:37" CONTAINER_ID |
docke 可视化安装 portainer
下载:
docker pull portainer 或 docker pull docker.io/portainer/portainer
安装命令:
设置9000端口
docker run -d -p 9000:9000 --restart=always --name portainer -v /var/run/docker.sock:/var/run/docker.sock -v /Users/lee/dev/docker_file/portainer/data:/data docker.io/portainer/portainer
设置两个端口
docker run -d -p 9000:9000 -p 8000:8000 --restart=always --name portainer -v /var/run/docker.sock:/var/run/docker.sock -v /Users/lee/dev/docker_file/portainer/data:/data portainer/portainer
安装网站:
https://blog.csdn.net/weixin_41887155/article/details/107232529
nginx安装
把容器中的配置信息取出来,放到宿主机上。
在宿主机的命令行执行docker cp nginx:/etc/nginx /nginx 文件映射
在宿主机上修改配置文件/nginx 修改配置文件 重启后即可
安装教程地址: https://blog.csdn.net/iteye_10432/article/details/99161578
映射到磁盘
/etc/nginx docker
/nginx 磁盘
/usr/share/nginx/html docker网站目录
/html 磁盘网站目录
nginx配置
# 把所有HTTP请求重定向到HTTPS上
server {
listen 80;
server_name xxxx.cn *.xxx.cn;
return 301 https://$host$request_uri;
}
# 配置根域名静态网站
server {
server_name xxxx.cn *.xxx.cn;
listen 443 ssl;
listen [::]:443 ssl;
# 配置SSL证书
ssl_certificate api.xxx.cn/Nginx/1_api.xxx.cn_bundle.crt;
ssl_certificate_key api.xxx.cn/Nginx/2_api.xxx.cn.key;
#这里是简单的配置,可以配置其他设置
location / {
root /usr/share/nginx/html/web;
index index.html;
}
}
gogs安装
docker run -d \
-p 10022:22 -p 3000:3000 \
-e TZ="Asia/Shanghai" \
-v /export/gogs:/data \
--restart=always \
--name=gogs \
gogs/gogs
安装完毕后可以访问ip:3000 来访问gogs容器的首次安装页面直接使用SQLite3 不需要安装mysql数据库
重启gogs容器修改app.ini(需要注意的坑)
如果安装完毕后,将容器重启后,会发现再次访问ip:3000会无法访问(不一定会遇到)
进入gogs的宿主机挂载目录/soft/docker/gogs/gogs/conf 修改app.ini,再次解决即可解决
配置持久化数据库
配置访问地址配置
选择配置(如果不配置管理员也可以在安装完毕后,第一个注册也是管理员)
安装完成后会自动进入主页(使用方法和github类似且相较于简单)
drone 安装教程
docker run -d \
-v /export/drone/data:/data \
-e DRONE_AGENTS_ENABLED=true \
-e DRONE_SERVER_PROTO=http \
-e DRONE_GOGS_SERVER=http://www.xxxx.com:3000 \
-e DRONE_RPC_SECRET=mydrone666 \
-e DRONE_SERVER_HOST=http://www.xxxx.com:8080 \
-e DRONE_USER_CREATE=username:adminStart,admin:true \
-e TZ="Asia/Shanghai" \
-p 8080:80 \
--restart=always \
--name=drone \
drone/drone:1
-e DRONE_GOGS_SERVER=http://ip:3000 此处为gogs的访问地址 也可以配置域名
-e DRONE_RPC_SECRET=dronerpc666 dronerpc666 非固定但是部署drone-runner-docker 需要一个参数一致
-e DRONE_SERVER_HOST=ip:3080 配置drone的访问地址 可以配置域名
-e DRONE_USER_CREATE=username:demon471,admin:true 设置管理员账号最好和gogs的管理员一致(也可以自作更改)
-e DRONE_USER_CREATE=username:adminStart,admin:true 设置登陆的管理员要跟gogs账户一致,不然会出现权限问题(可能是有bug)
访问ip:3080即可访问登录drone,就可以看到项目,如果没有可以点击sync同步gogs中的代码即可
点击同步到的项目,可以设置drone中的项目属性
回gogs中的项目设置可以看到webhook中有一个刚刚我们创建的属于drone的webhook
drone-runner-docker 安装
docker run -d \
-v /var/run/docker.sock:/var/run/docker.sock \
-e DRONE_RPC_PROTO=http \
-e DRONE_RPC_HOST=192.168.1.1:8080 \
-e DRONE_RPC_SECRET=mydrone666 \
-e DRONE_RUNNER_CAPACITY=2 \
-e DRONE_RUNNER_NAME=runner-docker \
-e TZ="Asia/Shanghai" \
-p 10080:3000 \
--restart=always \
--name=runner-docker \
drone/drone-runner-docker:1
-e DRONE_RPC_HOST=ip:3080 drone的访问地址
-e DRONE_RPC_PROTO=http 有证书可以是https
-e DRONE_RPC_SECRET=dronerpc666 需要和drone的配置一样
编写.drone.yml 文件
#流水线配置文件
kind: pipeline
type: docker
name: build
steps:
- name: build
# 这里配置node环境
image: node:latest
volumes: # 将容器内目录挂载到宿主机,仓库需要开启Trusted设置
- name: node-cache
path: /data # 将maven下载依赖的目录挂载出来,防止重复下载
commands:
- yarn config set registry https://registry.npm.taobao.org/
- yarn
- yarn run build
- cp -r ./dist/. /data
volumes: # 定义流水线挂载目录,用于共享数据 直接挂载到nginx配置文件目录
- name: node-cache
host:
path: /html/web
进行测试打包
等待部署完成即可访问网站,实现CI/CD自动化部署