現階段,Docker容器技術已經至關成熟,就算是中小型公司也能夠基於 Gitlab、Aliyun鏡像服務、Docker Swarm 輕鬆搭建本身的 Docker集羣服務。html
curl -sSL https://get.daocloud.io/docker | sh
首先咱們修改一下端口號,把 sshd
服務的 22
端口改成 2222
,讓 gitlab
可使用 22
端口。node
$ vim /etc/ssh/sshd_config # 默認 Port 改成 2222 Port 2222 # 重啓服務 $ systemctl restart sshd.service
從新登陸機器mysql
ssh -p 2222 root@host
安裝 Gitlablinux
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
。git
官方地址github
以 CentOS
爲例sql
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。docker
$ curl https://setup.ius.io | sh $ yum -y install git2u $ git version $ yum install 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
登陸另一臺機器,初始化集羣shell
$ docker swarm init
建立自定義 Overlay 網絡vim
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
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
登陸 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/
這種狀況是 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