iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 8
0

2019-05-16更新
拍細拍細,標題編得有點亂,文章順序請以day0x的編號為主喔
因為GitLab實在太長了,會分2天po
上集:基本使用 Sameersbn大神的GitLab Image
下集:其他設定,例如:SSL加密、備份、Issue Trackers…

本篇主要參考:

一樣接著之前的ubuntu的vm來玩即可,預設要裝docker-compose、要有pirvate registry

這邊就用艦長大大力推的sameersbn大神做的image,因為…

  • 專案一直都很新
  • 有跟上gitlab的版本
  • 文件詳細
  • 而且星星粉多
$ docker pull sameersbn/gitlab:latest
# 這個yml檔有150行,蠻多環境變數可設定的
# 會先跑redis(一種in-memory的key-value database,類似快取的角色)、postgresql(兩大開源RDB)
$ wget https://raw.githubusercontent.com/sameersbn/docker-gitlab/master/docker-compose.yml
$ apt-get install pwgen
$ pwgen -Bsv1 64 # 產生密碼 給 GITLAB_SECRETS_DB_KEY_BASE
# 填完下面3個密碼,如果你只是想測試,其他不用設就能建成功了
# GITLAB_SECRETS_OTP_KEY_BASE # 用來加密 2FA secrets in the database
# GITLAB_SECRETS_DB_KEY_BASE # 用來作加密CI secret variables
# GITLAB_SECRETS_SECRET_KEY_BASE # 用來做password reset links

$ docker-compose up # GitLab跑起來~

docker-compose超方便的,
簡單的說就是設定好docker-compose.yml,再docker-compose up服務就真的起來了!!

gitlab的使用:
再到瀏覽器上gitlab,http://localhost:10080
重設密碼後,管理者帳號是 root
可以再好好看 docker-compose.yml 的環境變數

因為gitlab 8.0後就整合gitlab ci了
再來就是上網爬文,看你的開發環境的gitlab ci的yml檔怎麼寫啦~
等我試成功再來分享(dotnet core + angular)
等試成功再來補前端測試、後端測試

以下是充篇幅的

回過頭學docker run

實際用docker-compose.yml就好了,這裡只是學一下docker run
https://github.com/sameersbn/docker-gitlab
下載 docker-compose.yml
看yaml檔可發現,會起3個service:
redis、postgresql、gitlab

  • 補充:用docker run手動執行,學一下大神的「手路」

  • postgresql: gitlab 要用的 database(gitlab也能用mysql)

$ docker run --name gitlab-postgresql -d \
    --env 'DB_NAME=gitlabhq_production' \
    --env 'DB_USER=gitlab' --env 'DB_PASS=password' \
    --env 'DB_EXTENSION=pg_trgm' \
    --volume /srv/docker/gitlab/postgresql:/var/lib/postgresql \
    sameersbn/postgresql:10
  • redis # 在 memory 中放 key-value 的 database,有快取的角色
$ docker run --name gitlab-redis -d \
    --volume /srv/docker/gitlab/redis:/var/lib/redis \
    sameersbn/redis:4.0.9-1
  • 最後才是跑 gitlab
$ docker run --name gitlab -d \
    --link gitlab-postgresql:postgresql --link gitlab-redis:redisio \
    --publish 10022:22 --publish 10080:80 \
    --env 'GITLAB_PORT=10080' --env 'GITLAB_SSH_PORT=10022' \
    --env 'GITLAB_SECRETS_DB_KEY_BASE=long-and-random-alpha-numeric-string' \
    --env 'GITLAB_SECRETS_SECRET_KEY_BASE=long-and-random-alpha-numeric-string' \
    --env 'GITLAB_SECRETS_OTP_KEY_BASE=long-and-random-alpha-numeric-string' \
    --volume /srv/docker/gitlab/gitlab:/home/git/data \
    sameersbn/gitlab:11.2.3
# --link讓gitlab的網路可連到其他2個container
# 至於 DB_NAME、DB_USER、DB_PASS會從postgresql container取得(神奇呢)
# 好像是要給,例如: --env 'DB_NAME=gitlabhq_production'
也可以連到外部的PostgreSQL server,假設ip是192.168.1.100

先不要急著開browser…

再來是一些操作上的指令 or 環境變數

  • 1.先在PostgreSQL Server建資料庫
$ CREATE ROLE gitlab with LOGIN CREATEDB PASSWORD 'password';
$ CREATE DATABASE gitlabhq_production;
$ GRANT ALL PRIVILEGES ON DATABASE gitlabhq_production to gitlab;
  • 2.docker run 的3個--env都是連資料庫的設定
