본문으로 건너뛰기
참조

환경변수

로컬·테스트·운영 환경에서 각 변수의 수신 서비스, 기본값, 비밀 여부와 적용 방법을 찾습니다.

환경변수

이 문서는 비공개 호스트 환경에 이미 접근 권한이 있는 Nexia 유지관리자를 위한 참고 자료입니다. Core는 외부 개발자에게 배포하지 않습니다. 아래 호스트 명령은 공개 CLI·클라우드 샌드박스의 선행 조건이 아닙니다. 외부 개발자는 빠른 시작을 따라주세요.

설정할 기능과 값을 받는 서비스를 먼저 찾으세요. 일반 App 개발은 App 개발 환경 준비에서 시작하고, 선택 서비스는 해당 가이드에 따라 활성화합니다. 이 목록은 Core와 실행 서비스의 환경변수를 다룹니다. App의 업무 설정은 설정의 소유권에서 구분합니다.

설정 찾기

세 파일은 이 계약을 서로 다른 관점에서 게시하며 서로 바꾸어 쓸 수 없습니다.

파일소유 권한사용 방법
.env.exampleLocal Docker Composetask setup이 ignored .env로 복사하고 Compose가 선택한 값을 각 service에 주입
.env.testing.example자동화 PHP 테스트Test bootstrap이 안전 fixture로 읽음. Worktree마다 고유한 database와 tenant prefix 사용
deploy/production/.env.exampleProduction owner 카탈로그Section에 명시된 owner에만 각 값을 등록하며 어떤 process도 이 파일 전체를 읽지 않음

Production 카탈로그에 Laravel Cloud가 관리하는 framework 값도 포함하는 이유는 scripts/validate-prod-env.sh가 파일을 검증하기 때문입니다. 관리로 표시된 값은 수동 등록하지 마세요. 빈값은 production credential을 비우라는 뜻이 아니라 해당 capability를 켤 때 secret 또는 endpoint를 제공하라는 뜻입니다.

이 페이지는 Nexia가 지원하는 운영자 계약 전체를 다룹니다. 세 카탈로그의 모든 assignment, 의도적으로 제외한 source-level override, 운영 설정으로 오해하기 쉬운 호환 이름과 container 내부 이름을 모두 포함합니다. Laravel과 설치 package가 추가 upstream env() hook을 제공하더라도 이 페이지에 없으면 Nexia가 지원하는 배포 입력이 아닙니다.

최소 예시

빠른 시작을 마쳤다면 비밀값을 출력하지 않고 현재 환경·데이터베이스·검색 엔진 선택을 확인할 수 있습니다.

코드 예시
Shell
rg '^(APP_ENV|DB_DATABASE|SCOUT_DRIVER)=' .env

첫 실행은 .env와 .env.testing을 만들고 core profile을 시작한 뒤 database를 migrate·seed합니다. Agent profile은 선택 사항이므로 AGENT_SERVICE_TOKEN은 빈값으로 둡니다. 해당 runtime은 Agent Gateway 켜기에 따라 별도로 활성화하세요. 격리된 분석 설정은 Agent 요청 실행 방식에서 확인하세요.

여러 worktree가 테스트를 실행할 때는 각 worktree의 .env.testing에서 두 격리 값을 모두 바꿉니다.

DB_DATABASE=nexia_test_agent_sse
TEST_TENANCY_DB_PREFIX=test_nexia_agent_sse_

파라미터

범위와 표기

아래 표는 Local·Test·Production 카탈로그의 assignment를 용도별로 묶었습니다. 빈값은 파일에 key가 있고 값이 없다는 뜻이며, —는 해당 파일에 assignment가 없다는 뜻입니다. 등급은 값을 받는 runtime별로 판정합니다. 필수는 해당 runtime에 반드시 있어야 하고, 조건부는 명시된 capability를 켤 때만 필요하며, 선택은 표시된 기본값이나 비활성 상태를 유지합니다. 관리는 platform 또는 tracked configuration이 제공합니다.

Framework와 process runtime

변수수신자등급비밀LocalTestProduction효과
APP_NAMELaravel필수아니요NexiaNexiaNexia-Cloud-OSApplication 표시 이름과 기본 mail 발신자 이름
APP_ENVLaravel관리아니요localtestingproduction환경별 안전 동작 선택
APP_KEYLaravel필수, production에서 관리예빈값빈값base64:CHANGE_MELaravel application 암호화와 암호화된 framework payload의 root key
APP_DEBUGLaravel관리아니요truetruefalse예외 상세 정보 제어. Production은 반드시 false 유지
APP_URLLaravel관리아니요http://localhosthttp://localhosthttps://nexia.toCanonical application URL과 Agent JWT issuer
APP_LOCALELaravel선택아니요enkoen기본 locale
APP_FALLBACK_LOCALELaravel선택아니요enenen번역 fallback locale
APP_FAKER_LOCALELaravel선택아니요ko_KRko_KRko_KRSeeder와 factory locale
APP_MAINTENANCE_DRIVERLaravel선택아니요filefilefileMaintenance mode storage
BCRYPT_ROUNDSLaravel선택아니요12412Password hash work factor
LOG_CHANNELLaravel선택아니요stacknullstack기본 log channel
LOG_STACKLaravel선택아니요single—singleStack logger에 포함할 channel
LOG_DEPRECATIONS_CHANNELLaravel선택아니요null—nullDeprecation log 대상
LOG_LEVELLaravel선택아니요debugdebuginfoLaravel 최소 log severity. Gateway는 AGENT_GATEWAY_LOG_LEVEL 사용
OCTANE_SERVERLaravel선택아니요frankenphp——Octane server 구현
OCTANE_WORKERSCompose선택아니요1——Local Octane worker 수
OCTANE_MAX_REQUESTSCompose선택아니요500——Local worker recycle 전 처리할 요청 수
OCTANE_MAX_EXECUTION_TIMELaravel선택아니요600——Octane task 최대 실행 시간(초)

Data·session·storage·delivery

