2021-05-12 14:32:11
升級GitLab到8.2.0
公司的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 redissh $ 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
相關文章