$ docker run --name gitlab -d \
    --env 'DB_ADAPTER=postgresql' --env 'DB_HOST=192.168.1.100' \
    --env 'DB_NAME=gitlabhq_production' \
    --env 'DB_USER=gitlab' --env 'DB_PASS=password' \
    --volume /srv/docker/gitlab/gitlab:/home/git/data \
    sameersbn/gitlab:11.2.3

使用MySQL

大象跟海豚是死對頭,好像是各有優缺點,有競爭是好事,這樣Oracle授權金才不會收太貴?

$ docker run --name gitlab-mysql -d \
    --env 'DB_NAME=gitlabhq_production' \
    --env 'DB_USER=gitlab' --env 'DB_PASS=password' \
    --volume /srv/docker/gitlab/mysql:/var/lib/mysql \ # 前面是host : 後面是contianer
    sameersbn/mysql:5.7.22-1 # 想必這image也是大神調效過的
  • 使用MySQL的話,gitlab環境變數也要小改一下喔
$ docker run --name gitlab -d \
    --link gitlab-mysql:mysql --link gitlab-redis:redisio \
    --publish 10022:22 --publish 10080:80 \
    --env 'GITLAB_PORT=10080' --env 'GITLAB_SSH_PORT=10022' \

    --env 'GITLAB_SECRETS_DB_KEY_BASE=long-and-random-alpha-numeric-string' \
    --env 'GITLAB_SECRETS_SECRET_KEY_BASE=long-and-random-alpha-numeric-string' \
    --env 'GITLAB_SECRETS_OTP_KEY_BASE=long-and-random-alpha-numeric-string' \

    --env 'DB_NAME=gitlabhq_production'
    --env 'DB_USER=gitlab'
    --env 'DBPASS=password'
# 寄信,此image預設用gmail
    --env 'SMTP_USER=USER@gmail.com' --env 'SMTP_PASS=PASSWORD' \
# 回信
# sub-addressing 可用於過濾,或一次性EMAIL地址,因為有特殊符號,也有可能被擋掉
    --env 'IMAP_USER=USER@gmail.com' --env 'IMAP_PASS=PASSWORD' \
    --env 'GITLAB_INCOMING_EMAIL_ADDRESS=USER+%{key}@gmail.com' \

    --volume /srv/docker/gitlab/gitlab:/home/git/data \
    sameersbn/gitlab:11.2.3

使用外部的MySQL Server

  • 1.建資料庫
CREATE USER 'gitlab'@'%.%.%.%' IDENTIFIED BY 'password';
CREATE DATABASE IF NOT EXISTS `gitlabhq_production` DEFAULT CHARACTER SET `utf8mb4` COLLATE `utf8_unicode_ci`;
GRANT ALL PRIVILEGES ON `gitlabhq_production`.* TO 'gitlab'@'%.%.%.%';
# 好像在MySQL的utf8是有bug的,而且因為技術債保留utf8,網路建議用utf8mb4
# 至於ci好像是大小寫無關的意思
  • 2.docker run
$ docker run --name gitlab -d \
    --env 'DB_ADAPTER=mysql2' --env 'DB_HOST=192.168.1.100' \
    --env 'DB_NAME=gitlabhq_production' \
    --env 'DB_USER=gitlab' --env 'DB_PASS=password' \
    --volume /srv/docker/gitlab/gitlab:/home/git/data \
    sameersbn/gitlab:11.2.3
  • gitlab使用外部Redis Server
$ docker run --name gitlab -it --rm \
    --env 'REDIS_HOST=192.168.1.100' --env 'REDIS_PORT=6379' \
    sameersbn/gitlab:11.2.3

今天結語:

呼,今天就先這到這吧~
1、這幾天使用docker images相對單純,確也最實用的

2、在前幾季的Angular讀書會,Alan Tai大大分享CI Pipeline
[S03E08] CI Pipeline for Angular
https://www.youtube.com/watch?v=YZC0HyZdV5o&list=PL9LUW6O9WZqgUMHwDsKQf3prtqVvjGZ6S&index=26
以前都看不懂,經過鐵人賽的學習後,感覺看得懂了
再回去看幾次,可能再寫一篇

3、k8s的進度…
在 master 裡下 kubeadm init 已經成功了,晚上再來試試 node join。


上一篇
day07_補充說明:SSH設定_星期一累累der,先過渡一下
下一篇
day09_docker07_GitLab02_下集
系列文
在地端建置Angular+ASP.NET Core的DevOps環境31

尚未有邦友留言

立即登入留言