【小白向】基於Docker使用Gogs,Drone以及drone-runner-docker的自動化部署

Gogs是基於Go語言編寫的可以替代gitlab的代碼託管平台,它沒有gitlab那麼龐大且不需要佔用大量資源,對小型服務器相對於比較友好,我們甚至可以使用樹莓派搭建。

服務器配置:

* 操作系統:CentOS 7.6 64bit
* 服務器規格:CPU【1核】 內存【2GB】
* 磁盤:系統盤60GB

安裝過程(一):docker環境準備

1. 安裝docker,準備部署環境(先清除有關docker 的所有文件)

sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-selinux \
docker-engine-selinux \
docker-engine

2. 安裝所需要的依賴包

sudo yum install -y yum-utils device-mapper-persistent-data lvm2

3.添加yum的repo文件(對於國內用戶優先選擇阿里雲)

sudo yum-config-manager --add-repo //mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

4.生成緩存,提高搜索安裝軟件的速度

sudo yum makecache fast

5.安裝社區版docker

sudo yum -y install docker-ce

6.修改docker 鏡像源地址加速

cat /etc/docker/deamon.json

如果沒有就創建一個 deamon.json 在 /etc/docker 目錄下

cd /etc/docker/
touch deamon.json

內容為(可以選擇163加速或者去阿里雲自己生成一個docker加速地址):

{
“registry-mirrors”: [“//hub-mirror.c.163.com“]
}

7.重新加載docker 服務配置,讓加速地址生效並重啟(啟動)docker

sudo systemctl daemon-reload

重啟:

sudo systemctl restart docker

啟動

sudo systemctl stop docker

8.設置開機自動啟動docker(可選),可以連帶自動啟動帶自動啟動的容器

systemctl enable docker

安裝過程(二):docker容器部署(Portainer/mysql/gogs/drone CI/drone-runner-docker)

1.先創建我們固定的ip網段,可以防止服務器卡死宕機強制重啟後,導致的容器ip自動重啟後產生變化,而導致docker容器內部通過網段通信的問題

docker network create --subnet=172.172.0.0/24 --gateway 172.172.0.1 docker-mynet

2.Portainer可以幫助我們查看docker各個容器的相關信息以及事實容器啟動日誌以及對各個容器進行操作,所以優先選擇安裝。

docker run -p 9000:9000 --net docker-mynet --ip 172.172.0.3 --name portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v /soft/docker/portainer/data:/data -v /soft/docker/portainer/public:/public -d portainer/portainer

運行此命令會幫我們自動pull portainer:latest 鏡像,等待容器啟動完成
--net docker-mynet 指定網段
--ip 172.172.0.3 指定ip 服務器啟動後不會發生改變
--restart=always 隨着docker 啟動而啟動

1)使用dokcer ps 命令可以看到portainer容器已經啟動
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
31c9a09bbd4d portainer/portainer “/portainer” About a minute ago Up About a minute 0.0.0.0:9000->9000/tcp, :::9000->9000/tcp portainer
2)然而我們使用ip:9000卻發現無法訪問 ,是因為我們用-v /soft/docker/portainer/public:/public 將portainer的頁面文件夾掛載在宿主機的/soft/docker/portainer/public目錄下了,而且是個空文件夾,所以無法訪問

//files-cdn.cnblogs.com/files/blogs/680867/Portainer-CN.zip
使用上面的地址下載漢化文件,放置在/soft/docker/portainer/public 並解壓
使用docker restart portainer 後,使用ip:9000即可訪問(前提是要設置centos防火牆)

3)創建portainer用戶密碼需要6位

4)選擇連接docker(本地需要在創建容器的時候使用掛載命令-v /var/run/docker.sock:/var/run/docker.sock,點擊連接即可)

5)portainer 漢化完成主頁面,可以根據自己的需要查看相關容器信息 感謝”Mark” 網址://www.quchao.net/Portainer-CN.html

6)使用portainer 查看容器相關信息

點擊左側容器我們可以看到有一個容器,也就是我們剛剛創建的portainer容器。
我們可以發現此容器的創建時間,以及ip等相關信息。也可以對此容器進行刪除,重啟等一系列操作(避免shell 命令),點擊紅圈圖標可以查看容器日誌,綠圈圖標可以進入容器環境中(如進入容器對mysql進行配置等)。

3.mysql容器的創建配置(由於gogs持久化需要用到數據庫,我們選擇安裝myql【Gogs 要求安裝 MySQL、PostgreSQL、SQLite3、MSSQL 或 TiDB。】)

