CentOS8にTypeScript+Express+Node.jsで作ったWebAPIをリリースしてみた

はじめに

TypeScript+Express+Node.jsでWebAPI作ってみたで作ったものをCentOS8にリリースしてみました。

CentOS8の設定

– ファイアウォールの無効化
– SELinuxの無効化
– アップデート
をやっていきます。
この辺の手順は過去の記事のGCE(Google App Engine)にデプロイを参照

プログラムの配置

– /home/user/wepapi
に置いてあるものとします。

以下のコマンドで
– /var/webapi
にコピーします。

$ sudo mkdir -p /var/webapi
$ sudo cp -r /home/user/wepapi/* /var/webapi1

Node.jsのインストール

[d]はdefaultの事です。

$ sudo dnf module list nodejs

Name                     Stream                   Profiles                                                Summary
nodejs                   10 [d]                   common [d], development, minimal, s2i                   Javascript runtime
nodejs                   12                       common, development, minimal, s2i        

今回はnode.jsの12をインストールする事にします。

$ sudo dnf module enable nodejs:12 -y
$ sudo dnf install nodejs -y

nodeがインストールされたか確認します。

$ node --version

v12.18.2

npmがインストールされた事も確認します。

$ npm --version

6.14.5

TypeScriptのインストール

$ npm install typescript -g

$ tsc -v
Version 4.0.3

nginxの設定

nginxのインストール

$ sudo dnf -y install nginx
$ sudo systemctl enable --now nginx

nginxの設定ファイル関連

/etc/nginx/nginx.conf
$ sudo vi nginx.conf

user  nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid        /var/run/nginx.pid;

events {
    worker_connections  1024;
}

http {
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile            on;
    tcp_nopush          on;
    tcp_nodelay         on;
    keepalive_timeout   65;
    types_hash_max_size 2048;

    include             /etc/nginx/mime.types;
    default_type        application/octet-stream;

    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*;
}
webapi_nginx.confの編集
$ sudo mkdir /etc/nginx/sites-available
$ sudo mkdir /etc/nginx/sites-enabled
$ cd /etc/nginx/sites-available
$ sudo vi webapi_nginx.conf
server {
    listen       80;
    server_name  localhost;
    location / {
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-Host $host;
        proxy_set_header X-Forwarded-Server $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass http://localhost:3000/;
    }
}

シンボリックリンクの設定

$ sudo ln -s /etc/nginx/sites-available/webapi_nginx.conf /etc/nginx/sites-enabled/

起動

$ cd /var/webapi
$ sudo npm start

終了

$ ps -ef
root      155950  153955  0 16:15 pts/0    00:00:00 sudo npm start
root      155951  155950  4 16:15 pts/0    00:00:00 npm
root      155962  155951  5 16:15 pts/0    00:00:00 node /var/webapi/node_modules/.bin/concurrently tsc -w nodemon ./dist/app.js
root      155969  155962 99 16:15 pts/0    00:00:10 node /usr/local/bin/tsc -w
root      155970  155962  6 16:15 pts/0    00:00:00 node /var/webapi/node_modules/.bin/nodemon ./dist/app.js
root      155988  155970  5 16:15 pts/0    00:00:00 /usr/bin/node ./dist/app.js

$ sudo kill 155950

補足(少しはまったところ)

sudoでtscを実行するとcommand not foundになる

$ sudo visudo

を実行し、

# Defaults    secure_path = /sbin:/bin:/usr/sbin:/usr/bin  // コメント
Defaults   env_keep += "PATH                               // 追加

とすればOK