Use internal backend URL for frontend server runtime

This commit is contained in:
2026-05-11 14:54:25 +07:00
parent 9e8f4fabcb
commit 9864d3f033
7 changed files with 16 additions and 4 deletions

View File

@ -11,6 +11,7 @@ WEBHOOK_VERIFY_TOKEN=replace-with-32-plus-char-random-token
WEBHOOK_SHARED_SECRET=replace-with-32-plus-char-random-secret
META_WEBHOOK_APP_SECRET=
WEBHOOK_ALLOW_UNSIGNED=false
INTERNAL_API_URL=http://127.0.0.1:3001/api
NEXT_PUBLIC_API_URL=http://localhost:3000/backend-api
MAIL_HOST=mail.example.com
MAIL_PORT=465

View File

@ -136,6 +136,7 @@ Nilai yang wajib dipakai untuk domain ini:
NODE_ENV=production
FRONTEND_ORIGIN=https://portal.bizone.id
PUBLIC_API_URL=https://portal.bizone.id
INTERNAL_API_URL=http://127.0.0.1:3001/api
NEXT_PUBLIC_API_URL=https://portal.bizone.id/api
PORT=3001
WEBHOOK_ALLOW_UNSIGNED=false
@ -344,3 +345,10 @@ NEXT_PUBLIC_API_URL=https://portal.bizone.id/backend-api
Ini penting agar frontend server-side berbicara ke backend asli, sementara browser tetap bisa memakai route handler Next.js di `/api/*`.
Tambahkan juga:
```dotenv
INTERNAL_API_URL=http://127.0.0.1:3001/api
```
`INTERNAL_API_URL` dipakai oleh server-side frontend, middleware, dan server actions untuk langsung memanggil backend internal tanpa lewat reverse proxy publik.

View File

@ -6,6 +6,7 @@ REDIS_URL=redis://127.0.0.1:6379
PORT=3001
FRONTEND_ORIGIN=https://portal.bizone.id
PUBLIC_API_URL=https://portal.bizone.id
INTERNAL_API_URL=http://127.0.0.1:3001/api
NEXT_PUBLIC_API_URL=https://portal.bizone.id/backend-api
JWT_SECRET=UsmlPBa61fKDgTjUR+9sS9f5SKw3OF7X0CjGWoHibg2eF7gQO6sS57pc2Hj8XIv4

View File

@ -1,6 +1,5 @@
import { NextRequest, NextResponse } from 'next/server';
const API_URL = process.env.NEXT_PUBLIC_API_URL || 'http://localhost:3001/api';
import { SERVER_API_URL as API_URL } from './src/lib/server-api';
const AUTH_COOKIE = 'wa_session';
const REFRESH_COOKIE = 'wa_refresh';
const SESSION_REFRESH_LEEWAY_SECONDS = 60;

View File

@ -10,8 +10,8 @@ import {
twoFactorEmailCookieName,
} from '../lib/auth';
import { defaultLocale, isLocale, localeCookieName } from '../lib/i18n';
import { SERVER_API_URL as API_URL } from '../lib/server-api';
const API_URL = process.env.NEXT_PUBLIC_API_URL || 'http://localhost:3001/api';
const secureCookies = process.env.NODE_ENV === 'production';
type FormState = {

View File

@ -1,4 +1,4 @@
const API_URL = process.env.NEXT_PUBLIC_API_URL || 'http://localhost:3001/api';
import { SERVER_API_URL as API_URL } from './server-api';
async function readJson<T>(response: Response): Promise<T> {
const payload = await response.json();

View File

@ -0,0 +1,3 @@
export const SERVER_API_URL =
process.env.INTERNAL_API_URL?.trim() ||
'http://127.0.0.1:3001/api';