Giteaは、Goで記述されたコードホスティングWebアプリケーションです。その名前が示すように、GitlabやGithubと同様に、人気のあるソース管理プログラムGitで使用するように設計されています。このガイドでは、NginxHTTPSリバースプロキシを使用したCentOS8へのGiteaのインストールについて説明します。
- root権限を持つCentOS8システム。
- サーバーを指す登録済みドメイン名。
- $EDITOR環境変数はお好みのテキストエディタに設定する必要があります。
- 電子メール通知用のSMTPサーバーへのアクセス(オプション)。
(サブ)ドメインがAレコードでサーバーのIPv4アドレスを指していることを確認してください。必要に応じて、サーバーのIPv6アドレスを指すAAAAレコードを作成します。
注: このガイドは、SELinuxが無効または許可に設定されていることを前提としています。
ステップ1:システムの準備
利用可能なアップデートをインストールして再起動することから始めます:
dnf update -y reboot
このセットアップには、いくつかのソフトウェアコンポーネントが必要です。
- Git、Giteaの依存関係。
- Giteaにはデータベースが必要なためのPostgreSQL。
- リバースプロキシとして使用されるNginx。
- Sudo、postgresシステムユーザーとしてコマンドを実行します。
- Wget
- Certbot、Let'sEncryptSSL証明書を取得するためのユーティリティ。 Certbotは、CentOSソフトウェアリポジトリでは利用できないため、個別にインストールされます。
次のようにインストールします:
dnf install -y git postgresql postgresql-server nginx sudo wget
Certbot-autoは、certbotのインストールを管理するスクリプトです。ダウンロード:
wget https://dl.eff.org/certbot-auto -O /usr/local/bin/certbot-auto
正しい権限が設定されていることを確認してください:
chmod 0755 /usr/local/bin/certbot-auto
以下を実行してcertbotをインストールします。パッケージマネージャーから、依存関係のインストールを確認するように求められます。「y」と答えてください。
certbot-auto --install-only
次に、Giteaを実行するユーザーを作成します:
useradd --system --shell /bin/bash --create-home --home-dir /home/gitea gitea
次に、Giteaのディレクトリ構造を作成します:
mkdir -p /var/lib/gitea/{data,log} /etc/gitea /run/gitea
そして、所有権と権限を次のように設定します。
chown -R gitea:gitea /var/lib/gitea chown -R gitea:gitea /var/run/gitea chown -R root:gitea /etc/gitea chmod -R 750 /var/lib/gitea chmod 770 /etc/gitea
/ etc / giteaの権限は一時的なものであり、Webインストーラーの実行後に強化されます。
ポート80および443へのトラフィックを永続的に有効にします:
firewall-cmd --add-port 80/tcp --add-port 443/tcp --permanent firewall-cmd --reload
ポート3000へのアクセスは、代わりにUnixソケットを使用するようにgiteaを構成するため、初期設定に一時的にのみ必要です。
firewall-cmd --add-port 3000/tcp
ステップ2:データベースのセットアップ
Postgresを初期化する:
postgresql-setup --initdb --unit postgresql
有効になっていて実行されていることを確認してください:
systemctl enable --now postgresql.service
Postgresにログインします:
sudo -u postgres psql
次に、Giteaが使用するユーザーロールとデータベースを作成します。
postgres=# CREATE ROLE gitea LOGIN ENCRYPTED PASSWORD 'your_password'; postgres=# CREATE DATABASE gitea; postgres=# GRANT ALL PRIVILEGES ON DATABASE gitea TO gitea; postgres=# \q
Postgresクライアント認証構成ファイルを開きます:
$EDITOR /var/lib/pgsql/data/pg_hba.conf
直後に次の行を追加します #IPv4ローカル接続:
# IPv4 local connections: host gitea gitea 127.0.0.1/32 md5
ファイルを保存してPostgresを再起動します:
systemctl restart postgresql.service
ステップ3:Giteaのインストール
GiteaのダウンロードページからGiteaのlinux-amd64バイナリバージョンをダウンロードします。例:
wget https://dl.gitea.io/gitea/master/gitea-master-linux-amd64 -O /usr/local/bin/gitea
ダウンロードしたバイナリに正しい権限を設定します:
chmod 755 /usr/local/bin/gitea
次に、systemdユニットファイルを作成します:
$EDITOR /etc/systemd/system/gitea.service
そして、次のように入力します:
[Unit] Description=Gitea (Git with a cup of tea) After=syslog.target After=network.target Requires=postgresql.service [Service] Type=simple User=gitea Group=gitea WorkingDirectory=/var/lib/gitea/ RuntimeDirectory=gitea ExecStart=/usr/local/bin/gitea web -c /etc/gitea/app.ini Restart=always Environment=USER=gitea HOME=/home/gitea GITEA_WORK_DIR=/var/lib/gitea [Install] WantedBy=multi-user.target
新しいユニットがロードされていることを確認してください:
systemctl daemon-reload
次に、systemdに起動時にGiteaを起動するように指示します:
systemctl enable gitea.service
ステップ4:Giteaの設定
初期構成には、付属のWebインストーラーを使用します。まず、Giteaを起動します:
systemctl start gitea.service
次に、http:// your_domain:3000 / installに移動し、次のように必要なパラメーターを入力します。
- データベースタイプ:PostgreSQL
- ホスト:127.0.0.1:5432
- ユーザー名:gitea
- パスワード:Postgresロールの作成時に選択したパスワードを入力します。
- データベース名:gitea
- SSL:無効
- サイトタイトル:選択したタイトル。
- リポジトリルートパス:/ var / lib / gitea / data / repository
- Git LFSルートパス:/ var / lib / gitea / data / lfs
- ユーザー名として実行:gitea
- SSHサーバードメイン:your_domain
- SSHサーバーポート:22
- Gitea HTTPリッスンポスト:3000
- GiteaベースURL:https:// your_domain /
- ログパス:/ var / lib / gitea / log
メールと残りの設定を適切と思われるものとして構成し、[Giteaのインストール]をクリックします。誤ったURLにリダイレクトされます。 NginxまたはHTTPSをまだ構成していないため、これは正常です。パフォーマンス上の理由から、デフォルトのTCPポートではなくUNIXソケットでリッスンするようにGiteaを構成します。
続行する前にGiteaを停止してください:
systemctl stop gitea.service
以下に示すように、/ etc/giteaの権限を強化します。これにより、giteaグループに属していない人が、データベースのクレデンシャルなどの機密情報を含むapp.iniを読み取ることができなくなります。
chmod 750 /etc/gitea chown root:gitea /etc/gitea/app.ini chmod 640 /etc/gitea/app.ini
構成ファイルを開きます:
$EDITOR /etc/gitea/app.ini
サーバーセクションから次の行を削除します。
HTTP_PORT = 3000
そして、サーバーセクションに次の行を追加します。
HTTP_ADDR = /run/gitea/gitea.sock PROTOCOL = unix UNIX_SOCKET_PERMISSION = 666
ステップ5:リバースプロキシの設定
Nginxが実行されている場合は停止し、certbotがポート80でリッスンできるようにします:
systemctl stop nginx.service
次のコマンドを使用して、ドメインの証明書を取得します。
certbot-auto certonly --standalone --agree-tos -m [email protected] -d your_domain
Let's Encryptは、証明書を発行する前にドメインの所有権を確認します。証明書、チェーン、秘密鍵は/ etc /letsencrypt / live /your_domain/に保存されます。
これで、Nginxを構成できます。新しい構成ファイルを作成します:
$EDITOR /etc/nginx/conf.d/gitea.conf
そして、次のサーバーブロックを入力します。
server { listen 80; listen [::]:80; server_name your_domain; return 301 https://$server_name$request_uri; access_log /var/log/nginx/gitea-proxy_access.log; error_log /var/log/nginx/gitea-proxy_error.log; } server { listen 443 ssl; listen [::]:443 ssl; server_name your_domain; ssl on; ssl_certificate /etc/letsencrypt/live/your_domain/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/your_domain/privkey.pem; location / { proxy_pass http://unix:/var/run/gitea/gitea.sock; } access_log /var/log/nginx/gitea-proxy_access.log; error_log /var/log/nginx/gitea-proxy_error.log; }
最初のサーバーブロックは、すべてのHTTPリクエストをHTTPSにリダイレクトするためだけに機能します。 2番目のブロックはHTTPS接続をリッスンし、Giteaがリッスンするように構成したUnixソケットにプロキシします。
上記の構成を保存したら、構文エラーがないか確認し、必要に応じて構成を編集します。
nginx -t
最後に、NginxとGiteaを起動します:
systemctl start nginx.service gitea.service
これで、Giteaインスタンスが正常に実行されているはずです。 https:// your_domain
でアクセスしますデフォルトでは、Giteaは重大度レベルInfo以上のメッセージをログに記録します。ほとんどの場合、これを警告またはエラーに変更することをお勧めします。これを行うには、/ etc / gitea / app.iniを開き、[log]セクションのLEVELパラメーターをtrace、debug、info、warn、error、critical、fatal、noneのいずれかに変更します。たとえば、重大度が警告以上のメッセージをログに記録するには、次を使用します。
[log] MODE = file LEVEL = warn ROOT_PATH = /var/lib/gitea/log
変更を有効にするためにGiteaを再起動します:
systemctl restart gitea.service
代わりに、Giteaは独自のSSHサーバーを使用できます。有効にするには、[サーバー]構成セクションに次の行を追加します。
START_SSH_SERVER = true
また、SSHポートを1024を超える任意の数に変更します。例:
SSH_PORT = 2222
次に、Giteaを再起動して変更を適用し、選択したポートへのトラフィックを有効にします。
firewall-cmd --add-port 2222/tcp --permanent firewall-cmd --reload