首頁 > 軟體

升級GitLab到8.2.0

2020-06-16 17:48:56

公司的gitlab一直是執行在ovm的虛擬機器裡的,版本還是6.7.5。版本有點老了,最近在研究docker,於是想把gitlab遷移到docker container裡去。發現真的有人已經做了gitlab的image了,真心讚。

程式碼託管平台 GitLab 8.2.0 正式發布下載 http://www.linuxidc.com/Linux/2015-11/125420.htm

備份原來的gitlab

$ docker exec -it gitlab sudo -u git -H bundle exec rake gitlab:backup:create RAILS_ENV=production

到gitlab的data/backups目錄,把最近的備份copy出來。

檢視當前的版本,進入gitlab,在左側的選單欄裡選help,可以看到當前版本。

我現在的版本7.9.4

pull gitlab 7.9.4 image from docker hub.

docker pull sameersbn/gitlab:7.9.4

TEST 2

test3

恢復備份:

docker run --name gitlab --rm  -p 80:80  -p 8443:443   --link mysql:mysql   --link redis:redisio   -e "DB_USER=gitlab" -e "DB_PASS=somepass"   -e "DB_NAME=gitlabhq_production"   -e "GITLAB_HOST=gitlab.china-ops.com"   -e "GITLAB_TIMEZONE=Beijing"   -e "GITLAB_GRAVATAR_ENABLED=false"  -e 'GITLAB_BACKUPS=daily' -e "NGINX_MAX_UPLOAD_SIZE=100m" -e "UNICORN_TIMEOUT=120" -e "GITLAB_SECRETS_DB_KEY_BASE=fvXhxg7tthcg4jpxpfg9MbrWJbbHTqsRj3xpLNxdrMpsWmgnMNjRdhc73qX7dsgz"  -v /opt/data/gitlab:/home/git/data   sameersbn/gitlab:7.9.4  app:rake gitlab:backup:restore BACKUP=1448510466

後面的那個數位一定要是你的備份的號。

pull gitlab 8.2.0 image from docker hub.

docker pull sameersbn/gitlab:8.2.0 docker pull mysql:5.7 docker pull sameersbn/redis:latest

mkdir -p /opt/data/gitlab/data mkdir -p /opt/data/mysql

$ docker run –name some-mysql -e MYSQLROOTPASSWORD=my-secret-pw -d mysql:tag

mysql:
  container_name: mysql
  image: mysql:5.7
  environment:
    - MYSQL_ROOT_PASSWORD=mysql
  volumes:
    - /opt/data/mysql:/var/lib/mysql
docker
CREATE DATABASE IF NOT EXISTS `gitlabhq_production` DEFAULT CHARACTER SET `utf8` COLLATE `utf8_unicode_ci`;
GRANT SELECT, LOCK TABLES, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER 
ON `gitlabhq_production`.* TO 'gitlab'@'172.17.%.%' IDENTIFIED BY 'dbpassword';
FLUSH PRIVILEGES;

pwgen -Bsv1 64

fvXhxg7tthcg4jpxpfg9MbrWJbbHTqsRj3xpLNxdrMpsWmgnMNjRdhc73qX7dsgz

gitlab:
  image: sameersbn/gitlab:8.2.0
  container_name: gitlab
  ports:
    - "80:80"
    - "8443:443"
  environment:
    - DB_USER=gitlab
    - "DB_PASS=1q2w3e4r"
    - DB_NAME=gitlabhq_production
    - GITLAB_TIMEZONE=Beijing
    - GITLAB_GRAVATAR_ENABLED=false
    - GITLAB_BACKUPS=daily
    - "NGINX_MAX_UPLOAD_SIZE=100m"
    - "UNICORN_TIMEOUT=120"
    - GITLAB_SECRETS_DB_KEY_BASE=fvXhxg7tthcg4jpxpfg9MbrWJbbHTqsRj3xpLNxdrMpsWmgnMNjRdhc73qX7dsgz
  volumes:
    - /opt/data/gitlab:/home/git/data
  links:
    - mysql:mysql
    - redis:redisio
mysql:
  container_name: mysql
  image: mysql:5.7
  environment:
    - MYSQL_ROOT_PASSWORD=mysql
  volumes:
    - /opt/data/mysql:/var/lib/mysql

redis:
  container_name: redis
  image: sameersbn/redis:latest

1 規劃

規劃:
一個容器執行gitlab
一個容器執行MySQL,然後 link到gitlab上。
一個容器執行Redis,然後 link到gitlab上。

2 安裝gitlab

我們先執行MySQL,

$ sudo docker pull sameersbn/mysql:latest

在host主機上建立mysql的資料目錄。

$ sudo mkdir -p /opt/mysql/data

啟動MySQL容器。

$ sudo docker run --name mysql -d 
    -v /opt/mysql/data:/var/lib/mysql 
    sameersbn/mysql:latest

連線到MySQL上,修改授權資訊

$ sudo docker exec -it mysql bash

