【Nuxt.js】本番ではUnixドメインソケットを使う方法

nuxt.js 開発関連
スポンサーリンク

Unixドメインソケットを使ったほうがTCPよりもパフォーマンスがいいので、Nuxt.jsを本番モードで動かす際にUnixドメインソケットに切り替える方法をまとめました。
Unixドメインソケットについてはこの記事がわかりやすかったです。

環境変数の値によって設定を切り替える

nuxt.config.jsのserver定義を環境変数によって切り替えるサンプルです。

let isDev = !process.env.isProd;
let serverConf = isDev ? { port: 8000, host: '0.0.0.0'}: {socket: '/var/run/nuxt.sock'};

module.exports = {
  server: serverConf,
 // 省略
}

以上です。環境変数のisProd(本番)が定義されていたらsocketを有効にしてます。
ついでに開発時にはポートを8000に変えてます。

参考)docker-composeで動かす例

2019-05-20訂正。docker再起動で起動できなくなる不具合があったので修正しました。

version: "3"
services:
  hoge-hp:
    restart: always
    image: hoge-hp:latest
    container_name: hoge-hp
    environment:
      TZ: Asia/Tokyo
      isProd: true
    volumes:
      - ./nuxt/:/var/run/
      - ./run.sh:/run.sh
    command: /bin/sh -c "rm -f /var/run/nuxt.sock && /run.sh & npm run start"

ちょっと強引なのですがソケットファイルのパーミッションを変える小細工が必要です・・・

#!/bin/sh
FILE="/var/run/nuxt.sock"

while [ ! -e $FILE ]
do
  sleep 1
done

chmod 666 $FILE

nginxの設定例

upstream hoge-sock {
  server unix:/省略/nuxt.sock;
}

server {
  // 省略

  location / {
    proxy_pass http://hoge-sock;
  }
}
タイトルとURLをコピーしました