## hyb-oa 试运行环境变量示例(单机) ## ## 说明: ## - 统一以 deploy/trialrun/.env 作为 trialrun 部署事实源。 ## - 默认使用 env_file 注入 server / worker / init 容器环境。 ## - 推荐使用无引号值;旧的带引号写法当前仍兼容,但建议后续逐步改成无引号。 ## - 普通字符串、布尔值、数字、cron 都可直接写为无引号值。 ## ## 使用方式: ## cp deploy/trialrun/.env.example deploy/trialrun/.env ## 然后按需修改 deploy/trialrun/.env 中的值(不要提交 .env) ## ## 同机公网部署建议: ## - 官网继续使用 hyinda.com / www.hyinda.com ## - OA 单独使用 oa.example.com 一类二级域名 ## - 正式公网环境请保持 APP_ORIGIN=https://oa.example.com ## - 正式公网环境请保持 COOKIE_SECURE=true ## # ===== 运行模式与基础域名 ===== NODE_ENV=production APP_ORIGIN=https://oa.example.com APP_TIMEZONE=Asia/Shanghai HOST=0.0.0.0 PORT=3000 TRUST_PROXY_HOPS=1 COOKIE_SECURE=true OPENAPI_DOCS_ENABLED=false SERVE_CLIENT_DIST=true CLIENT_DIST_DIR=../client/dist SIGNED_URL_TTL_SECONDS=600 MAX_UPLOAD_SIZE_BYTES=10485760 # ===== 服务端密钥(必须修改) ===== JWT_SECRET= AUTH_CODE_PEPPER= FIELD_ENCRYPTION_KEY= # ===== 密码 / 登录安全 ===== PASSWORD_RESET_CODE_TTL_SECONDS=600 PASSWORD_RESET_FAIL_WINDOW_SECONDS=1800 PASSWORD_RESET_MAX_ATTEMPTS=5 PASSWORD_RESET_LOCK_SECONDS=1800 PASSWORD_RESET_REQUEST_WINDOW_SECONDS=3600 PASSWORD_RESET_REQUEST_MAX=3 AUTH_CODE_REQUEST_COOLDOWN_SECONDS=60 DEV_SHOW_PASSWORD_RESET_CODE=false EMAIL_LOGIN_CODE_TTL_SECONDS=600 EMAIL_LOGIN_CODE_MAX_ATTEMPTS=5 EMAIL_LOGIN_CODE_FAIL_WINDOW_SECONDS=1800 EMAIL_LOGIN_CODE_LOCK_SECONDS=1800 AUTH_LOGIN_FAIL_WINDOW_SECONDS=900 AUTH_LOGIN_FAIL_MAX_ATTEMPTS=5 AUTH_LOGIN_LOCK_SECONDS=1800 RATE_LIMIT_ENABLED=true RATE_LIMIT_LOGIN_MAX=10 RATE_LIMIT_LOGIN_WINDOW=1 minute PUBLIC_SECURITY_HARDENING_ENABLED=true # ===== 可观测性 ===== METRICS_ENABLED=true OTEL_TRACES_ENABLED=false # ===== OIDC / SSO(可选) ===== OIDC_ENABLED=false OIDC_ISSUER_URL= OIDC_CLIENT_ID= OIDC_CLIENT_SECRET= OIDC_REDIRECT_URI=https://oa.example.com/api/auth/oidc/callback OIDC_SCOPES=openid profile email # ===== 企业微信入口 / OAuth(可选) ===== WECOM_ENABLED=false WECOM_ENTRY_ENABLED=false WECOM_CORP_ID= WECOM_AGENT_ID= WECOM_AGENT_SECRET= WECOM_OAUTH_ENABLED=false WECOM_REDIRECT_URI=https://oa.example.com/api/auth/wecom/callback WECOM_ALLOWED_RETURN_HOSTS=oa.example.com WECOM_CHECKIN_SYNC_ENABLED=false # 企业微信打卡同步 Secret:显式配置优先;留空时复用已授权调用打卡 API 的 WECOM_AGENT_SECRET WECOM_CHECKIN_SECRET= WECOM_CONTACT_SYNC_ENABLED=false WECOM_CONTACT_SECRET= WECOM_CONTACT_DEFAULT_DEPARTMENT_ID= WECOM_HR_MASTER_SYNC_ENABLED=false # 企业微信 HR 主数据镜像 Secret:人事助手专用 Secret 优先;留空时仅可复用已验证授权应用的 WECOM_AGENT_SECRET WECOM_HR_ASSISTANT_SECRET= # 企业微信审批回调 POC:真实值只配置在部署环境,不写入仓库、Issue 或聊天 WECOM_APPROVAL_CALLBACK_URL=https://oa.example.com/api/wecom/approval/callback WECOM_CALLBACK_TOKEN= WECOM_CALLBACK_ENCODING_AES_KEY= WECOM_APPROVAL_CALLBACK_EVIDENCE_FILE= IM_NOTIFIER_ENABLED=true # ===== 数据库(Compose 内部连接) ===== POSTGRES_DB= POSTGRES_USER= POSTGRES_PASSWORD= DATABASE_URL= # SHADOW_DATABASE_URL= # ===== 存储与上传 ===== STORAGE_DIR=/data/storage STORAGE_DRIVER=local S3_ENDPOINT=http://minio:9000 S3_REGION=us-east-1 S3_BUCKET=hyb-oa S3_ACCESS_KEY_ID= S3_SECRET_ACCESS_KEY= S3_FORCE_PATH_STYLE=true MINIO_ROOT_USER= MINIO_ROOT_PASSWORD= # ===== OCR(off | mock | tencent) ===== OCR_PROVIDER=mock OCR_CRON_ENABLED=true OCR_MAX_ATTEMPTS=3 OCR_POLL_CRON=*/5 * * * * * OCR_BATCH_SIZE=10 OCR_LOCK_TTL_SECONDS=300 OCR_TIMEOUT_MS=5000 TENCENT_SECRET_ID= TENCENT_SECRET_KEY= TENCENT_OCR_REGION=ap-beijing # ===== 验真 / 发票 / 节假日 ===== INVOICE_VERIFICATION_ENABLED=false LEAVE_HOLIDAY_CALENDAR_ENABLED=true VERIFICATION_PROVIDER=mock VERIFICATION_POLL_CRON=* * * * * VERIFICATION_MAX_ATTEMPTS=3 VERIFICATION_RETRY_COOLDOWN_SECONDS=60 VERIFICATION_TIMEOUT_MS=5000 INVOICE_ARCHIVE_CRON=30 2 * * * INVOICE_ARCHIVE_UNUSED_DAYS=90 INVOICE_ARCHIVE_BATCH_SIZE=200 # ===== 预算 / 费控 ===== BUDGET_CONTROL_MODE=warn BUDGET_PRECHECK_ENABLED=false PAYMENT_BATCH_ENABLED=false # ===== 周边集成 / ERP ===== ERP_SYNC_ENABLED=false ERP_SYNC_PROVIDER=mock ERP_SYNC_ENDPOINT= ERP_SYNC_TIMEOUT_MS=5000 ERP_SYNC_AUTH_TOKEN= ERP_JOURNAL_EXPORT_ENDPOINT= ERP_PROCUREMENT_EXPORT_ENDPOINT= ERP_ASSET_EXPORT_ENDPOINT= ERP_MASTER_DATA_ENDPOINT= ERP_PROCUREMENT_TIMEOUT_MS=5000 ERP_ASSET_TIMEOUT_MS=5000 ERP_MASTER_DATA_TIMEOUT_MS=5000 ERP_MASTER_DATA_SYNC_CRON= TRAVEL_SYNC_ENABLED=false INTEGRATION_OUTBOX_CRON=* * * * * INTEGRATION_OUTBOX_BATCH_SIZE=20 INTEGRATION_OUTBOX_MAX_ATTEMPTS=5 INTEGRATION_OUTBOX_RETRY_SECONDS=120 # ===== 邮件 ===== EMAIL_ENABLED=false EMAIL_FROM= EMAIL_BASE_URL=https://oa.example.com SMTP_HOST= SMTP_PORT=587 SMTP_SECURE=false SMTP_USER= SMTP_PASS= # ===== 委派 / 作业 ===== DELEGATION_REVOKE_CRON=0 * * * * JOB_DRIVER=pgboss JOBS_ENABLED=true PG_BOSS_SCHEMA=pgboss # ===== AI(默认关闭) ===== AI_ASSIST_ENABLED=false AI_PROVIDER=mock AI_BASE_URL= AI_MODEL= AI_TIMEOUT_MS=10000 AI_AUTH_TOKEN= # ===== Trialrun 初始化管理员 ===== TRIALRUN_ADMIN_EMAIL= TRIALRUN_ADMIN_PHONE= TRIALRUN_ADMIN_PASSWORD= TRIALRUN_ADMIN_EMPLOYEE_NO= TRIALRUN_ADMIN_NAME=Trialrun Admin TRIALRUN_ADMIN_TITLE=系统管理员 TRIALRUN_ADMIN_HIRE_DATE=2020-01-01 # ===== 功能开关环境闸门(trialrun 推荐) ===== PORTAL_HOME_ENABLED=true GLOBAL_SEARCH_ENABLED=true ANNOUNCEMENTS_ENABLED=true PRESENCE_BOARD_ENABLED=true ATTENDANCE_ENABLED=false ATTENDANCE_UNIFIED_ENABLED=true WEEKLY_REPORT_ENABLED=true EMPLOYEE_LIFECYCLE_ENABLED=true TODO_BOARD_ENABLED=true WORKFLOW_DEFINITION_ADMIN_ENABLED=false CUTOVER_CONSOLE_ENABLED=false PROJECT_DOMAIN_ENABLED=true PROJECT_LINKING_ENABLED=true PROJECT_COMMUNICATION_LOG_ENABLED=true PROJECT_CLOSURE_CHECKLIST_ENABLED=true CONFIDENTIAL_DOC_REFS_ENABLED=true