Hi.Events v1.11.2 配置参数详解
目标:系统梳理 Hi.Events v1.11.2 的全部配置参数。配置体系为 Laravel 标准 `.env` 环境变量注入:官方镜像 v1.11.2 的 `config/*.php` 实际消费 180 个环境键,本文逐组拆解用途与默认值,并对注册开关、API 限流、文档开关等待验证项给出实测回显。键位清单与生效行
Hi.Events v1.11.2 配置参数详解
目标:系统梳理 Hi.Events v1.11.2 的全部配置参数。配置体系为 Laravel 标准
.env环境变量注入:官方镜像 v1.11.2 的config/*.php实际消费 180 个环境键,本文逐组拆解用途与默认值,并对注册开关、API 限流、文档开关等待验证项给出实测回显。键位清单与生效行为均在 v1.11.2-beta 镜像与源码树上实测核对(2026-10-23)。
一、环境信息
| 项目 | 实测值 |
|---|---|
| Hi.Events 版本 | v1.11.2-beta(Laravel 12.34.0 / PHP 8.3.36) |
| 配置机制 | Laravel .env → config/*.php 的 env() 读取 |
| 环境键总量 | 180 个(`grep -rhoE "env('[A-Z0-9_]+" config/*.php |
| 配置文件 | config/ 下 23 个:app/auth/cache/cors/data/database/filesystems/jwt/logging/mail/queue/sanctum/sentry/services/session/webhook-server 等 |
| 实测载体 | 官方 all-in-one 镜像栈(B2 篇部署形态)+ 源码部署树(B1 篇方案 A) |
二、前置条件
- 已按《Ubuntu 22.04 安装 Hi.Events v1.11.2 指南》或《Hi.Events v1.11.2 Docker Compose 部署指南》完成部署并可登录;
- 熟悉 Laravel 配置生效规则:
.env改动后必须清除配置缓存(或重建服务)才生效。
三、参数查看与修改方式
查看键位与默认值:直接检索后端 config/ 目录(镜像内路径 /app/backend/config/),实测命令:
# docker exec hievents-1.11.2-aio grep -n "disable_registration" /app/backend/config/app.php
'disable_registration' => env('APP_DISABLE_REGISTRATION', false),
env('KEY', default) 的第二参数即默认值——未设置环境变量时生效的就是它。
修改方式(两种部署形态):
| 形态 | 配置落点 | 生效方式 |
|---|---|---|
| Docker Compose(B2) | .env 文件 + compose environment: 注入 | docker compose up -d hievents 重建服务(镜像启动脚本自动清缓存) |
| 源码部署(B1) | /opt/web/hi-events/backend/.env | php artisan config:clear 后 systemctl reload php8.3-fpm(队列 Worker 需 systemctl restart hievents-queue 重新读取) |
官方 all-in-one 镜像启动时自动执行
cache:clear / config:clear / route:clear / view:clear(/startup.sh实测原文见 B2 篇 4.4),因此 compose 形态改配置不需要手工清缓存。
验证生效:改动后用对应接口复测(如注册开关用注册接口、限流键连发请求看 429)。
四、参数总览
180 个环境键按配置文件归属分组统计(实测汇总):
| 分组 | 代表键 | 数量 | 是否必配 |
|---|---|---|---|
| 应用基础 APP_* | APP_KEY、APP_URL、APP_FRONTEND_URL、APP_CDN_URL | 26 | KEY 必配,其余按需 |
| 数据库 DB_* / DATABASE_URL | DB_CONNECTION、DB_HOST、DATABASE_URL | 12 | ✅ |
| Redis REDIS_* | REDIS_HOST、REDIS_PORT、REDIS_PREFIX | 11 | ✅ |
| 缓存/队列 | CACHE_DRIVER、QUEUE_CONNECTION | 15 | ✅(驱动选 redis) |
| 会话 SESSION_* | SESSION_DRIVER、SESSION_LIFETIME | 6 | 建议 |
| 认证 JWT_* | JWT_SECRET、JWT_TTL、JWT_REFRESH_TTL | 11 | SECRET 必配 |
| 邮件 MAIL_* / MAILGUN_* / POSTMARK | MAIL_MAILER、MAIL_HOST、MAIL_FROM_ADDRESS | 17 | 生产必配 |
| 文件存储 FILESYSTEM_* / AWS_* | FILESYSTEM_PUBLIC_DISK、AWS_* | 11 | 可选(默认本地盘) |
| 支付 STRIPE_* | STRIPE_PUBLIC_KEY、STRIPE_SECRET_KEY、STRIPE_WEBHOOK_SECRET | 9 | 收款必配 |
| 监控 SENTRY_* | SENTRY_DSN、SENTRY_SAMPLE_RATE | 33 | 可选 |
| 日志 LOG_* / PAPERTRAIL | LOG_CHANNEL、LOG_STDERR_FORMATTER | 9 | 建议显式 |
| 广播/推送 PUSHER_* / ABLY / BROADCAST | PUSHER_APP_KEY、BROADCAST_DRIVER | 10 | 可选 |
| 其他集成 | CORS_ALLOWED_ORIGINS、SITEMAP_*、OPEN_EXCHANGE_RATES_APP_ID、WEBHOOK_QUEUE_NAME | 11 | 按需 |
键位清单中包含少量当前版本已闲置或面向新版本的键(见 5.14 v2 键甄别),配置时以「实测有效」标注为准。
五、核心参数分类详解
5.1 应用基础(APP_*)
| 键 | 默认值 | 说明 |
|---|---|---|
| APP_KEY | 无(必配) | Laravel 应用密钥,base64: 前缀 32 字节,加密列与签名依赖它;更换等于已加密数据不可解(实测口径:改后旧 JWT 全部失效需重新登录) |
| APP_ENV | production | 环境标识,生产保持 production(debug 行为与异常详情输出受其约束) |
| APP_DEBUG | false | 调试模式;生产必须 false,否则异常堆栈直接返回给客户端 |
| APP_URL | — | 后端对外地址(nginx 80 的 /api 所在主机),影响签名 URL 与邮件内链接 |
| APP_FRONTEND_URL | — | 前端地址(SSR 端口或统一入口),CORS 与邮件跳转依赖 |
| APP_NAME | Hi.Events | 站点名称(邮件标题、页面标题引用) |
| APP_CDN_URL | — | 公共存储前缀,默认应指向 http://<主机>:<端口>/storage |
| ASSET_URL | — | 前端资源前缀,一般不设(由前端构建时 VITE_* 决定) |
| BCRYPT_ROUNDS | 12 | 密码哈希轮数(auth.php) |
VITE_* 系列是前端构建期变量(VITE_FRONTEND_URL、VITE_API_URL_CLIENT、VITE_API_URL_SERVER、VITE_APP_NAME、VITE_STRIPE_PUBLISHABLE_KEY):源码部署在 yarn build 前写入 frontend/.env;all-in-one 镜像在启动时注入并已预构建,改动后需重建服务才随环境生效。
5.2 注册与账号(实测)
| 键 | 默认值 | 说明 |
|---|---|---|
| APP_DISABLE_REGISTRATION | false | 关闭公开注册。实测置 true 后注册接口返回:{"message":"Account registration is disabled","errors":[]}(HTTP 403);首个管理员注册完成后再开启可有效封堵陌生人注册 |
| APP_ENFORCE_EMAIL_CONFIRMATION_DURING_REGISTRATION | false | 注册时强制邮箱确认(配合可用 SMTP) |
| APP_PLATFORM_SUPPORT_EMAIL | — | 平台支持邮箱(页面联系方式引用) |
| APP_EMAIL_LOGO_URL / APP_EMAIL_LOGO_LINK_URL / APP_EMAIL_FOOTER_TEXT | — | 邮件模板 Logo、跳转与页脚文案 |
实测建议:内部系统先 false 注册管理员 → 改 true 重建 → 验证 403。全流程回显见 B2 篇常见问题 Q2。
5.3 API 限流(实测)
| 键 | 默认值 | 说明 |
|---|---|---|
| APP_API_RATE_LIMIT_PER_MINUTE | 180 | API 全局限流(次/分钟),Laravel RateLimiter api 组按「登录用户 ID 或来源 IP」计数(RouteServiceProvider.php 实测源码:Limit::perMinute(config('app.api_rate_limit_per_minute'))->by($request->user()?->id ?: $request->ip())) |
| APP_ALLOWED_INTERNAL_WEBHOOK_HOSTS | 空 | Webhook 目标内网地址白名单(默认拒绝内网 URL,防 SSRF;确需推内网接收端时加白) |
限流实测:置 APP_API_RATE_LIMIT_PER_MINUTE=5 重建后连发 8 个未登录登录请求:
req1 -> 422 # 参数校验错误(仍计数)
req2 -> 422
req3 -> 422
req4 -> 422
req5 -> 422
req6 -> 429 # 触发限流
req7 -> 429
req8 -> 429
429 响应体(实测):{"message": "Too Many Attempts."}。还原默认值后恢复 422(正常业务校验响应)。
5.4 数据库(DB_* / DATABASE_URL)
| 键 | 默认值 | 说明 |
|---|---|---|
| DB_CONNECTION | pgsql | 仅支持 pgsql(官方唯一支持数据库;键位表中虽有 mysql 相关残留如 MYSQL_ATTR_SSL_CA,但官方迁移与文档口径不含 MySQL) |
| DB_HOST / DB_PORT | 127.0.0.1 / 5432 | 数据库地址;compose 形态由 DATABASE_URL 统一拼接 |
| DB_DATABASE / DB_USERNAME / DB_PASSWORD | — | 库/账号/密码 |
| DATABASE_URL | — | 连接串整体注入(compose 形态 postgresql://user:pass@postgres:5432/hi-events),优先级高于零散 DB_ 键 |
| DB_ENCRYPT / DB_TRUST_SERVER_CERTIFICATE | false | TLS 连接选项(SQL Server 风格键,pgsql 形态不涉及) |
迁移自动创建 pg_trgm 扩展(database/migrations/extensions.sql:CREATE EXTENSION IF NOT EXISTS pg_trgm;),数据库账号需具备建扩展权限(属主账号即可)。
5.5 Redis(REDIS_*)
| 键 | 默认值 | 说明 |
|---|---|---|
| REDIS_HOST | 127.0.0.1 | Redis 地址;本机部署必须 localhost,redis 是 compose 服务名(B1 篇排障实录一的第二层原因) |
| REDIS_PORT / REDIS_PASSWORD / REDIS_USERNAME | 6379 / 空 / 空 | 端口与认证 |
| REDIS_DB / REDIS_CACHE_DB | 0 / 1 | 队列与缓存逻辑库分离 |
| REDIS_PREFIX | — | 键前缀,多实例共用 Redis 时区分 |
| REDIS_CLIENT | phpredis | 客户端实现;系统需装 phpredis 扩展(Ubuntu 包 php8.3-redis,composer 依赖里没有 predis) |
| REDIS_CLUSTER / REDIS_URL | — | 集群模式与 URL 形态,单机不配 |
5.6 缓存 / 队列 / 会话
| 键 | 默认值 | 说明 |
|---|---|---|
| CACHE_DRIVER / CACHE_STORE | database / database | 两个键并存(Laravel 11+ 以 CACHE_STORE 为准,旧键兼容);生产都应设 redis |
| CACHE_PREFIX | — | 缓存键前缀 |
| QUEUE_CONNECTION | database | 队列驱动,生产必设 redis;订单邮件与 Webhook 走 default + webhook-queue 双队列,Worker 启动参数同时消费两队列(镜像内实测命令) |
| QUEUE_FAILED_DRIVER | database-uuids | 失败任务记录方式 |
| SQS_* / DYNAMODB_* | — | AWS SQS 队列 / DynamoDB 缓存(用托管服务时才配) |
| SESSION_DRIVER | database | 会话驱动,生产建议 redis(与缓存一致) |
| SESSION_LIFETIME | 120 | 会话有效期(分钟) |
| SESSION_SECURE_COOKIE / SESSION_DOMAIN | — | HTTPS 场景开启 |
| MEMCACHED_* | — | Memcached 缓存备选(不推荐,与队列联动性差) |
5.7 邮件(MAIL_*)
| 键 | 默认值 | 说明 |
|---|---|---|
| MAIL_MAILER / MAIL_DRIVER | log / log | 双键并存(MAIL_MAILER 为 Laravel 7+ 新体系);生产设 smtp |
| MAIL_HOST / MAIL_PORT | — | SMTP 地址与端口(587/465) |
| MAIL_USERNAME / MAIL_PASSWORD | — | SMTP 认证 |
| MAIL_ENCRYPTION / MAIL_AUTO_TLS / MAIL_VERIFY_PEER | — | 加密与证书校验(内网自建 SMTP 可关 VERIFY_PEER) |
| MAIL_FROM_ADDRESS / MAIL_FROM_NAME | — | 发件人;订单确认、票券发放邮件均用它 |
| MAIL_RATE_LIMIT_PER_SECOND | — | 发信速率上限(防供应商限流) |
| MAILGUN_* / POSTMARK_TOKEN | — | 托管邮件服务商(替代自建 SMTP) |
注意:MAIL_MAILER=log 时不真实发信,内容写入 storage/logs/laravel.log——验收邮件模板用它最方便,生产务必切 smtp。
5.8 文件存储(FILESYSTEM_* / AWS_*)
| 键 | 默认值 | 说明 |
|---|---|---|
| FILESYSTEM_PUBLIC_DISK | public | 公共盘(活动海报等);all-in-one 形态落容器层 /app/backend/storage/app/public,生产建议切 s3 或分离镜像外挂 |
| FILESYSTEM_PRIVATE_DISK | local | 私有盘(票券 PDF 等) |
| AWS_ACCESS_KEY_ID / AWS_SECRET_ACCESS_KEY / AWS_DEFAULT_REGION / AWS_PUBLIC_BUCKET / AWS_PRIVATE_BUCKET | — | S3 五件套 |
| AWS_ENDPOINT / AWS_URL / AWS_USE_PATH_STYLE_ENDPOINT | — | 兼容 MinIO 等 S3 兼容存储(path-style 需置 true) |
5.9 支付(STRIPE_*)
| 键 | 默认值 | 说明 |
|---|---|---|
| STRIPE_PUBLIC_KEY / STRIPE_SECRET_KEY | — | Stripe 平台密钥对(收款主链路) |
| STRIPE_WEBHOOK_SECRET | — | Stripe 回调验签(whsec_ 开头),缺失时支付回调无法安全确认订单 |
| APP_STRIPE_CONNECT_ACCOUNT_TYPE | express | 组织者 Connect 账户类型 |
| APP_SAAS_MODE_ENABLED / APP_SAAS_STRIPE_APPLICATION_FEE_PERCENT / APP_SAAS_STRIPE_APPLICATION_FEE_FIXED / APP_SAAS_DEFAULT_PASS_PLATFORM_FEE_TO_BUYER | false | SaaS 平台化运营开关(对入驻组织者抽成);普通自托管保持 false,且商用 SaaS 化受许可证附加条款约束 |
| STRIPE_CA_* / STRIPE_IE_* | — | 加拿大/爱尔兰区域 Stripe 密钥(本地化合规场景) |
| OPEN_EXCHANGE_RATES_APP_ID | — | 多币种汇率换算服务(付费票多币种结算) |
5.10 JWT 认证(JWT_*)
| 键 | 默认值 | 说明 |
|---|---|---|
| JWT_SECRET | 无(必配) | API 令牌签名密钥(openssl rand -hex 32 生成) |
| JWT_TTL | — | 访问令牌有效期;实测登录响应 expires_in=604800(7 天) |
| JWT_REFRESH_TTL | — | 刷新令牌有效期(refresh 接口实测可用,见 API 使用详解篇) |
| JWT_ALGO | HS256 | 签名算法 |
| JWT_BLACKLIST_ENABLED / JWT_BLACKLIST_GRACE_PERIOD | — | 令牌黑名单(登出即失效) |
| JWT_PRIVATE_KEY / JWT_PUBLIC_KEY / JWT_PASSPHRASE | — | 非对称签名(RS256)时配置 |
5.11 Webhook 与异步任务
| 键 | 默认值 | 说明 |
|---|---|---|
| WEBHOOK_QUEUE_NAME | webhook-queue | Webhook 分发专用队列名;Worker 必须同时消费该队列(镜像内置命令已含 --queue=default,webhook-queue,源码部署照抄 B1 篇 4.9 单元文件) |
| APP_ALLOWED_INTERNAL_WEBHOOK_HOSTS | 空 | 内网接收端白名单(默认拒绝,防 SSRF;实测对内网 URL 的 Webhook 创建会被拒绝) |
5.12 监控与日志(SENTRY_* / LOG_*)
| 键 | 默认值 | 说明 |
|---|---|---|
| LOG_CHANNEL | stack | 日志通道;容器形态实测用 stderr(统一进容器日志),源码部署用 daily(按日轮转文件) |
| LOG_LEVEL | debug | 日志级别,生产建议 info |
| LOG_SLACK_WEBHOOK_URL / LOG_PAPERTRAIL_HANDLER / PAPERTRAIL_URL / PAPERTRAIL_PORT | — | Slack / Papertrail 集中日志 |
| SENTRY_DSN / SENTRY_LARAVEL_DSN | 空 | Sentry 错误上报(键位多达 33 个:采样率、面包屑、链路追踪开关等,接入时按官方文档细化) |
| SENTRY_SAMPLE_RATE / SENTRY_TRACES_SAMPLE_RATE | — | 错误/性能采样率(生产建议 0.1~0.2) |
5.13 其他集成
| 键 | 说明 |
|---|---|
| CORS_ALLOWED_ORIGINS | 跨域白名单(前后端分离同机部署时通常无需改动,前端域名与 APP_FRONTEND_URL 一致即可) |
| BROADCAST_DRIVER / PUSHER_* / ABLY_KEY | 实时推送(订单状态实时刷新等增强功能) |
| SITEMAP_CACHE_TTL / SITEMAP_EVENTS_PER_PAGE / SITEMAP_ORGANIZERS_PER_PAGE | 公开 sitemap 生成参数(SEO) |
| APP_HOMEPAGE_TICKET_QUANTITIES_CACHE_TTL / APP_HOMEPAGE_VIEWS_UPDATE_BATCH_SIZE | 公开页性能参数(缓存 TTL 与浏览量批量落库阈值,大流量活动可调大) |
| APP_IS_HI_EVENTS | 品牌 identifying 开关(白标部署场景,一般不动) |
| APP_TAX_DEFAULT_VAT_COUNTRY / APP_TAX_DEFAULT_VAT_RATE / APP_TAX_EU_VAT_HANDLING_ENABLED | 税费默认值与欧盟 VAT 处理 |
5.14 v2 键甄别(避免无效配置)
API_DOCS_ENABLED:v2 线特性键。v1.11.2 后端config/与routes/中 0 处引用(实测 grep);置false后/docs/api仍返回 200——那只是前端单页壳,并非文档服务开关。v1 部署无需配置该键;- 键位清单中
MYSQL_ATTR_SSL_CA、DB_ENCRYPT等属于框架/兼容残留,pgsql 形态不生效; - 升级 v2 后新增键(个人 API Key、SSO 等)以官方 v2 文档为准,不要提前写入生产
.env。
六、生产配置模板
以下为最小生产模板(标注 ✅ 的必须替换为自有值;场景:单机 4C8G、活动售票中型负载、邮件走外部 SMTP、存储本地盘):
APP_ENV=production
APP_DEBUG=false
APP_KEY=base64:<openssl rand -base64 32> # ✅
JWT_SECRET=<openssl rand -hex 32> # ✅
APP_URL=http://events.example.com # ✅
APP_FRONTEND_URL=http://events.example.com # ✅
VITE_FRONTEND_URL=http://events.example.com # ✅
VITE_API_URL_CLIENT=http://events.example.com/api # ✅
VITE_API_URL_SERVER=http://events.example.com/api # ✅
APP_CDN_URL=http://events.example.com/storage # ✅
LOG_CHANNEL=daily # 容器形态用 stderr
DB_CONNECTION=pgsql
DB_HOST=127.0.0.1
DB_PORT=5432
DB_DATABASE=hi-events
DB_USERNAME=hi_events
DB_PASSWORD=<强密码> # ✅
CACHE_STORE=redis
CACHE_DRIVER=redis
QUEUE_CONNECTION=redis
SESSION_DRIVER=redis
SESSION_LIFETIME=120
REDIS_HOST=127.0.0.1
REDIS_PORT=6379
MAIL_MAILER=smtp
MAIL_DRIVER=smtp
MAIL_HOST=smtp.example.com
MAIL_PORT=587
MAIL_USERNAME=<发信账号> # ✅
MAIL_PASSWORD=<发信密码> # ✅
MAIL_ENCRYPTION=tls
MAIL_FROM_ADDRESS=no-reply@example.com
MAIL_FROM_NAME="Hi.Events"
APP_DISABLE_REGISTRATION=true # 管理员注册完成后再开
APP_API_RATE_LIMIT_PER_MINUTE=180 # 按流量调整
FILESYSTEM_PUBLIC_DISK=public
FILESYSTEM_PRIVATE_DISK=local
STRIPE_PUBLIC_KEY=pk_live_xxx # 收款时配置
STRIPE_SECRET_KEY=sk_live_xxx
STRIPE_WEBHOOK_SECRET=whsec_xxx
磁盘规划:数据库 20GB 起(含订单与票务增长)、日志轮转 5GB、公共存储按海报量 10GB 起;APP_KEY/JWT_SECRET/数据库密码务必离线备份——密钥丢失等于业务数据作废。
七、常见问题
Q1:改了 .env 不生效
Laravel 配置有缓存。compose 形态 docker compose up -d hievents 重建(启动脚本自动清缓存);源码形态 php artisan config:clear && systemctl reload php8.3-fpm,队列 Worker 另需重启。
Q2:REDIS_HOST=redis 报连接失败
redis 是 Docker 栈内的服务名。源码/本机部署写 localhost 或 127.0.0.1(B1 篇排障实录一)。
Q3:API_DOCS_ENABLED=false 后 /docs/api 仍 200
该键 v1.11.2 未引用(v2 特性),200 来自前端单页壳,属正常现象(实测确认)。
Q4:更换 APP_KEY 后会怎样
加密列数据不可解、全部 JWT 失效(需重新登录)、可能影响已存加密字段读取。仅在全新部署时生成一次,之后不再变更;如必须更换,先做数据库备份并评估加密列影响。
Q5:API 大量返回 429
触发了 APP_API_RATE_LIMIT_PER_MINUTE 限流(按用户 ID/IP 计数)。负载测试或集成调用前调大该值;429 响应体固定为 {"message": "Too Many Attempts."}(实测)。
Q6:邮件发不出去
先确认 MAIL_MAILER=smtp(log 只写日志不真实发信);再核对 MAIL_FROM_ADDRESS 与 SMTP 供应商的发信域名一致性;内网自建 SMTP 若证书不受信,MAIL_VERIFY_PEER=false 临时放行(生产补正规证书)。
八、参考链接
- 官方部署文档(Environment Variables 章节):https://hi.events/docs/getting-started/deploying
- 后端配置源码:https://github.com/HiEventsDev/Hi.Events/tree/develop/src/Config(v1.11.2 tag 对应
config/目录) - 本专栏关联篇章:《Hi.Events v1.11.2 介绍与选型指南》《Ubuntu 22.04 安装 Hi.Events v1.11.2 指南》《Hi.Events v1.11.2 Docker Compose 部署指南》《Hi.Events v1.11.2 API 使用详解》