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