74
75

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Docker で 自動バックアップ付きの gitlabサイト を構築

Posted at

gitlab 用の Dockerfile と関連スクリプトを公開しました。

一つのDockerコンテナの中で、アプリケーション本体だけでなく、assets配信用のnginx、gitlab-shell用のsshサーバ、redis-server等、一連のプロセスが全部動きます。

MySQLサーバだけ用意すれば、このDockerfileだけで、gitlabを手軽にインストールできます。

また、リポジトリを自動的に他のサーバにバックアップするための、lsyncd用のDockerfileも付属しています。

下記のDockerfileを参考に作成しました。

使い方

MySQLサーバのインストール

先に、MySQLサーバをインストールしてください。

MySQLサーバはDockerで動かす必要はありませんが、下記の記事で紹介したスクリプトを使うと、DBも自動バックアップつきで運用できます。

Docker で レプリケーションつきの MySQL を立ち上げる - Qiita [キータ] http://qiita.com/essa/items/440d76f73847e6e27099

リポジトリをクローン

次に、Dockerfile等が入ったリポジトリをコピーします。

git clone https://github.com/essa/docker-gitlab.git
cd docker-gitlab

Docker imageの構築

Docker imageをビルトします。

sudo docker build -t gitlab .

この処理は、Ruby のコンパイルや、gem のインストールでかなり時間がかかります。

タグを上記コマンドから変更した場合は、以下のstart_xxx.sh の起動スクリプトもそれに合わせて変更してください。

設定ファイルの修正

次に下記のスクリプトを実行します。

./setup_config.sh

最初に実行した時は、このスクリプトは、env というファイルを以下の内容で作成します。

# password for git user of gitlab
export Password="password"

export MySQLServerIP="(IP ADDRESS OF YOUR MYSQL SERVER)"
export MySQLServerPort="3306"
export MySQLPasswordForRoot="password"

export ServerName="(YOUR SERVER NAME FOR GITLAB)"
export GitlabPort="8080"

export LsyncdTargetHost="(YOUR SLAVE HOST)"
export LsyncdUser="(YOUR ACCOUNT OF SLAVE HOST)"
export LsyncdIdentityFile=$HOME/.ssh/id_rsa

このファイルをエディタで、ご自分の環境に合わせて修正してください。

修正したら、もう一度、先のスクリプトを実行します。

./setup_config.sh

"env"が存在すると、このスクリプトは、この内容を元に、config/の下に、以降で必要な設定ファイルを作成します。作成するのは、以下のファイルです。

  • database.yml
  • gitlab.yml
  • nginx (gitlab コンテナ内の nginx 用定義ファイル)
  • nginx_front (front end 用別コンテナ内の nginx 用定義ファイル)
  • ssh_config_for_lsyncd (lsyncdで使用する、ssh/config ファイル)

これらの内容を確認して、必要があれば修正してください。

gitlab 初期設定

次に以下のコマンドで gitlab用のコンテナを起動して、gitlabの初期設定を行います。

chmod +x scripts/firstrun.sh
sudo ./start_docker_gitlab.sh

このコンテナの起動スクリプトは、script/start.sh ですが、script/firstrun.sh が実行可能な場合は、start.shの中からこれを起動し、その中で初期設定が行なわれます。

初期設定の内容は、

  • gitlab用DB、MySQLユーザの作成
  • rake gitlab:setup の実行

です。実行後に、firstrun.shの実行許可ビットを落として、二度と実行しないようにします。

何らかの理由で、初期設定をやり直す場合は、chmod +x script/firstrun.sh を行なってから、コンテナを再起動してください。

実行

初期設定完了後、そのままgitlabが起動します。二回目以降は、下記のコマンドで起動してください。

sudo ./start_docker_gitlab.sh

http://localhost:8080/ からアクセスできます。初期設定の時に、下記の管理者アカウントが作成されていますので、これでログインしてください。

admin@local.host
5iveL!fe

制限事項

メール送信の機能はまだ設定、テストしていません。ユーザ登録後のパスワード通知メールが送信されないので、管理者アカウントからパスワードを設定して使ってください。

おまけ1 (lsyncd によるリポジトリのコピー)

gitlabのデータは、MySQLのDBと、data/ ディレクトリに保存されます。この data/ ディレクトリを別のサーバにバックアップするための lsyncd をDocker 配下で起動するスクリプトを付属しています。

ビルド

(cd docker-lsyncd; sudo docker build -t lsyncd .)

実行

sudo docker-lsyncd/start_lsyncd.sh `pwd`/data

バックアップ先のサーバは、config/ssh_config_for_lsyncd で指定します。( env に設定した内容により、./setup_config.sh で作成されているはずです)

docker-lsyncd/ssh/ が、コンテナ内で lsyncd を実行するユーザの .ssh にマップされますので、必要であれば、秘密鍵等をここにコピーしてください。

おまけ2 (front end 用の nginx)

上記のgitlabコンテナは、nginxを含んでいますが、このnginxは、gitlab専用になります。

もし、同じサーバで別の virtual host を立ちあげる場合は、別のコンテナで front end 専用の nginx を起動することができます。

docker-nginx-front/sites-enabled/ に、virtual host 用の定義ファイルをコピーしてから、下記のコマンドで起動してください。

(cd docker-nginx-front; sudo docker build -t nginx .)
sudo docker-nginx-front/start_nginx.sh
74
75
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
74
75

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?