변수수신자등급비밀LocalTestProduction효과
DB_CONNECTIONLaravel관리아니요pgsqlpgsql관리Database driver
DB_HOSTLaravel관리아니요postgrespostgres관리Database host
DB_PORTLaravel관리아니요54325432관리Database port
DB_DATABASELaravel관리아니요nexianexia_test관리Central database 이름
DB_USERNAMELaravel관리아니요postgrespostgres관리Database login 이름
DB_PASSWORDLaravel, Langfuse Compose필수, 연결된 production DB가 관리예secretsecret빈값Database credential. Self-hosted Langfuse도 여기서 DSN을 파생
TEST_TENANCY_DB_PREFIXTest bootstrapTest에서 필수아니요—test_nexia_—폐기 가능한 병렬 tenant database prefix. Worktree마다 고유해야 함
REDIS_CLIENTLaravel관리아니요phpredisphpredis관리Redis client 구현
REDIS_HOSTLaravel관리아니요redisredis관리Redis host
REDIS_PASSWORDLaravel관리예nullnull관리Redis credential
REDIS_PORTLaravel관리아니요63796379관리Redis port
SESSION_DRIVERLaravel관리아니요redisarray관리Session persistence. Test는 memory에 보관
SESSION_STORELaravelProduction에서 필수아니요session—sessionTenant prefix가 없는 전용 Redis store에 session 보관
SESSION_LIFETIMELaravel선택아니요120—120유휴 session 수명(분)
SESSION_ENCRYPTLaravel선택아니요false——직렬화된 session payload 암호화
SESSION_PATHLaravel선택아니요/——Session cookie path
SESSION_DOMAINLaravel선택아니요null——Session cookie domain
CACHE_STORELaravel관리아니요redisfile관리기본 application cache. Agent 일부 계약은 명시적 store 사용
QUEUE_CONNECTIONLaravel관리아니요redissync관리Queue backend. Test는 동기 실행
FILESYSTEM_DISKLaravel선택아니요locallocallocalProduct storage 소유권과 구분되는 framework 기본 disk

Product storage, realtime, mail, billing, frontend

변수수신자등급비밀LocalTestProduction효과
PRODUCT_STORAGE_DRIVERLaravel필수아니요local—s3소유권을 인식하는 Local 또는 S3-compatible product disk 선택
AWS_ACCESS_KEY_IDLaravel storage조건부예빈값—빈값S3/R2 credential identifier
AWS_SECRET_ACCESS_KEYLaravel storage조건부예빈값—빈값S3/R2 secret credential
AWS_DEFAULT_REGIONLaravel storage조건부아니요auto—autoS3-compatible region
AWS_BUCKETLaravel storage조건부아니요빈값—nexia-cloud-os-privatePrivate product bucket
AWS_PUBLIC_BUCKETLaravel storage조건부아니요빈값—nexia-cloud-osPublic product bucket
AWS_URLLaravel storage조건부아니요빈값—https://cdn.nexia.toPublic object URL base
AWS_ENDPOINTLaravel storage조건부아니요빈값—R2 endpointS3-compatible API endpoint
AWS_USE_PATH_STYLE_ENDPOINTLaravel storage선택아니요false—falseVirtual host 대신 path-style request 선택
BROADCAST_CONNECTIONLaravel, local runtime-mode scriptLocal 선택, production 관리아니요lognullreverbBroadcast transport. Local에서 reverb를 선택하면 모든 runtime profile에 reverb service 포함
REVERB_APP_IDLaravel, ReverbLocal 조건부, production 관리아니요빈값—빈값Reverb application identifier
REVERB_APP_KEYLaravel, Reverb, Vite, local runtime-mode scriptLocal 조건부, production 관리아니요빈값—빈값Reverb public application key. Local nonblank 값이면 모든 runtime profile에 reverb service 포함
REVERB_APP_SECRETLaravel, ReverbLocal 조건부, production 관리예빈값—빈값Reverb signing secret
REVERB_HOSTLaravel, ViteLocal 조건부, production 관리아니요reverb—reverbReverb host
REVERB_PORTLaravel, ViteLocal 조건부, production 관리아니요6001—443Reverb port
REVERB_SCHEMELaravel, ViteLocal 조건부, production 관리아니요http—httpsReverb transport scheme
REVERB_SERVER_HOSTLaravel선택 Local override아니요주석 처리——Browser-facing host가 app container에서 닿지 않을 때 쓰는 backend 전용 Reverb host
REVERB_SERVER_PORTLaravel선택 Local override아니요주석 처리——Backend 전용 Reverb port. REVERB_PORT로 fallback
REVERB_SERVER_SCHEMELaravel선택 Local override아니요주석 처리——Backend 전용 Reverb scheme. REVERB_SCHEME으로 fallback
SANCTUM_STATEFUL_DOMAINSLaravel Cloud필수아니요——nexia.to,*.nexia.toStateful Sanctum client로 취급할 browser origin
MAIL_MAILERLaravel조건부아니요smtparraylogOutbound mail transport. Production log는 외부 발송 없음
MAIL_HOSTLaravel조건부아니요mailpit—빈값SMTP host
MAIL_PORTLaravel조건부아니요1025—587SMTP port
MAIL_USERNAMELaravel조건부아니요null—빈값SMTP login 이름
MAIL_PASSWORDLaravel조건부예null—빈값SMTP credential
MAIL_SCHEMELaravel선택아니요null—smtp명시적 SMTP URL scheme
MAIL_FROM_ADDRESSLaravel조건부아니요noreply@nexia.localhost—noreply@nexia.to기본 발신자 주소
MAIL_FROM_NAMELaravel조건부아니요${APP_NAME}—${APP_NAME}기본 발신자 이름
STRIPE_KEYLaravel조건부아니요빈값—빈값공개 Billing key
STRIPE_SECRETLaravel조건부예빈값—빈값Stripe API secret
VITE_PUBLIC_HOSTVite/browserLocal에서 필수아니요localhostlocalhost—Frontend endpoint가 쓰는 browser-visible Local host
VITE_REVERB_APP_KEYVite/browser, local runtime-mode scriptLocal 조건부, production 관리아니요${REVERB_APP_KEY}—${REVERB_APP_KEY}Browser Reverb key. Local nonblank 값이면 모든 runtime profile에 reverb service 포함
VITE_REVERB_HOSTVite/browserLocal 조건부, production 관리아니요${VITE_PUBLIC_HOST}—${REVERB_HOST}Browser Reverb host
VITE_REVERB_PORTVite/browserLocal 조건부, production 관리아니요——${REVERB_PORT}Browser Reverb port. Local frontend config는 FORWARD_REVERB_PORT로 fallback
VITE_REVERB_SCHEMEVite/browserLocal 조건부, production 관리아니요${REVERB_SCHEME}—${REVERB_SCHEME}Browser Reverb scheme
VITE_USE_POLLINGVite선택아니요truetrue—Mount된 Local source의 filesystem polling 활성화
VITE_POLL_INTERVALVite선택아니요3000——Local polling 간격(ms)
VITE_SHOW_UI_SANDBOXVite/browser선택아니요false—falsetrue일 때 개발 UI sandbox 노출

