SolidInvoice 3.1.2 配置参数详解
SolidInvoice 3.1.2 全量配置参数手册:run 进程参数、SOLIDINVOICE_* 环境变量、/etc/solidinvoice 加密配置目录、app_config 数据库设置四层体系逐项实测,含安装器参数与配置核查排障命令。
SolidInvoice 3.1.2 配置参数详解
目标:把 SolidInvoice 3.1.2 的完整配置面讲清讲全——进程启动参数、环境变量、加密配置目录、数据库设置四层体系,逐项给出参数名、默认值、作用与实测验证方式。全文命令与回显均在 Ubuntu 22.04.4 LTS(x86_64)+ SolidInvoice 3.1.2 + MySQL 8.4 环境实测通过,实测日期 2026-10-24。部署过程与持久化目录规划见《SolidInvoice 3.1.2 Docker Compose 部署指南》,软件定位与技术架构见《SolidInvoice 3.1.2 介绍与选型指南》,API 集成与排障实战见《SolidInvoice 3.1.2 API 使用详解》。
一、环境信息
- 操作系统:Ubuntu 22.04.4 LTS(x86_64)
- SolidInvoice 版本:3.1.2(官方最新稳定版)
- 数据库:MySQL 8.4(应用库名
solidinvoice) - 应用监听端口:8765(内置 Web 服务器固定端口),本机访问入口
http://127.0.0.1:8136 - 配置目录:
/etc/solidinvoice(自包含发行形态固定路径,必须持久化) - 演示账号:应用管理员
admin@example.com(演示环境测试口令) - 实测日期:2026-10-24(文中全部参数、回显均为当日实测,无转述)
二、配置体系总览
SolidInvoice 3.1.2 的配置分四层,职责与优先级如下:
| 层 | 载体 | 写入方式 | 典型内容 |
|---|---|---|---|
| 1. 进程参数 | solidinvoice run <flags> | 启动命令行 | 端口、域名、HTTPS 证书、metrics、worker 进程数 |
| 2. 环境变量 | SOLIDINVOICE_* | systemd 单元文件 / 启动环境 | 与进程参数等价的映射项 + 数据库/邮件/队列/检索连接 DSN |
| 3. 配置目录 | /etc/solidinvoice 下的 secrets 加密文件 | 安装器与控制台命令写入 | 数据库连接、应用密钥、安装状态、语言、应用 URL |
| 4. 数据库设置 | app_config 表 | 管理界面「设置」页写入 | 公司信息、邮件发件人、发票编号策略、提醒、水印 |
前两层是"启动形态"配置,第三层是"应用身世"配置,第四层是"业务偏好"配置。三层持久化配置的分工边界清晰:连数据库、定密钥这类启动前必须就位的配置走配置目录(加密落盘);公司抬头、发票前缀、提醒天数这类业务偏好走数据库设置(界面可改);端口、TLS、worker 数这类运行形态走进程参数或环境变量。
优先级关系(实测来源:官方发行文件 solidinvoice.env 头部注释原文):
# CLI flags always take precedence over values set here.
即进程参数 > 环境变量;而配置目录与数据库设置属于应用自身读取的持久化配置,与前两层不构成覆盖关系。
三、进程参数层:solidinvoice run
solidinvoice run 是自包含发行形态的唯一启动入口(部署篇 4.2 已用它启动应用)。全量参数以 solidinvoice run --help 实测输出为准(2026-10-24,应用服务器上执行):
Runs SolidInvoice
Usage:
SolidInvoice run [flags]
Flags:
--disable-https Disable HTTPS. The application will only be accessible using http://. This setting is not recommended, unless you are setting up a reverse proxy which will handle https. Combine with --domain to specify the hostname Caddy should accept when behind a reverse proxy (e.g. --disable-https --domain solidinvoice.example.com)
--domain string The domain name to use for the application. When specifying a domain, an SSL certificate will automatically be generated for you
--enable-metrics Enable Prometheus metrics endpoint on a dedicated port. Exposes Caddy HTTP metrics and FrankenPHP worker/thread metrics for scraping
-h, --help help for run
--lets-encrypt Enable Let's Encrypt for automatic SSL certificates (requires --domain)
--log-format string Log output format: 'json' for structured JSON logs, or 'console' (default) for human-readable console output (default "console")
--messenger-workers int Number of messenger worker processes to spawn. Each worker processes async messages independently. Set to 0 to disable built-in workers entirely (recommended for Kubernetes, where a dedicated worker pod runs 'solidinvoice worker'). Increase above 1 for high-traffic standalone deployments (e.g., --messenger-workers=5) (default 1)
--metrics-port int Port for the Prometheus metrics endpoint (only used when --enable-metrics is set) (default 9090)
--port string The default port to use for the application. When specifying a domain to use, the port will default to 443 (default "8765")
--server-ip string If you have multiple IP addresses on your server, specify the IP address to use. By default, the server will bind to all IP addresses (default "10.89.58.3")
--skip-intro Skip the introductory application info message
--ssl-cert string Path to custom SSL certificate file (requires --ssl-key and --domain)
--ssl-key string Path to custom SSL private key file (requires --ssl-cert and --domain)
--worker-mode Enable FrankenPHP worker mode for improved performance (keeps PHP workers alive between requests). Recommended for SaaS/high-traffic deployments. Can also be enabled via FRANKENPHP_WORKER_MODE=1 environment variable
--worker-threads int Number of FrankenPHP worker threads when worker mode is enabled (default: 2) (default 2)
逐参数说明(默认值取自上方实测回显):
| 参数 | 默认值 | 作用与注意事项 |
|---|---|---|
--port | 8765 | HTTP 监听端口;一旦指定 --domain,端口自动切换为 443 |
--server-ip | 自动探测本机出口 IP(实测环境回显 10.89.58.3) | 多网卡服务器指定绑定 IP;不指定时绑定全部 IP |
--domain | 无 | 指定域名后应用绑定 https://<域名> 并自动生成 SSL 证书 |
--disable-https | 关闭(默认 HTTPS) | 切换纯 HTTP;官方提示仅建议在反代终止 TLS 的场景使用,可与 --domain 组合声明反代背后的主机名 |
--lets-encrypt | 关闭 | 自动签发 Let's Encrypt 证书,必须配合 --domain |
--ssl-cert / --ssl-key | 无 | 自定义证书/私钥路径,二者与 --domain 三者互相依赖(需同时给出) |
--log-format | console | console 人类可读 / json 结构化日志(systemd 场景官方默认文件推荐 json) |
--messenger-workers | 1 | 后台消息 worker 进程数;0 表示完全禁用内置 worker(此时需另行运行 solidinvoice worker);高流量独立部署可调大(帮助原文示例 --messenger-workers=5) |
--worker-mode | 关闭 | FrankenPHP worker 常驻模式,降低每请求开销;也可用环境变量 FRANKENPHP_WORKER_MODE=1 开启 |
--worker-threads | 2 | worker 模式下的线程数(仅在 worker 模式开启时有效) |
--enable-metrics | 关闭 | 在独立端口暴露 Prometheus 指标(内容为 Caddy HTTP 指标与 FrankenPHP worker/线程指标) |
--metrics-port | 9090 | 指标端口,仅在 --enable-metrics 开启时生效 |
--skip-intro | 关闭 | 跳过启动时的 ASCII 图与 URL 摘要输出 |
典型组合示例(在应用服务器上执行):
# 反向代理终止 TLS,应用只监听本机回环的 9000 端口
solidinvoice run --disable-https --port=9000 --log-format=json
# 独立暴露公网,自动 Let's Encrypt 证书 + Prometheus 指标
solidinvoice run --domain=invoice.example.com --lets-encrypt --enable-metrics
⚠️ 注意:
--lets-encrypt要求域名解析到本机且 80/443 可达;--disable-https与--lets-encrypt、--ssl-cert/--ssl-key三条 TLS 路线互斥,只能选其一。
四、环境变量层
环境变量分两组:一组与进程参数一一对应(systemd 部署时代替 CLI 参数),另一组控制连接与行为(进程参数没有覆盖到的地方)。以下全部变量与默认值取自官方发行文件 solidinvoice.env(systemd 单元引用的配置文件,逐行注释级实测核对)。
4.1 网络与 TLS
| 变量 | 默认 | 说明 |
|---|---|---|
SOLIDINVOICE_PORT | 8765 | 对应 --port |
SOLIDINVOICE_SERVER_IP | 自动探测 | 对应 --server-ip(注释示例 0.0.0.0) |
SOLIDINVOICE_DOMAIN | 空 | 对应 --domain;设置后绑定 https://<域名> |
SOLIDINVOICE_DISABLE_HTTPS | 0 | 置 1 等价 --disable-https(反代终止 TLS 场景) |
SOLIDINVOICE_LETS_ENCRYPT | 0 | 置 1 等价 --lets-encrypt,与 DISABLE_HTTPS 互斥 |
SOLIDINVOICE_SSL_CERT / SOLIDINVOICE_SSL_KEY | 空 | 自定义证书/私钥路径,与 DISABLE_HTTPS、LETS_ENCRYPT 互斥 |
4.2 性能
| 变量 | 默认 | 说明 |
|---|---|---|
FRANKENPHP_WORKER_MODE | 0 | 置 1 等价 --worker-mode |
SOLIDINVOICE_WORKER_THREADS | 2 | 对应 --worker-threads |
SOLIDINVOICE_MESSENGER_WORKERS | 1 | 对应 --messenger-workers;置 0 禁用内置 worker,用独立 solidinvoice worker 进程接管 |
4.3 应用运行形态
| 变量 | 默认 | 说明 |
|---|---|---|
SOLIDINVOICE_ENV | prod | 应用运行环境;官方注释提示仅本地开发改 dev |
SOLIDINVOICE_DEBUG | 0 | 调试开关(0/1),官方注释明确生产永不开启 |
SOLIDINVOICE_CONFIG_DIR | /etc/solidinvoice | 配置目录:存放生成的密钥、OAuth 凭据,以及未接外部数据库时的 SQLite 库文件 |
SOLIDINVOICE_SKIP_INTRO | 0 | 置 1 跳过启动横幅 |
SOLIDINVOICE_LOG_FORMAT | console | json(systemd 场景官方默认文件写明 json)/ console |
4.4 连接类变量
| 变量 | 默认 | 说明 |
|---|---|---|
SOLIDINVOICE_DATABASE_URL | 未设置时使用配置目录内 SQLite | 数据库连接 URL,支持 mysql、postgresql、sqlite 三种驱动。官方注释示例:mysql://user:password@127.0.0.1:3306/solidinvoice、postgresql://user:password@127.0.0.1:5432/solidinvoice |
SOLIDINVOICE_MAILER_DSN | 界面中配置的邮件设置 | 出站邮件传输 DSN,设置后覆盖界面配置。官方注释示例:smtp://user:password@smtp.example.com:587、sendgrid://API_KEY@default、ses+smtp://ACCESS_KEY:SECRET_KEY@default |
SOLIDINVOICE_MAILER_SENDER | 界面配置 | 全局发件人,官方注释示例 SolidInvoice <noreply@example.com>,同样覆盖界面配置 |
SOLIDINVOICE_MESSENGER_DSN | doctrine://default?queue_name=async(应用库内队列) | 异步任务队列传输 DSN;高吞吐/多 worker 场景官方注释给出 redis://localhost:6379/messages、amqp://guest:guest@localhost/%2f/messages |
SOLIDINVOICE_MEILISEARCH_URL | 空(禁用) | 可选全文检索:发票/客户/报价全文搜索走 Meilisearch;留空回退基础数据库查询 |
SOLIDINVOICE_MEILISEARCH_API_KEY | 空 | 与上一项配套的检索密钥 |
4.5 应用行为变量
| 变量 | 默认 | 说明 |
|---|---|---|
SOLIDINVOICE_LOCALE | en | 界面语言(en/fr/de/nl 等) |
SOLIDINVOICE_ALLOW_REGISTRATION | 0 | 是否允许访客自助注册(0/1);官方注释默认关闭,仅在有意开放时开启 |
SOLIDINVOICE_SENTRY_DSN | 空 | Sentry 错误与性能监控接入 |
SOLIDINVOICE_ENABLE_METRICS | 0 | 置 1 等价 --enable-metrics |
SOLIDINVOICE_METRICS_PORT | 9090 | 对应 --metrics-port |
4.6 MCP 会话变量(源码取证)
SolidInvoice 3.1.2 内置面向 AI Agent 的 MCP 服务(/_mcp 路由),其会话存储由 4 个环境变量控制。以下名称、默认值与取值范围取自应用源码 config/packages/pkg-mcp.php(3.1.2 tag):
| 变量 | 默认值 | 说明(源码注释原文口径) |
|---|---|---|
SOLIDINVOICE_MCP_SESSION_STORE | file | 会话存储后端,可选 file(磁盘,单机默认)/ memory(进程内,仅开发用,重启即失)/ cache(PSR-16 缓存池,多节点场景配合 Redis 池)/ framework(复用应用 Symfony session 处理器) |
SOLIDINVOICE_MCP_SESSION_CACHE_POOL | cache.mcp.sessions | store=cache 时使用的 PSR-16 缓存池服务 ID |
SOLIDINVOICE_MCP_SESSION_PREFIX | mcp- | 会话键前缀 |
SOLIDINVOICE_MCP_SESSION_TTL | 3600 | 会话有效期(秒) |
💡 技术拓展:环境变量层中"连接类"(4.4)之所以设计为覆盖界面配置,是因为邮件/队列故障往往发生在业务低峰的夜间任务里,运维直接改 systemd 环境重启即可止血,无需登录界面逐项排查;而业务偏好在数据库层随时可改,无需重启。两层各管一段故障半径。
五、配置目录层:/etc/solidinvoice
配置目录是应用"身世"的存放地。安装器(部署篇 4.3)执行后,实测目录清单如下:
oauth
solidinvoice.decrypt.private.php
solidinvoice.encrypt.public.php
solidinvoice.list.php
solidinvoice.SOLIDINVOICE_APPLICATION_URL.170fd7.php
solidinvoice.SOLIDINVOICE_APP_SECRET.31f70b.php
solidinvoice.SOLIDINVOICE_BUILD_ID.276607.php
solidinvoice.SOLIDINVOICE_DATABASE_URL.86f089.php
solidinvoice.SOLIDINVOICE_ENABLE_TELEMETRY.3b5772.php
solidinvoice.SOLIDINVOICE_INSTALLED.c0d8a4.php
solidinvoice.SOLIDINVOICE_LOCALE.b96b2c.php
5.1 命名规则与文件清单
加密配置文件命名为 solidinvoice.SOLIDINVOICE_<配置名>.<指纹>.php,每个文件对应一项配置:
| 文件 | 对应配置 | 写入时机 |
|---|---|---|
SOLIDINVOICE_APP_SECRET | 应用密钥(会话签名、API Token 哈希等的根密钥) | 安装第一步自动生成 |
SOLIDINVOICE_DATABASE_URL | 数据库连接 URL | 安装时按 --database-* 参数拼装 |
SOLIDINVOICE_INSTALLED | 安装完成标记 | 安装收尾 |
SOLIDINVOICE_APPLICATION_URL | 对外访问 URL(发票链接、邮件地址用它拼接) | 安装时按 --application-url 写入 |
SOLIDINVOICE_LOCALE | 界面语言 | 安装时按 --locale 写入 |
SOLIDINVOICE_BUILD_ID | 安装构建标识 | 安装时生成 |
SOLIDINVOICE_ENABLE_TELEMETRY | 匿名使用统计开关 | 安装时按 --disable-telemetry 写入 |
solidinvoice.list.php 是全部配置项的清单文件(值均为 null 占位),实测内容:
<?php
return [
'SOLIDINVOICE_APPLICATION_URL' => null,
'SOLIDINVOICE_APP_SECRET' => null,
'SOLIDINVOICE_BUILD_ID' => null,
'SOLIDINVOICE_DATABASE_URL' => null,
'SOLIDINVOICE_ENABLE_TELEMETRY' => null,
'SOLIDINVOICE_INSTALLED' => null,
'SOLIDINVOICE_LOCALE' => null,
];
5.2 加密机制
每个加密配置文件是 Symfony Secrets Vault 加密后的 PHP 文件。以实测的 SOLIDINVOICE_LOCALE 文件为例(内容为二进制密文,非明文):
<?php // solidinvoice.SOLIDINVOICE_LOCALE.b96b2c on Sat, 24 Oct 2026 07:11:10 +0000
return "\x25\xA8\x0B\x8CL\x86\x40o\x5C\xA5\x91\xD8\xF3\xCD\x10\xF8\x8B\x0C_...";
配套的密钥对文件:
solidinvoice.encrypt.public.php:加密公钥solidinvoice.decrypt.private.php:解密私钥,文件头注释行携带解密密钥标识(实测样例结构如下,密钥值本文脱敏):
<?php // solidinvoice.decrypt.private on Sat, 24 Oct 2026 07:10:33 +0000
// SYMFONY_DECRYPTION_SECRET=<base64 解密密钥,本文脱敏>
return "X\xC11\x80SiQ\x0C...";
写入机制(源码 ConfigWriter.php,3.1.2 tag 实证):配置名统一加前缀 SOLIDINVOICE_(常量 CONFIG_PREFIX),随后调用密钥库 seal() 加密落盘——这就是配置目录中所有文件名都带 SOLIDINVOICE_ 前缀的原因。oauth/ 子目录用于 OAuth 凭据存放(全新安装为空目录)。
5.3 修改通道与失效风险
- 官方修改通道:安装器参数(见第七章)与控制台命令。例如安装后更新对外 URL,官方帮助文本给出的通道是:
solidinvoice console secrets:set SOLIDINVOICE_APPLICATION_URL
- 升级兼容:应用加载器(源码
EnvLoader.php)内置旧版env.php配置的自动迁移逻辑(migrateToSecrets),从旧版本升级时旧配置文件会被自动转换为 secrets 形态。 - 失效风险(实测确认):手工编辑这些带指纹的加密文件会破坏"文件名指纹 ↔ 内容"的对应关系,导致应用读不到配置或启动失败。改配置一律走安装器、
secrets:set或管理界面,不要直接改文件。
六、数据库设置层:app_config 表
业务层配置存放在应用库 app_config 表,与管理界面「设置」页一一对应。
6.1 表结构(实测 DESCRIBE)
setting_key varchar(191) 配置键(路径式命名,如 invoice/payment_terms)
setting_value varchar(191) 配置值(NULL 表示未设置,走 default_value)
description text 字段说明
field_type varchar(191) Symfony 表单类型全限定名(决定设置页的控件形态)
form_options longtext 表单选项(JSON)
default_value varchar(191) 默认值
company_id binary(16) 公司标识(多公司隔离维度)
field_type 直接决定该项在设置页渲染成什么控件(如 CheckboxType 渲染开关、EmailType 渲染邮箱输入框),company_id 则说明这套设置按公司隔离——多公司部署时每家公司有独立的发票前缀、提醒策略与公司抬头。
6.2 全量配置项(25 行实测)
连接应用库执行 SELECT setting_key, setting_value, field_type, default_value FROM app_config ORDER BY setting_key; 实测共 25 行,按前缀分组:
email/*(邮件发件,3 项)
| setting_key | 实测值 | 默认值 | 表单类型 |
|---|---|---|---|
email/from_address | no-reply@solidinvoice.co | 同左 | EmailType |
email/from_name | Acme Corp | 同左 | TextType |
email/sending_options/provider | NULL | NULL | MailTransportType(设置页邮件页含 SMTP/Gmail/Sendgrid/Mailgun/Postmark/Mandrill/Amazon SES 各服务商字段) |
invoice/*(发票行为,10 项)
| setting_key | 实测值 | 默认值 | 表单类型 |
|---|---|---|---|
invoice/bcc_address | NULL | NULL | EmailType |
invoice/email_subject | New Invoice - #{id} | 同左 | TextType |
invoice/id_generation/strategy | auto_increment | 同左 | BillingIdConfigurationType |
invoice/id_generation/id_prefix | (空) | — | TextType |
invoice/id_generation/id_suffix | (空) | — | TextType |
invoice/payment_terms | net_30 | 同左 | PaymentTermsSettingType |
invoice/reminder/enabled | 1 | 同左 | CheckboxType |
invoice/reminder/pre_due_enabled | 1 | 同左 | CheckboxType |
invoice/reminder/pre_due_days | 3 | 同左 | IntegerType |
invoice/watermark | 1 | 同左 | CheckboxType |
quote/(报价行为,7 项,与 invoice/ 同构)
| setting_key | 实测值 | 默认值 | 表单类型 |
|---|---|---|---|
quote/bcc_address | NULL | NULL | EmailType |
quote/email_subject | New Quotation - #{id} | 同左 | TextType |
quote/id_generation/strategy | auto_increment | 同左 | BillingIdConfigurationType |
quote/id_generation/id_prefix | (空) | — | TextType |
quote/id_generation/id_suffix | (空) | — | TextType |
quote/watermark | 1 | 同左 | CheckboxType |
system/company/*(公司信息,5 项)
| setting_key | 实测值 | 默认值 | 表单类型 |
|---|---|---|---|
system/company/company_name | Acme Corp | 同左 | TextType |
system/company/currency | USD | 同左 | CurrencyType |
system/company/contact_details/address | NULL | NULL | AddressType |
system/company/contact_details/email | NULL | NULL | EmailType |
system/company/contact_details/phone_number | NULL | NULL | TextType |
system/company/logo | NULL | NULL | ImageUploadType |
几个实用结论:
#{id}占位符:邮件主题里的#{id}会被替换为发票/报价单号,可自定义前后缀(如INVOICE-2026-)。- 编号策略
strategy=auto_increment:单号自增;前缀/后缀自由拼接,配合后可实现"INV-0001-2026"式单号。 pre_due_days=3:到期前 3 天触发预到期提醒(pre_due_enabled=1开启);逾期提醒由reminder/enabled=1总开关控制。- 实测环境全部行属于同一家公司(
company_id为同一加密二进制值),多公司部署时以上键按公司各存一份。
6.3 修改方式
app_config 的正常写入入口是管理界面「设置」页(界面按 field_type 渲染控件,保存后写回该表);邮件服务商的详细字段在设置的 Email 页,公司信息与默认币种在 System 页。数据库层的值与环境变量的关系见 4.4:邮件传输 DSN 若设置了环境变量会覆盖界面配置。
七、安装器参数:solidinvoice:install
安装器参数决定了配置目录层(第五章)的初始内容。solidinvoice console solidinvoice:install --help 实测输出(应用服务器上执行):
Description:
Installs the application
Usage:
solidinvoice:install [options]
Options:
--database-driver=DATABASE-DRIVER The database driver to use
--database-host=DATABASE-HOST The database host
--database-port=DATABASE-PORT The database port
--database-name=DATABASE-NAME The name of the database to use (will be created if it doesn't exist)
--database-user=DATABASE-USER The name of the database user
--database-password=DATABASE-PASSWORD The password for the database user
--skip-user Skip creating the admin user
--admin-password=ADMIN-PASSWORD The password of admin user
--admin-email=ADMIN-EMAIL The email address of admin user
--locale=LOCALE The locale to use
--application-url=APPLICATION-URL The URL where this SolidInvoice instance will be accessible (including protocol, e.g. https://invoices.example.com). Use `bin/console secrets:set SOLIDINVOICE_APPLICATION_URL` to update this after installation.
--disable-telemetry Disable sending anonymous usage statistics
-h, --help Display help for the given command. When no command is given display help for the list command
--silent Do not output any message
-q, --quiet Only errors are displayed. All other output is suppressed
-V, --version Display this application version
--ansi|--no-ansi Force (or disable --no-ansi) ANSI output
-n, --no-interaction Do not ask any interactive question
-e, --env=ENV The Environment name. [default: "prod"]
--no-debug Switch off debug mode.
--profile Enables profiling (requires debug).
-v|vv|vvv, --verbose Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
要点:
--database-name的帮助原文写明 will be created if it doesn't exist——安装器自建库,因此数据库侧无需预建库(部署篇 4.1 据此不设预建库变量)。--skip-user跳过创建管理员(配合已导入用户数据的场景);--admin-email/--admin-password创建管理员。--application-url帮助原文给出安装后更新通道:secrets:set SOLIDINVOICE_APPLICATION_URL(即第五章 5.3 的官方修改通道)。--disable-telemetry关闭匿名使用统计,对应配置目录中的SOLIDINVOICE_ENABLE_TELEMETRY。- 一套完整的调用示例与逐步回显见《SolidInvoice 3.1.2 Docker Compose 部署指南》第四章,本文不再重复。
八、配置核查与排障命令
以下诊断命令经 solidinvoice console 命令清单实测确认存在于 3.1.2(用法以各自 --help 为准):
| 命令 | 用途 |
|---|---|
debug:config | 查看应用最终合并后的配置树 |
debug:dotenv | 查看环境变量加载与解析结果 |
debug:container | 检查服务容器中的服务定义与参数 |
debug:router | 查看全部路由(含 API、/_mcp 等) |
debug:firewall | 查看安全防火墙配置(登录、API 鉴权入口) |
about | 输出应用概要(环境、版本、调试状态) |
dbal:run-sql | 直接对应用库执行 SQL(核查 app_config 等表用) |
doctrine:migrations:status | 查看数据库迁移状态(排查版本升级后表结构差异) |
cache:clear | 清应用缓存(改配置排障常用) |
mailer:test | 邮件发送自检(排查邮件配置) |
api:openapi:export / api:graphql:export | 导出 API 规范文档(REST OpenAPI / GraphQL Schema) |
cron:run | 手动触发定时任务(提醒、逾期标记等) |
messenger:stats | 查看异步队列积压统计 |
meilisearch:* 系列 | 检索索引管理(未接 Meilisearch 时无需关注) |
mcp:keys:generate / debug:mcp | MCP 服务密钥与调试 |
排障路径建议:先分层——启动类问题查进程参数与环境变量(第三、四章);连接类问题查配置目录加密文件是否齐全(第五章,ls /etc/solidinvoice 对照 5.1 清单);行为类问题查 app_config(第六章,dbal:run-sql 查表)。
九、常见问题
Q1:改了 systemd 里的 SOLIDINVOICE_PORT 却没生效?
两层可能:一是命令行参数优先级更高(官方发行文件头部注释原文 "CLI flags always take precedence over values set here."),检查服务单元的启动命令是否带了同名参数;二是改完未重启服务进程。端口实际绑定可用 ss -ltn | grep 8765(或自定义端口)核对。
Q2:直接编辑 /etc/solidinvoice 下的加密配置文件后应用异常?
见 5.3:这些文件是带指纹校验的加密密文(vault->seal() 落盘),手改会破坏指纹与密文一致性。恢复通道:用安装器重跑对应配置项,或 secrets:set SOLIDINVOICE_<名称> 重写;不要手编文件。
Q3:换了数据库密码后应用连不上库?
连接串加密存放在配置目录的 SOLIDINVOICE_DATABASE_URL 文件中。用 secrets:set SOLIDINVOICE_DATABASE_URL 写入新连接串后重启应用;期间可用 debug:dotenv 与 dbal:run-sql "SELECT 1;" 快速定位是连接串问题还是数据库侧问题。
Q4:发票邮件主题里的单号怎么自定义?
改 invoice/email_subject(模板占位符 #{id})与 invoice/id_generation/id_prefix/id_suffix(单号前后缀),均在管理界面「设置」页完成,对应第六章 6.2 表。
Q5:测试环境想彻底关闭遥测与提醒?
遥测:安装器 --disable-telemetry,或 secrets:set SOLIDINVOICE_ENABLE_TELEMETRY 重写该项。提醒:界面设置关闭 invoice/reminder/enabled 与 invoice/reminder/pre_due_enabled(第六章 6.2)。
Q6:想让全文搜索走 Meilisearch,配置在哪?
设置 SOLIDINVOICE_MEILISEARCH_URL(必要时加 SOLIDINVOICE_MEILISEARCH_API_KEY)并重启应用;不配置时应用自动回退数据库查询,功能可用但仅限基础匹配(4.4)。
Q7:高流量场景怎么调性能参数?
三件套:--worker-mode(或 FRANKENPHP_WORKER_MODE=1)开启 PHP 常驻 worker、--worker-threads 调线程数、--messenger-workers 调后台任务进程数;队列改 Redis/AMQP 走 SOLIDINVOICE_MESSENGER_DSN(4.2、4.4)。改完用 messenger:stats 观察队列积压验证效果。