公司原先搭了一個代碼Review的服務器,因爲歷史緣由,裝的是一個32bit的Ubuntu系統,後來因爲須要,須要安裝gitlab,因爲gitlab須要64位系統,因此臨時湊合了個vagrant,本質就是一個純粹的虛擬機,感受不爽,這兩天終於抽出時間來從新整理了一下。基於Ubuntu 18.04 x64版本和Docker來部署,減小後面換機器換系統可能致使的重複安裝工做。php
Docker安裝仍是比較簡單的。html
$ sudo apt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties-common $ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - $ sudo apt-key fingerprint 0EBFCD88 # should have something output, key 9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88 $ sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" $ sudo apt-get update $ sudo apt-get install docker-ce docker-ce-cli containerd.io $ sudo usermod -aG docker $USER # 執行完從新登陸,後面就能夠不用sudo執行docker命令了。
gitlab轉移仍是比較方便的,gitlab自己就提供各個版本的docker鏡像,gitlab轉移必需要在同一個版本之間,下載該版本對應的docker鏡像,以daemon方式運行:python
$ docker run --detach --publish 192.168.30.102:443:443 --publish 192.168.30.102:80:80 --publish 8222:22 --restart always --volume /home/gitlab/config:/etc/gitlab --volume /home/gitlab/logs:/var/log/gitlab --volume /home/gitlab/data:/var/opt/gitlab gitlab/gitlab-ce:9.5.4-ce.0
按照Backing up and restoring GitLab指導,對於Omnibus Package方式的安裝,只要在源機器端執行:mysql
$ sudo gitlab-rake gitlab:backup:create
在/var/opt/gitlab/backups/下找到備份文件,複製到目標機器的/home/gitlab/data/backups/下。注意:這個步驟同時複製源機器的「/etc/gitlab/gitlab-secrets.json」到目標機器對應目錄「/home/gitlab/config」下linux
進入docker機器,執行恢復:git
gitlab-ctl stop unicorn
gitlab-ctl stop sidekiq
gitlab-rake gitlab:backup:restore BACKUP=ts_yyyy_mm_dd_ver gitlab-ctl status gitlab-ctl restart gitlab-rake gitlab:check SANITIZE=true
提示一切成功。若是「gitlab-secrets.json」在執行gitlab:backup:restore前沒有複製到目標機,恢復的時候可能會提示出錯。 ts_yyyy_mm_dd_ver是指gitlab生成的備份文件,文件名最後的「_gitlab_backup.tar」不須要輸入。訪問「http://192.168.30.102」,一切如舊,數據轉移成功。github
因爲這個有必定的特殊要求,比較合適的「fauria/lamp」映像,php是7.0的,不符合phabricator的要求,因此基於「fauria/lamp」的Dockerfile和「ubuntu 18.04」鏡像,本身build了一個,Dockerfile以下:sql
FROM ubuntu:18.04
MAINTAINER zhuhongbing<hongbingzhu@gmail.com>
LABEL Description="My own LAMP stack, based on Ubuntu 18.04 LTS. Based on fauria/docker-lamp." \
License="Apache License 2.0" \
Usage="docker run -d ..." \
Version="1.0"
RUN apt-get update
RUN apt-get upgrade -y
ENV DEBIAN_FRONTEND noninteractive
ENV ALLOW_OVERRIDE All
ENV DATE_TIMEZONE UTC
ENV TERM xterm
RUN apt-get install mysql-server php apache2 libapache2-mod-php -y
RUN apt-get install php-mysql php-gd php-curl php-apcu php-cli php-json php-mbstring -y
RUN apt-get install git vim curl ftp -y
RUN apt-get install python-pygments subversion -y
COPY index.php /var/www/html/
COPY run-lamp.sh /usr/sbin/
RUN a2enmod rewrite
RUN chmod +x /usr/sbin/run-lamp.sh
RUN chown -R www-data:www-data /var/www/html
VOLUME /mnt/host
EXPOSE 80
EXPOSE 443
CMD ["/usr/sbin/run-lamp.sh"]
這裏須要注意的是ENV命令,這個會影響build的過程和最終映像運行的。裏面的TERM原先是「dumb」,這個會致使vim界面異常,若是基於Ubuntu,測試設置爲xterm是比較好的。也是服務器版ubuntu的缺省設置。docker
Phabricator要求的組件在定製版docker裏面基本都就緒了,因此後面基本上在運行的容器中執行數據恢復就好了。apache
phabricator/ $ ./bin/storage dump | gzip > backup.sql.gz # 源機器 $ gunzip -c backup.sql.gz | mysql # 目標機器
同時注意恢復文件「phabricator/conf/local/local.json」。 注意:phabricator的190418版本,彷佛恢復完畢之後,須要先開一下phd,才能正常訪問,比較坑。折騰了很久。之前版本的phabricator郵件很好配置,更新版本以後,郵件始終折騰不成功了,比較坑,誰有經驗告訴我一下。配置以下:
"metamta.default-address": "phabricator@byhx-china.com",
"cluster.mailers": [
{
"key": "smtp-mailer",
"type": "smtp",
"options": {
"host": "mail.my-company.com",
"port": 25,
"user": "phabricator@my-company.com",
"password": "my-account-pwd",
"message-id": false
}
}
],
編譯服務器主要用於從代碼服務器抓取代碼版本並編譯,主要是作交叉編譯,比較坑的是「/etc/hosts」文件,這個文件運行的時候會自動從新生成,見 /etc/hosts file of a docker container gets overwritten裏面指向的discussion Allow customization of /etc/hosts, /etc/resolv.conf, etc. in containers #2267。簡而言之,就是須要在運行docker的時候增長參數「–add-host=」<name_host>:<ip_host>"」來解決。