建立資料庫並授權。

CREATE DATABASE IF NOT EXISTS `gitlabhq_production` DEFAULT CHARACTER SET `utf8` COLLATE `utf8_unicode_ci`;
GRANT SELECT, LOCK TABLES, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER 
ON `gitlabhq_production`.* TO 'gitlab'@'172.17.%.%' IDENTIFIED BY 'dbpassword';
FLUSH PRIVILEGES;

3 設定redis

Pull image

$ sudo docker pull sameersbn/redis:latest

run redis
sh $ sudo docker run --name=redis -d sameersbn/redis:latest

4 Gitlab

Pull 先把老版的imagepull回來

$ sudo docker pull sameersbn/gitlab:6.7.5

建立資料目錄

$ sudo mkdir -p /opt/gitlab/data

這個目錄會映像到視窗的/home/git/data目錄上,所以這裡儲存了所有的資料,請一定不要刪除這裡的內容。

執行gitlab容器,進行設定,容器會進行資料庫的migration等操作。

$ sudo docker run --name gitlab -i -t --rm --link mysql:mysql 
  -e "DB_USER=gitlab" -e "DB_PASS=dbpassword" 
  -e "DB_NAME=gitlabhq_production" 
  -v /opt/gitlab/data:/home/git/data 
  sameersbn/gitlab:6.7.5 app:rake gitlab:setup

執行gitlab容器

$ sudo docker run --name gitlab -d -P --link mysql:mysql 
  -e "DB_USER=gitlab" -e "DB_PASS=dbpassword" 
  -e "DB_NAME=gitlabhq_production" 
  -v /opt/gitlab/data:/home/git/data 
  sameersbn/gitlab:6.7.5
# 從原來gitlab裡匯出備份
$ cd /home/git/gitlab
$ sudo -u git -H bundle exec rake gitlab:backup:create RAILS_ENV=production

匯出的檔案放在/home/git/gitlab/tmp/backups這個目錄下。

把這個檔案 scp到 docker gitlab那台機器的/opt/gitlab/data/backups

登入到gitlab的container

$ sudo docker exec -it gitlab bash

在容器裡執行下面的命令

$ cd /home/git/gitlab
$ sudo -u git -H  bundle exec rake gitlab:backup:restore RAILS_ENV=production
$ exit

這個樣資料就全部到新的gitlab上了。 你會發現跟原來的一樣。

下面我們來升級gitlab到新版。

$ sudo docker stop gitlab
$ sudo docker rm gitlab

$ sudo docker run --name gitlab -d -P --link mysql:mysql 
  --link redis:redisio 
  -e "DB_USER=gitlab" -e "DB_PASS=dbpassword" 
  -e "DB_NAME=gitlabhq_production" 
  -v /opt/gitlab/data:/home/git/data 
  sameersbn/gitlab:latest

設定好以後,把它儲存成一個映象。

$ sudo docker commit -m "update gitlab.yml ,change host,set timezone to BeiJing" -a "china-ops gitlab v7.9.4" 6af1d0739ae0 china-ops/gitlab:7.9.4

我原來的想法是修改config/gitlab.yml,把host,timezone等修改好,然後存成一個新的image。 後來發現修改config/gitlab.yml是不生效的,重新啟動container後就會恢復預設值。後來看了文件才知道, hostname等是通過環境變數來控制的。

用這個映象來啟動一個container

$ sudo docker run --name gitlab -d  
  -p 80:80  -p 8443:443 
  --link mysql:mysql 
  --link redis:redisio 
  -e "DB_USER=gitlab" -e "DB_PASS=dbpassword" 
  -e "DB_NAME=gitlabhq_production" 
  -e "GITLAB_HOST=gitlab.china-ops.com" 
  -e "GITLAB_TIMEZONE=Beijing" 
  -e 'GITLAB_BACKUPS=daily' 
  -e "GITLAB_GRAVATAR_ENABLED=false" 
  -v /opt/gitlab/data:/home/git/data 
  china-ops/gitlab:7.9.4

引數-e 'GITLAB_BACKUPS=daily' 是備份策略,我們設定為每天

預設的密碼:
username: admin@local.host
password: 5iveL!fe

CentOS原始碼安裝GitLab漢化版  http://www.linuxidc.com/Linux/2015-10/124648.htm

Ubuntu 12.04 上安裝 GitLab http://www.linuxidc.com/Linux/2012-12/75249.htm

GitLab 5.3 升級注意事項 http://www.linuxidc.com/Linux/2013-06/86473.htm

在 CentOS 上部署 GitLab (自託管的Git專案倉庫) http://www.linuxidc.com/Linux/2013-06/85754.htm

在RHEL6/CentOS6/ScientificLinux6上安裝GitLab 6.0.2 http://www.linuxidc.com/Linux/2014-03/97831.htm

CentOS 6.5安裝GitLab教學及相關問題解決 http://www.linuxidc.com/Linux/2014-05/101526.htm


IT145.com E-mail:sddin#qq.com