やってみる

アウトプットすべく己を導くためのブログ。その試行錯誤すらたれ流す。

Raspbian stretch にDockerでGiteaをインストールしようとするも失敗

 MySQLに代わるDBMS

対象環境

  • Raspbierry pi 3 Model B+
  • Raspbian stretch 2018-06-27
  • Docker 18.06.1-ce, build e68fc7a
  • docker-compose 1.23.0dev, build 48a6f213

前提

前回

 2018-10-01現在、前回は存在したphreakazoid/gitea-rpiが消えている……。でもGitHubは残っている。

方法

手順

  1. ラズパイ用Giteaを探す
  2. インストール
  3. 起動(Docker)
  4. 起動(ブラウザ)

0. ラズパイ用Giteaを探す

GitHub

 ソースコードからコンパイルできるのでは? でもよくわからない。リリースのバイナリgitea-1.5.1-linux-arm-7を実行しても動かなかった。

$ . /home/pi/Downloads/gitea-1.5.1-linux-arm-7
bash: .: /home/pi/Downloads/gitea-1.5.1-linux-arm-7: バイナリファイルを実行できません

Docker Hub

 kapdap/gitea-rpiにする。arm7lとあったのでraspberry pi 3B+用と思われる。

1. インストール

docker pull kapdap/gitea-rpi
Digest: sha256:42b2f5e364362d7641db8ed286ba277fb8d0083c45152565c3efad84c0e4e44b
Status: Downloaded newer image for kapdap/gitea-rpi:latest

2. 起動(Docker)

$ docker run \
-d \
--name gitea \
--link mariadb-gitea:mysql \
-p 22:22 \
-p 3000:3000 \
-v /opt/gitea/data \
kapdap/gitea-rpi
フラグ ヘルプ 意味
-d Run container in background and print container ID バックグラウンドで起動
--name Assign a name to the container コンテナ名を設定する
--link Add link to another container 別のコンテナを参照する
-p Publish a container's port(s) to the host コンテナのポートをホストに公開する
-v Bind mount a volume ホストの任意パスをコンテナの任意パスにマウントする

docker run -d -p 22:22 -p 3000:3000 -v gitea_data:/data kapdap/gitea-rpi

 参考1, 参考2

 エラー。mariadb-giteaが起動していないとリンクできないらしい。

c395c90d08f4dcc8a4ff89ca14deffa3b08c7a4e8e691fb7f751829d0a09c65c
docker: Error response from daemon: Cannot link to a non running container: /mariadb-gitea AS /gitea/mysql.

 mariadb-giteaコンテナの状態を確認するとExitedになっている。これを起動させたい。

$ docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED              STATUS                      PORTS                                        NAMES
c395c90d08f4        kapdap/gitea-rpi    "/usr/bin/entrypoint…"   About a minute ago   Created                     0.0.0.0:22->22/tcp, 0.0.0.0:3000->3000/tcp   gitea
8a52d56985d3        jsurf/rpi-mariadb   "docker-entrypoint.s…"   13 hours ago         Exited (255) 13 hours ago   3306/tcp                                     mariadb-gitea

 再起動する。

$ docker restart mariadb-gitea
mariadb-gitea

 コンテナの状態を確認するとUpになった。OK。

$ docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                                        NAMES
c395c90d08f4        kapdap/gitea-rpi    "/usr/bin/entrypoint…"   4 minutes ago       Created             0.0.0.0:22->22/tcp, 0.0.0.0:3000->3000/tcp   gitea
8a52d56985d3        jsurf/rpi-mariadb   "docker-entrypoint.s…"   13 hours ago        Up 4 seconds        3306/tcp                                     mariadb-gitea

 再びgitea起動コマンドを打つも別のエラー。giteaというコンテナ名はすでに存在していると怒られた。

docker: Error response from daemon: Conflict. The container name "/gitea" is already in use by container "c395c90d08f4dcc8a4ff89ca14deffa3b08c7a4e8e691fb7f751829d0a09c65c". You have to remove (or rename) that container to be able to reuse that name.
See 'docker run --help'.

 再起動コマンドを実行してみると成功したっぽい。

$ docker restart gitea
gitea
$ docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                                        NAMES
c395c90d08f4        kapdap/gitea-rpi    "/usr/bin/entrypoint…"   9 minutes ago       Up About a minute   0.0.0.0:22->22/tcp, 0.0.0.0:3000->3000/tcp   gitea
8a52d56985d3        jsurf/rpi-mariadb   "docker-entrypoint.s…"   14 hours ago        Up 5 minutes        3306/tcp                                     mariadb-gitea

3. 起動(ブラウザ)

 ブラウザのURL欄にhttp://0.0.0.0:3000を入力すると以下インストール画面が表示された。

f:id:ytyaru:20181001080723p:plain

DockerでGiteaを稼動する場合は、このページに変更を加える前に、 ガイドラインをよく読んでください。

 と書いてあったのでガイドラインを読んでみた。が、今回の場合に当てはまらない。

  • imageファイルがgitea/gitea:latest。ラズパイでは動かない
  • docker-composeを使っている

 ボリュームの/gitea:/dataが気になる。:が不要だと思って外したのだが、何か特殊な意味でもあるのか?

 インストールしようとしたがエラー。

f:id:ytyaru:20181001083212p:plain

