現階段,Docker容器技術已經相當成熟,就算是中小型公司也可以基於 Gitlab、Aliyun映象服務、Docker Swarm 輕鬆搭建自己的 Docker叢集服務。
安裝 Docker
curl -sSL https://get.daocloud.io/docker | sh
搭建自己的Gitlab
安裝Gitlab
首先我們修改一下埠號,把 22
埠讓出來給 gitlab
使用。
$ vim /etc/ssh/sshd_config
# 預設 Port 改為 2222
Port 2222
# 重啟服務
$ systemctl restart sshd.service
重新登入機器
ssh -p 2222 root@host
安裝 Gitlab
sudo docker run -d --hostname gitlab.xxx.cn \
--publish 443:443 --publish 80:80 --publish 22:22 \
--name gitlab --restart always --volume /srv/gitlab/config:/etc/gitlab \
--volume /srv/gitlab/logs:/var/log/gitlab \
--volume /srv/gitlab/data:/var/opt/gitlab \
gitlab/gitlab-ce:latest
首次登入 Gitlab
會重置密碼,使用者名稱是 root
。
安裝gitlab-runner
以 CentOS
為例
curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.rpm.sh | sudo bash
yum install gitlab-runner
當然,可以用 curl https://setup.ius.io | sh
命令,更新為最新的 git
源,然後直接使用 yum 安裝 git 和 gitlab-runner。
$ curl https://setup.ius.io | sh
$ yum -y install git2u
$ git version
$ yum install gitlab-runner
註冊 gitlab-runner
$ gitlab-runner register --clone-url http://內網ip/
Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com/):
http://gitlab.xxx.cc/
Please enter the gitlab-ci token for this runner:
xxxxx
Please enter the gitlab-ci description for this runner:
xxx
Please enter the gitlab-ci tags for this runner (comma separated):
builder
Please enter the executor: docker-ssh, shell, docker+machine, docker-ssh+machine, docker, parallels, ssh, virtualbox, kubernetes:
shell
初始化 Swarm 叢集
登入另外一臺機器,初始化叢集
$ docker swarm init
建立自定義 Overlay 網路
docker network create \
--driver overlay \
--subnet 10.0.0.0/24 \
--opt encrypted \
default-network
加入叢集
# 顯示manager節點的TOKEN
$ docker swarm join-token manager
# 加入manager節點到叢集
$ docker swarm join --token <token> ip:2377
# 顯示worker節點的TOKEN
$ docker swarm join-token worker
# 加入worker節點到叢集
$ docker swarm join --token <token> ip:2377
然後配置釋出用的 gitlab-runner
其他與 builder 一致,但是 tag 卻不能一樣。線上環境可以設定為 tags,測試環境設定為 test
安裝 Portainer
docker service create \
--name portainer \
--publish 9000:9000 \
--replicas=1 \
--constraint 'node.role == manager' \
--mount type=volume,src=portainer_data,dst=/data \
--mount type=bind,src=//var/run/docker.sock,dst=/var/run/docker.sock \
portainer/portainer
建立一個Demo專案
登入 Gitlab 建立一個 Demo 專案。並匯入我們的專案 hyperf-skeleton
配置映象倉庫
我們直接使用阿里雲的即可
首先建立一個名稱空間 test_namespace,然後建立一個映象倉庫 demo,並使用本地倉庫。
然後到我們直接打包用的伺服器中,登入阿里雲 Docker Registry
usermod -aG docker gitlab-runner
su gitlab-runner
docker login --username=your_name registry.cn-shanghai.aliyuncs.com
修改我們專案裡的 .gitlab-ci.yml
variables:
PROJECT_NAME: demo
REGISTRY_URL: registry.cn-shanghai.aliyuncs.com/test_namespace
還有 deploy.test.yml,需要仔細對比以下檔案哦。
version: '3.7'
services:
demo:
image: $REGISTRY_URL/$PROJECT_NAME:test
environment:
- "APP_PROJECT=demo"
- "APP_ENV=test"
ports:
- 9501:9501
deploy:
replicas: 1
restart_policy:
condition: on-failure
delay: 5s
max_attempts: 5
update_config:
parallelism: 2
delay: 5s
order: start-first
networks:
- default-network
configs:
- source: demo_v1.0
target: /opt/www/.env
configs:
demo_v1.0:
external: true
networks:
default-network:
external: true
然後在我們的 portainer 中,建立對應的 Config demo_v1.0。當然,以下引數需要根據實際情況調整,因為我們的Demo中,沒有任何IO操作,所以填預設的即可。
APP_NAME=demo
DB_DRIVER=mysql
DB_HOST=localhost
DB_PORT=3306
DB_DATABASE=hyperf
DB_USERNAME=root
DB_PASSWORD=
DB_CHARSET=utf8mb4
DB_COLLATION=utf8mb4_unicode_ci
DB_PREFIX=
REDIS_HOST=localhost
REDIS_AUTH=
REDIS_PORT=6379
REDIS_DB=0
因為我們配置的 gitlab-ci.yml 會檢測 test 分支和 tags,所以我們把修改的內容合併到test分支,然後推到gitlab上。
接下來我們就可以訪問叢集任意一臺機器的 9501 埠。進行測試了
curl http://127.0.0.1:9501/
意外情況
fatal: git fetch-pack: expected shallow list
這種情況是 gitlab-runner
使用的 git
版本過低,更新 git
版本即可。
$ curl https://setup.ius.io | sh
$ yum remove -y git
$ yum -y install git2u
$ git version
# 重新安裝 gitlab-runner 並重新註冊 gitlab-runner
$ yum install gitlab-runner
如果對您有什麼幫助,不妨請我喝杯咖啡吧。