Web 安装程序详解
FeedbackPulse SaaS 内置了精美的浏览器安装程序,无需命令行(初次文件上传和 composer install 之后)。
访问安装程序
在浏览器中访问:
https://yourdomain.com/install
看不到安装程序? 请确认:
- Web 服务器指向
public/目录- Apache 已启用
mod_rewrite(或 Nginx 配置了正确的try_files)- 不存在
storage/installed.lock文件(首次安装后此文件会阻止安装程序再次运行)
第 1 步:欢迎与许可证验证
第一个页面欢迎您并要求输入 Envato/CodeCanyon 购买码。
在哪里找到购买码:
- 登录 CodeCanyon
- 进入 下载 → 找到 FeedbackPulse SaaS
- 点击 下载 → 许可证证书与购买码
- 购买码格式如:
a1b2c3d4-e5f6-7890-abcd-ef1234567890
此步骤的作用:
- 通过 Envato API 验证您的许可证
- 确保您持有合法副本
- 解锁安装程序的后续步骤
第 2 步:环境检查
安装程序会自动扫描您的服务器并检查:
PHP 版本
- 需要 PHP 8.4 或更高版本
- 显示您当前的 PHP 版本
依赖项
- 检查
vendor/autoload.php是否存在(Composer 依赖项必须已安装或已上传)
PHP 扩展
以下扩展会被检查:
pdo_mysql— 数据库连接mbstring— 字符串处理openssl— 加密tokenizer— 代码解析xml— XML 处理ctype— 字符验证json— JSON 处理bcmath— 数学运算fileinfo— 文件类型检测curl— API 调用
目录权限
storage/— 必须可写bootstrap/cache/— 必须可写
结果显示
- 绿色勾号 = 要求已满足
- 红色叉号 = 要求未满足(必须修复后才能继续)
修复检查失败项:
# 安装缺失的 PHP 扩展(Ubuntu)
sudo apt install php8.4-mysql php8.4-mbstring php8.4-xml php8.4-bcmath php8.4-curl php8.4-gd php8.4-zip
# 修复权限
sudo chmod -R 775 storage bootstrap/cache
sudo chown -R www-data:www-data storage bootstrap/cache
# 重启 PHP
sudo systemctl restart php8.4-fpm
第 3 步: 数据库配置
输入您的 MySQL/MariaDB 连接信息:
| 字段 | 示例 | 备注 |
|---|---|---|
| 数据库主机 | 127.0.0.1 | 为确保可靠性,使用 127.0.0.1 而非 localhost |
| 数据库端口 | 3306 | 默认 MySQL 端口 |
| 数据库名 | feedbackpulse | 必须提前创建! |
| 数据库用户名 | feedbackpulse_user | 需要对数据库拥有完整权限 |
| 数据库密码 | your_secure_password | 用户的密码 |
此步骤之前
您必须提前创建数据库:
-- 登录 MySQL
mysql -u root -p
-- 创建数据库
CREATE DATABASE feedbackpulse CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- 创建专用用户(推荐)
CREATE USER 'feedbackpulse_user'@'localhost' IDENTIFIED BY 'your_secure_password';
GRANT ALL PRIVILEGES ON feedbackpulse.* TO 'feedbackpulse_user'@'localhost';
FLUSH PRIVILEGES;
EXIT;
点击"配置数据库"后会发生什么
- 安装程序测试连接
- 将数据库凭据保存到
.env文件 - 运行所有数据库迁移(创建约 30 张数据表)
- 填充默认数据:
- 3 个默认订阅套餐(入门版、成长版、专业版)
- 默认平台设置
- 显示成功消息
注意: 安装过程中 Session 和缓存驱动保持为
file以确保稳定性。安装完成步骤时会自动切换为database。
此步骤根据服务器性能可能需要 10-30 秒。
第 4 步:管理员账户
创建您的超级管理员账户:
| 字段 | 示例 | 备注 |
|---|---|---|
| 全名 | 张三 | 您的显示名称 |
| 邮箱地址 | [email protected] | 用于登录和接收通知 |
| 密码 | (强密码) | 最少 8 位,请使用强密码! |
| 确认密码 | (必须一致) | 必须与密码相同 |
此步骤会执行的操作
- 创建
role = superadmin的用户账户 - 这是唯一自动创建的超级管理员账户
- 您将使用此账户在
/login登录并访问/admin/dashboard
安全提示: 使用唯一的强密码,后续可在设置中启用双因素认证(2FA)。
第 5 步:邮件配置
配置发送事务性邮件的 SMTP 信息:
| 字段 | 示例 | 备注 |
|---|---|---|
| SMTP 主机 | smtp.gmail.com | 您的邮件服务商 SMTP 服务器 |
| SMTP 端口 | 587 | TLS 使用 587,SSL 使用 465 |
| SMTP 用户名 | [email protected] | 通常是您的邮箱地址 |
| SMTP 密码 | your_app_password | 推荐使用应用专用密码 |
| 加密方式 | tls | TLS(推荐)或 SSL |
| 发件地址 | [email protected] | 外发邮件的"发件人"地址 |
| 发件人名称 | FeedbackPulse | 外发邮件的"发件人"名称 |
常用 SMTP 服务商
| 服务商 | 主机 | 端口 | 加密 | 备注 |
|---|---|---|---|---|
| Gmail | smtp.gmail.com | 587 | TLS | 需要应用专用密码(非普通密码) |
| Mailgun | smtp.mailgun.org | 587 | TLS | 适合事务性邮件 |
| Amazon SES | email-smtp.{region}.amazonaws.com | 587 | TLS | 大规模使用成本效益高 |
| SendGrid | smtp.sendgrid.net | 587 | TLS | 用户名填 apikey |
| Postmark | smtp.postmarkapp.com | 587 | TLS | 最佳送达率 |
| Mailtrap | sandbox.smtp.mailtrap.io | 587 | TLS | 仅用于测试! |
现在无法配置邮件? 可以跳过此步骤,稍后在
管理员 → 设置 → 邮件中配置。平台不依赖邮件也可运行,但邀请、摘要和密码重置等功能将无法使用。
第 6 步:安装完成!
您将看到成功页面,包含以下信息:
- 数据库已配置并完成迁移
- 管理员账户已创建
- 邮件已配置
installed.lock文件已创建- Session 和缓存驱动已切换为
database - Web Cron 的
CRON_TOKEN已自动生成 - 共享主机提示(如果软链接无法创建)
Cron 任务说明(显示在完成页面)
完成页面会显示两种 Cron 配置方案,附带可复制粘贴的命令:
-
CLI 命令 — 用于 VPS/独立服务器:
* * * * * cd /path/to/project && php artisan schedule:run >> /dev/null 2>&1 -
URL/wget — 用于共享主机(使用自动生成的
CRON_TOKEN):wget -q -O /dev/null "https://yourdomain.com/cron/run?token=YOUR_CRON_TOKEN"
请保存好这些命令! 离开页面前请从完成页面复制 Cron 命令。您也可以在
.env文件中找到CRON_TOKEN。
installed.lock 文件
安装程序创建 storage/installed.lock 文件,防止任何人重新运行安装程序,这是一项安全措施。
重新运行安装程序(如全新安装),请删除此文件:
rm storage/installed.lock然后再次访问
/install。
安装后检查清单
安装程序完成后:
- 使用完成页面上显示的说明配置 Cron 任务(参阅 Cron 任务与队列工作进程)
- 使用超级管理员凭据登录
https://yourdomain.com/login - 访问
管理员 → 套餐— 查看并自定义订阅套餐 - 访问
管理员 → 设置 → 付款— 接入 Stripe/PayPal - 访问
管理员 → 设置 → 邮件— 发送测试邮件 - 访问
管理员 → 落地页— 自定义公开首页 - 配置 SSL(参阅 SSL 证书)
- 可选配置通配符 DNS(参阅通配符 DNS 配置)
下一步
- Apache 配置或 Nginx 配置
- 环境变量 — 精调您的
.env - Cron 任务与队列工作进程 — 配置定时任务