Ubuntu 22.04 安装 FreeScout 1.8.248 指南
Ubuntu 22.04 从零安装 FreeScout 1.8.248 全流程实测:ondrej PPA 安装 PHP 8.3(规避被禁用的 8.1)、MariaDB 建库、git tag 下载、artisan 安装序列、Nginx 站点、cron 定时任务与端到端登录验证,含 PPA 502、403 Untrusted Host 等排障实录。
Ubuntu 22.04 安装 FreeScout 1.8.248 指南
目标:在一台全新的 Ubuntu 22.04 服务器上从零安装开源帮助台 FreeScout 1.8.248,覆盖依赖安装(Nginx + PHP 8.3-FPM + MariaDB)、官方包下载、数据库初始化、artisan 安装序列、Nginx 站点配置、cron 定时任务与端到端登录验证,并沉淀 PPA 代理 502、403 Untrusted Host 等真实排障过程。已在 Ubuntu 22.04 LTS 服务器上对主线方案逐命令实测通过。
一、环境信息
本章记录实测服务器的软硬件环境与安装结果版本清单,供读者对照复现。
实测环境:
- 操作系统:Ubuntu 22.04.5 LTS(GNU/Linux x86_64)
- 配置:12 vCPU / 32 GB 内存 / 普通云盘
- 网络:可直连公网(GitHub、Ubuntu 归档),无出站代理
实测安装结果版本清单:
| 组件 | 实测版本 | 获取方式 |
|---|---|---|
| FreeScout | 1.8.248 | GitHub 仓库 1.8.248 标签(dist 形态,自带 composer 依赖) |
| PHP | 8.3.35(fpm+cli,deb.sury.org 包) | ppa:ondrej/php |
| PHP-FPM 管理器 | php8.3-fpm 8.3.35-1+ubuntu22.04.1+deb.sury.org+1 | 同上 |
| Nginx | nginx/1.18.0 (Ubuntu) | Ubuntu 22.04 官方仓库 |
| MariaDB | 10.6.23-MariaDB | Ubuntu 22.04 官方仓库 |
| Git | Ubuntu 22.04 官方仓库版本 | Ubuntu 22.04 官方仓库 |
💡 说明:FreeScout 1.8.248 基于 Laravel Framework v5.5.40(项目自维护的定制 fork,
overrides/目录覆盖了框架层代码以兼容 PHP 8.x),这一点可由php artisan --version实测确认,详见 5.11 节。组件全景与选型对比见 《FreeScout 1.8.248 介绍与选型指南》。
二、前置条件
本章列出安装开始前必须满足的条件,全部满足可避免主线过程中断。
- 一台 Ubuntu 22.04 服务器:拥有 sudo/root 权限的账号;官方明确 FreeScout 无最低 CPU/内存要求(可运行在共享主机级别),实际建议至少 1C1G 起步、2C2G 更稳妥(含 MariaDB 开销)。
- 可解析的域名或固定 IP(可选但建议):本文以
http://192.168.146.128:8155(IP+端口)演示;生产建议绑域名并上 HTTPS——浏览器推送通知(Web Push)功能强制要求 HTTPS。 - 一个专用支持邮箱:用于 FreeScout 抓取客户来信(IMAP/POP3 收、SMTP 发)。该邮箱会被 FreeScout 自动标记已读,不要人工共用。
- 80/443(或自定义)端口未占用:本文 Nginx 监听 80,宿主侧如用自定义端口(如 8155)映射/转发即可。
- 网络可达 GitHub:主线方案通过
git clone官方仓库标签下载应用;如服务器无法直连 GitHub,需先配置出站代理(见 8.2 节的代理 502 排障实录)。
三、版本选型说明
本章解释两个关键选型决策:为什么装 1.8.248、为什么用 PHP 8.3 而不是 Ubuntu 22.04 自带的 PHP 8.1。
FreeScout 版本:本文定版 1.8.248(2026-10-17 发布),是查询日 2026-10-21 时 GitHub Releases 的最新稳定版。FreeScout 发布节奏极快(平均约 5 天一版),安装时不必强追最新——任选 Releases 页一个稳定 tag 即可,升级流程见第七章。
PHP 版本(关键决策):FreeScout 官方要求 PHP 7.4–8.x,但明确禁止 PHP 8.1——官方安装指南原话:"DO NOT use PHP 8.1 as it contains critical bugs causing problems with parsing XML/HTML in some cases. PHP 8.2 and newer are OK."。而 Ubuntu 22.04 官方仓库自带的恰恰是 PHP 8.1,必须添加 ppa:ondrej/php 第三方仓库安装 PHP 8.2/8.3。本文实测选用 8.3.35(当前 deb.sury.org 仓库的最新 8.3 线)。
| PHP 版本 | FreeScout 兼容性 | Ubuntu 22.04 获取方式 |
|---|---|---|
| 7.4 | 支持(已 EOL,不建议) | ppa:ondrej/php |
| 8.0 | 支持 | ppa:ondrej/php |
| 8.1 | 官方明确禁用(XML/HTML 解析缺陷) | Ubuntu 22.04 默认仓库(不可用) |
| 8.2 | 支持 | ppa:ondrej/php |
| 8.3 | 支持(本文实测 8.3.35) | ppa:ondrej/php |
关键差异解读:Ubuntu 22.04 用户安装 FreeScout 的第一个坑就在这里——直接 apt install php8.1-fpm 会装上被官方禁用的版本,必须走 PPA。数据库选 MySQL 还是 MariaDB 均可(官方两者都支持,还支持 PostgreSQL),本文选 Ubuntu 22.04 默认源的 MariaDB 10.6 免去额外仓库。
四、方案 A:官方交互脚本一键安装(快速路径)
本章介绍官方提供的交互式安装脚本,适合「全新 Ubuntu 服务器 + 想最快跑起来」的场景。该脚本摘自官方 Wiki 安装指南(2026-10-21 版),脚本会交互式询问并自动完成依赖安装、应用下载与 Web 服务器配置;本文主线路径为方案 B(手动安装,逐命令实测),方案 A 供快速启动选用。
# 摘自官方 Wiki「Interactive installation bash-script」节
sudo apt install wget
wget https://raw.githubusercontent.com/freescout-help-desk/freescout/dist/tools/install.sh
chmod u+x install.sh
sudo ./install.sh
脚本交互要点(依据脚本源码与官方说明):
- 会询问安装目录(默认
/var/www/html)、数据库类型与凭据、应用 URL; - 自动安装 Nginx/Apache + PHP(自动选择可用的非 8.1 版本)+ MySQL/MariaDB;
- 完成后同样需要配置 cron 定时任务(见 5.10 节);
- 脚本执行前不可预先手工创建
.env,否则安装器路径与脚本预期冲突(同方案 B 的 8.5 节说明)。
⚠️ 注意:方案 A 将 sudo/apt/git 等操作打包在脚本内一次性执行,出问题时排障定位不如手动方案清晰。生产环境或需要精确控制每一步的场景,建议使用方案 B。
五、方案 B:手动安装主线(全程实测)
本章是本文主线:从纯净 Ubuntu 22.04 出发,逐命令完成 FreeScout 1.8.248 安装,所有回显均为实测输出。整体顺序:依赖 → 数据库 → 下载 → 权限 → .env 初始化 → 迁移 → 管理员 → Nginx → cron → 验证。
5.1 安装系统依赖与 PHP 8.3
本节解决「Ubuntu 22.04 默认 PHP 是被禁用的 8.1」的问题:先添加 ppa:ondrej/php,再一次性装齐 Nginx、MariaDB、Git 与 PHP 8.3 全套扩展。
# 更新索引并安装软件源管理工具
sudo apt update
sudo apt install -y software-properties-common
# 添加 ondrej/php PPA(实测回显)
sudo add-apt-repository -y ppa:ondrej/php
实测输出(节选):
Adding deb entry to /etc/apt/sources.list.d/ondrej-ubuntu-php-jammy.list
Adding disabled deb-src entry to /etc/apt/sources.list.d/ondrej-ubuntu-php-jammy.list
Adding key to /etc/apt/trusted.gpg.d/ondrej-ubuntu-php.gpg with fingerprint B8DC7E53946656EFBCE4C1DD71DAEAAB4AD4CAB6
# 刷新索引并确认 php8.3 候选版本
sudo apt update
apt-cache policy php8.3-fpm
实测输出(节选):
php8.3-fpm:
Installed: (none)
Candidate: 8.3.35-1+ubuntu22.04.1+deb.sury.org+1
# 一次性安装 Nginx + MariaDB + Git + PHP 8.3 及 FreeScout 必需扩展
sudo apt install -y nginx mariadb-server git curl \
php8.3-fpm php8.3-mysql php8.3-mbstring php8.3-xml php8.3-imap \
php8.3-zip php8.3-gd php8.3-curl php8.3-intl php8.3-cli
安装完成后核对版本与扩展(实测):
php -v | head -1
nginx -v
mysql --version
实测输出:
PHP 8.3.35 (cli) (built: Sep 25 2026 05:16:32) (NTS)
nginx version: nginx/1.18.0 (Ubuntu)
mysql Ver 15.1 Distrib 10.6.23-MariaDB, for debian-linux-gnu (x86_64) using EditLine wrapper
# 核对 FreeScout 必需扩展已就位(应有 imap/mbstring/gd/intl/curl/zip/xml/mysql 等)
php -m | grep -iE 'imap|mbstring|gd|intl|curl|zip|xml|mysql'
实测输出:
curl
gd
imap
intl
libxml
mbstring
mysqli
mysqlnd
pdo_mysql
SimpleXML
xml
xmlreader
xmlwriter
zip
启动并设置开机自启三个基础服务(每条命令只针对一个单元):
sudo systemctl enable --now nginx
sudo systemctl enable --now php8.3-fpm
sudo systemctl enable --now mariadb
逐一验证服务状态(实测):
systemctl is-active nginx
systemctl is-active php8.3-fpm
systemctl is-active mariadb
实测输出(三条命令各自返回):
active
active
active
5.2 配置 PHP
本节按官方指南关闭 cgi.fix_pathinfo,避免 Nginx + FastCGI 下的路径解析安全隐患。
echo 'cgi.fix_pathinfo=0' | sudo tee -a /etc/php/8.3/fpm/php.ini
sudo systemctl restart php8.3-fpm
验证配置已生效(实测):
grep 'cgi.fix_pathinfo' /etc/php/8.3/fpm/php.ini
实测输出:
cgi.fix_pathinfo=0
5.3 创建数据库与专用账号
本节在 MariaDB 中创建 FreeScout 专用数据库与账号。Ubuntu 22.04 的 MariaDB root 默认走 unix_socket 认证,用 sudo mysql 免密进入。
sudo mysql
在 MariaDB 提示符下依次执行(演示账号 freescout,演示密码 q1w2e3r4,生产请更换强密码):
CREATE DATABASE `freescout` CHARSET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'freescout'@'localhost' IDENTIFIED BY 'q1w2e3r4';
GRANT ALL PRIVILEGES ON `freescout`.* TO 'freescout'@'localhost';
FLUSH PRIVILEGES;
SHOW DATABASES;
实测输出(节选):
+--------------------+
| Database |
+--------------------+
| freescout |
| mysql |
| performance_schema |
| sys |
+--------------------+
EXIT;
💡 说明:字符集用
utf8mb4是官方建库示例的写法,可完整存储 emoji 等四字节字符;账号按最小权限只授予freescout单库。
5.4 下载 FreeScout 1.8.248 并设置权限
本节用 git 检出官方仓库的 1.8.248 标签。该标签即 dist 形态发布件(自带全部 composer 依赖,无需本机装 composer),这是官方推荐两种下载方式(官网 zip 包 / git 检出)中的 git 路径,且能精确锁定版本。
# 清空默认站点目录并交给 Web 进程用户 www-data
sudo rm -f /var/www/html/index.nginx-debian.html
sudo chown www-data:www-data /var/www/html
cd /var/www/html
# 检出 1.8.248 标签(浅克隆加速)
sudo -u www-data git clone --depth 1 -b 1.8.248 https://github.com/freescout-help-desk/freescout .
实测输出(节选):
Note: switching to '1.8.248'.
You are in 'detached HEAD' state. ...
Turn off this advice by setting config variable advice.detachedHead to false
⚠️ 注意:「detached HEAD」提示属正常现象——tag 检出本就脱离分支,后续升级方法见第七章。
验证应用文件与版本(实测):
ls /var/www/html | head -12
grep -m1 "'version'" /var/www/html/config/app.php
实测输出:
DOCUMENTATION.md LICENSE Modules README.md app artisan bootstrap composer.json composer.lock config database overrides package.json phpcs.xml phpunit.xml public resources routes server.php storage tools vendor webpack.mix.js
'version' => '1.8.248',
确认依赖目录 vendor 存在(免 composer 的关键)并统一属主(实测):
test -d /var/www/html/vendor && echo "vendor exists"
sudo chown -R www-data:www-data /var/www/html
实测输出:
vendor exists
5.5 生成 .env 并初始化应用
本节创建应用配置文件、生成加密密钥并让配置生效。FreeScout 的配置核心是应用根目录的 .env 文件(参数详解见本专栏配置篇;此处只填安装必需项)。
cd /var/www/html
sudo -u www-data cp .env.example .env
编辑 .env,至少填写以下三项(本文实测值,生产请按需调整 APP_URL 为你的域名):
APP_URL=http://192.168.146.128:8155
DB_DATABASE=freescout
DB_USERNAME=freescout
DB_PASSWORD=q1w2e3r4
💡 说明:
APP_URL必须写用户浏览器实际访问的地址(含协议与端口),FreeScout 会用它生成外链并做主机名校验——写错会出现 8.8 节 Q3 的 403。DB_HOST=localhost、DB_PORT=3306用示例文件默认值即可。
生成应用加密密钥并清缓存使 .env 生效(实测):
sudo -u www-data php artisan key:generate
sudo -u www-data php artisan freescout:clear-cache
实测输出:
Application key [base64:dE2AnW6wfIo7vB/r8N0HpaS6ykoL7b6GBh9G0igCnWU=] set successfully.
Configuration cached successfully!
Cleared: JS and CSS builds
Created: /js/builds/vars.js
建立公开存储软链(实测):
sudo -u www-data php artisan storage:link
实测输出:
The [public/storage] directory has been linked.
5.6 数据库迁移(建表)
本节把 FreeScout 的全部数据表结构写入 MariaDB。
cd /var/www/html
sudo -u www-data php artisan migrate --force
实测输出(节选,迁移表较多,此处取尾部):
Migrating: 2026_08_15_010101_update_indexes_in_conversations_table
Migrated: 2026_08_15_010101_update_indexes_in_conversations_table
Migrating: 2026_08_28_010101_add_conversation_id_column_to_notifications_table
Migrated: 2026_08_28_010101_add_conversation_id_column_to_notifications_table
Migrating: 2026_10_16_010101_update_attachment_tokens_in_bodies
Migrated: 2026_10_16_010101_update_attachment_tokens_in_bodies
验证数据表已创建(实测):
sudo mysql -e "USE freescout; SHOW TABLES;" | head -8
sudo mysql -e "USE freescout; SHOW TABLES;" | wc -l
实测输出(节选,第一条命令):
Tables_in_freescout
activity_logs
attachments
conversation_folder
conversations
customer_channel
customers
emails
(第二条命令实测返回 25,即表头 1 行 + 数据表 24 张。)
1.8.248 全部 24 张表(实测清单):activity_logs attachments conversation_folder conversations customer_channel customers emails failed_jobs folders followers jobs ltm_translations mailbox_user mailboxes migrations modules notifications options password_resets polycast_events send_logs subscriptions threads users。
⚠️ 注意:不同小版本的表数量会随迁移增减,以上数字为 1.8.248 实测值,仅作迁移成功与否的对照参考。若
SHOW TABLES报错或为空,回到 5.5 节检查.env数据库四项。
5.7 创建管理员账号
本节用 artisan 命令创建第一个管理员用户。
sudo -u www-data php artisan freescout:create-user \
--role=admin --firstName=Admin --lastName=User \
--email=admin@freescout.local --password=q1w2e3r4
实测输出:
User created with id: 1
创建安装完成标记文件(FreeScout 靠它判断「已安装」):
sudo -u www-data touch /var/www/html/storage/.installed
ls -la /var/www/html/storage/.installed
实测输出:
-rw-r--r-- 1 www-data www-data 0 Oct 21 04:27 /var/www/html/storage/.installed
💡 说明:演示账号
admin+q1w2e3r4仅用于教学环境,生产环境务必改用强密码。
5.8 配置 Nginx 站点
本节按官方模板配置 Nginx:文档根指向 public/、PHP 请求转交 php8.3-fpm 的 Unix socket。
sudo tee /etc/nginx/sites-available/freescout > /dev/null <<'NGINX'
server {
listen 80;
listen [::]:80;
server_name _;
root /var/www/html/public;
index index.php index.html index.htm;
error_log /var/www/html/storage/logs/web-server.log;
# Max. attachment size.
client_max_body_size 20M;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/run/php/php8.3-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
location ~* ^/storage/attachment/ {
expires 1M;
access_log off;
try_files $uri $uri/ /index.php?$query_string;
}
location ~* ^/(?:css|js)/.*\.(?:css|js)$ {
expires 2d;
access_log off;
add_header Cache-Control "public, must-revalidate";
add_header X-Content-Type-Options "nosniff";
}
location ~ /\. {
deny all;
}
}
NGINX
💡 说明:
client_max_body_size 20M与 PHP 的upload_max_filesize/post_max_size共同决定附件上传上限(官方注释要求两处一致);生产启用 HTTPS 后可按官方指南再加证书与APP_DOWNLOAD_ATTACHMENTS_VIA=nginx附件加速段。
启用站点、停用默认站点并校验配置(实测):
sudo rm -f /etc/nginx/sites-enabled/default
sudo ln -sf /etc/nginx/sites-available/freescout /etc/nginx/sites-enabled/freescout
sudo nginx -t
实测输出:
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
sudo systemctl reload nginx
5.9 重启服务
本节让 PHP-FPM 重新加载 5.2 节的 php.ini 修改并确保两个服务处于运行态(实测):
sudo systemctl restart php8.3-fpm
systemctl is-active nginx
systemctl is-active php8.3-fpm
实测输出:
active
active
5.10 配置 cron 定时任务
本节配置 FreeScout 的「心脏」——每分钟的 schedule:run 定时任务。它负责拉取新邮件、驱动后台队列守护进程与各类计划任务,不配置则收发邮件完全不工作。
确认 cron 服务在跑(Ubuntu 22.04 服务器通常自带;实测机缺失则先安装):
systemctl is-active cron || sudo apt install -y cron
sudo systemctl start cron
systemctl is-active cron
实测输出:
active
为 www-data 用户写入定时任务(官方要求以 Web 进程同用户身份运行,避免权限错乱):
sudo crontab -u www-data -e
在文件末尾追加一行(官方原样命令,把路径换成你的安装目录):
* * * * * php /var/www/html/artisan schedule:run >> /dev/null 2>&1
保存后核验(实测):
crontab -u www-data -l
实测输出:
* * * * * php /var/www/html/artisan schedule:run >> /dev/null 2>&1
⚠️ 注意:官方特别强调不要在这条命令上加
--no-interaction参数——schedule:run每次执行会顺便拉起后台queue:work守护进程,加该参数会导致守护进程无法启动、发信等异步任务全部卡住。
5.11 安装验证
本节做三层验证:需求自检、登录页可达、端到端登录。
第一层:官方需求自检命令(实测):
sudo -u www-data php /var/www/html/artisan freescout:check-requirements
实测输出(全量):
PHP Version
8.3.35........................ OK
PHP Extensions
OpenSSL....................... OK
PDO........................... OK
Mbstring...................... OK
Tokenizer..................... OK
JSON........................... OK
XML............................ OK
GD............................. OK
fileinfo...................... OK
ZIP............................ OK
iconv......................... OK
cURL.......................... OK
DOM............................ OK
libxml........................ OK
intl.......................... OK
pcntl (console PHP)........... OK
Functions
shell_exec (PHP).............. OK
proc_open (PHP)............... OK
fpassthru (PHP)............... OK
symlink (PHP)................. OK
iconv (PHP)................... OK
dns_get_record (PHP).......... OK
inet_pton (PHP)............... OK
pcntl_signal (console PHP).... OK
ps (shell).................... OK
第二层:登录页与根路径跳转(实测):
curl -s -o /dev/null -w 'HTTP %{http_code}\n' http://192.168.146.128:8155/login
curl -s -o /dev/null -w 'HTTP %{http_code} -> %{redirect_url}\n' http://192.168.146.128:8155/
实测输出:
HTTP 200
HTTP 302 -> http://192.168.146.128:8155/login
浏览器访问 http://192.168.146.128:8155/login 应看到 FreeScout 登录页(页面标题为 FreeScout)。
第三层:curl 会话登录并进入仪表盘(实测,验证账号可用):
cd /tmp
TOKEN=$(curl -s -c cj.txt http://192.168.146.128:8155/login | grep -oP 'name="_token" value="\K[^"]+' | head -1)
curl -s -b cj.txt -c cj.txt -o /dev/null -w 'login: HTTP %{http_code} -> %{redirect_url}\n' \
-d "_token=$TOKEN" -d 'email=admin@freescout.local' -d 'password=q1w2e3r4' \
http://192.168.146.128:8155/login
curl -s -b cj.txt http://192.168.146.128:8155/ | grep -oE '<title>[^<]*</title>'
实测输出:
login: HTTP 302 -> http://192.168.146.128:8155/home
<title>Dashboard - FreeScout </title>
登录成功并进入仪表盘,安装完成。最后核对应用框架版本(实测):
sudo -u www-data php /var/www/html/artisan --version
实测输出:
Laravel Framework 5.5.40
六、方案对比与选择建议
本章对比两种安装路径的差异,帮助读者选择。
| 维度 | 方案 A:官方脚本 | 方案 B:手动安装(本文主线) |
|---|---|---|
| 命令条数 | 4 条 | 约 30 条 |
| 耗时 | 最短(一次交互) | 约 15–30 分钟 |
| 过程可控性 | 低(脚本黑盒) | 高(每步可验证) |
| 排障定位 | 难(需读脚本源码) | 易(错误落在具体步骤) |
| 数据库/Web 服务器选择 | 交互询问 | 完全自定义 |
| 适用场景 | 全新机器快速验收 | 生产部署、需要审计每一步 |
选择建议:想 5 分钟看到效果选方案 A;上生产、写部署文档、需要精确复现选方案 B。两条路径装出的应用完全同构,后续配置与升级章节对两者通用。
七、升级、降级与日常管理
本章给出 1.8.248 之后的版本管理操作。FreeScout 官方提供 Web 升级器与命令行升级脚本,git 形态安装的实例还可直接切换 tag 实现降级。
命令行升级(官方 tools/update.sh):应用自带升级脚本,--yes 跳过交互确认(官方 cron 自动更新也用它):
sudo -u www-data /var/www/html/tools/update.sh --yes
升级前脚本会检查 PHP 版本并提示备份(脚本头部实测内容):
#!/usr/bin/env bash
#
# FreeScout upgrade script.
# ...
echo -e "\e[33mMake sure to create a backup of the application before you continue.\e[0m";
git tag 形态的降级/锁版:由于应用以 tag 检出,切回旧版本只需(以 1.8.240 为例):
cd /var/www/html
sudo -u www-data git fetch --depth 1 origin tag 1.8.240
sudo -u www-data git checkout 1.8.240
sudo -u www-data php artisan freescout:clear-cache
⚠️ 注意:跨版本降级涉及数据库迁移回退,FreeScout 迁移不保证可逆——降级前必须先备份数据库与整个应用目录(
mysqldump freescout+tar czf应用目录)。
服务日常管理(每行仅操作一个单元):
sudo systemctl restart nginx # 重启 Web 服务器
sudo systemctl restart php8.3-fpm # 重启 PHP 进程池
sudo systemctl restart mariadb # 重启数据库
sudo systemctl restart cron # 重启定时任务服务
改动 .env 后的生效方法(FreeScout 特有,易遗忘):
sudo -u www-data php /var/www/html/artisan freescout:clear-cache
日常巡检三件套(实测命令,输出正常时均应为 active/存在):
systemctl is-active nginx php8.3-fpm mariadb cron | tr '\n' ' '; echo
实测输出:
active active active active
sudo -u www-data php /var/www/html/artisan freescout:check-requirements | grep -c OK
实测输出(1.8.248 + PHP 8.3.35 环境全 OK 时的计数):
25
💡 说明:需求自检共 25 个 OK 检查项(1 个 PHP 版本 + 15 个扩展 + 9 个函数,含分组行 pcntl/console 合并统计),巡检时若计数下降即说明环境退化。
八、常见问题(FAQ)
本章收录安装过程中的真实排障实录,均为实测复现的现象与解法。
Q1:直接 apt install php8.1-fpm 装了 PHP 8.1,能用吗?
不能用。官方明确 PHP 8.1 存在 XML/HTML 解析关键缺陷("DO NOT use PHP 8.1 as it contains critical bugs")。解法:按 5.1 节添加 ppa:ondrej/php 装 8.2/8.3;若已误装 8.1 并配置了 fpm sock,把 Nginx 的 fastcgi_pass 从 /run/php/php8.1-fpm.sock 改为 /run/php/php8.3-fpm.sock 并 systemctl restart php8.3-fpm。
Q2:add-apt-repository ppa:ondrej/php 报 502 Bad Gateway / Failed to fetch ... InRelease?
实测现象:为 apt 配置了出站代理(http_proxy 环境变量)时,add-apt-repository 过程拉取 launchpad 与 Ubuntu 归档数据被代理中断,报 http.client.IncompleteRead 与 502 Bad Gateway,PPA 未写入:
E: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/jammy-backports/InRelease 502 Bad Gateway [IP: 192.168.1.62 7897]
E: The repository 'http://archive.ubuntu.com/ubuntu jammy-backports InRelease' is no longer signed.
定位:ls /etc/apt/sources.list.d/ 为空,说明 PPA 添加失败。解法:去掉代理环境变量后重试(Ubuntu 归档与 launchpad 国内直连可达):
unset http_proxy https_proxy
sudo add-apt-repository -y ppa:ondrej/php
实测去掉代理后输出(节选):Adding deb entry to /etc/apt/sources.list.d/ondrej-ubuntu-php-jammy.list,再 sudo apt update 即可看到 php8.3 候选。经验法则:apt 走直连,仅 GitHub 等被墙资源才走代理。
Q3:浏览器访问出现 403「Access denied」,页面提示 Untrusted Host?
实测现象:安装完成后用 http://localhost/login 访问返回 403,页面正文:
Untrusted Host: localhost. Add the following to your .env file and clear cache: APP_TRUSTED_HOSTS ='localhost'
定位:FreeScout 的 TrustHosts 中间件校验请求主机名,localhost 不在 APP_URL(http://192.168.146.128:8155)允许范围内。解法(二选一):
- 用与
APP_URL一致的地址访问(http://192.168.146.128:8155/login); - 确需多主机名访问时,在
.env中加白名单(提示文案给出的参数)并清缓存:
APP_TRUSTED_HOSTS="192.168.146.128,helpdesk.example.com"
sudo -u www-data php /var/www/html/artisan freescout:clear-cache
Q4:装完不配 cron 会怎样?
收发邮件、后台队列、通知全部不工作——schedule:run 是 FreeScout 唯一的后台驱动入口。最小化安装的系统可能连 cron 服务都没有,实测机就出现 crontab: command not found,需先 sudo apt install -y cron && sudo systemctl start cron,再按 5.10 节为 www-data 配置定时任务。验证任务已生效:crontab -u www-data -l 应输出 * * * * * php /var/www/html/artisan schedule:run >> /dev/null 2>&1。
Q5:浏览器访问 /install 不出现安装向导?
Web 安装器只在「应用根目录不存在 .env 文件」时运行(官方原话:If .env file exists in the root of your app, web installer won't run)。本文方案 B 走的是手动安装路径(5.5–5.7 节),不需要也不应再跑 /install;若你想改用 Web 安装器,删掉 .env 与 /storage/.installed、清空 /bootstrap/cache 后再访问 /install。
九、卸载与清理
本章给出完整卸载步骤,适用于测试机回收或迁移前清场。
# 1) 停止服务并禁用(每行一个单元)
sudo systemctl stop nginx
sudo systemctl stop php8.3-fpm
sudo systemctl stop mariadb
sudo systemctl stop cron
# 2) 移除 Nginx 站点配置
sudo rm -f /etc/nginx/sites-enabled/freescout /etc/nginx/sites-available/freescout
# 3) 卸载软件包(保留 --purge 连配置一起删)
sudo apt purge -y nginx nginx-common php8.3-fpm php8.3-* mariadb-server mariadb-client
sudo apt autoremove -y
# 4) 删除数据库数据目录与应用目录
sudo rm -rf /var/lib/mysql /var/www/html
# 5) 清理 www-data 的 crontab
sudo crontab -u www-data -r
⚠️ 注意:第 4 步不可逆,会删掉全部工单数据;迁移场景请先
mysqldump备份。
十、参考链接
- 官方安装指南(本文流程依据):
https://github.com/freescout-help-desk/freescout/wiki/Installation-Guide - 官方仓库与版本标签:
https://github.com/freescout-help-desk/freescout - 官方下载页(zip 形态):
https://freescout.net/download/ - ondrej/php PPA:
https://launchpad.net/~ondrej/+archive/ubuntu/php - 组件定位与选型对比:《FreeScout 1.8.248 介绍与选型指南》
- 官方 Choosing-a-Server(容量建议):
https://github.com/freescout-help-desk/freescout/wiki/Choosing-a-Server - 官方 Sending-Emails(发信配置):
https://github.com/freescout-help-desk/freescout/wiki/Sending-Emails - artisan 命令行工具集(安装后运维命令全景):《FreeScout 常用 CLI 命令详解》