188 lines
5.8 KiB
Plaintext
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
|