さくらインターネットのレンタルサーバーにnode18(LTS)をインストールする

# さくらインターネットにnode18をインストールする

## 経緯(TLDR)
- API(php)とフロント(React.js)のシステムをさくらのサーバーにデプロイする要件があった。
- composer installはサーバーで実行する。
- 一方でreactのビルドはnodejsが必要なので、手元で実行しかできない。
- サーバーでビルドできるようにすれば、1行でできるはず。
- ということでさくらインターネットのレンタルサーバーにnode18(LTS)をインストールすることにした。

\* ちなみにnode v16のLTSのサポートは2023年9月11日で終わるらしいので、v18のLTSバージョンをインストールすることにした。
\* ほんとはcicdツール(jenkinsとか)でビルドして、sftpあたりでデプロイすればいいんですがそれの開発だったり、インフラ整備がだるい。取引相手的に保守費用請求できないということで苦肉の策です。

## めんどくさい人向け
とりあえずコピペでできるようにした。
自己責任でお願いします。
いきなり本番環境では実行しないでね。
バージョン違いなどで実行できない場合もあるので。

<details>
<summary>クリックしたら展開</summary>
<div>
bashで実行してね

```bash:bash
## install python3
mkdir -p ~/work/python3
cd ~/work/python3
wget --no-check-certificate https://www.python.org/ftp/python/3.8.12/Python-3.8.12.tgz
tar zxf Python-3.8.12.tgz
cd ./Python-3.8.12
./configure --prefix=$HOME/local/python/
make && make install

## opensslをインストール
mkdir -p ~/work/openssl
cd ~/work/openssl
curl -sSf https://www.openssl.org/source/openssl-1.1.1o.tar.gz -O
tar zxf openssl-1.1.1o.tar.gz
cd openssl-1.1.1o
./config --prefix=$HOME/openssl --openssldir=$HOME/local/openssl
make && make install

## nodejsをインストール
mkdir -p ~/work/node
cd ~/work/node
export NODE_VERSION=v18.15.0
curl -sSf https://nodejs.org/dist/$NODE_VERSION/node-$NODE_VERSION.tar.gz -O
tar zxf node-$NODE_VERSION.tar.gz
cd node-$NODE_VERSION
./configure --shared-openssl --shared-openssl-includes=$HOME/openssl/include/ --shared-openssl-libpath=$HOME/openssl/lib/
export LD_LIBRARY_PATH=$HOME/openssl/lib
nohup make install DESTDIR=$HOME/local PREFIX= &
## めっちゃ時間かかるので、nohupしてます。ログアウトやネットが切れても実行し続けてくれます。
## ↓↓のコマンド(tail -f nohup.out)でログが見れます。が、見たくない人は実行しなくても良いです。
tail -f nohup.out

## パスを通す
echo "export PATH=$PATH:$HOME/local/bin
export LD_LIBRARY_PATH=$HOME/openssl/lib" >> ~/.bashrc

## 通したパスを反映
source ~/.bashrc

## yarnをインストール
npm install -g yarn
```
</div>
</details>

## 手順
1. sshしてbashに切り替える
1. python3をインストール
1. opensslをインストール
1. nodejsをインストール
1. yarnをインストール

### sshしてbashに切り替える
さくらのサーバーのデフォルトが`csh`らしいので、bashにしましょう。
cshはexportが動かんらしい。

```sh:
## さくらサーバーはbashじゃないので、bashに切り替えましょう
## ssh sakura-serverあたりをした後に以下を実行
bash
```

### python3をインストール
node16からpython3が必要になったらしい。

```bash:bash
mkdir -p ~/work/python3
cd ~/work/python3
wget --no-check-certificate https://www.python.org/ftp/python/3.8.12/Python-3.8.12.tgz
tar zxf Python-3.8.12.tgz
cd ./Python-3.8.12
./configure --prefix=$HOME/local/python/
make && make install
```

### opensslをインストール
デフォルトでインストールされているopensslのバージョンが低すぎるらしい。
新しいバージョンをインストール。
最新ではないけど、他の人がこのバージョンでいけてたので、これが良さそう。
[ここ](https://blog.pinkumohikan.com/entry/how-to-install-nodejs-to-rental-server-of-sakura)を見てくれたら解説されているらしい

```bash:bash
mkdir -p ~/work/openssl
cd ~/work/openssl
curl -sSf https://www.openssl.org/source/openssl-1.1.1o.tar.gz -O
tar zxf openssl-1.1.1o.tar.gz
cd openssl-1.1.1o
./config --prefix=$HOME/openssl --openssldir=$HOME/local/openssl
make && make install
```

### nodejsをインストール
nodejsをインストール
ビルドにめっちゃ時間かかる。
ビルド中にネットが切れたり、ログアウトすると止まってしまう。
そこで、nohup使って阻止する。
ログアウトやネットが切れても実行し続けてくれます。
nohup中のログは`nohup.out`に出力される。`tail -f nohup.out`で見れます。`ctrl+c`で出れます。

```bash:bash
mkdir -p ~/work/node
cd ~/work/node
export NODE_VERSION=v18.15.0
curl -sSf https://nodejs.org/dist/$NODE_VERSION/node-$NODE_VERSION.tar.gz -O
tar zxf node-$NODE_VERSION.tar.gz
cd node-$NODE_VERSION
./configure --shared-openssl --shared-openssl-includes=$HOME/openssl/include/ --shared-openssl-libpath=$HOME/openssl/lib/
export LD_LIBRARY_PATH=$HOME/openssl/lib
nohup make install DESTDIR=$HOME/local PREFIX= &
## めっちゃ時間かかるので、nohupしてます。ログアウトやネットが切れても実行し続けてくれます。
## ↓↓のコマンド(tail -f nohup.out)でログが見れます。が、見たくない人は実行しなくても良いです。
tail -f nohup.out
```

### pathを通す
```
echo "export PATH=$PATH:$HOME/local/bin
export LD_LIBRARY_PATH=$HOME/openssl/lib" >> ~/.bashrc
source ~/.bashrc
```

### yarnをインストール
```
npm install -g yarn
```

## インストールできたか確認
下記コマンドで確認できます。

```
python --version
openssl version
node -v
npm -v
yarn -v
```

## 参考
- [さくらのレンタルサーバ上で Node.js (npm) を使えるようにする](https://blog.pinkumohikan.com/entry/how-to-install-nodejs-to-rental-server-of-sakura)
- [さくらのレンタルサーバーにPython3とNumpyをインストールする](http://nabenavi.net/numpy_and_python3_to_sakura/)