로컬 task dev:up:* 수렴에서는 명시적으로 export한 process 값을 빈값이어도 .env보다 먼저 읽고, 그다음 key fallback을 적용합니다. BROADCAST_CONNECTION의 fallback은 log, 두 app key의 fallback은 빈값입니다. 해석된 broadcast connection이 reverb이거나 두 app key 중 하나가 비어 있지 않으면 reverb를 필수 서비스로 포함합니다. .env의 리터럴 alias VITE_REVERB_APP_KEY=${REVERB_APP_KEY}는 REVERB_APP_KEY를 통해 해석하므로 원본 key가 비어 있으면 Reverb를 활성화하지 않습니다.

Local Docker port와 testing

이 값은 개발자 machine의 Docker Compose에만 속하며 Laravel Cloud나 container secret store에 등록하지 않습니다.

변수수신자등급비밀LocalTestProduction효과
FORWARD_WEB_BINDCompose선택아니요127.0.0.1——Application port의 host interface
FORWARD_WEB_PORTCompose선택아니요8080——Host application port
FORWARD_VITE_PORTCompose선택아니요5173——Host Vite port
FORWARD_DB_PORTCompose선택아니요54320——Host PostgreSQL port
FORWARD_REDIS_PORTCompose선택아니요63790——Host Redis port
FORWARD_MAILPIT_PORTCompose선택아니요8025——Host Mailpit UI port
FORWARD_MAILPIT_SMTP_PORTCompose선택아니요1025——Host Mailpit SMTP port
FORWARD_REVERB_PORTCompose선택아니요6001——Host Reverb port
FORWARD_TYPESENSE_PORTCompose선택아니요8108——Host Typesense port

Test fixture는 선택 관측 service도 꺼서 test 동작에 영향을 주지 못하게 합니다.

변수수신자등급비밀LocalTestProduction효과
PULSE_ENABLEDLaravel tests관리 test fixture아니요—false—Test에서 Pulse 비활성화
TELESCOPE_ENABLEDLaravel tests관리 test fixture아니요—false—Test에서 Telescope 비활성화
NIGHTWATCH_ENABLEDLaravel tests관리 test fixture아니요—false—Test에서 Nightwatch 비활성화
NEXIA_TEST_PROCESSESTest runner선택아니요—commented (8)—병렬 Pest worker 수 제한. 기본값은 container CPU 수

Nexia identity·tenancy·file·signature

변수수신자등급비밀LocalTestProduction효과
ADMIN_SEEDER_EMAILLaravel seeder조건부아니요admin@nexia.dev—빈값첫 administrator identity
ADMIN_SEEDER_PASSWORDLaravel seeder조건부예password—빈값첫 administrator password. Seed 후 회전하거나 제거
NEXIA_ADMIN_PATHLaravel선택아니요adminadminadminCentral administration route prefix
NEXIA_OIDC_ID_TOKEN_LEEWAYLaravel선택아니요60—60허용 OIDC clock skew(초)
TENANCY_DB_PREFIXLaravel선택아니요nexia_—nexia_Tenant database 이름 prefix. 변경해도 기존 database 이름은 바뀌지 않음
TENANCY_PENDING_COUNTLaravel선택아니요0—0미리 준비할 tenant database 수. 0이면 pool 비활성화
TENANCY_DOMAIN_RESOLVER_CACHELaravel선택아니요false—trueTenant domain resolution cache
TENANCY_DOMAIN_RESOLVER_CACHE_TTLLaravel선택아니요3600—3600Domain cache 수명(초)
MALWARE_SCANNERLaravel보호 intake에 필수아니요passthrough—clamdClamD 또는 명시적인 Local waiver 선택
CLAMD_HOSTLaravel조건부아니요clamav—빈값Canonical reachable ClamD host
CLAMD_PORTLaravel조건부아니요3310—3310Canonical ClamD TCP port
CLAMD_CONNECT_TIMEOUT_SECONDSLaravel선택아니요2—2ClamD 연결 timeout
CLAMD_SCAN_TIMEOUT_SECONDSLaravel선택아니요30—30ClamD scan timeout
SIGNATURE_PDF_PROCESSOR_EXPECTED_VERSIONLaravel health선택아니요8.71.2——예상 PDF processor package version
SIGNATURE_PDF_PROCESSOR_HEALTH_REQUIREDLaravel health선택아니요false—code 기본값 truePDF runtime health를 readiness 필수 조건으로 지정
NEXIA_SIGNATURE_DISPLAY_TIMEZONELaravel선택아니요UTC—UTCSignature evidence 표시 timezone
APPROVAL_SESSION_EVIDENCE_FRESHNESS_MINUTESLaravel선택아니요720—720Approval이 쓰는 session evidence 최대 나이
SIGNATURE_ENABLEDLaravel선택아니요——falseProduction Signature master rollout switch
SIGNATURE_TENANT_ALLOWLISTLaravel선택아니요——빈값Signature를 지정 tenant로 제한
SIGNATURE_LEGAL_ENTITY_ALLOWLISTLaravel선택아니요——빈값Signature를 지정 Legal Entity로 제한
SIGNATURE_PILOT_LEGAL_ENTITY_ALLOWLISTLaravel선택아니요——빈값Pilot cohort를 더 좁게 제한
SIGNATURE_EXECUTION_ENGINELaravel선택아니요——nativeSignature execution engine 선택
SIGNATURE_BULK_REQUEST_ENABLEDLaravel선택아니요——falseBulk Signature request 활성화
SIGNATURE_BULK_REQUEST_TENANT_ALLOWLISTLaravel선택아니요——빈값Bulk request를 tenant로 제한
SIGNATURE_BULK_REQUEST_LEGAL_ENTITY_ALLOWLISTLaravel선택아니요——빈값Bulk request를 Legal Entity로 제한
DOCUMENT_BINARY_MAX_FILE_KIBLaravel선택아니요51200—51200파일당 upload 한도
DOCUMENT_BINARY_MAX_ACTIVE_FILESLaravel선택아니요20—20Owner당 최대 active file 수
DOCUMENT_BINARY_MAX_TOTAL_KIBLaravel선택아니요256000—256000Active file 합산 한도
DOCUMENT_BINARY_MAX_EXTRACTED_CHARACTERSLaravel선택아니요2000000—2000000Text extraction 상한
DOCUMENT_BINARY_STAGE_TTL_HOURSLaravel선택아니요48—48Bind되지 않은 staged file 수명
DOCUMENT_BINARY_QUARANTINE_RETENTION_DAYSLaravel선택아니요30—30Quarantined file 보존 기간
DOCUMENT_BINARY_DEFAULT_BOUND_RETENTION_DAYSLaravel선택아니요2555—2555기본 bound document 보존 기간
DOCUMENT_BINARY_EXTRACTION_TIMEOUT_SECONDSLaravel선택아니요30—30외부 text extraction timeout
DOCUMENT_BINARY_PDFTOTEXT_BINARYLaravel선택아니요pdftotext—pdftotextPDF text extraction executable

