Help us understand the problem. What is going on with this article?

Gitea v1.10(コンテナ)をHTTPS接続で使う

More than 1 year has passed since last update.

このメモについて

  • 手軽に使えるGitサーバとして Gitea (ギッティー)のバージョン 1.10 を使ってみる
  • HTTPSの設定例がドキュメントにあるものの、実例があまりないようだったので、試してみた

環境

  • ホストOS : ubuntu 18.04
    • この上でdocker engineを起動
    • 動作確認も、このubuntu上でfirefox 70.0.1 (64bit) により実施
  • docker 19.03.5
  • docker-compose 1.24.1
  • gitea 1.10
  • mysql 5.7

前提条件

  • TLSで使う鍵ファイルと証明書は用意しておく
$ pwd
/home/hoge/work-gitea
$ ls certs/
gitea.gitea_nw.crt  gitea.gitea_nw.csr  gitea.gitea_nw.key
$

docker-compose.yml

  • Giteaはシングルバイナリなので仮想サーバにインストールして設定してもそう手間ではないのだが、せっかくdockerイメージがあるのでコンテナとして起動して使う。
  • ポート番号は、他でよく使われそうな3000を避け13000とした。コンテナ側ポートは、app.iniで3000から13000に変えている
    • ポート番号はホストとコンテナで同じ番号にしている。
    • 違う番号にした場合、ROOT_URLの設定を間違うと転送先ページがうまく表示できなかったりしやすい
  • DBは特に今回こだわりがないのでmysqlとした。
    • 特に縛り、条件がない場合 Gitea (github) のissuesを見て自分が使う範囲で不具合の少ないものがよいと思う
$ pwd
/home/hoge/work-gitea
$ cat docker-compose.yml
version: "3.5"

networks:
  gitea_nw:
    external: false
    name: gitea_nw

volumes:
  gitea_web_volume:
    driver: local
  gitea_db_volume:
    driver: local

services:
  gitea_web:
    image: gitea/gitea:1.10.0
    container_name: gitea_web
    hostname: gitea_web
    environment:
      - USER_UID=1000
      - USER_GID=1000
      - DB_TYPE=mysql
      - DB_HOST=gitea_db:3306
      - DB_NAME=gitea
      - DB_USER=gitea
      - DB_PASSWD=gitea
    restart: always
    networks:
      - gitea_nw
    volumes:
      - gitea_web_volume:/data
      - /etc/timezone:/etc/timezone:ro
      - /etc/localtime:/etc/localtime:ro
      - /home/hoge/work-gitea/certs/gitea.gitea_nw.crt:/usr/share/ca-certificates/gitea.gitea_nw.crt
      - /home/hoge/work-gitea/certs/gitea.gitea_nw.key:/etc/ssl/private/gitea.gitea_nw.key
    ports:
      - "13000:13000"
      - "10022:22"
    depends_on:
      - gitea_db

  gitea_db:
    image: mysql:5.7
    container_name: gitea_db
    hostname: gitea_db
    restart: always
    environment:
      - MYSQL_ROOT_PASSWORD=gitea
      - MYSQL_USER=gitea
      - MYSQL_PASSWORD=gitea
      - MYSQL_DATABASE=gitea
    networks:
      - gitea_nw
    volumes:
      - gitea_db_volume:/var/lib/mysql

hosts準備

ホストからgiteaにアクセスするときの名前解決の設定。今回DNSでなくhostsで。

$ cat /etc/hosts
127.0.0.1   localhost
127.0.1.1   ubu1804
192.168.137.2   ubu1804.local gitea.gitea_nw
・・略・・
$

volume, app.ini生成

上記のymlを作成後、一度、docker-compose up -dしてvolumeを作っておく。
その中にapp.iniがある。すぐdownして、app.iniの設定値を変更する。

app.iniは、コンテナ内では /data/gitea/conf/app.ini にある。

$ sudo docker-compose up -d
$ sudo docker-compose down

app.ini編集

