基于Docker使用Gogs,Drone以及drone-runner-docker的前端代码自动化部署

481 阅读5分钟

基于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,再次解决即可解决
配置持久化数据库

2373872-20210506164046957-112254738.png

配置访问地址配置

2373872-20210506164416132-1943997834.png

选择配置(如果不配置管理员也可以在安装完毕后,第一个注册也是管理员)

2373872-20210506164607935-133866684.png

安装完成后会自动进入主页(使用方法和github类似且相较于简单)

2373872-20210506165346584-2131456124.png

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中的代码即可

2373872-20210506171708408-1124143379.png

点击同步到的项目,可以设置drone中的项目属性

2373872-20210506172103887-997013079.png

2373872-20210506172405970-1002240922.png

回gogs中的项目设置可以看到webhook中有一个刚刚我们创建的属于drone的webhook

2373872-20210506172637351-1870842085.png

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

进行测试打包

2373872-20210506174520494-251066858.png

微信图片_20211228165839.png

等待部署完成即可访问网站,实现CI/CD自动化部署