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;
}
}