Search·analytics·embedding

변수수신자등급비밀LocalTestProduction효과
SCOUT_DRIVERLaravel Scout선택아니요databasedatabasedatabaseIndex 동기화 engine
SCOUT_QUEUELaravel Scout선택아니요falsefalsetrueIndex 동기화를 queue에서 실행
SCOUT_AFTER_COMMITLaravel Scout선택아니요truetruetrueTransaction commit까지 index write 지연
TYPESENSE_HOSTLaravel Scout조건부아니요typesense—빈값Typesense host
TYPESENSE_PORTLaravel Scout조건부아니요8108—443Typesense port
TYPESENSE_PROTOCOLLaravel Scout조건부아니요http—httpsTypesense protocol
TYPESENSE_API_KEYLaravel Scout, local Typesense조건부예개발용 admin key—빈값Server 전용 administrative key
TYPESENSE_SCOPED_KEY_PARENTLaravel Search조건부예개발용 search-only key—빈값Tenant-scoped key 서명에 쓰는 기존 search-only parent
KNOWLEDGE_SEARCH_SEMANTIC_ENABLEDLaravel Knowledge선택아니요falsefalsefalse선택한 immutable profile의 semantic read 활성화
KNOWLEDGE_SEARCH_EMBEDDING_PROFILELaravel Knowledge선택아니요nonenonenoneProvider/model/version/dimension/storage generation. 현재 Production profile 없음
RESOURCE_IMPORT_HEADER_EMBEDDING_PROVIDERLaravel Resource Import선택아니요nonenonenone선택적인 header-only semantic matching 활성화
RESOURCE_IMPORT_HEADER_EMBEDDING_BASE_URLLaravel Resource Import조건부아니요local Ollama URL—빈값도달 가능한 Ollama /api/embed base URL
RESOURCE_IMPORT_HEADER_EMBEDDING_MODELLaravel Resource Import조건부아니요embeddinggemma—embeddinggemmaHeader embedding model

Candidate retrieval은 예제에서 SEARCH_CANDIDATE_GATEWAY를 의도적으로 제외했으므로 SCOUT_DRIVER를 따릅니다. Indexing과 candidate retrieval을 나누는 단계적 cutover에서만 이 고급 override를 설정하세요. 전체 절차는 Search 설정 프로필을 참고합니다. Production validator는 SCOUT_DRIVER=typesense 또는 SEARCH_CANDIDATE_GATEWAY=typesense가 해당 service를 선택하면 전체 Typesense 연결을 요구합니다.

Analytics