1)創建mysql容器

docker run --name mysql --restart=always -p 13306:3306 --ip 172.172.0.5 --net docker-mynet -v /soft/docker/database/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=password -d mysql

mysql 端口為:13306(防止服務器被攻擊)設置密碼為:password (請自行更改)

2)配置遠程訪問(root),使用shell命令

進入mysql 容器 docker exec -it mysql bash
登錄mysql mysql -u root -p
使用mysql 數據庫 use mysql;
配置權限並刷新:
ALTER USER 'root'@'%' I:DENTIFIED WITH mysql_native_password BY 'password';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%';
FLUSH PRIVILEGES;

3)遠程連接mysql 並創建gogs數據庫(gogs要求:如果您使用 MySQL,請使用 INNODB 引擎以及 utf8_general_ci 字符集

省略

4.gogs的創建配置

docker run -p 10022:22 -p 3000:3000 --name=gogs --net docker-mynet --ip 172.172.0.11 --restart=always -e TZ="Asia/Shanghai" -v /soft/docker/gogs:/data -d gogs/gogs

安裝完畢後可以訪問ip:3000 來訪問gogs容器的首次安裝頁面

1)配置持久化數據庫

2)配置訪問地址配置

3)選擇配置(如果不配置管理員也可以在安裝完畢後,第一個註冊也是管理員)

4)安裝完成後會自動進入主頁(使用方法和github類似且相較於簡單)

5)重啟gogs容器修改app.ini(需要注意的坑)

如果安裝完畢後,將容器重啟後,會發現再次訪問ip:3000會無法訪問(不一定會遇到)
進入gogs的宿主機掛載目錄/soft/docker/gogs/gogs/conf 修改app.ini,再次解決即可解決

6)在gogs中上傳代碼(自行摸索吧)

5.drone CI的創建配置

docker run -v /soft/docker/drone:/data --net docker-mynet --ip 172.172.0.12 -e DRONE_AGENTS_ENABLED=true -e DRONE_GOGS_SERVER=//ip:3000 -e DRONE_RPC_SECRET=dronerpc666 -e DRONE_SERVER_HOST=ip:3080 -e DRONE_SERVER_PROTO=http -e DRONE_USER_CREATE=username:demon471,admin:true -e TZ="Asia/Shanghai" -p 3080:80 --restart=always --detach=true --name=drone drone/drone

-e DRONE_GOGS_SERVER=//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的管理員一致(也可以自作更改)

1)訪問ip:3080即可訪問登錄drone,就可以看到項目,如果沒有可以點擊sync同步gogs中的代碼即可。

2)點擊同步到的項目,可以設置drone中的項目屬性


3)返回gogs中的項目設置可以看到webhook中有一個剛剛我們創建的屬於drone的webhook

5.drone-runner-docker的創建配置

docker run -d -v /var/run/docker.sock:/var/run/docker.sock --net docker-mynet --ip 172.172.0.13 -e DRONE_RPC_PROTO=http -e DRONE_RPC_HOST=ip:3080 -e DRONE_RPC_SECRET=dronerpc666 -e DRONE_RUNNER_CAPACITY=2 -e DRONE_RUNNER_NAME=runner-docker -e TZ="Asia/Shanghai" -p 3000:3000 --restart always --name runner-docker drone/drone-runner-docker

-e DRONE_RPC_HOST=ip:3080 drone的訪問地址
-e DRONE_RPC_PROTO=http 有證書可以是https
-e DRONE_RPC_SECRET=dronerpc666 需要和drone的配置一樣

部署過程(一)主要文件以及目錄結構:

1.項目結構以及主要文件

2. 【.drone.yml】文件內容

查看地址://blog-static.cnblogs.com/files/blogs/680867/.drone_yml.css
其中 ssh_password需要在drone中的項目配置

3. 【Dockerfile】文件內容

查看地址://blog-static.cnblogs.com/files/blogs/680867/Dockerfile.css

4. 【run.sh】文件內容

查看地址://files-cdn.cnblogs.com/files/blogs/680867/run.sh

部署過程(二)進行測試打包:

待所有的文件都可以提交至gogs中就可以測試打包

打包成功內容

我們可以針對於項目webhook方式來進行打包與否,如有提交就打包等等。

後言:如果發現maven打包很慢可以通過修改settings.xml來提速位置/mydata/maven/cache,再次重新打包就會生效

感謝閱讀,如果有什麼問題可以及時聯繫我