LinkStack 4.8.8 配置参数详解
系统梳理 LinkStack 4.8.8 三层配置体系(Docker 环境变量 / .env / advanced-config.php):.env 40+ 开关逐组讲解、安装向导选项落盘映射、8 项功能开关端到端实测(即时生效无需重启),含 FORCE_HTTPS 与 FORCE_ROUTE_HTTPS 语义差异与生产配置模板。
LinkStack 4.8.8 配置参数详解
目标:系统梳理 LinkStack 4.8.8 的三层配置体系——Docker 环境变量(Apache/PHP 层)、
/htdocs/.env(应用行为层,40+ 项逐组讲解)、/htdocs/config/advanced-config.php(首页 meta/分析代码/自定义按钮层),给出安装向导选项与.env的落盘映射,并完成 8 项功能开关的端到端实测(改.env即时生效、无需重启)。已在 Ubuntu 22.04(x86_64)服务器、LinkStack 4.8.8(MariaDB 11.4 系统库)上全量实测通过。部署过程见《LinkStack 4.8.8 Docker Compose 部署指南》。
一、环境信息
- 组件版本:LinkStack v4.8.8(官方镜像
linkstackorg/linkstack:v4.8.8,2026-10-22) - 应用内技术栈:Alpine Linux + Apache 2.4.69 + PHP 8.3.36 + Laravel Framework 9.52.22
- 系统数据库:MariaDB 11.4(向导按 MySQL 类型接入)
- 部署形态:Docker Compose 编排(见上篇部署指南)
- 访问入口:
http://<服务器IP>:8132/(HTTPS 自签名https://<服务器IP>:8134/) - 管理账号:
root@quzuo.net/q1w2e3r4,主页句柄@root - 参数依据:实例内
/htdocs/.env全文(144 行,实测导出)+/htdocs/config/advanced-config.php全文(189 行)+ 4.8.8 源码行为 - 实测日期:2026-11-02
二、配置体系总览:三层落点
LinkStack 的配置按"谁消费"分三层,优先级互不重叠(各管各的层面):
| 层 | 文件/位置 | 消费方 | 修改方式 | 生效方式 |
|---|---|---|---|---|
| 容器层 | Compose environment: 7 个变量 | 镜像入口脚本 → Apache/PHP | 改 docker-compose.yml | docker compose up -d 重建容器(启动日志重新注入) |
| 应用层 | /htdocs/.env | Laravel/LinkStack 全部功能开关 | 直接编辑,或后台在线编辑器 | 即时生效(实测,见第五章;LinkStack 禁用 config:cache,配置每请求现读) |
| 高级层 | /htdocs/config/advanced-config.php | 首页 meta、分析代码、自定义按钮、登录/注册路由改名 | 直接编辑,或后台在线编辑器 | 即时生效 |
后台提供两个官方在线编辑器(实测路由表):
docker compose exec linkstack sh -c 'cd /htdocs && php83 artisan route:list' | grep -iE 'env|advanced'
实测输出(节选):
GET|HEAD admin/advanced-config showFileEditor › AdminController@show…
POST admin/advanced-config ...... editAC › AdminController@editAC
GET|HEAD admin/env .. showFileEditor › AdminController@showFileEditor
POST admin/env ................ editENV › AdminController@editENV
GET|HEAD env-editor env-editor.index › GeoSot\EnvEditor › EnvControl…
POST env-editor/files/create-backup env-editor.createBackup › Ge…
即:管理后台 /#/dashboard/admin/env 直接编辑 .env、admin/advanced-config 编辑高级配置;另捆绑 GeoSot/laravel-env-editor 包(/env-editor 一族路由),支持 .env 备份/下载/回滚——改配置前建议先在该页创建备份。
💡 技术拓展:
.env是 Laravel 体系的标准环境变量文件,框架启动时经vlucas/phpdotenv读入,config/*.php里的env('KEY', 默认值)调用即取自此处。它与 Docker 环境变量的区别:后者只被镜像入口脚本消费(写 Apache/PHP 配置文件),不会自动进.env;改容器变量不会动应用配置,反之亦然。
三、应用层 .env 分组速查
实测导出 /htdocs/.env 共 144 行,按官方注释分 10 组:
| 分组(官方注释原文) | 核心键 | 默认值(实测) |
|---|---|---|
| Email verification | REGISTER_AUTH / ALLOW_REGISTRATION | auth / true |
| Internal notifications | NOTIFY_EVENTS / NOTIFY_UPDATES | true / true |
| 页脚显示 | DISPLAY_FOOTER / DISPLAY_CREDIT / DISPLAY_CREDIT_FOOTER | 全 true |
| 管理员/域名 | ADMIN_EMAIL / SUPPORTED_DOMAINS | 空 / "" |
| Home URL | HOME_URL | 空 |
| 用户内容 | ALLOW_USER_HTML | true |
| App Settings | APP_NAME / APP_KEY / APP_URL | LinkStack / base64:... / 空 |
| 功能开关 | ENABLE_BUTTON_EDITOR / CUSTOM_META_TAGS / ALLOW_CUSTOM_CODE_IN_THEMES / ENABLE_THEME_UPDATER / USE_THEME_PREVIEW_IFRAME | true / false / true / true / true |
| Debug | APP_DEBUG / APP_ENV / LOG_CHANNEL / LOG_LEVEL / MAINTENANCE_MODE | true / local / stack / debug / false |
| Database | DB_CONNECTION + 五要素 | mysql / db / 3306 / linkstack / linkstack / q1w2e3r4 |
MAIL_MAILER 等 9 项 | built-in(其余空) | |
| Cache/Misc | CACHE_DRIVER / SESSION_DRIVER / SESSION_LIFETIME / QUEUE_CONNECTION / BROADCAST_DRIVER / MEMCACHED_HOST / REDIS_* | file / file / 120 / sync / log / 127.0.0.1 / 空 |
| Updater | JOIN_BETA / SKIP_UPDATE_BACKUP | false / false |
| 安全 | FORCE_HTTPS / FORCE_ROUTE_HTTPS | false / false |
| 社交登录 | ENABLE_SOCIAL_LOGIN | false |
| 页脚链接 | DISPLAY_FOOTER_HOME/TERMS/PRIVACY/CONTACT + TITLE_FOOTER_* + HOME_FOOTER_LINK | 前四个 true,其余空/"" |
| 用户管理 | HIDE_VERIFICATION_CHECKMARK / ALLOW_CUSTOM_BACKGROUNDS / ALLOW_USER_EXPORT / ALLOW_USER_IMPORT / MANUAL_USER_VERIFICATION / ENABLE_REPORT_ICON / ENABLE_ADMIN_BAR / ENABLE_ADMIN_BAR_USERS | false / true / true / true / true / false / true / false |
| 语言 | LOCALE | "en" |
四、安装向导选项 → .env 落盘映射
上篇部署指南 4.5 节走通的六步向导,本质是往 .env 写值(实测对照)。落盘命令面为 POST /editConfigInstaller(entry/value 键值对)与数据库/管理员各步进接口:
| 向导步骤/选项 | 本文取值 | 落盘键 | 实测落盘值 |
|---|---|---|---|
| 第 1 步 语言 | English | LOCALE | "en" |
| 第 3 步 数据库类型 | MySQL | DB_CONNECTION | mysql(选 SQLite 则无后续四项) |
| 第 4 步 MySQL 连接五要素 | db/3306/linkstack/linkstack/q1w2e3r4 | DB_HOST/DB_PORT/DB_DATABASE/DB_USERNAME/DB_PASSWORD | 一一对应 |
| 第 6 步 Enable registration | Yes | ALLOW_REGISTRATION | true |
| 第 6 步 Enable email verification | No | REGISTER_AUTH | auth(选 Yes 则为 verified) |
| 第 6 步 Set your page as Home Page | No | HOME_URL | 空(选 Yes 写入管理员句柄) |
| 第 6 步 App Name | LinkStack | APP_NAME | "LinkStack" |
第 5 步管理员账号不进 .env,直接落 users 表(邮箱 root@quzuo.net、口令哈希、句柄 root)。
五、功能开关逐项实测(即时生效,无需重启)
LinkStack 无法执行 php83 artisan config:cache(实测 fatal,见《LinkStack 4.8.8 常用 CLI 命令与工具详解》排障节),配置每请求现读,因此改 .env 后无需重启容器即可验证——这是本文全部开关实测的基础。
通用验证方法:容器内 sed -i 改值 → 宿主机 curl 页面 grep 特征串 → 改回。特征串来自读模板源码(footer.blade.php 页脚容器类名 footer-hover、"Powered by LinkStack" 徽标类名 powered-by-linkstack)。
5.1 DISPLAY_FOOTER(用户页页脚)
实测(开→关→开):
docker compose exec linkstack sh -c "sed -i 's/^DISPLAY_FOOTER=true/DISPLAY_FOOTER=false/' /htdocs/.env && grep '^DISPLAY_FOOTER=' /htdocs/.env"
curl -s http://127.0.0.1:8132/@root | grep -c 'footer-hover'
实测输出:
DISPLAY_FOOTER=false
0
改回 true 后同一命令输出 1。⚠️ 实测坑:该开关只在用户主页(/@root)生效,默认首页(LinkStack 落地页)源码不渲染该页脚,在首页 grep 恒为 0,验证时务必访问用户页。
5.2 DISPLAY_CREDIT("Powered by LinkStack" 署名)
docker compose exec linkstack sh -c "sed -i 's/^DISPLAY_CREDIT=true/DISPLAY_CREDIT=false/' /htdocs/.env"
curl -s http://127.0.0.1:8132/@root | grep -c 'powered-by-linkstack'
实测输出:0(默认 true 时为 1)。同类还有 DISPLAY_CREDIT_FOOTER(页脚区署名,默认 true,机制同上)。
5.3 FORCE_HTTPS 与 FORCE_ROUTE_HTTPS(易混的一对)
FORCE_HTTPS=true 实测响应头:
docker compose exec linkstack sh -c "sed -i 's/^FORCE_HTTPS=false/FORCE_HTTPS=true/' /htdocs/.env"
curl -sI http://127.0.0.1:8132/ | grep -iE '^HTTP|content-security'
HTTP/1.1 200 OK
Content-Security-Policy: upgrade-insecure-requests
页面不跳转,只做两件事:应用内生成的 URL 强制 https 方案 + 下发 CSP upgrade-insecure-requests 头(源码 app/Http/Middleware/Headers.php)。.env 官方注释还提示:Docker 镜像形态下该头只影响 443 端口。
FORCE_ROUTE_HTTPS=true 才是 302 强跳:
HTTP/1.1 302 Found
Location: https://127.0.0.1:8132/
(实测请求 Host: 127.0.0.1:8132,跳转保留原 host:port;改回 false 后恢复 HTTP/1.1 200 OK。)生产经反向代理终止 TLS 时,通常两个都不开、由代理层做跳转,仅设 APP_URL 为 https 域名。
5.4 ALLOW_REGISTRATION(开放注册)
docker compose exec linkstack sh -c "sed -i 's/^ALLOW_REGISTRATION=true/ALLOW_REGISTRATION=false/' /htdocs/.env"
curl -s http://127.0.0.1:8132/login | grep -oiE 'register' | sort | uniq -c
curl -s -o /dev/null -w 'POST /register http=%{http_code}\n' -X POST http://127.0.0.1:8132/register -d "name=x"
实测输出:
POST /register http=302
登录页 grep register 零命中(默认 true 时命中 1 处注册链接),直接 POST /register 被 302 弹走。改回 true 后登录页恢复注册链接(1 register)。
5.5 REGISTER_AUTH(邮箱验证策略)
auth=注册即用(向导"Enable email verification"选 No 的落盘值);verified=新账号须点邮件验证链接才可登录。它决定验证邮件是否必发,因此与第五章 Mail 组联动:选 verified 而邮件通道不通时,新注册用户会卡在未验证状态(管理员可在后台手工置已验证,对应 MANUAL_USER_VERIFICATION=true)。
5.6 MAINTENANCE_MODE(维护模式)
docker compose exec linkstack sh -c "sed -i 's/^MAINTENANCE_MODE=false/MAINTENANCE_MODE=true/' /htdocs/.env"
curl -s -o /dev/null -w 'GET / http=%{http_code}\n' http://127.0.0.1:8132/
curl -s http://127.0.0.1:8132/ | grep -oiE 'maintenance|down' | sort | uniq -c
实测输出:
GET / http=200
1 maintenance
1 Maintenance
全站关闭、渲染维护占位页(HTTP 码仍是 200,不是 Laravel 标准的 503——监控告警别指望状态码,要盯页面内容)。改回 false 后站点恢复正常 200。
5.7 APP_NAME(站点显示名)
docker compose exec linkstack sh -c "sed -i 's/^APP_NAME=\"LinkStack\"/APP_NAME=\"MyLinks\"/' /htdocs/.env"
curl -s http://127.0.0.1:8132/ | grep -oE '<title>[^<]*</title>'
实测输出(改前 <title>LinkStack</title> → 改后):
<title>MyLinks</title>
改回后恢复 <title>LinkStack</title>。注意 MAIL_FROM_NAME="${APP_NAME}" 会跟着变;标题后缀可在 advanced-config.php 的 linkstack_title 单独定制(见第六章)。
5.8 HOME_URL(用户页设为首页)
docker compose exec linkstack sh -c "sed -i 's/^HOME_URL=/HOME_URL=root/' /htdocs/.env"
curl -s http://127.0.0.1:8132/ | grep -oE '@root' | head -3
实测输出:
@root
@root
@root
访问 / 直接渲染句柄 root 的主页(值不带 @)。改回空值恢复默认首页。配套:高级配置 custom_home_url(默认 /home)——设了 HOME_URL 后,默认首页被"让位"到这个内部路由。
六、advanced-config.php(高级配置)详解
实测导出全文 189 行,'version' => '2.1'(勿改)。各段与默认值:
| 键 | 实测默认 | 说明 |
|---|---|---|
$analytics(heredoc) | 空注释占位 | 内容注入所有页面 <head>,放统计/自定义脚本;配合 ALLOW_CUSTOM_CODE_IN_THEMES 注意 XSS 面 |
title / description / robots / viewport / canonical_url / twitter_creator / author | 空 / 空 / index,follow / width=device-width, initial-scale=1 / 空 / 空 / 空 | 首页 meta 覆盖,仅当 .env 的 CUSTOM_META_TAGS=true 才启用;空项忽略 |
linkstack_title | '' | 追加在页面标题后的自定义后缀(例:admin 🔗 LinkStack 中 🔗 后段) |
display_share_button | 'true' | 三态:true 全员可见 / false 隐藏 / auth 仅用户看自己页的分享按钮 |
login_url / register_url / forgot_password_url | /login / /register / /forgot-password | 登录/注册/找回密码路由改名,减少扫描器撞库入口(改后以新路径访问) |
custom_home_url | /home | HOME_URL 生效后的默认首页让位路径 |
custom_url_prefix | '+' | 用户页 URL 前缀(example.com/+admin);实测 @ 前缀同样可达(/@root=200、/+root=200),历史兼容 |
home_theme | 'default' | 给首页单独指定 themes/ 目录内的主题名 |
use_custom_buttons | 'true' | false 则显示内置示例按钮组 |
buttons | github / linkstack / custom 三项示例 | 首页按钮数组:button(按钮类型名,全表见 linkstackorg.github.io/buttons)、link、title、icon(Font Awesome 名,如 fa-hand-holding-heart)、custom_css(改色,可从后台 Button Editor 复制) |
七、其余参数组速查
7.1 应用基础与安全
| 键 | 实测默认 | 说明 |
|---|---|---|
APP_KEY | base64:4Ppypokr...(实例实际值) | Laravel 加密根密钥,装向导生成。丢了它,已加密数据(社交登录凭据等)不可解,务必随 /htdocs 卷备份 |
APP_URL | 空 | 官方注释:多数场景留空即可,仅在生成绝对 URL 的场合(邮件链接等)需要时再设 |
APP_DEBUG | true | 生产必须 false(报错页泄露堆栈/SQL);官方注释自陈"装完建议关掉" |
APP_ENV | local | 配合 APP_DEBUG=false 改 production |
LOCALE | "en" | 界面语言;实测语言包 14 个:ar bg de el en es fr gl pt-BR ru sv vi zh zh-TW(简体中文为 zh) |
ADMIN_EMAIL | 空 | 系统级收件人(通知类邮件) |
SUPPORTED_DOMAINS | "" | 限定实例服务的域名(空=不限) |
7.2 数据库(勿轻动)
实测落盘:
DB_CONNECTION=mysql
DB_HOST=db
DB_PORT=3306
DB_DATABASE=linkstack
DB_USERNAME=linkstack
DB_PASSWORD=q1w2e3r4
.env 官方注释原文警告:"Should be left alone. If you wish to use mysql you'd have to seed the database again"——装完再切库类型(SQLite↔MySQL)不搬数据,必须重跑迁移+重新播种。SQLite 形态只有 DB_CONNECTION=sqlite 一行,库文件在卷内 /htdocs/database/。
7.3 用户与内容
| 键 | 默认 | 说明 |
|---|---|---|
ALLOW_USER_HTML | true | 允许用户在链接描述里写自定义 HTML(多用户实例有 XSS 风险,可关) |
ALLOW_USER_EXPORT / ALLOW_USER_IMPORT | true / true | 用户数据 JSON 导出/导入开关 |
ALLOW_CUSTOM_BACKGROUNDS | true | 允许用户自定义背景图 |
MANUAL_USER_VERIFICATION | true | 管理员可手工把用户置为已验证(5.5 节的兜底通道) |
HIDE_VERIFICATION_CHECKMARK | false | 隐藏用户页的验证勾标识 |
ENABLE_SOCIAL_LOGIN | false | OAuth 社交登录总开关(后台另配各提供商凭据) |
ENABLE_REPORT_ICON | false | 用户页举报入口 |
ENABLE_ADMIN_BAR | true | 管理员预览用户页时的顶部管理条 |
ENABLE_ADMIN_BAR_USERS | false | 普通用户是否也显示管理条 |
7.4 通知、更新器与主题
| 键 | 默认 | 说明 |
|---|---|---|
NOTIFY_EVENTS | true | 后台横幅通知管理员:重要事件(项目投票、安全漏洞公告) |
NOTIFY_UPDATES | true | 后台横幅提示新版本(内置更新器的入口开关) |
JOIN_BETA | false | 加入 beta 更新通道(llc.bio/beta) |
SKIP_UPDATE_BACKUP | false | 一键更新前跳过备份到 /htdocs/backups/;生产保持 false |
ENABLE_THEME_UPDATER | true | 主题单独更新器开关 |
ALLOW_CUSTOM_CODE_IN_THEMES | true | 允许 V2 主题注入自定义代码(官方注释明示出于安全可关) |
USE_THEME_PREVIEW_IFRAME | true | 主题预览用 iframe 渲染 |
7.5 邮件
| 键 | 默认 | 说明 |
|---|---|---|
MAIL_MAILER | built-in | 三态:built-in(官方免费 SMTP 中转,条款见 llc-mail.tru.io)/ smtp(自建,填 MAIL_HOST/PORT/USERNAME/PASSWORD/ENCRYPTION)/ sendmail(填 MAIL_SENDMAIL 路径与选项,默认 /usr/sbin/sendmail -bs) |
MAIL_FROM_ADDRESS | 空 | 发件地址;用 verified 注册验证或找回密码功能时必须配好通道 |
7.6 框架杂项(保持默认即可)
LOG_CHANNEL=stack、LOG_LEVEL=debug(生产建议 warning,日志在 /htdocs/storage/logs/)、CACHE_DRIVER=file、SESSION_DRIVER=file、SESSION_LIFETIME=120(分钟)、QUEUE_CONNECTION=sync、BROADCAST_DRIVER=log、MEMCACHED_HOST=127.0.0.1、REDIS_HOST=127.0.0.1/REDIS_PORT=6379/REDIS_PASSWORD=null。单实例场景全部默认值合理;多实例横向扩容时才需要把缓存/会话改指 Redis。
八、生产配置建议模板
在向导装完的 .env 基础上,生产实例建议改动(其余保持默认):
# 容器内 /htdocs 目录执行(改前先在 /env-editor 建备份)
sed -i 's/^APP_DEBUG=true/APP_DEBUG=false/' .env
sed -i 's/^APP_ENV=local/APP_ENV=production/' .env
sed -i 's/^LOG_LEVEL=debug/LOG_LEVEL=warning/' .env
sed -i 's/^ALLOW_USER_HTML=true/ALLOW_USER_HTML=false/' .env # 多用户公开注册实例
sed -i 's/^ALLOW_CUSTOM_CODE_IN_THEMES=true/ALLOW_CUSTOM_CODE_IN_THEMES=false/' .env
HTTPS 策略:前置 Nginx/Caddy 终止 TLS 时,FORCE_HTTPS/FORCE_ROUTE_HTTPS 都保持 false,跳转交给代理;裸用镜像 443 自签证书时才考虑 FORCE_ROUTE_HTTPS=true。
九、排障实录
R1:改了 .env 感觉没生效?
先确认访问的是对的页面:DISPLAY_FOOTER/DISPLAY_CREDIT 只作用于用户主页(5.1 实测坑);CUSTOM_META_TAGS 组的全部 meta 覆盖需先在 .env 把 CUSTOM_META_TAGS=true 才启用(advanced-config.php 文件头注释原文)。LinkStack 无配置缓存可清——php83 artisan config:cache 在本应用会 fatal(见 CLI 篇),所以改动本就即时生效,"没生效"多为验证位置/特征串选错。
R2:FORCE_HTTPS=true 后 HTTP 访问不跳转
非故障,语义即如此(5.3 实测:只加 CSP 头,302 强跳是 FORCE_ROUTE_HTTPS)。两开关名只差一个词,是社区高频疑问。
R3:注册了收不到验证邮件
REGISTER_AUTH=verified 时验证邮件走 MAIL_MAILER 通道;默认 built-in 依赖官方中转服务,自建实例建议改 smtp 指向自己的邮件服务器并填五项连接参数(7.5 节)。临时兜底:管理员后台手工置已验证(MANUAL_USER_VERIFICATION=true)。
R4:把登录页路径改了之后自己进不去
advanced-config.php 的 login_url 改名后旧路径立即失效,须按新路径访问(第六章);改前记下原值,误操作可直接编辑该文件改回。
十、参考链接
- 源码仓库:
https://github.com/LinkStackOrg/LinkStack(v4.8.8,2026-10-22) - 高级配置官方说明:
https://llc.bio/advanced-config(.env注释内给出的原文链接) - 可用按钮名列表:
https://linkstackorg.github.io/buttons/ - 官方 Docker 仓库:
https://github.com/LinkStackOrg/linkstack-docker - 本文实测记录:2026-11-02,LinkStack v4.8.8 + MariaDB 11.4,Ubuntu 22.04 宿主机