gitpush/gitpush.ms
2024-05-12 23:50:56 +09:00

188 lines
5.8 KiB
Plaintext

.nr PI 1m
.DA 2022\-09\-27
.TL
Git で push するとデプロイされる便利な諸々を用意する
.AU
KusaReMKN
.NH S 0
御託
.PP
この文書を作るにあたって用意した環境は Raspberry Pi の上に用意されています。
また、Next.js を利用した環境の代わりに Python の HTTP サーバを利用しています。
まあ問題ないでしょ。
きっと。
.NH 1
とりあえず service 化する
.PP
この作業によってサーバを止める操作がとても楽になります。
汚いところは systemd に丸投げしてしまおうという魂胆です。
.PP
次のようなファイルを作成して \fB/etc/systemd/system/\fP 配下に配置します。
ファイル名は、
例えば \fBkohga.service\fP のように \fB*.service\fP の形にします。
これを unit 定義ファイルと呼ぶようです。
.DS
.fam C
[Unit]
Description = Kohga Daemon # なにか簡単な説明
[Service]
Type = simple # コマンドそれ自体は daemonize しない
WorkingDirectory = /opt/kohga # 開始時のワーキングディレクトリ
ExecStart = npm run start # 開始時のコマンド
Restart = always # 誤爆で死んだ時は常に復活を試みる
[Install]
WantedBy = multi-user.target # たぶんこれで問題ない
.fam
.DE
.PP
Unit 定義ファイルを配置したら service として認識されていることを確認します。
.DS L
.fam C
$ \fBsystemctl list-unit-files --type=service | grep kohga\fP
kohga.service disabled enabled
.fam
.DE
.PP
そして service を起動できることを確認します。
当然ですが、service の起動には特権が必要です。
.DS L
.fam C
# \fBsystemctl start kohga.local\fP
$ \fBsystemctl status kohga.local\fP
\(bu kohga.service - Kohga Daemon
Loaded: loaded (/etc/systemd/system/kohga.service; disabled; vendor preset>
Active: active (running) since Mon 2022-09-26 14:12:27 BST; 2s ago
Main PID: 766 (python3)
Tasks: 1 (limit: 1596)
CPU: 344ms
CGroup: /system.slice/kohga.service
`-766 python3 -m http.server
Sep 26 14:12:27 raspberrypi systemd[1]: Started Kohga Daemon.
$ \fBss -ltn \(aqsport == 8000\(aq\fP # 適当なポート番号で実行する
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
LISTEN 0 5 0.0.0.0:8000 0.0.0.0:*
.fam
.DE
.PP
また、当然ですが \fCsystemctl stop kohga.service\fP で停止できますし、
同様に \fCsystemctl restart kohga.service\fP で再起動できます。
あなたが望むのならば、\fCsystemctl enable kohga.service\fP で
システムの起動時に service を自動的に起動するように設定できます。
.NH 1
ユーザを作成する
.PP
デプロイ専用のユーザ \fBkohga\fP を作成します。
このユーザを利用して git のレポジトリに push します。
.DS L
.fam C
# \fBadduser kohga\fP
Adding user `kohga' ...
Adding new group `kohga' (1001) ...
Adding new user `kohga' (1001) with group `kohga' ...
Creating home directory `/home/kohga' ...
Copying files from `/etc/skel' ...
New password:
Retype new password:
passwd: password updated successfully
Changing the user information for kohga
Enter the new value, or press ENTER for the default
Full Name []: kohga
Room Number []:
Work Phone []:
Home Phone []:
Other []:
Is the information correct? [Y/n] y
.fam
.DE
.PP
さらに、\h'-1.7n'(行儀の悪いことですが)\h'-.6n'ユーザ \fBkohga\fP にパスワードなしで
\fCsudo\fP する権限を付与します。
.DS L
.fam C
# \fBvisudo\fP
kohga ALL=NOPASSWD: ALL
.fam
.DE
.NH 1
ベアレポジトリを作る
.PP
ユーザ \fBkohga\fP に成り代わり、
リモート環境(デプロイ先)にベアレポジトリを作成します。
.DS L
.fam C
# \fBsu - kohga\fP
$ \fBwhoami; pwd\fP
kohga
/home/kohga
$ \fBmkdir \(ti/kohga.git\fP
$ \fBcd \(ti/kohga.git/.\fP
$ \fBgit --bare init --shared\fP
$ \fBls -la\fP
total 40
drwxrwsr-x 7 kohga kohga 4096 Sep 26 14:59 .
drwxr-xr-x 3 root root 4096 Sep 26 14:48 ..
drwxrwsr-x 2 kohga kohga 4096 Sep 26 14:59 branches
-rw-rw-r-- 1 kohga kohga 126 Sep 26 14:59 config
-rw-rw-r-- 1 kohga kohga 73 Sep 26 14:59 description
-rw-rw-r-- 1 kohga kohga 23 Sep 26 14:59 HEAD
drwxrwsr-x 2 kohga kohga 4096 Sep 26 14:59 hooks
drwxrwsr-x 2 kohga kohga 4096 Sep 26 14:59 info
drwxrwsr-x 4 kohga kohga 4096 Sep 26 14:59 objects
drwxrwsr-x 4 kohga kohga 4096 Sep 26 14:59 refs
.fam
.DE
.NH 1
公開用のディレクトリを整備する
.PP
公開用のディレクトリを準備します。
上の unit 定義ファイルで \fB/opt/kohga\fP を指定したのでそこを利用します。
.DS L
.fam C
# \fBcd /opt/.\fP
# \fBgit clone \(tikohga/kohga.git\fP
Cloning into \(aqkohga\(aq...
warning: You appear to have cloned an empty repository.
done.
.fam
.DE
.NH 1
ベアリポジトリの hook 処理を書く
.PP
ベアレポジトリが push を受け取ったときに発火する hook を記述します。
.DS L
.fam C
# \fBsu - kohga\fP
$ \fBed \(ti/kohga.git/hooks/post-receive\fP
/home/kohga/kohga.git/hooks/post-receive: No such file or directory
\fBa
#! /bin/sh
cd /opt/kohga/.
sudo systemctl stop kohga.service
sudo git pull
sudo npm install -y
sudo systemctl start kohga.service
\&.
w\fP
120
\fBq\fP
$ \fBchmod +x \(ti/kohga.git/hooks/post-receive\fP
.fam
.DE
.NH 1
完成
.PP
これで動くと思いますよ、たぶん。
.SH 1
参考文献
.IP \(bu 3n
https://qiita.com/DQNEO/items/0b5d0bc5d3cf407cb7ff
.IP \(bu
https://qiita.com/tabimoba/items/e0230eb9d1f943b8708f
.IP \(bu
https://enakai00.hatenablog.com/entry/20130917/1379374797
.IP \(bu
https://zenn.dev/kusaremkn/articles/f5725fd203ecf9