データベース設定が無効:dial tcp 127.0.0.1:3306: connect: connection refused

 事前にデータベースを作成しておかないとダメなのかな?

 設定は以下の通り。パスワードしか入力していない。あとはデフォルト。

初期設定

データベース設定

項目
データベースの種類 MYSQL
ホスト名 gitea
ユーザ gitea
パスワード (任意のパスワード)
データベース名 gitea

 MySQLではエンジンがINNODB、文字セットがutf8_general_ciである必要があります。とある。なんのこっちゃ?

アプリケーション全般設定

項目 補足
アプリケーション名 Gitea: Git with a cup of tea 組織の名前を入力してください。
リポジトリのルートパス /data/git/gitea-repositories すべてのGitリモートリポジトリはこのディレクトリに保存されます。
LFSルートパス /app/gitea/data/lfs Git LFSによってこのディレクトリにファイルが保存されます。空欄にするとLFSを無効にします。
実行ユーザ git 実行ユーザーはリポジトリルートパスへのアクセス権限、およびGiteaを実行する権限をもつ必要があります。
ドメイン localhost これはSSH用クローンURLに影響します。
SSH ポート 22 SSHサーバーを使用する場合はポート番号を入力してください。 空白にした場合は無効化されます。
HTTP ポート 3000 アプリケーションが待ち受けするポート番号。
アプリケーションの URL http://localhost:3000/ HTTP/HTTPSのクローンURL、および一部のEメール通知に影響します。
ログのパス /app/gitea/log ログファイルを書き込むディレクトリ。

MariaDBでデータベースを作成する

 前回はユーザ名: root, パスワード: $MYSQL_PORT_3306_TCP_PORTでいけた。パスワードの変数値が何なのかはわからない。

docker run -it --link mariadb-gitea:mysql --rm jsurf/rpi-mariadb sh -c 'exec mysql -h"$MYSQL_PORT_3306_TCP_ADDR" -P"$MYSQL_PORT_3306_TCP_PORT" -u root -p"$MYSQL_ENV_MYSQL_ROOT_PASSWORD"'

 もし以下のようなエラーが出たら、mariadb-giteaを起動させる。

docker: Error response from daemon: Cannot link to a non running container: /mariadb-gitea AS /nifty_aryabhata/mysql.
$ docker restart mariadb-gitea
mariadb-gitea

 docker run ...が成功すると、数秒後に以下のように表示される。

Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 3
Server version: 10.0.36-MariaDB-0+deb8u1 (Raspbian)

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> 

 こちらにあるようにデータベースとユーザを作成する。

 パスワードをgiteaにして以下のコマンドを実行する。

項目
データベース名 gitea
ユーザ名 gitea
パスワード gitea
MariaDB [(none)]> CREATE DATABASE `gitea` DEFAULT CHARACTER SET `utf8mb4` COLLATE `utf8mb4_general_ci`;
MariaDB [(none)]> CREATE USER `gitea`@'localhost' IDENTIFIED BY 'gitea';
MariaDB [(none)]> GRANT ALL PRIVILEGES ON `gitea`.* TO `gitea`@`localhost`;
MariaDB [(none)]> \q
Query OK, 1 row affected (0.56 sec)
Query OK, 0 rows affected (0.13 sec)
Query OK, 0 rows affected (0.01 sec)
Bye

 関係するコンテナをすべて再起動する。

$ docker restart mariadb-gitea gitea
mariadb-gitea
gitea
 $ docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                                        NAMES
c395c90d08f4        kapdap/gitea-rpi    "/usr/bin/entrypoint…"   5 hours ago         Up About a minute   0.0.0.0:22->22/tcp, 0.0.0.0:3000->3000/tcp   gitea
8a52d56985d3        jsurf/rpi-mariadb   "docker-entrypoint.s…"   19 hours ago        Up About a minute   3306/tcp                                     mariadb-gitea

 ブラウザlocalhost:3000にアクセス。パスワードにgiteaを入力してGitea をインストールボタン押下する。

f:id:ytyaru:20181001132048p:plain

 また同様のエラー。

データベース設定が無効:dial tcp 127.0.0.1:3306: connect: connection refused

f:id:ytyaru:20181001132135p:plain

 どうすればインストールできるのか……。

 環境ちがうけど以下が参考にならないか。

 Dockerのネットワーク問題?

 Go言語とMySQL間のネットワーク問題?

If the database was started with the docker-compose setup as documented above please note that db must be used as the database hostname.

上記のように docker-composeの設定でデータベースを起動した場合は、データベースホスト名としてdbを使用しなければならないことに注意してください。

 docker-composeの表記とdockerコマンドの対応がわからないが、たぶんdbはコンテナ名のことだろう。

 私の環境ではMariaDBを入れたコンテナの名前はmariadb-gitea。なので、mariadb-gitea:3306にしてみたがダメ。mysql:3306にしてもダメだった。

データベース設定が無効:Error 1045: Access denied for user 'gitea'@'172.17.0.3' (using password: YES)

f:id:ytyaru:20181001174222p:plainf:id:ytyaru:20181001174226p:plain f:id:ytyaru:20181001174236p:plainf:id:ytyaru:20181001174241p:plain

 Giteaの公式ではDockerでのインストールにdocker-composeを使っている。これに倣うべきなのか?