Closed13

作業ログ: Forgejoを自宅のミニPCに入れて遊んでみる

uta8auta8a

ここまでやった。インストールはDocker or Binaryがあり、今回は学習も兼ねてBinaryでやることにした。

  • proxmoxを入れたミニPCの上にVMを立てた(ストレージ64GB, メモリ8GB, CPU 4core, Ubuntu 22.04)
  • Forgejoのバイナリのインストール、GPG verify

Installation from binary | Forgejo – Beyond coding. We forge.
https://forgejo.org/docs/latest/admin/installation-binary/

uta8auta8a

バイナリを実行可能にする

$ sudo cp forgejo-7.0.4-linux-amd64 /usr/local/bin/forgejo
$ forgejo --version
Forgejo version 7.0.4+gitea-1.21.11 (release name 7.0.4) built with GNU Make 4.4.1, go1.22.4 : bindata, timetzdata, sqlite, sqlite_unlock_notify
$ sudo chmod 755 /usr/local/bin/forgejo

git, git-lfsのインストール

$ sudo apt install git git-lfs

forgejoは git ユーザを使って実行するらしい。なのでgitユーザを作る

sudo adduser --system --shell /bin/bash --gecos 'Git Version Control' --group --disabled-password --home /home/git  git

Installation from binary | Forgejo – Beyond coding. We forge.
https://forgejo.org/docs/latest/admin/installation-binary/

uta8auta8a

Forgejo向けディレクトリ作成

$ sudo mkdir /var/lib/forgejo
$ sudo chown git:git /var/lib/forgejo && sudo chmod 750 /var/lib/forgejo

この辺からsudoめんどいので sudo -s する。sudo su - してたら「今時は sudo -s ですよ」と言われたので改めて調べてみた。

sudo su とかしてる人はだいたいおっさん
https://zenn.dev/tmtms/articles/202105-sudo-su

ふむふむ、 sudo -ssudo -i で代替できそう

# mkdir /etc/forgejo
# chown root:git /etc/forgejo && chmod 770 /etc/forgejo
uta8auta8a

DB setup

sqliteがデフォルト。今回はpostgresqlを学習のために使ってみる。

# apt install postgresql postgresql-contrib
# vim /etc/postgresql/16/main/postgresql.conf

## 以下コメントアウトして有効化
password_encryption = scram-sha-256     # scram-sha-256 or md5

## 再起動
# service postgresql restart
uta8auta8a

CREATE DATABASE を打ったらエラーが出た。

# su -c "psql" - postgres
psql (16.3 (Ubuntu 16.3-0ubuntu0.24.04.1))
Type "help" for help.

postgres=# CREATE ROLE forgejo WITH LOGIN PASSWORD '(This is password)';
CREATE ROLE

# CREATE DATABASE forgejodb WITH OWNER forgejo TEMPLATE template0 ENCODING UTF8 LC_COLLATE 'en_US.UTF-8' LC_CTYPE 'en_US.UTF-8';
ERROR:  invalid LC_COLLATE locale name: "en_US.UTF-8"
HINT:  If the locale name is specific to ICU, use ICU_LOCALE.

どうやらロケールの問題らしい。

# locale -a
C
C.utf8
POSIX

確かに en_US.UTF-8 はない。
検索してみる

# apt-cache search language-pack | grep ja

以下を入れる
language-pack-en - translation updates for language English
language-pack-ja - translation updates for language Japanese

# apt install language-pack-ja language-pack-en

locale-genする

# locale-gen ja_JP.UTF-8
Generating locales (this might take a while)...
  ja_JP.UTF-8... done
Generation complete.
# locale-gen en_US.UTF-8
Generating locales (this might take a while)...
  en_US.UTF-8... done
