From 7a646dc495fb79728a51796143686979dd5fdc21 Mon Sep 17 00:00:00 2001 From: KusaReMKN <48670724+KusaReMKN@users.noreply.github.com> Date: Tue, 29 Nov 2022 12:55:55 +0900 Subject: [PATCH] Latest version --- Makefile | 20 ++++++ gitpush.ms | 187 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 207 insertions(+) create mode 100644 Makefile create mode 100644 gitpush.ms diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..21058a0 --- /dev/null +++ b/Makefile @@ -0,0 +1,20 @@ +TARGET= gitpush.pdf + +GROFF= groff +GROFFFLAGS= -dpaper=a4 -P-pa4 -ept -ma4 -ms -mpspic -mwww +PS2PDF= ps2pdf +PS2PDFFLAGS= -sPAPERSIZE=a4 +RM= rm -f +SHELL= /bin/sh + +all: $(TARGET) + +.SUFFIXES: +.SUFFIXES: .ms .pdf + +.ms.pdf: + $(GROFF) -Tps $(GROFFFLAGS) $< | $(PS2PDF) $(PS2PDFFLAGS) - $@ + +.PHONY: clean +clean: + $(RM) $(TARGET) diff --git a/gitpush.ms b/gitpush.ms new file mode 100644 index 0000000..192ed3e --- /dev/null +++ b/gitpush.ms @@ -0,0 +1,187 @@ +.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