読もう
https://github.com/sindresorhus/guides/blob/master/npm-global-without-sudo.md
http://pm2.keymetrics.io/docs/usage/quick-start/
https://qiita.com/poruruba/items/10df0d94e9127797498f
https://qiita.com/kenta8813/items/748d09c92c994dc74267
https://qiita.com/you21979@github/items/588bddb59378ce7303a2 (参考: pm2使わない場合)
http://pm2.keymetrics.io/docs/usage/startup/#generating-a-startup-script
やりたいこと
サーバーが再起動しても大丈夫なnodejsアプリ環境を立てる。pm2は専用の一般ユーザーで動かしたい。
のやりかたを毎回忘れるのでメモしたい。
かんきょう
Arch Linux on Raspberry Pi(初代)
てじゅん
# aptやpacman、rpmなりでnodejs関連パッケージをインストールしておく
sudo pacman -S npm git
# pm2はsshからリモートサーバーへnon interactive shellでつなぐので、/usr/bin以外にPATHを通しづらい。
# なのでpm2だけは先にglobal installしておく。
sudo npm i -g pm2
# サービス用ユーザーnodeを作成(sudo禁止)
$ sudo useradd -m node
# nodeユーザーにもssh公開鍵を登録しておく。(pm2 deploy用)
# sudo mkdir /home/node/.ssh
# sudo vim /home/node/.ssh/authorized_keys
# sudo chown node:node /home/node/.ssh/authorized_keys
# sudo chmod 600 /home/node/.ssh/authorized_keys
# nodeでログイン
$ sudo su - node
# npm -gを一般ユーザーでできるようにする。
# https://github.com/sindresorhus/guides/blob/master/npm-global-without-sudo.md
$ mkdir ~/.npm-packages
$ echo prefix=\${HOME}/.npm-packages >> .npmrc
$ echo NPM_PACKAGES="\${HOME}/.npm-packages" >> .bashrc
$ echo PATH="\$NPM_PACKAGES/bin:$PATH" >> .bashrc
$ source ~/.bashrc
# PM2
$ pm2 startup
# ↑この結果は環境によって異なる。
# sudoできないのを察してsudoできる環境で改めて↓をやれと言ってくる。親切すぎる。
# sudo env PATH=$PATH:/usr/bin /home/node/.npm-packages/lib/node_modules/pm2/bin/pm2 startup systemd -u node --hp /home/node
# nodeユーザーからlogoutし、一般ユーザーで言われるがまま実行。
# /etc/systemd/system/pm2-node.service の [Service]セクションに
# Restart=always
# を書き足してサービス起動
$ sudo systemctl daemon-reload
$ sudo systemctl start pm2-node
イテレーション
$ git commit
$ git push
# pm2 deploy中に何度もpassphraseを聞かれるのでssh-agent使うと楽
$ ssh-add ~/.ssh/id_rsa
$ pm2 deploy dev
???
- npm -gを一般ユーザーでできるようにする、でググったら /usr/local/lib/node_modules のowner変えればいいよ!とか出てきてパワープレイすぎると思いました。