Wavelog 3.2.4 配置参数详解

目标:把 Wavelog 3.2.4 的四层配置(config.php / database.php 文件层、options 表动态层、cron 表任务层、PHP 运行时层)逐项讲透——每个参数的实测值、默认值、修改方式与生效路径,全部取自已部署实例的实测回显(2026-11-01,实例部署过程见站内 [《Wavelog 3.2.4 Docker Compose 部署指南》](https://www.quzuo.net/document/AgknOAzccbzL))。

WavelogWavelog自托管Cloudlog2026/11/01

Wavelog 3.2.4 配置参数详解

目标:把 Wavelog 3.2.4 的四层配置(config.php / database.php 文件层、options 表动态层、cron 表任务层、PHP 运行时层)逐项讲透——每个参数的实测值、默认值、修改方式与生效路径,全部取自已部署实例的实测回显(2026-11-01,实例部署过程见站内 《Wavelog 3.2.4 Docker Compose 部署指南》)。

一、环境信息

  • 应用版本:Wavelog 3.2.4(WAVELOG_GIT_DESCRIBE=3.2.4;options 表 version=3.2.4、adif_version=3.1.8)
  • 运行时:PHP 8.5.12 / Apache 2.4.69 (Debian) / MariaDB 11.8.9 / 数据库迁移版本 307
  • 框架:CodeIgniter 3,环境变量 CI_ENV=docker 时加载 application/config/docker/ 配置目录
  • 配置文件实测行数(wc -l):
  948 /var/www/html/application/config/docker/config.php
   98 /var/www/html/application/config/docker/database.php
 1046 total
  • 动态配置:options 表 11 行、cron 表 21 个任务(本文五、5.8/5.9 全表实测)
  • 演示实例账号:管理员 root / q1w2e3r4;数据库业务账号 wavelog / q1w2e3r4,库名 wavelog;Web 入口 http://127.0.0.1:8137/

💡 说明:本文参数值均为该演示实例实测。config.php 由安装向导生成(见部署篇 4.5),因此部分项(如 base_url、locator)带有演示实例的取值;参数含义与出厂默认值以官方定义为准。Wavelog 与母项目 Cloudlog 的配置对照见站内 《Cloudlog 2.8.21 配置参数详解》。

二、前置条件

  • 已完成 Wavelog 3.2.4 部署并通过初始化向导(部署主线见 《Wavelog 3.2.4 Docker Compose 部署指南》);
  • 能以 root 或管理员 root/q1w2e3r4 登录 Web UI(Admin 菜单入口);
  • 能读取应用目录 /var/www/html/application/config/docker/ 与日志目录 /var/www/html/application/logs/;
  • 有 MariaDB 客户端可连业务库(本文 DB 查询均实测于 -u wavelog 业务账号)。

三、参数查看与修改方式

Wavelog 的配置不是一张大表,而是四层各司其职,改法与生效方式各不相同。

3.1 文件层:config.php 与 database.php

实测目录内容(安装器生成后):

total 52
drwxrwxr-x 2 999  www-data  4096 Nov  1 17:40 .
-rw-r--r-- 1 www-data www-data 34739 Nov  1 17:40 config.php
-rw-r--r-- 1 www-data www-data  4633 Nov  1 17:40 database.php
  • 查看:直接 cat/编辑器打开;
  • 修改:编辑文件保存后,重启应用进程生效(docker compose restart wavelog-main 或对应 systemd/服务重载);
  • 机制:CI_ENV=docker 使 CodeIgniter 以 config/docker/ 覆盖默认 config/ 目录——配置外置在挂载卷上,镜像升级不丢配置。

3.2 动态层:options 表(Web UI 系统设置)

管理员在 Web UI(Admin → System Settings)改的全局项落 options 表,即时生效、无需重启。实测全表(11 行):

option_id	option_name	option_value
1	theme	darkly_wide
2	map_tile_server	https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png
3	map_tile_server_copyright	Map data &copy; <a href="https://www.openstreetmap.org/">Ope
4	language	english
5	global_search	false
6	cat_timeout_interval	1800
7	version	3.2.4
11	mastercron_last_run	2026-11-01 09:48:01
12	adif_version	3.1.8
13	version_dialog	release_notes
14	version_dialog_header	Version Info

解读:theme/language 是界面项;map_tile_server 决定地图瓦片源(默认 OSM 标准瓦片);cat_timeout_interval=1800 为电台 CAT 控制超时秒数;version/adif_version 由升级流程维护;mastercron_last_run 是后台任务最近一次执行时间戳(限流判定依据之一,见 5.9)。注意 option_id 有跳号(8/9/10 缺)——删除过的配置项不回收 ID。

3.3 任务层:cron 表(Admin → Cron Manager)

21 个后台任务的开关与周期全在 cron 表,Web UI 勾选即改,实测全表见 5.8。

3.4 运行时层:PHP ini

镜像内置 PHP 配置(PHP_INI_DIR=/usr/local/etc/php),关键项实测生效值:

max_execution_time => 0 => 0
memory_limit => 256M => 256M
post_max_size => 64M => 64M
upload_max_filesize => 64M => 64M

修改需重建镜像或挂载自定义 ini 文件。PHP 已编译模块实测(php -m 节选):

apcu
curl
gd
json
mbstring
mysqli
openssl
session

mysqli/apcu/gd 分别是数据库驱动、缓存适配器与图片处理的前提。

四、参数总览

层载体规模典型内容修改入口生效方式
文件层config.php948 行URL/session/auth/cache/log/功能开关编辑文件重启应用
文件层database.php98 行数据库连接与字符集编辑文件重启应用
动态层options 表11 行主题/语言/瓦片源/版本戳Web UI 系统设置即时
任务层cron 表21 行各同步任务开关+cron 表达式Web UI Cron Manager即时(下个周期)
运行时层PHP ini4+ 项内存/上传/执行时限镜像/挂载 ini重启应用

⚠️ 注意:同名概念可能跨层出现(如日志量级:文件层 log_threshold 控应用日志,PHP 层 memory_limit 控进程内存),修改前先确认属于哪一层。

五、核心参数分类详解

以下逐项取自实测 config.php(行号为文件内实际行号)。

5.1 应用与 URL

行号参数实测值说明
15app_name'Wavelog'应用名,页面标题前缀
16directory''子目录部署路径,根部署留空
160base_url'http://127.0.0.1:8137/'站点基址,向导 websiteurl 写入;改 HTTPS 域名必须同步改此项
172index_page''空值=干净 URL(依赖 Apache mod_rewrite)
189uri_protocol'REQUEST_URI'URI 探测方式
201url_suffix''URL 后缀
214charset'UTF-8'内部字符集
272permitted_uri_chars'a-z 0-9~%.:_\-'URI 白名单字符
296-299enable_query_strings 等FALSE/c/m/dCI3 查询字符串触发器,保持默认
313allow_get_arrayTRUE允许 GET 数组参数

5.2 认证与权限

行号参数实测值说明
118use_authtrue关闭则全站免登录,仅限调试
119auth_table'users'认证表
120auth_mode'3'最低可用用户级别(见下注释)
122-123auth_level[3]/[99]'Operator'/'Administrator'级别名称定义
136auth_header_enablefalse第三方 SSO(受信 HTTP 头 JWT),开启需 sso.php 配套
483encryption_key'48ebf3…e9d'(演示实例值,节选展示)CI 加密密钥:会话签名与 cron 令牌派生的根,丢失即失效
625csrf_protectionFALSE表单跨站请求伪造防护开关

auth_mode 的官方注释实测(config.php 108-114 行):

| 'use_auth'	False turns all authentication off, best used when setting up
| 'auth_table'	MySQL Database Table defaults "users"
| 'auth_mode'	Minimum user level required 0 = anonymous, 1 = viewer,
|				2 = editor, 3 = api user, 99 = owner
| 'auth_level[]'	Defines level titles
*/

解读:级别体系 0=匿名、1=查看、2=编辑、3=API 用户、99=所有者;auth_mode='3' 意味着未登录/低级别用户拿不到任何操作面。实测 users 表中 root 为 user_type=99(见 CLI 篇查询回显)。

💡 技术拓展:Wavelog 的认证形态不止本地账号一种。

方式载体适用场景
本地用户表(本文默认)users 表 + use_auth=true单机/俱乐部自建
第三方 SSO HTTP 头auth_header_enable + sso.php + JWT已有统一认证(OIDC 反代注入头)
免认证use_auth=false仅限临时调试,公网禁用
API 令牌v1 key / v2 token(Bearer+scope)程序化访问(见 CLI 篇)
行号参数实测值说明
543sess_driver'files'会话存储驱动
544sess_cookie_name'ci_wavelog'会话 Cookie 名(部署篇 4.6 响应头可见)
545sess_expiration43200会话 12 小时
546sess_save_path'/tmp'files 驱动落盘目录
547sess_match_ipFALSE不绑定 IP(移动网络换基站不断线)
548sess_time_to_update300会话 ID 轮换周期 5 分钟
549sess_regenerate_destroyFALSE轮换后旧会话不立即销毁
559-560sess_gc_probability/divisor1/1000会话 GC 概率 0.1%
577-578cookie_prefix/cookie_domain''Cookie 前缀/域

💡 技术拓展:CI3 的会话驱动可选形态对比——

驱动特点适用场景
files(本文默认)零依赖,落 sess_save_path单实例(默认够用)
redis内存级读写、多实例共享多应用实例负载均衡
memcached同上,纯 KV已有 memcached 体系
database落库、可持久审计低频场景

本部署为单实例,files 驱动 + /tmp 足够;若横向扩多个应用实例,会话必须换 redis/database 共享,否则登录态不互通。

5.4 日志与缓存

行号参数实测值说明
337log_threshold11=仅 ERROR;0 关闭;2=ERROR+DEBUG
348log_path''空=默认 application/logs/
361one_logfalsefalse=按日分文件
375log_file_extension''默认 .php(目录自带 index.html 拒直访)
387log_file_permissions0644日志文件权限
398log_date_format'Y-m-d H:i:s'日志时间戳格式
450-453cache_path/cache_adapter/cache_backup/cache_key_prefix''/'apcu'/'file'/''主缓存 apcu,回退 file
471cache_query_stringFALSE页缓存忽略查询串

日志目录实测(应用运行一天后):

total 24
drwxrwxr-x 1 wavelog  www-data  4096 Nov  1 09:44 .
-rw-rw-r-- 1 wavelog  www-data   114 Oct 21 19:05 index.html
-rw-r--r-- 1 www-data www-data 1323 Nov  1 09:40 installer_debug.log
-rw-r--r-- 1 www-data www-data  310 Nov  1 09:44 log-2026-11-01.php

log-2026-11-01.php 内容实测(log_threshold=1 只记 ERROR):

<?php defined('BASEPATH') OR exit('No direct script access allowed'); ?>

ERROR - 2026-11-01 09:44:18 --> Trying to import QSO with invalid date:  for station_id 2. Call: DL1ABC Mode:  Band: 
ERROR - 2026-11-01 09:44:18 --> Trying to import QSO with invalid date:  for station_id 2. Call: DL1ABC Mode:  Band: 

解读:这两条 ERROR 正是 API 导入缺日期被拒的服务端留痕(对应 CLI 篇的 v1 API 400 实测)——log_threshold=1 下应用日志与接口错误一一对得上,排障时先翻这个文件。日志文件以 .php 结尾且首行 defined('BASEPATH') OR exit 守卫,即使 Web 根误暴露也无法直接读取。

💡 技术拓展:CI3 缓存适配器可选形态——

适配器特点适用场景
apcu(本文默认)进程内共享内存,零外部依赖单机 PHP 栈
file落盘、可跨进程apcu 不可用时回退(cache_backup='file')
redis / memcached跨实例共享、可过期淘汰多实例部署
dummy不缓存调试

本实例 apcu 主用 + file 回退的双层结构由镜像默认给出;cron 限流锁(5.9)正是跑在这套缓存上,改 cache_adapter 会直接影响限流与任务锁行为。

5.5 数据库连接(database.php)

实测 db['default'] 全段(98 行文件的核心 23 行):

$active_group = 'default';
$query_builder = TRUE;

$db['default'] = array(
	// The following values will probably need to be changed.
	'dsn'	=> '',
	'hostname' => 'wavelog-324-db',
	'username' => 'wavelog',
	'password' => 'q1w2e3r4',
	'database' => 'wavelog',
	// The following values can probably stay the same.
	'dbdriver' => 'mysqli',
	'dbprefix' => '',
	'pconnect' => TRUE,
	'db_debug' => FALSE,
	'cache_on' => FALSE,
	'cachedir' => '',
	'char_set' => 'utf8mb4',
	'dbcollat' => 'utf8mb4_general_ci',
	'swap_pre' => '',
	'encrypt' => FALSE,
	'compress' => FALSE,
	'stricton' => FALSE,
	'failover' => array(),
	'save_queries' => TRUE
);

逐项说明:前 5 个键(dsn/hostname/username/password/database)是向导写入的连接坐标——hostname 是栈内服务实例名而非 localhost;其余「可保持默认」项里,关键的是 dbdriver='mysqli'(对应 PHP mysqli 模块)、pconnect=TRUE(持久连接,减少 Apache prefork 下每请求重连开销)、db_debug=FALSE(生产不向页面抛 SQL 错误)、char_set/dbcollat=utf8mb4(呼号备注等中文/emoji 安全)。encrypt=FALSE 表示到数据库不启用 TLS——同栈内网可接受,跨机部署数据库应改 TRUE 或服务端配 TLS。

5.6 台站与 ADIF

行号参数实测值说明
28callbook'none'呼号查询源,可选 qrzcom/hamqth 等
42table_name'TABLE_HRD_CONTACTS_V01'QSO 主表名(ADIF v01 遗产命名)
43locator'OM89KK'站点默认网格
44display_freqtrue界面显示频率
56-58qrz_username/password、use_fullname空/falseQRZ.com 凭据占位(系统级真实密钥不落演示值)
68-69hamqth_username/password''HamQTH 凭据
79-91qrzcq/qrzru 凭据''QRZCQ/QRZ.RU 凭据
104qrzcall_token''QRZ 新版 token

💡 技术拓展:HAM 日志交换格式不止 ADIF——

格式特点适用场景
ADIF 3.1.8(Wavelog 主格式)键值标签、字段最全导入导出、跨软件迁移
Cabrillo竞赛专用精简字段比赛提交
CSV/XLSX通用表格自定义统计

options.adif_version=3.1.8 即实例当前 ADIF 规范版本(实测见 3.2),导出头会带 <ADIF_VER:5>3.1.8(CLI 篇 v1 导出实测)。

5.7 功能开关(config.php 755-948 段实测)

参数实测值说明
special_callsignfalse俱乐部/特别呼号模式;官方注释明确必须 disable_impersonate=false 才能启用,文档 https://docs.wavelog.org/admin-guide/administration/clubstations/
disable_impersonatefalse默认允许管理员以他人身份操作(clubstation 前提)
cron_allow_insecurefalsecronmanager 走自签证书 HTTPS 时需置 true
disable_version_checkfalse默认开新版检查(cron 表 update_version_check 配合)
enable_eqsl_massdownloadfalseeQSL 批量下载非线程安全,多用户环境官方建议保持关闭
proxy_ips''(698 行)反代场景必须白名单代理 IP,否则会话/日志里的来源 IP 失真
auth_header_enablefalse(136 行)SSO 头认证总开关,配套文档 https://docs.wavelog.org/admin-guide/configuration/thirdparty-authentication/

实测 station_logbooks 表(台站档案与对外分享 slug):

logbook_id	logbook_name	public_slug	public_search
1	Beijing	beijing-demo	1

public_slug=beijing-demo + public_search=1 即开放了公开查询页(CLI 篇 logbook_check 接口用它验证)。

5.8 cron 任务表全解(21 任务实测)

cron 表结构实测(DESCRIBE cron):

Field	Type	Null	Key	Default	Extra
id	varchar(191)	NO	PRI	NULL	
enabled	tinyint(1)	NO		NULL	
status	varchar(255)	YES		NULL	
description	varchar(255)	YES		NULL	
function	varchar(255)	NO		NULL	
expression	varchar(100)	YES		NULL	
last_run	timestamp	YES		NULL	
next_run	datetime	YES		NULL	
modified	timestamp	YES		NULL	
creation_date	timestamp	NO		current_timestamp()	
last_modified	timestamp	NO		current_timestamp()	on update current_timestamp()

主键是字符串 id(任务名),不是自增数字、也没有 name 列——按列名 name 查询会实测报错(见七、7.6)。全表 21 任务实测:

id	enabled	description	expression	last_run
clublog_download	0	Download QSLs from Clublog	38 0 * * *	NULL
clublog_upload	0	Upload QSOs to Clublog	55 */6 * * *	NULL
eqsl_sync	0	Upload/download QSOs to/from Eqsl	9 */6 * * *	NULL
hrdlog_upload	0	Upload QSOs to HRD	12 */6 * * *	NULL
lotw_lotw_upload	0	Up- and Download QSOs to LoTW	0 */1 * * *	NULL
qrz_download	0	Download QSOs from QRZ	18 */6 * * *	NULL
qrz_upload	0	Upload QSOs to QRZ	6 */6 * * *	NULL
sync_dcl	0	Sync with DARC-DCL	45 4 * * *	NULL
update_dxcc	1	Update DXCC data	20 0 1 */2 *	2026-11-01 09:41:31
update_lotw_users	1	Update LOTW Users Activity	10 1 * * 1	NULL
update_pota_boundaries	1	Update POTA park boundaries (GeoJSON)	30 0 1 * *	2026-11-01 09:40:38
update_update_clublog_scp	1	Update Clublog SCP Database File	0 0 * * 0	NULL
update_update_dok	1	Update DOK File	0 0 1 * *	NULL
update_update_hamqsl	1	Download HamQSL HF Propagation Tools and Solar Data	0 */1 * * *	NULL
update_update_hamsofnote	0	Update Hams Of Notes	30 1 * * 1	NULL
update_update_pota	1	Update POTA File	15 0 1 * *	NULL
update_update_sota	1	Update SOTA File	5 0 1 * *	NULL
update_update_tle	0	Update TLE for satellites	45 4 * * *	NULL
update_update_wwff	1	Update WWFF File	10 0 1 * *	NULL
update_version_check	0	Check for new Wavelog releases	45 4 * * *	NULL
vucc_grid_file	0	Update TQSL VUCC Grids file	0 0 1 * *	NULL

解读:出厂状态是「数据更新类开、第三方 QSO 同步类关」——update_* 9 项 enabled=1(DXCC/POTA/SOTA/WWFF/DOK/SCP/HamQSL 等基础数据),而 LoTW/eQSL/Club Log/QRZ/HRD/DCL 六个业务同步默认 0,因为要先配好各服务凭据。启用某同步只需在 Cron Manager 勾选(改 enabled),表达式决定周期。

💡 技术拓展:expression 是标准五段 cron 语法(分 时 日 月 周),实测样例解读——

表达式含义
38 0 * * *每天 00:38
55 */6 * * *每 6 小时的第 55 分
0 */1 * * *每小时整点
20 0 1 */2 *每 2 个月的 1 日 00:20(DXCC 数据双月更新)
10 1 * * 1每周一 01:10

错峰设计(各任务分钟数互不相同)避免同一分钟并发拉多个外部服务。

5.9 后台任务触发链与 cron 令牌机制(实测)

系统级触发入口是 cron.d 一行(实测 cat /etc/cron.d/wavelog):

* * * * * wavelog /usr/bin/curl --silent http://localhost/index.php/cron/run >/dev/null 2>&1

每分钟以 wavelog 用户 curl 一次 cron/run,由应用内的任务表(5.8)决定哪些到期执行。访问日志实测(每分钟一条 200):

127.0.0.1 - - [01/Nov/2026:10:20:01 +00:00] "GET /index.php/cron/run HTTP/1.1" 200 1766 "-" "curl/8.14.1"
127.0.0.1 - - [01/Nov/2026:10:21:01 +00:00] "GET /index.php/cron/run HTTP/1.1" 200 1766 "-" "curl/8.14.1"
127.0.0.1 - - [01/Nov/2026:10:22:02 +00:00] "GET /index.php/cron/run HTTP/1.1" 200 1766 "-" "curl/8.14.1"

令牌从哪来:安装器 run_cron_token 步骤输出 cron_token=3104a9e2d58faefc...,但在 options、user_options、api、api_token 表与 config.php、数据目录文件里全盘搜索该值均无命中(实测各表查询回显为空)。答案在源码——cronauth_helper.php 实测原文:

if (!function_exists('cronauth_token')) {
	function cronauth_token() {
		$CI = &get_instance();
		$key = $CI->config->item('encryption_key');
		if ($key === null || $key === '' || $key === 'flossie1234555541') {
			log_message('error', 'Cron auth token cannot be generated because the encryption key is not set or is the default value. Please set a proper encryption key in your config.php file.');
			return '';
		}
		return hash_hmac('sha256', 'wavelog-cron-v1', $key);
	}
}

即:令牌不落库,是 encryption_key 对固定串 wavelog-cron-v1 的 HMAC-SHA256。实测派生验证(用演示实例 encryption_key 计算):

3104a9e2d58faefc23760c9f7484786bb32b0933371f01ac729da4c27b3248a6

与安装器输出的 cron_token=3104a9e2d58faefc... 前缀完全一致。推论:换 encryption_key 等于换 cron 令牌;密钥为默认值 flossie1234555541 或未设置时令牌生成功能被拒绝。

谁在验令牌:实测 cronauth_allowed 调用点——

/var/www/html/application/controllers/Hrdlog.php:26:		if (!cronauth_allowed(3)) {
/var/www/html/application/controllers/Clublog.php:31:		if (!cronauth_allowed(3)) {
/var/www/html/application/controllers/Lotw.php:178:		if (!cronauth_allowed(3)) {
/var/www/html/application/controllers/Eqsl.php:628:		if (!cronauth_allowed(3)) {
/var/www/html/application/controllers/Qrz.php:74:		if (!cronauth_allowed(3)) {
/var/www/html/application/controllers/Qrz.php:398:		if (!cronauth_allowed(3)) {
/var/www/html/application/controllers/Update.php:20:		if (!cronauth_allowed(99)) {

即各同步子端点要求携带 X-Wavelog-Auth 头(或管理员会话):Update 类要求 99 级、业务同步类要求 3 级;cron/run 主入口本身不设令牌门槛,改用 30 秒限流锁(实测源码注释与响应):

		// Rate limit: this function may only be triggered once every minute. To prevent attack vectors we lock the cron runner for 30 seconds after it's last run.
		$rate_limit_key = 'cron_run_rate_limit';
		if ($this->cache->get($rate_limit_key) !== false) {
			http_response_code(429); // Too Many Requests
			log_message('debug', 'CRON: run() called within the 30s rate limit window, skipping.');
			echo "CRON: rate limit active, skipping. Try again in a few seconds.\n";
			return;
		}
		// Set the lock for 30 seconds
		$this->cache->save($rate_limit_key, time(), 30);

实测对照(窗口内手动触发):

CRON: rate limit active, skipping. Try again in a few seconds.

HTTP_CODE=429

窗口外无头触发则正常执行(实测 no-header HTTP_CODE=200,回显 21 任务 due/skipped 清单见 CLI 篇)。限流锁跑在 5.4 的缓存层上——cache_adapter 异常时锁行为随之异常,这是改缓存配置时最容易踩的隐性依赖。

六、生产配置模板

适用场景:4GB 内存、20GB SSD、个人/俱乐部单实例、日志量 ≤ 10 万 QSO、已配 HTTPS 反代。与实测演示值的差异项及理由:

层参数演示值生产建议理由
config.phpbase_urlhttp://127.0.0.1:8137/https://log.example.com/会话与跳转基址必须与实际访问协议一致
config.phpproxy_ips''反代机 IP/CIDR否则审计日志与会话判定全部看到代理 IP
config.phplog_threshold10生产关应用日志省磁盘;排障时临时调 1
config.phpsess_expiration4320043200(保持)12h 对俱乐部多操作员偏长可降 28800
config.phpencryption_key'48ebf3…e9d'(演示值,节选)随机生成并离线备份丢失=会话全失效+所有外部集成(含 LoTW 凭据加密)重配
config.phpdisable_version_checkfalsefalse(保持)保留新版提醒,配合发布节奏评估升级
config.phpspecial_callsign/disable_impersonatefalse/false俱乐部台:true/false多操作员归属功能前提(官方文档 clubstations)
PHP inimemory_limit256M512MADIF 大文件导入与地图统计页更稳
PHP iniupload_max_filesize/post_max_size64M64M(保持)覆盖批量 QSL 图片上传
MariaDBinnodb_buffer_pool_size默认 128m512M(4GB 机)启动日志实测默认 128m;十万级 QSO 统计查询受益最大
cron 表业务同步 enabled0按凭据就绪逐项开先配 LoTW/eQSL 证书账号再开对应任务
optionsmap_tile_serverOSM 标准瓦片保持或自架瓦片高频使用建议自架以遵守 OSM 使用条款

⚠️ 注意:模板中 log.example.com 为示例域名(文档自身示例值);其余建议值均基于本文实测默认值推导,修改后按 3.1/3.4 的生效方式重启对应层。

七、常见问题

7.1 改了 config.php 不生效

确认改的是 config/docker/ 目录下的文件(CI_ENV=docker 只加载该目录,改默认 config/ 目录无效),且已重启应用进程。文件层参数没有热加载。

7.2 encryption_key 丢失/更换的后果

会话 Cookie 与加密存储全部失效(所有用户重新登录)、cron 令牌变化(5.9 派生关系)、加密保存的第三方凭据需重配。迁移实例时 config.php 必须原样带走。

7.3 手动触发 cron/run 返回 429

CRON: rate limit active, skipping.——30 秒限流锁(5.9 实测源码)在窗口内拒绝一切重复触发,与令牌无关;等窗口过期再触发即可。带正确 X-Wavelog-Auth 令牌在窗口内同样 429(实测对照:with-token 429 / bad-token 429 / 窗口外 no-header 200)。

7.4 查不到 crontab

crontab -l -u wavelog 实测返回 no crontab for wavelog。Wavelog 的调度用 /etc/cron.d/wavelog 系统级片段(5.9 实测内容),不是用户 crontab;排查调度问题看 cron.d 与访问日志。

7.5 options 表里找不到 cron token

正常——令牌由 encryption_key HMAC 派生、不落库(5.9 全盘搜索实测)。

7.6 按 name 列查 cron 表报错

ERROR 1054 (42S22) at line 1: Unknown column 'name' in 'WHERE'

cron 表主键列名是 id(varchar 任务名,5.8 DESCRIBE 实测),没有 name 列;同理 options 表主键是 option_id/option_name,QSO 表主键是 COL_PRIMARY_KEY(CLI 篇有逐条纠错实录)。

八、参考链接

Wavelog 3.2.4 配置参数详解 - Quzuo