Skip to main content

Biến môi trường

builderx_api đọc cấu hình runtime ở config/env_config.exs. Tệp mẫu cho local là .dev.env.

Quy ước

  • Khi chạy Docker, biến được nạp qua env_file trong docker-compose.yml.
  • Khi chạy native: set -a; source .env; set +a trước khi mix phx.server.
  • Không commit secret prod. .dev.env chỉ chứa giá trị dev nội bộ.
  • Khi thêm biến mới:
    1. Đọc trong config/env_config.exs.
    2. Bổ sung vào bảng dưới đây.
    3. Phối hợp với ops để cập nhật biến vào Ansible group vars.

Bảng tham chiếu

Lõi

KhoáMục đích
MIX_ENVdev / prod / test.
JWT_KEYSecret ký JWT cho user / admin.
SECRET_KEY_BASESecret cho Phoenix endpoint (prod inject qua vault).
PHX_HOSTHost của Phoenix endpoint (prod).
PORTPort HTTP (prod, mặc định 4000).

Database

KhoáMục đích
DATABASE_URLPostgres URL cho BuilderxApi.Repo.
CITUS_DATABASE_URLPostgres URL cho BuilderxApi.Citus.
MONGO_URIURI MongoDB.
REDIS_HOST / REDIS_PORT / REDIS_PASSWORD / REDIS_DBRedis.
ELASTIC_HOST / ELASTIC_PORT / ELASTIC_USERNAME / ELASTIC_PASSWORDElasticsearch.
QUESTDB_HOST / QUESTDB_HTTP_PORT / QUESTDB_ILP_PORTQuestDB.

RabbitMQ

KhoáMục đích
R_HOSTHost của Rabbit.
R_PORTCổng AMQP (5672).
R_USERNAMEUser.
R_PASSWORDPassword.
R_VIRTUAL_HOSTvhost (ví dụ v1).

Kafka

KhoáMục đích
KAFKA1_HOSTHost broker 1.
KAFKA1_PORTCổng broker 1.
KAFKA2_*Broker bổ sung khi cluster lớn.

AWS S3

KhoáMục đích
AWS_ACCESS_KEY_IDAccess key.
AWS_SECRET_ACCESS_KEYSecret.
AWS_REGIONRegion.
S3_BUCKET_PUBLICBucket asset công khai.
S3_BUCKET_PRIVATEBucket private (CMS, hoá đơn).

Pancake và OAuth

KhoáMục đích
PANCAKEID_CLIENT_IDOAuth client của Pancake ID.
PANCAKEID_CLIENT_SECRETSecret OAuth Pancake ID.
PANCAKE_SECRET_KEYSecret nội bộ để ký payload Pancake.
AUTH_URLURL Pancake auth (https://account.pancake.vn).
GG_CLIENT_ID / GG_SECRET_KEY / GG_CALLBACK_URLOAuth Google (login).
GOOGLE_CLIENT_ID / GOOGLE_CLIENT_SECRET_KEY / GOOGLE_API_KEYGoogle API (Drive, Sheets,…).
FACEBOOK_APP_ID / FACEBOOK_SECRET_KEYFacebook login + Catalog.
BOTCAKE_*Tích hợp Botcake.
INSTAGRAM_CLIENT_ID / _SECRET_KEYInstagram.
DROPBOX_APP_KEY / DROPBOX_APP_SECRETDropbox.
DRIBBBLE_CLIENT_ID / _SECRET_KEYDribbble.
VIMEO_CLIENT_ID / _SECRET_KEYVimeo.
DEVIANT_ART_CLIENT_ID / _SECRET_KEYDeviantArt.
SLACK_CLIENT_ID / SLACK_SECRET_IDSlack.
FLATICON_API_KEYPicker Flaticon.
RAPID_API_KEYRapidAPI.
STORECAKE_SECRET_KEYSecret nội bộ Storecake (ký URL).
CAPTCHA_SECRET_KEYreCAPTCHA.

Stripe

KhoáMục đích
STRIPE_SKStripe secret key.
STRIPE_WEBHOOK_SECRET_KEYVerify webhook.
KhoáMục đích
DEVELOPER_TOKENGoogle Ads developer token.
GOOGLE_ADS_MANAGE_ACCOUNTID manager account (MCC).
MERCHANT_IDGoogle Merchant ID.

Vận chuyển

KhoáMục đích
B2C_TOKEN_GHTKToken GHTK.

Email

KhoáMục đích
EMAIL_USERNAMEUser SMTP.
EMAIL_PASSWORDPassword / app password SMTP.
SMTP_HOST / SMTP_PORTOverride host/port SMTP nếu cần.

Cầu nối WebCMS / landing_page_backend

KhoáMục đích
WEBCMS_APIEndpoint của WebCMS (webcms_app:4000).
WEBCMS_SECRET_KEYSecret RPC với WebCMS.
BUILDERX_SPA_URLURL của builderx_spa (CORS, redirect).

Khác

KhoáMục đích
WDS_SOCKET_HOST / WDS_SOCKET_PORTSocket cho Phoenix LiveReload.
SENTRY_DSN / SENTRY_ENVSentry.

Mẹo

  • Xem giá trị trong IEx: System.get_env("REDIS_HOST").
  • Đổi .env cần restart container — Application chỉ đọc lúc khởi động.
  • Secret prod nên đọc bằng Application.fetch_env!(:builderx_api, :stripe_sk) để fail-fast khi thiếu.

Kiểm tra nhanh

make bash
# bên trong container
echo $JWT_KEY
echo $R_HOST

Nếu thiếu biến bắt buộc, service sẽ crash khi boot (Sentry, Stripe,…). Đọc log để biết khoá nào thiếu.