HTTPS setup to encrypt connections to Gitea を参考に、serverセクションを以下のように変更する。

  • HTTP_PORTの番号を変更
  • PROTOCOLをhttps指定する行を追加
  • ROOT_URLはhttpsでのURLにした
  • CERT_FILE, KEY_FILEの行を追加し、それぞれコンテナ内でのファイルパスを指定。
    • docker-compose.ymlでvolumeマウントの記述箇所にてコンテナ内に配置するファイルの対応(ホスト上でのファイルパスとコンテナ上でのファイルパス)を記載

今回は使っていないが HTTPSについて Let’s Encrypt や reverse proxy (Nginx など) を使う際のヒントも HTTPS setup to encrypt connections to Gitea に記載がある。

$ sudo cp /var/lib/docker/volumes/work-gitea_gitea_web_volume/_data/gitea/conf/app.ini app.ini.bak 
$
$ sudo vi /var/lib/docker/volumes/work-gitea_gitea_web_volume/_data/gitea/conf/app.ini 
$
$ sudo diff /var/lib/docker/volumes/work-gitea_gitea_web_volume/_data/gitea/conf/app.ini app.ini.bak 
16,20c16,17
< HTTP_PORT        = 13000
< PROTOCOL         = https
< ROOT_URL         = https://gitea.gitea_nw:13000/
< CERT_FILE        = /usr/share/ca-certificates/gitea.gitea_nw.crt
< KEY_FILE         = /etc/ssl/private/gitea.gitea_nw.key
---
> HTTP_PORT        = 3000
> ROOT_URL         = 
$

なお、わざわざapp.iniをここで編集せずとも環境変数で最初から反映できるんじゃないの?
ということは当然いわれそうであるが、やってみて反映できなかったのでこのようにvolumeにあるiniを
編集するような手順としている。

ということは、composeの作業ディレクトリを変えて別ディレクトリで起動するとvolume名が別になるので
同じ状態にするには再度app.iniを直す必要がある点に注意する。(↓こんな感じで別volumeが作られる)

$ sudo docker volume ls
・・・略・・・
local               work-drone_gitea_db_volume
local               work-drone_gitea_web_volume
local               work-gitea_gitea_db_volume
local               work-gitea_gitea_web_volume
$

起動

app.iniを上記のように変更後、docker-compose upにより再びコンテナを起動する。
upした後、ログを確認し、エラーやワーニングは出力されたメッセージをヒントに修正する。
たとえば鍵や証明書のファイルパスが間違っていたりすると、ここでエラーが出ているので、直してコンテナを再起動。

docker-compose psでも一応、起動していることやポート番号を確認しておく。

$ sudo docker-compose up -d
$ sudo docker-compose logs gitea_web
$ sudo docker-compose ps

なお、giteaのコンテナはalpineベースなので、execで中身をみるときは、
sudo docker-compose exec gitea_web ash
などとashを指定する。

$ sudo docker-compose exec gitea_web ash
/ # cat /etc/os-release 
NAME="Alpine Linux"
ID=alpine
VERSION_ID=3.10.3
PRETTY_NAME="Alpine Linux v3.10"
HOME_URL="https://alpinelinux.org/"
BUG_REPORT_URL="https://bugs.alpinelinux.org/"
/ # 

初回接続、ユーザ登録

  • ホストから https://gitea.gitea_nw:13000 にアクセスし、右上のsign-inに進むとinstallation画面になる。
  • 設定内容を確認し、修正したいところは適宜なおしてから、「Install gitea」ボタン押下。
  • 押下後、ログイン画面 https://gitea.gitea_nw:13000/user/login ($ROOT_URL/user/login) に飛ばされるので、右上のほうにある「Register」からユーザ登録する。
  • アカウント登録時のパスワードは複雑さが決められている。ので、一定条件を満たさないと登録できない。種別でチェックされるようで、英大文字、英小文字、数字、記号が1文字以上ずつあれば大丈夫そう

参考

niiku-y
主にインフラ構築に関わっています。興味あることをアウトプット。 いろんなものが繋がり動いた瞬間って楽しいよね。/ 2008~ ネットワーク、ストレージの構築・運用 / 2013~ OpenStack(構築、検証その他) / 2018~ コンテナ(設計、構築、検証)/ 2020~ Azure
https://gist.github.com/niiku-y
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away