本文按宝塔 Linux 面板从零安装 ZoneCMS 演示站写清每一步,适合把安装包上传到服务器正式上线。请严格按顺序操作。
安装成功的关键标志:① 网站根目录指向程序里的
public;② 伪静态已生效;③ 能打开 /install 并装完;④ 能进 /admin/login 与前台首页。一、准备材料
- ZoneCMS 安装包压缩文件(含
app、public、database/schema.sql、vendor、template等) - 已解析到服务器的域名(例如
demo.example.com),或先用服务器 IP 测试 - 宝塔面板账号(已安装 Nginx + PHP + MySQL)
二、宝塔环境要求
| 组件 | 建议版本 | 说明 |
|---|---|---|
| Nginx | 1.20+ | 也可用 Apache,下文以 Nginx 为主 |
| PHP | 7.4 或 8.0 | 最低 7.2.5;不建议太新的未验证版本 |
| MySQL | 5.7 / 8.0 | 或 MariaDB 10.3+,字符集 utf8mb4 |
2.1 安装/检查软件
- 登录宝塔 → 软件商店
- 确认已安装:Nginx、MySQL、PHP(7.4 或 8.0)
- 若未安装,点「安装」,装完后再继续
2.2 PHP 扩展(必须)
- 软件商店 → 已安装 → 找到对应 PHP → 点 设置
- 打开 安装扩展,确保以下扩展为已安装状态:
pdo_mysql(或 mysqli + pdo)gdcurlmbstringopensslfileinfo(建议)exif(建议,图片相关)
- 打开 禁用函数:若列表中有
putenv、proc_open、pcntl_signal等,安装/计划任务可能受影响。演示站常规安装一般可先保持默认;若安装向导报权限/函数相关错误,再按提示从禁用列表中移除对应函数并保存。 - 打开 配置修改:建议
upload_max_filesize、post_max_size不小于20M;max_execution_time建议 ≥120 - 改完后点保存,必要时在软件商店里重启 PHP
三、上传并解压程序包
- 宝塔 → 文件 → 进入
/www/wwwroot/ - 新建目录,例如
demo.example.com(名称可自定) - 进入该目录,点 上传,上传 ZoneCMS 的 zip 安装包
- 上传完成后,选中 zip → 解压
- 解压后应能看到类似结构:
/www/wwwroot/demo.example.com/ ZoneCMS-xxxxxxxx/ ← 若 zip 内带这一层目录 app/ config/ database/ public/ ← 真正的网站根目录 runtime/ template/ vendor/ think README.md - 建议整理:把
ZoneCMS-xxxxxxxx里的全部文件,移动到站点目录根下,使路径变成:
避免多套一层目录导致后面根目录填错。/www/wwwroot/demo.example.com/public/index.php /www/wwwroot/demo.example.com/app/ ... - 确认 没有
.env和public/install.lock(新包不应自带;有的话先删掉才能重装)
四、创建数据库
- 宝塔 → 数据库 → 添加数据库
- 填写:
- 数据库名:如
zonecms_demo - 用户名:可与库名相同
- 密码:点生成,复制保存
- 访问权限:本地服务器(默认)
- 字符集:
utf8mb4
- 数据库名:如
- 提交后记下:库名、用户名、密码。主机一般为
127.0.0.1,端口3306 - 不要手工导入 SQL。安装向导会自动导入包内
database/schema.sql(含演示数据)
五、创建网站(根目录必须是 public)
- 宝塔 → 网站 → 添加站点
- 域名:填你的域名(如
demo.example.com)。若暂时用 IP,可先填 IP,稍后改 - 根目录:点选择目录,选到:
必须带 public。选成上一级会导致全站 404 / 打不开安装页。/www/wwwroot/demo.example.com/public - FTP:可不创建
- 数据库:选「不创建」(前面已单独建库)
- PHP 版本:选刚才准备好的 7.4 或 8.0
- 提交创建
创建后可在「网站 → 设置 → 网站目录」再次确认:运行目录为空或
/,且网站根目录已是 .../public。5.1 必须关闭「防跨站攻击」(否则容易 500)
网站设置 → 网站目录 里有一项 防跨站攻击(open_basedir)。
- 网站根目录绑的是
public,但程序还要读取上一级的app/、vendor/、config/、runtime/、.env等 - 若开启防跨站,PHP 往往只能访问
public,读不到上级文件,页面会直接 500
安装与日常运行请关闭「防跨站攻击」。这是宝塔上 ZoneCMS 最常见的 500 原因之一。
关闭后点保存,再刷新前台/安装页验证。
关闭后点保存,再刷新前台/安装页验证。
六、配置伪静态(安装前必做)
- 网站列表 → 对应站点 → 设置 → 伪静态
- 下拉选 thinkphp(推荐)。若没有,粘贴下面规则后保存:
或等价:location ~* (runtime)/{ return 403; } location / { if (!-e $request_filename){ rewrite ^(.*)$ /index.php?s=$1 last; break; } }location / { try_files $uri $uri/ /index.php?$query_string; } - 保存后,可在「服务」中重载 Nginx(一般保存即生效)
验证:浏览器访问 http://你的域名/install,应出现 ZoneCMS 安装向导,而不是 404 或下载文件。
七、安装前权限(临时放宽,装完必须收紧)
安装向导要在程序根目录(含 app、public 的那一层,不是只在 public 里)写入 .env,并在 public 写入 install.lock。
若权限不够,会出现类似报错:
file_put_contents(.../.env): failed to open stream: Permission denied
7.1 安装前临时设置(推荐)
- 宝塔 → 文件,进入程序根目录。路径因机器而异,常见两种:
以你服务器实际路径为准(报错信息里写的路径最准)。/www/wwwroot/你的域名/ /home/wwwroot/你的域名/ - 选中该程序根目录 → 右键 权限:
- 所有者:
www(或面板显示的 PHP 运行用户) - 权限数字:临时设为 755
- 勾选 应用到子目录 → 确定
- 所有者:
- 再确认这些位置对
www可写:- 程序根目录(要能新建
.env) runtime/public/public/uploads/
- 程序根目录(要能新建
755 是安装阶段的临时做法,方便写入配置。安装成功后务必按第九节做「安全权限收紧」,不要长期整站随意可写。
八、浏览器安装向导(3 步)
打开:
http://你的域名/install
步骤 1:环境检测
全部为「通过」后点下一步。若有失败:按红字开启 PHP 扩展、或修正 runtime/public 可写权限。
步骤 2:数据库与管理员
| 字段 | 怎么填 |
|---|---|
| 数据库主机 | 127.0.0.1 |
| 端口 | 3306 |
| 数据库名 | 第 4 步创建的库名 |
| 用户名 / 密码 | 第 4 步创建的账号密码 |
| 表前缀 | 默认 zone_content_,一般不要改(与演示种子一致) |
| 站点域名 | 填域名主机名,如 demo.example.com(不要加 http://) |
| 管理员账号 / 密码 | 自定义后台登录账号;密码请设强一些并自行保存 |
点「开始安装」,等待完成。成功后会自动写入:
- 程序根目录
.env(数据库配置) public/install.lock(安装锁)
本安装包的 schema.sql 已含演示站内容(栏目、文章、产品、导航、配置等)。装完即可看到演示数据,无需再手工导入。
步骤 3:安装完成
- 点「进入后台」,用刚才填写的管理员账号登录
- 打开前台域名,检查首页、栏目、产品、新闻是否正常
- 后台 → 站点设置:核对网站名称、LOGO、联系方式、SEO 等是否需改成正式信息
- 立刻去做第九节「安装后安全权限」,降低被挂马、改文件风险
九、安装后安全权限(必做,降低被黑风险)
原则:代码只读、缓存/上传可写、敏感文件禁止外网直接读。属主统一为 PHP 运行用户(宝塔多为 www)。
9.1 推荐权限一览
| 路径 | 类型 | 建议权限 | 说明 |
|---|---|---|---|
| 程序根目录 | 目录 | 755 | 可进入;装完后一般不必再对整站「全员可写」 |
app/、config/、route/、extend/、view/、template/、vendor/、database/ | 目录/文件 | 目录 755 / 文件 644 | 程序代码,不要 777 |
runtime/ | 目录 | 755(需可写) | 缓存、日志、编译模板;必须 www 可写 |
public/ | 目录 | 755 | 网站入口 |
public/uploads/ | 目录 | 755(需可写) | 用户上传;仅此目录及子目录保持可写 |
public/static/ | 目录/文件 | 755 / 644 | 静态资源,一般只读 |
.env | 文件 | 600 或 640 | 含数据库密码;仅运行用户可读,切勿 777/666 |
public/install.lock | 文件 | 644 | 有此文件表示已安装 |
think、composer.json 等 | 文件 | 644 | 保持只读即可 |
9.2 宝塔操作步骤(装完后立刻做)
- 文件管理进入程序根(例如
/www/wwwroot/你的域名/或/home/wwwroot/你的域名/) - 对整站先设:所有者
www,目录 755、文件 644,勾选应用到子目录(作为基线) - 单独保证可写:
runtime/→ 权限 755,所有者 www,应用到子目录public/uploads/→ 权限 755,所有者 www,应用到子目录
- 找到根目录下的
.env→ 权限改为 600(或 640),所有者 www。不要把.env放到public里 - 确认伪静态里已禁止直接访问
runtime(见第六节示例)。Nginx 站点配置中也不要把网站根指到程序根(必须继续指向public)
9.3 其他安全建议
- 不要使用 777:整站 777 等于敞开写权限,极易被挂马
- 后台密码:使用强密码;不要用
admin/123456这类弱口令长期上线 - 安装入口:确认已有
public/install.lock;不要反复打开/install。需要时可在宝塔「网站目录」对安装相关路径做额外限制,但保留 lock 文件 - SSL:开启 HTTPS 与强制跳转
- 宝塔面板:面板自身改端口、强密码、绑定官方绑定 IP(如有);勿把 8888/8887 对公网裸奔过久
- 备份:定期备份网站目录 + 数据库;出事前有备份才能快速恢复
- 上传风险:后台上传尽量用图片等受控类型;发现
uploads下出现异常.php文件应立即排查 - 更新:关注 ZoneCMS 官方升级包,及时打安全补丁
若收紧权限后后台无法上传、无法清缓存:优先检查
public/uploads 与 runtime 是否仍对 www 可写,而不是把整站改回 777。十、安装后其他建议
- SSL:网站设置 → SSL → 申请 Let's Encrypt 并开启强制 HTTPS
- 计划任务(可选):宝塔 → 计划任务 → Shell,示例(路径改成你的):
可按安装完成页再加cd /www/wwwroot/demo.example.com && php think queue:work --oncelicense:check/geo:auto等 - 备份:计划任务同时备份网站目录与数据库
- 清理缓存:改模板异常时,后台点清理缓存;或删除
runtime/cache、runtime/temp
十一、常见问题排查
| 现象 | 原因 | 处理 |
|---|---|---|
| 打开就 500,伪静态和 public 都对 | 开启了「防跨站攻击」 | 网站目录 → 关闭防跨站攻击 → 保存 |
安装报 .env Permission denied | 程序根目录对 PHP 用户不可写 | 对程序根临时 755 + 属主 www(见第七节),装完再按第九节收紧;也可先手动建空 .env 并给 www 写权限 |
| 打开域名 404 / 空白 | 根目录不是 public | 网站目录改到 .../public |
| /install 404,但 index.php 能开 | 伪静态未配 | 按第六节配置 thinkphp 规则并保存 |
| 安装时报数据库连接失败 | 库名/账号/密码错,或 MySQL 未启动 | 在宝塔数据库里核对,主机用 127.0.0.1 |
| 安装成功又跳回安装页 | 缺少 install.lock 或 public 不可写 | 检查权限;可手动在 public 下新建空文件 install.lock |
| 后台/栏目 404 | 伪静态或根目录错误 | 复查第五节、第六节 |
| 前台图片不显示 | uploads 未上传或权限不足 | 确认 public/uploads 存在且 www 可写 |
| 装完后无法上传/清缓存 | 把可写目录收得太死 | 只放开 runtime 与 public/uploads,不要整站 777 |
十二、重装说明
需要重装时:
- 备份好现有
public/uploads与数据库 - 删除
public/install.lock与根目录.env - 清空(或新建)数据库
- 按第七节临时放宽程序根写权限后再访问
/install - 装完立刻按第九节收紧权限
正式演示站建议装好并完成安全权限设置后,再做一次完整备份,然后对外宣传域名。