Kisah tentang Next js, Docker dan Env

Kisah tentang Next js, Docker dan Env

Jadi gw baru nemu sebuah masalah tentang env Next js di Docker. Permasalahan nya adalah compose ga mau baca env yg gw masukin..

biar gampang gw kasihin contoh aja deh..

untuk repo Nextnya kira2 standard default, dengan env misalnya kita bikin ENV1, ENV2, dan ENV3
sedangkan docker buildnya ini:
https://github.com/vercel/next.js/blob/canary/examples/with-docker/Dockerfile

untuk compose nya kira2 begini

1
2
3
4
5
6
7
8
9
10
11
12
version: "3"

services:
  next-example:
    image: next-example
    restart: always
    environment:
      - ENV1=sample_env
      - ENV2=env2
      - ENV3=env1
    ports:
      - "3000:3000"

nah, ketika kita run compose iniā€¦ env 1, 2, dan 3 ga akan kebaca. dan ketika di cek, cuma akan ada env NODE_ENV. kenapa?

setelah gw cari tau, ternyata kesalahan gw adalah kurang membaca di bagian sini:
https://nextjs.org/docs/basic-features/environment-variables

disitu gw baru tau, ternyata next mengambil ENV nya di build time, sehingga kita cuma bisa baca NODE_ENV (yg di generate saat build time di waktu pembuatan image Docker)
sedangkan ENV1-ENV3, ga akan kebaca karena ada di compose (cuma nge run image next yg udah ke build)
sedangkan untuk mengambil env saat run time, kita bisa pake ini
https://nextjs.org/docs/api-reference/next.config.js/runtime-configuration

kesimpulanya, kalo kalian mengalami kendala kayak yang gw alami.. solusinya ada 2, yaitu:
set env saat build time atau ambil config dengan publicRuntimeConfig

docker
next
react