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

JohnBeBee發表於2021-05-06

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 http://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": ["http://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目錄下了,而且是個空資料夾,所以無法訪問

https://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" 網址:https://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=http://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=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的管理員一致(也可以自作更改)

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】檔案內容

檢視地址:https://blog-static.cnblogs.com/files/blogs/680867/.drone_yml.css
其中 ssh_password需要在drone中的專案配置

3. 【Dockerfile】檔案內容

檢視地址:https://blog-static.cnblogs.com/files/blogs/680867/Dockerfile.css

4. 【run.sh】檔案內容

檢視地址:https://files-cdn.cnblogs.com/files/blogs/680867/run.sh

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

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

打包成功內容

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

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

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

相關文章