Generation complete.
# locale -a
C
C.utf8
POSIX
en_AG
en_AG.utf8
en_AU.utf8
en_BW.utf8
en_CA.utf8
en_DK.utf8
en_GB.utf8
en_HK.utf8
en_IE.utf8
en_IL
en_IL.utf8
en_IN
en_IN.utf8
en_NG
en_NG.utf8
en_NZ.utf8
en_PH.utf8
en_SG.utf8
en_US.utf8
en_ZA.utf8
en_ZM
en_ZM.utf8
en_ZW.utf8
ja_JP.utf8

これでOK.

このままpostgresqlに入ってもダメで、再起動が必要。

# service postgresql restart
# su -c "psql" - postgres
psql (16.3 (Ubuntu 16.3-0ubuntu0.24.04.1))
Type "help" for help.

postgres=# CREATE DATABASE forgejodb WITH OWNER forgejo TEMPLATE template0 ENCODING UTF8 LC_COLLATE 'en_US.UTF-8' LC_CTYPE 'en_US.UTF-8';
CREATE DATABASE
uta8auta8a

接続確認まで

# vim /etc/postgresql/16/main/pg_hba.conf

# 以下を追記
local    forgejodb    forgejo                   scram-sha-256
host     forgejodb    forgejo    127.0.0.1/32   scram-sha-256  # IPv4 local connections
host     forgejodb    forgejo    ::1/128        scram-sha-256  # IPv6 local connections

USER はよく分からないがforgejoのままで。
と思ったら最初にUser作ってたわ。
接続確認して、最初に作ったUserのパスワードを入れる。

# psql -U forgejo -d forgejodb -h localhost
Password for user forgejo:
psql (16.3 (Ubuntu 16.3-0ubuntu0.24.04.1))
SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, compression: off)
Type "help" for help.

forgejodb=>
\q

いけてそう。TLSは今回は使わないのでskipする

uta8auta8a

https://forgejo.org/docs/latest/admin/installation-binary/
に戻る。

systemd化する

# wget -O /etc/systemd/system/forgejo.service https://codeberg.org/forgejo/forgejo/raw/branch/forgejo/contrib/systemd/forgejo.service

# vim /etc/systemd/system/forgejo.service

# 以下をコメントアウト
Wants=postgresql.service
After=postgresql.service
# systemctl enable forgejo.service
# systemctl start forgejo.service

ここで以下にアクセス(/etc/hosts でgit.localがVMのIPを向くように設定してる)
http://git.local:3000/

アクセスすると以下の画面

uta8auta8a

色々埋めてgo

データベース設定が無効です: pq: database "forgejo" does not exist

とでた。作業ログを眺めるとforgejodb をCREATEしてるので、forgejodbにしたらいけた

uta8auta8a

設定したらなんか落ちた。

# systemctl status forgejo.service | cat -

2024/06/22 11:58:03 cmd/web.go:353:listen() [E] Failed to start server: listen tcp 0.0.0.0:80: bind: permission denied

80番ポートがダメっぽい。

https://ja.confluence.atlassian.com/confkb/permission-denied-error-when-binding-a-port-290750651.html
この辺参考にする

# setcap cap_net_bind_service+ep /usr/local/bin/forgejo
# systemctl restart forgejo.service
# systemctl status forgejo.service | cat -

良さそう。 http://git.local にアクセスできた。

uta8auta8a

デフォルトでは管理者ユーザなので、管理者以外で使いたいからサインアップする。

forgejoでアカウント作成までできた!

uta8auta8a

Forgejo Actionsも試してみた

なぜかリモートから actions/checkout 等を持ってくるのが途中で止まってしまい動かなかったので、ローカルにactionsユーザを作りcloneしてきた。

結果全てがローカルで完結するようになり、ネットワーク処理が入らないのでキャッシュ効いている時はcheckout, setup-go使っててもpushしたら即ジョブが回り4sで終了する感じになった。

(マシンの強さもあると思う)

CIが高速という点で、雑に一人で開発する時になるべくローカルネットワークに寄せるのは面白いかもしれないと感じた。

このスクラップは2024/06/23にクローズされました