변수수신자등급비밀LocalTestProduction효과
GOOGLE_ANALYTICS_ENABLEDLaravel/browser선택아니요false—trueConsent 기반 GA4 collection 활성화
GOOGLE_ANALYTICS_MEASUREMENT_IDBrowser조건부아니요G-QQR7R8D9QS—G-QQR7R8D9QSPublic GA4 stream identifier
GOOGLE_ANALYTICS_COLLECT_SUBDOMAINSLaravel/browser선택아니요developers—developers수집을 허용할 Central subdomain
GOOGLE_ANALYTICS_COLLECT_TENANT_FIXTURESLaravel/browser선택아니요demo—demo수집을 허용할 fixture tenant
ANALYTICS_PROPERTY_IDLaravel admin조건부아니요546439209—546439209Server-side report가 조회할 GA4 property
ANALYTICS_CREDENTIALS_PATHLaravel adminLocal 조건부아니요Private storage path——Local service-account JSON path
ANALYTICS_CREDENTIALS_BASE64Laravel adminProduction 조건부예빈값—빈값Filesystem이 없는 환경의 service-account JSON
ANALYTICS_CACHE_STORELaravel admin선택아니요file—redisReporting cache store
ANALYTICS_CACHE_MINUTESLaravel admin선택아니요60—60Fresh report cache 수명
ANALYTICS_STALE_CACHE_MINUTESLaravel admin선택아니요10080—10080Provider failure 시 stale cache 수명
ANALYTICS_CLICK_DIMENSIONS_ENABLEDLaravel/browser선택아니요false—falseClick dimension reporting 활성화
ANALYTICS_REQUEST_TIMEOUT_MILLISECONDSLaravel admin선택아니요12000—12000GA4 request timeout
변수수신자등급비밀LocalTestProduction효과
AGENT_JWT_PRIVATE_KEY_PATHLaravelLocal 조건부아니요Private PEM path빈값—Local delegation-signing key path
AGENT_JWT_PUBLIC_KEY_PATHLaravelLocal 조건부아니요Public PEM path빈값—Local delegation-verification key path
AGENT_JWT_PRIVATE_KEY_BASE64Laravel CloudProduction Agent에 필수예빈값—빈값Filesystem이 없는 환경의 private PEM content
AGENT_JWT_PUBLIC_KEY_BASE64Laravel CloudProduction Agent에 필수아니요빈값—빈값대응하는 public PEM content
AGENT_SERVICE_TOKENLaravel, Edge, GatewayAgent에 필수예빈값빈값빈값내부 callback을 인증하고 ticket prefilter HMAC 파생
AGENT_EDGE_TOKENLaravel, EdgeAgent에 필수예개발용 token빈값빈값Laravel→Worker /agent/* 요청 보호
NEXIA_CENTRAL_BASE_URLEdge, GatewayAgent에 필수아니요http://app:8000—Wrangler-managedLaravel bootstrap, ticket exchange, heartbeat, callback base URL
AGENT_GATEWAY_URLLaravelAgent에 필수아니요Local Edge URLTest Gateway URLWorker URLServer-side protected Edge endpoint
AGENT_PUBLIC_STREAM_URLLaravel/browserProduction Agent에 필수아니요Local browser endpoint빈값Worker /browser/agent/stream정확한 no-redirect public ticket stream URL. 적용 대상은 DB rollout 정책이 결정
AGENT_GATEWAY_PORTCompose선택 Local아니요8100——Direct Gateway 진단용 host port
AGENT_CHECKPOINT_DSN_TEMPLATEGatewayProduction Agent에 필수예Tenant DSN template—빈값{tenant_id}를 치환하는 tenant별 LangGraph checkpoint 및 영속 usage journal DSN
AGENT_GATEWAY_LOG_LEVELGateway선택아니요INFO—Wrangler-managedGateway log severity
AGENT_GATEWAY_DEBUG_ERRORSGateway선택 진단아니요false—code 기본값 false, 선택 Wrangler overridetrue이면 provider/tool 예외 상세를 SSE client에 노출
AGENT_SCREEN_SEARCH_EMBEDDING_PROVIDERGateway선택아니요none—Wrangler-managednone, ollama, gemini, zai semantic reranker
AGENT_SCREEN_SEARCH_EMBEDDING_BASE_URLGateway선택 provider override아니요빈값/code 기본값—code 기본값, 선택 Wrangler overrideGemini와 Z.ai에는 hosted 기본값이 있고 Production Ollama는 Container-reachable URL 필요
AGENT_SCREEN_SEARCH_EMBEDDING_API_KEYGatewayHosted provider 조건부예빈값—빈값Chat key와 분리된 Gemini 또는 Z.ai screen-search key
AGENT_SEARCH_PROVIDERLaravel선택아니요none—noneSelf-hosted agent_search web-search bridge 활성화
AGENT_SEARCH_BASE_URLLaravel조건부아니요http://agent-search:8000—빈값도달 가능한 agent-search service URL
AGENT_SEARCH_TOKENLaravel, agent-search조건부예빈값—빈값Shared internal agent-search token
SEARXNG_SECRETSearXNG host조건부예빈값—빈값선택 self-hosted metasearch service용 생성 secret

Cloudflare는 Production .env 파일을 읽지 않습니다. wrangler.jsonc가 비밀이 아닌 Worker 값과 Container/rate-limit binding을 commit합니다. AGENT_EDGE_TOKEN, AGENT_SERVICE_TOKEN, AGENT_CHECKPOINT_DSN_TEMPLATE과 필요할 때 AGENT_SCREEN_SEARCH_EMBEDDING_API_KEY를 wrangler secret put으로 등록합니다. 그 뒤 services/agent-gateway-edge/src/index.ts가 명시적인 nonblank allowlist만 Python Container에 전달합니다. 그 allowlist에 없는 dashboard 변수를 설정해도 Gateway는 구성되지 않습니다.

Langfuse·observability·선택 서비스

변수수신자등급비밀LocalTestProduction효과
LANGFUSE_ENABLEDGateway선택아니요false—false선택적 masked trace export 활성화. Failure는 fail-open 유지
LANGFUSE_HOSTGateway조건부아니요Internal Langfuse URL—빈값Gateway exporter가 사용하는 Langfuse API base URL
LANGFUSE_PUBLIC_KEYGateway, bootstrap조건부아니요개발용 key—빈값Langfuse project public key
LANGFUSE_SECRET_KEYGateway, bootstrap조건부예개발용 key—빈값Langfuse project secret key
LANGFUSE_MASK_CONTENTGateway선택아니요true—trueExport 전 prompt와 completion content masking
LANGFUSE_PORTLocal Compose선택아니요3300——Browser에 publish한 Local Langfuse UI port
LANGFUSE_SALTLangfuse hostLocal 외 필수예빈값/개발 기본값—빈값Server hashing salt
LANGFUSE_ENCRYPTION_KEYLangfuse hostLocal 외 필수예빈값/개발 기본값—빈값Server data-encryption key
LANGFUSE_NEXTAUTH_SECRETLangfuse hostLocal 외 필수예빈값/개발 기본값—빈값Langfuse login/session secret
LANGFUSE_REDIS_DBLangfuse host선택아니요3—3Laravel cache/queue data와 격리한 Redis database
LANGFUSE_INIT_ORG_IDLangfuse bootstrap선택아니요nexia—nexiaInitial organization id
LANGFUSE_INIT_PROJECT_IDLangfuse bootstrap선택아니요nexia-agent—nexia-agentInitial project id
LANGFUSE_INIT_USER_EMAILLangfuse bootstrapLocal 외 필수아니요${ADMIN_SEEDER_EMAIL}—빈값Initial owner login
LANGFUSE_INIT_USER_NAMELangfuse bootstrap선택아니요Nexia Dev—Nexia AdminInitial owner 표시 이름
LANGFUSE_INIT_USER_PASSWORDLangfuse bootstrapLocal 외 필수예${ADMIN_SEEDER_PASSWORD}—빈값Initial owner password
LANGFUSE_NEXTAUTH_URLSelf-hosted Langfuse조건부아니요——빈값Browser-facing authentication callback URL
FORWARD_LANGFUSE_PORTSelf-hosted Compose선택아니요——127.0.0.1:3300Loopback-only Langfuse UI binding

Sentry는 별도의 선택 Laravel error·trace export입니다.

변수수신자등급비밀LocalTestProduction효과
SENTRY_LARAVEL_DSNLaravel선택예빈값——Nonblank이면 Sentry error delivery 활성화
SENTRY_TRACES_SAMPLE_RATELaravel선택아니요0——Performance trace sampling rate

LANGFUSE_ENABLED=true이면 Gateway runtime에 완전한 host와 project keypair가 있어야 합니다. Self-hosted bootstrap을 사용한다면 bootstrap이 생성한 project keypair와 Gateway exporter의 값이 일치해야 합니다. Production validator는 host와 keypair를 요구합니다. tenant: trace-tag prefix는 Gateway가 소유하며 환경 override가 없습니다. Product usage metering은 Langfuse와 독립적입니다.

호환 alias와 내부 값

새 환경에는 아래 이름을 일반 key로 추가하지 마세요.

이름상태대체 이름 또는 owner
APPROVAL_FILE_SCANNER, APPROVAL_CLAMD_HOST, APPROVAL_CLAMD_PORT, APPROVAL_CLAMD_CONNECT_TIMEOUT_SECONDS, APPROVAL_CLAMD_SCAN_TIMEOUT_SECONDSRead-only 호환 alias. 현재 카탈로그에는 없음MALWARE_SCANNER와 CLAMD_*
MAIL_ENCRYPTIONLocal 값이 null인 호환 assignmentMAIL_SCHEME이 우선. Production에 이전 이름을 추가하지 않음
RESOURCE_IMPORT_EMBEDDING_PROVIDER, RESOURCE_IMPORT_EMBEDDING_BASE_URL, RESOURCE_IMPORT_EMBEDDING_MODEL한 release 동안 읽기 fallbackRESOURCE_IMPORT_HEADER_EMBEDDING_*
SEARCH_SEMANTIC_ENABLED, SEARCH_SEMANTIC_PROVIDER한 release 동안 읽기 fallbackKNOWLEDGE_SEARCH_SEMANTIC_ENABLED, KNOWLEDGE_SEARCH_EMBEDDING_PROFILE
AGENT_OLLAMA_EMBEDDING_MODEL, AGENT_GEMINI_EMBEDDING_MODEL, AGENT_ZAI_EMBEDDING_MODEL제거된 운영 설정Gateway code가 provider model constant를 소유
AGENT_GATEWAY_SSE_KEEPALIVE_SECONDS, AGENT_GATEWAY_SSE_BUFFER_MAX_BYTES, AGENT_GATEWAY_SSE_BUFFER_MAX_FRAMES, AGENT_MANIFEST_FETCH_MAX_ATTEMPTS제거된 운영 설정Cross-runtime protocol과 safety constant는 code 소유
AGENT_EDGE_LOCAL_HOST, AGENT_EDGE_LOCAL_PORT, AGENT_GATEWAY_UPSTREAM_URLCompose가 고정한 Local adapter 내부값운영 등록 대상 아님
QUERY_LOG_RETENTION_DAYS, FETCH_LOG_RETENTION_DAYS, SEARXNG_BASE_URLSearch container 내부값Compose와 tracked patch가 소유
LANGFUSE_TENANT_TAG_PREFIX제거된 운영 설정Gateway가 code-defined tenant: trace-tag prefix 소유
PLAYWRIGHT_BROWSERS_PATH, PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD, PLAYWRIGHT_CHROMIUM_EXECUTABLE_PATH, DATA_DIRagent-search image 내부값Dockerfile 소유
HOSTNAME, DATABASE_URL, SALT, ENCRYPTION_KEY, CLICKHOUSE_*, LANGFUSE_S3_EVENT_UPLOAD_*, REDIS_CONNECTION_STRING, TELEMETRY_ENABLED, NEXTAUTH_*, LANGFUSE_INIT_PROJECT_PUBLIC_KEY, LANGFUSE_INIT_PROJECT_SECRET_KEY, MINIO_ROOT_*파생되거나 고정된 Langfuse container 환경. 일부는 비밀Compose가 운영자 소유 LANGFUSE_*, database, bootstrap 값을 이 process 이름으로 mapping. LANGFUSE_INIT_PROJECT_ID는 운영자 설정 유지
VITE_APP_NAME현재 코드에서 읽지 않는 이름APP_NAME 사용. 중복 Vite assignment를 복구하지 않음
POSTMARK_MESSAGE_STREAM_ID, TYPESENSE_MAX_TOTAL_RESULTS, SEARXNG_SEARCH_FORMATS비활성, comment-only 또는 선택 image에서 미지원운영 등록 대상 아님
AGENT_GATEWAY_CONTAINER, AGENT_BROWSER_STREAM_RATE_LIMITER환경변수가 아닌 Cloudflare bindingwrangler.jsonc 소유
PYTHONDONTWRITEBYTECODE, PYTHONUNBUFFERED, PIP_DISABLE_PIP_VERSION_CHECK, UV_LINK_MODE, UV_PROJECT_ENVIRONMENTGateway image constantDockerfile 소유
WWWGROUP, WWWUSER, AGENT_SEARCH_REFLocal build argumentCompose/Docker build 소유. Search ref는 보안을 위해 고정
LANGFUSE_TEST_HOSTIntegration test 전용 endpoint운영 등록 대상 아님
NEXIA_CONTRIBUTION_MANIFEST_PATH생성된 contribution cache path override정상 path는 code 소유. 배포 등록 대상 아님
NEXIA_SIGNATURE_LIVE_FIXTURE_PASSWORD, DEMO_ADMIN_PASSWORDLocal fixture command/seeder 입력이며 비밀개발 전용이며 Production 카탈로그 값이 아님
GOOGLE_OIDC_CLIENT_ID, GOOGLE_OIDC_CLIENT_SECRET, ENTRA_OIDC_CLIENT_ID, ENTRA_OIDC_CLIENT_SECRET, OIDC_CLIENT_ID, OIDC_CLIENT_SECRET, OIDC_ISSUERDevelopment SSO seeder 입력. Secret 이름은 비밀Production identity provider 설정은 환경이 아닌 DB 소유
NO_COLOR, TERM, PATHAmbient shell/process 환경운영체제 소유
NEXIA_APP_IMAGE, NEXIA_AGENT_GATEWAY_IMAGE선택적 self-hosted Compose 이미지 입력docker-compose.prod.yml 전용이며 관리형 Production 카탈로그에 없음

옵션

공식 카탈로그 밖 source 지원 override

현재 source는 아래 이름을 읽지만 Nexia는 지원되는 Local·Production assignment 카탈로그에서 의도적으로 제외합니다. 대부분 upstream framework escape hatch, 진단값 또는 code 기본값을 맞춰야 하는 safety constant입니다. 모든 배포가 복사할 값이 아니라 고급 override로 취급하세요. Runtime owner, validator rule, Production 필요성이 명확할 때만 공식 카탈로그로 승격합니다.

변수수신자등급비밀기본값효과 / 제외 이유
APP_PREVIOUS_KEYSLaravel선택 rotation예빈값계획된 key rotation 중 허용할 이전 application key의 쉼표 구분 목록
CLAMD_EXPECTED_VERSIONLaravel health선택아니요1.4Image/readiness 계약. 고정 scanner release와 함께만 변경
MAIL_URLLaravel mail선택예빈값Upstream 전체 SMTP DSN override
MAIL_EHLO_DOMAINLaravel mail선택아니요APP_URL의 hostUpstream SMTP EHLO domain override
MAIL_SENDMAIL_PATHLaravel mail조건부아니요/usr/sbin/sendmail -bs -iMAIL_MAILER=sendmail일 때 쓰는 command
MAIL_LOG_CHANNELLaravel mail선택아니요기본 log channelMAIL_MAILER=log일 때 쓰는 전용 channel
POSTMARK_API_KEYLaravel mail조건부예빈값MAIL_MAILER=postmark일 때 필수
RESEND_API_KEYLaravel mail조건부예빈값MAIL_MAILER=resend일 때 필수
SEARCH_CANDIDATE_GATEWAYLaravel Search단계적 전환 시 선택아니요Scout가 Typesense이면 typesense, 그 외 database색인 동기화와 조회 엔진을 따로 전환할 때만 지정. 일반 프로필에서는 생략
SCOUT_PREFIXLaravel Scout선택아니요빈값External index 이름 prefix
SCOUT_IDENTIFYLaravel Scout선택아니요false지원 engine의 user identification 활성화
TYPESENSE_PATHLaravel Scout선택아니요빈값Hosted Typesense URL path
TYPESENSE_CONNECTION_TIMEOUT_SECONDSLaravel Scout선택아니요2연결 timeout
TYPESENSE_HEALTHCHECK_INTERVAL_SECONDSLaravel Scout선택아니요30Node health-check 주기
TYPESENSE_NUM_RETRIESLaravel Scout선택아니요3Client retry 횟수
TYPESENSE_RETRY_INTERVAL_SECONDSLaravel Scout선택아니요1Retry 지연
TYPESENSE_IMPORT_ACTIONLaravel Scout선택아니요upsertBulk import action
AGENT_VISION_MODELSLocal/self-hosted Gateway 전용선택아니요빈값Image-capable local model prefix allowlist. model capability가 catalog 소유가 되기 전까지 Cloudflare는 의도적으로 전달하지 않음
SIGNATURE_TEMPLATE_MAXIMUM_SIGNERSLaravel Signature선택아니요8최대 signer 수의 boot 기본값
SIGNATURE_LOCAL_FIXTURE_PROFILELaravel Signature선택 Local/Test아니요빈값명시적인 deterministic fixture profile 선택
SIGNATURE_BULK_REQUEST_STUCK_AFTER_SECONDSLaravel Signature선택아니요900Bulk readiness metadata의 age 기준
SIGNATURE_BULK_REQUEST_RECOVERY_SCAN_LIMITLaravel Signature선택아니요100한 recovery scan에서 검사할 bulk row 최대 수
SIGNATURE_STUCK_AFTER_SECONDSLaravel Signature선택아니요900Stuck operation query의 age 기준
SIGNATURE_STUCK_QUERY_LIMITLaravel Signature선택아니요100Query당 반환할 stuck operation 최대 수
SIGNATURE_ARTIFACT_RETENTION_YEARSLaravel Signature선택아니요7Immutable artifact/evidence 기본 보존 기간
SIGNATURE_DOMPDF_EXPECTED_VERSIONLaravel health선택아니요3.1.6예상 Dompdf runtime version
SIGNATURE_FPDI_EXPECTED_VERSIONLaravel health선택아니요2.6.8예상 FPDI runtime version
SIGNATURE_TCPDF_EXPECTED_VERSIONLaravel health선택아니요6.11.3예상 TCPDF runtime version

Production은 이제 canonical MALWARE_SCANNER=clamd와 CLAMD_* 이름을 게시합니다. 도달 가능한 private CLAMD_HOST를 제공하세요. Production validator는 canonical 이름을 먼저 읽고 호환 기간에만 이전 alias를 허용합니다.

변경 적용

Laravel은 config/*.php에서 환경값을 읽습니다. VITE_* 값은 브라우저 코드에 노출되므로 비밀을 넣지 마세요. Compose는 서비스 설정을 치환하고 Gateway는 시작할 때 프로세스 설정을 읽습니다.

Laravel 설정을 바꾸면 cached configuration을 지우고 영향을 받는 long-lived process를 재시작하세요. Cloudflare secret 또는 Wrangler 변수를 바꾸면 새 Worker/Container version을 배포해야 합니다. Laravel Cloud를 바꿔도 Cloudflare에 그 값이 주입되지 않습니다. 표에 여러 runtime이 수신자로 적힌 shared secret은 모든 owner가 같은 값을 가져야 Production 등록이 완료됩니다.

Laravel Cloud variables      Laravel config와 PHP worker
Wrangler vars/bindings       공개 Worker topology와 Container 설정
Cloudflare secrets           Edge trust, checkpoint, Gateway credential
External service host env    ClamAV, Typesense, Langfuse, SearXNG 등 service

오류

오류 또는 관측 상태원인해결
Production environment file not found: ...Validator에 존재하지 않는 export path 전달실제 export 파일로 다시 실행
APP_KEY must be a generated base64 key and must not contain CHANGE_ME.Production 카탈로그 placeholder 검증Target secret store에서 Laravel key 생성
<KEY> is missing or contains a placeholder.필수 Production 값이 비었거나 예시값 유지이 페이지의 owner에 등록한 뒤 scripts/validate-prod-env.sh 재실행
AGENT_EDGE_TOKEN must not use the known local development token.Production에 공개 Local 예시 token 유지새 token을 생성해 Laravel Cloud와 Cloudflare에 같은 값 등록
<KEY> must be an absolute HTTPS URL without userinfo, query, fragment, or whitespace.Production endpoint 형식이 잘못되었거나 안전하지 않음Credential·query가 없는 canonical HTTPS origin/URL 등록
AGENT_PUBLIC_STREAM_URL must use the exact /browser/agent/stream path.Browser stream URL이 redirect, relay 또는 잘못된 route를 가리킴Worker의 정확한 public Direct SSE endpoint 등록
MALWARE_SCANNER must be clamd in production.Production이 Local passthrough waiver 또는 다른 driver 선택도달 가능한 ClamD를 배포하고 canonical scanner 설정 사용
<KEY> must be a deployment-reachable host name or address without a scheme, path, credentials, or whitespace.Service host에 URL 또는 credential 포함Host 변수에는 도달 가능한 host 이름만 저장
<KEY> must be an integer between 1 and 65535.Service port가 잘못됐거나 TCP 범위를 벗어남수신 service의 올바른 port 등록
TYPESENSE_PROTOCOL must be one of: http https.Typesense에 지원하지 않는 scheme 선택Hosted production은 https, 의도적인 internal endpoint는 http 사용
PRODUCT_STORAGE_DRIVER must be one of: local s3.Product disk family가 비었거나 미지원Self-contained Local profile 또는 전체 S3-compatible block 구성
AGENT_SCREEN_SEARCH_EMBEDDING_PROVIDER must be one of: none ollama gemini zai.알 수 없는 Gateway reranker provider지원 provider 또는 none 선택
AGENT_SCREEN_SEARCH_EMBEDDING_BASE_URL for a hosted provider must be an absolute HTTPS URL without userinfo, query, fragment, or whitespace.Custom Gemini/Z.ai endpoint 형식이 잘못됐거나 안전하지 않음Override 제거로 code 기본값 사용 또는 깨끗한 HTTPS base URL 등록
RESOURCE_IMPORT_HEADER_EMBEDDING_PROVIDER must be one of: none ollama.Resource Import가 미지원 embedding provider 선택도달 가능한 Ollama 또는 비활성 header embedding 사용
KNOWLEDGE_SEARCH_SEMANTIC_ENABLED must be a boolean value.Feature flag가 인식 가능한 boolean 아님true 또는 false 사용
KNOWLEDGE_SEARCH_EMBEDDING_PROFILE must select a production-approved profile when Knowledge semantic search is enabled.Semantic read를 켰지만 profile이 none 또는 빈값승인된 immutable profile이 생길 때까지 semantic read 비활성화
KNOWLEDGE_SEARCH_EMBEDDING_PROFILE deterministic-local-test-vector-16-v1 is not allowed in production.Deterministic test profile이 Production에 유입none으로 복귀. Local/Test fixture 전용
LANGFUSE_ENABLED must be a boolean value.선택적 tracing switch가 인식 가능한 boolean 아님true 또는 false 사용
VITE_REVERB_APP_KEY must equal REVERB_APP_KEY.Server와 browser Reverb application key 불일치Platform-managed public key를 양쪽에 동일하게 사용
AGENT_JWT_PRIVATE_KEY_BASE64 must be the Base64 of a PEM key.Decode한 private key가 PEM material이 아님base64 -i private.pem의 한 줄 출력을 Laravel Cloud에 등록
Agent gateway environment variable '<KEY>' is not set. The request cannot proceed until it is populated.Edge가 필수 Container 값을 전달하지 않았거나 secret 누락Cloudflare에 등록하고 src/index.ts가 canonical 이름을 전달하는지 확인
ticket_service_unavailableEdge에 NEXIA_CENTRAL_BASE_URL, AGENT_SERVICE_TOKEN 또는 rate-limit binding 누락Worker variable, secret, binding 복구 후 재시도
Gateway health가 configured: falseNEXIA_CENTRAL_BASE_URL 또는 AGENT_SERVICE_TOKEN이 비어 있음Gateway runtime에 두 값 구성
Screen-search health가 misconfiguredHosted provider API key 누락Canonical screen-search key를 채우거나 none 선택. Readiness는 형식만 검증하며 provider reachability는 검증하지 않음
ANALYTICS_CREDENTIALS_BASE64 must contain valid Base64.Service-account JSON encoding 손상JSON을 한 줄 Base64로 다시 등록
KNOWLEDGE_SEARCH_EMBEDDING_PROFILE '<PROFILE>' is not implemented by this release.Production이 미지원 semantic generation 선택none으로 복귀하고 semantic retrieval 비활성화 유지
Langfuse가 활성화됐지만 trace가 비어 있음Gateway의 host/keypair가 불완전하거나 Gateway가 trace 미전송Gateway에 Langfuse project의 host/keypair를 설정하고 export health 확인. Product usage는 Langfuse와 독립적임
Candidate search가 indexing과 다른 engine 사용운영자가 SEARCH_CANDIDATE_GATEWAY를 명시적으로 설정Override 제거로 Scout를 따르거나 의도적인 split profile 완성
Agent web search health는 성공하지만 실제 search는 502 반환SearXNG pair, JSON format 설정 또는 secret 누락search profile의 두 container를 구성하고 SEARXNG_SECRET 설정
보호 upload가 계속 비활성화Production CLAMD_HOST가 비었거나 도달 불가Canonical CLAMD_HOST에 도달 가능한 private scanner hostname 등록
Tenant 전환 시 419 또는 logoutSession이 tenant-prefixed cache store 또는 domain-wide cookie 사용SESSION_STORE=session 유지, Production SESSION_DOMAIN은 설정하지 않음

실제 사용

Local Agent 주입은 docker-compose.yml에서 확인할 수 있습니다. 같은 AGENT_SERVICE_TOKEN이 Local Edge와 Gateway에 전달되고 Edge adapter는 고정된 internal URL을 사용합니다. Cloudflare Production은 다른 방식을 사용합니다.

코드 예시
Shell
(
cd services/agent-gateway-edge
pnpm exec wrangler secret put AGENT_EDGE_TOKEN
pnpm exec wrangler secret put AGENT_SERVICE_TOKEN
pnpm exec wrangler secret put AGENT_CHECKPOINT_DSN_TEMPLATE
# Gemini 또는 Z.ai 화면 검색을 사용할 때만:
pnpm exec wrangler secret put AGENT_SCREEN_SEARCH_EMBEDDING_API_KEY
# Langfuse 추적을 사용할 때만:
pnpm exec wrangler secret put LANGFUSE_ENABLED
pnpm exec wrangler secret put LANGFUSE_HOST
pnpm exec wrangler secret put LANGFUSE_PUBLIC_KEY
pnpm exec wrangler secret put LANGFUSE_SECRET_KEY
)

Screen-search embedding secret command는 Gemini 또는 Z.ai에서만 필요합니다. Langfuse 네 command는 선택적 tracing을 켤 때만 필요하며 Langfuse project가 소유한 값을 사용합니다. Self-hosted profile이라면 bootstrap 값과도 일치해야 합니다. 비밀이 아닌 screen-search 설정은 wrangler.jsonc에, 비밀은 Wrangler에 둡니다. services/agent-gateway-edge/wrangler.jsonc가 NEXIA_CENTRAL_BASE_URL, screen-search provider, Gateway log level, Container binding, rate limiter를 소유합니다. Gateway 기본값을 override할 때만 선택 screen-search base URL을 추가하세요. services/agent-gateway-edge/src/index.ts가 Container에 들어갈 값의 최종 권한입니다.

Core 루트에서 운영 설정을 모은 파일을 무시되는 tmp/production-env-export.env에 저장한 뒤 배포 전에 검사합니다. 비밀이 들어 있는 파일이므로 커밋하지 마세요. 로컬 개발용 .env를 대신 넣으면 운영 설정 검사가 되지 않습니다.

코드 예시
Shell
bash scripts/validate-prod-env.sh tmp/production-env-export.env

이 검사는 framework safety, Agent trust/endpoint/JWT/checkpoint 설정, 세 embedding capability 계약, 조건부 Typesense credential, canonical ClamAV, 활성화된 Langfuse의 전체 host/keypair를 다룹니다. 설정 형식을 검증할 뿐 외부 service가 수신 runtime에서 도달 가능한지는 증명하지 않습니다.

함께 읽기

원본 위치: docs/developers/content/ko/operations/environment-variables.md