本文按宝塔 Linux 面板从零安装 ZoneCMS 演示站写清每一步,适合把安装包上传到服务器正式上线。请严格按顺序操作。

安装成功的关键标志:① 网站根目录指向程序里的 public;② 伪静态已生效;③ 能打开 /install 并装完;④ 能进 /admin/login 与前台首页。

一、准备材料

  1. ZoneCMS 安装包压缩文件(含 apppublicdatabase/schema.sqlvendortemplate 等)
  2. 已解析到服务器的域名(例如 demo.example.com),或先用服务器 IP 测试
  3. 宝塔面板账号(已安装 Nginx + PHP + MySQL)

二、宝塔环境要求

组件建议版本说明
Nginx1.20+也可用 Apache,下文以 Nginx 为主
PHP7.4 或 8.0最低 7.2.5;不建议太新的未验证版本
MySQL5.7 / 8.0或 MariaDB 10.3+,字符集 utf8mb4

2.1 安装/检查软件

  1. 登录宝塔 → 软件商店
  2. 确认已安装:NginxMySQLPHP(7.4 或 8.0)
  3. 若未安装,点「安装」,装完后再继续

2.2 PHP 扩展(必须)

  1. 软件商店 → 已安装 → 找到对应 PHP → 点 设置
  2. 打开 安装扩展,确保以下扩展为已安装状态:
    • pdo_mysql(或 mysqli + pdo)
    • gd
    • curl
    • mbstring
    • openssl
    • fileinfo(建议)
    • exif(建议,图片相关)
  3. 打开 禁用函数:若列表中有 putenvproc_openpcntl_signal 等,安装/计划任务可能受影响。演示站常规安装一般可先保持默认;若安装向导报权限/函数相关错误,再按提示从禁用列表中移除对应函数并保存。
  4. 打开 配置修改:建议 upload_max_filesizepost_max_size 不小于 20Mmax_execution_time 建议 ≥ 120
  5. 改完后点保存,必要时在软件商店里重启 PHP

三、上传并解压程序包

  1. 宝塔 → 文件 → 进入 /www/wwwroot/
  2. 新建目录,例如 demo.example.com(名称可自定)
  3. 进入该目录,点 上传,上传 ZoneCMS 的 zip 安装包
  4. 上传完成后,选中 zip → 解压
  5. 解压后应能看到类似结构:
    /www/wwwroot/demo.example.com/
      ZoneCMS-xxxxxxxx/          ← 若 zip 内带这一层目录
        app/
        config/
        database/
        public/                  ← 真正的网站根目录
        runtime/
        template/
        vendor/
        think
        README.md
    
  6. 建议整理:ZoneCMS-xxxxxxxx 里的全部文件,移动到站点目录根下,使路径变成:
    /www/wwwroot/demo.example.com/public/index.php
    /www/wwwroot/demo.example.com/app/
    ...
    避免多套一层目录导致后面根目录填错。
  7. 确认 没有 .envpublic/install.lock(新包不应自带;有的话先删掉才能重装)

四、创建数据库

  1. 宝塔 → 数据库添加数据库
  2. 填写:
    • 数据库名:如 zonecms_demo
    • 用户名:可与库名相同
    • 密码:点生成,复制保存
    • 访问权限:本地服务器(默认)
    • 字符集:utf8mb4
  3. 提交后记下:库名、用户名、密码。主机一般为 127.0.0.1,端口 3306
  4. 不要手工导入 SQL。安装向导会自动导入包内 database/schema.sql(含演示数据)

五、创建网站(根目录必须是 public)

  1. 宝塔 → 网站添加站点
  2. 域名:填你的域名(如 demo.example.com)。若暂时用 IP,可先填 IP,稍后改
  3. 根目录:点选择目录,选到:
    /www/wwwroot/demo.example.com/public
    必须带 public。选成上一级会导致全站 404 / 打不开安装页。
  4. FTP:可不创建
  5. 数据库:选「不创建」(前面已单独建库)
  6. PHP 版本:选刚才准备好的 7.4 或 8.0
  7. 提交创建
创建后可在「网站 → 设置 → 网站目录」再次确认:运行目录为空或 /,且网站根目录已是 .../public

5.1 必须关闭「防跨站攻击」(否则容易 500)

网站设置 → 网站目录 里有一项 防跨站攻击(open_basedir)

  • 网站根目录绑的是 public,但程序还要读取上一级的 app/vendor/config/runtime/.env
  • 若开启防跨站,PHP 往往只能访问 public,读不到上级文件,页面会直接 500
安装与日常运行请关闭「防跨站攻击」。这是宝塔上 ZoneCMS 最常见的 500 原因之一。
关闭后点保存,再刷新前台/安装页验证。

六、配置伪静态(安装前必做)

  1. 网站列表 → 对应站点 → 设置伪静态
  2. 下拉选 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;
    }
  3. 保存后,可在「服务」中重载 Nginx(一般保存即生效)

验证:浏览器访问 http://你的域名/install,应出现 ZoneCMS 安装向导,而不是 404 或下载文件。

七、安装前权限(临时放宽,装完必须收紧)

安装向导要在程序根目录(含 apppublic 的那一层,不是只在 public 里)写入 .env,并在 public 写入 install.lock

若权限不够,会出现类似报错:

file_put_contents(.../.env): failed to open stream: Permission denied

7.1 安装前临时设置(推荐)

  1. 宝塔 → 文件,进入程序根目录。路径因机器而异,常见两种:
    /www/wwwroot/你的域名/
    /home/wwwroot/你的域名/
    
    以你服务器实际路径为准(报错信息里写的路径最准)。
  2. 选中该程序根目录 → 右键 权限
    • 所有者:www(或面板显示的 PHP 运行用户)
    • 权限数字:临时设为 755
    • 勾选 应用到子目录 → 确定
  3. 再确认这些位置对 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:安装完成

  1. 点「进入后台」,用刚才填写的管理员账号登录
  2. 打开前台域名,检查首页、栏目、产品、新闻是否正常
  3. 后台 → 站点设置:核对网站名称、LOGO、联系方式、SEO 等是否需改成正式信息
  4. 立刻去做第九节「安装后安全权限」,降低被挂马、改文件风险

九、安装后安全权限(必做,降低被黑风险)

原则:代码只读、缓存/上传可写、敏感文件禁止外网直接读。属主统一为 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有此文件表示已安装
thinkcomposer.json文件644保持只读即可

9.2 宝塔操作步骤(装完后立刻做)

  1. 文件管理进入程序根(例如 /www/wwwroot/你的域名//home/wwwroot/你的域名/
  2. 对整站先设:所有者 www,目录 755、文件 644,勾选应用到子目录(作为基线)
  3. 单独保证可写:
    • runtime/ → 权限 755,所有者 www,应用到子目录
    • public/uploads/ → 权限 755,所有者 www,应用到子目录
  4. 找到根目录下的 .env → 权限改为 600(或 640),所有者 www。不要把 .env 放到 public
  5. 确认伪静态里已禁止直接访问 runtime(见第六节示例)。Nginx 站点配置中也不要把网站根指到程序根(必须继续指向 public

9.3 其他安全建议

  • 不要使用 777:整站 777 等于敞开写权限,极易被挂马
  • 后台密码:使用强密码;不要用 admin/123456 这类弱口令长期上线
  • 安装入口:确认已有 public/install.lock;不要反复打开 /install。需要时可在宝塔「网站目录」对安装相关路径做额外限制,但保留 lock 文件
  • SSL:开启 HTTPS 与强制跳转
  • 宝塔面板:面板自身改端口、强密码、绑定官方绑定 IP(如有);勿把 8888/8887 对公网裸奔过久
  • 备份:定期备份网站目录 + 数据库;出事前有备份才能快速恢复
  • 上传风险:后台上传尽量用图片等受控类型;发现 uploads 下出现异常 .php 文件应立即排查
  • 更新:关注 ZoneCMS 官方升级包,及时打安全补丁
若收紧权限后后台无法上传、无法清缓存:优先检查 public/uploadsruntime 是否仍对 www 可写,而不是把整站改回 777。

十、安装后其他建议

  1. SSL:网站设置 → SSL → 申请 Let's Encrypt 并开启强制 HTTPS
  2. 计划任务(可选):宝塔 → 计划任务 → Shell,示例(路径改成你的):
    cd /www/wwwroot/demo.example.com && php think queue:work --once
    
    可按安装完成页再加 license:check / geo:auto
  3. 备份:计划任务同时备份网站目录与数据库
  4. 清理缓存:改模板异常时,后台点清理缓存;或删除 runtime/cacheruntime/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 可写
装完后无法上传/清缓存把可写目录收得太死只放开 runtimepublic/uploads,不要整站 777

十二、重装说明

需要重装时:

  1. 备份好现有 public/uploads 与数据库
  2. 删除 public/install.lock 与根目录 .env
  3. 清空(或新建)数据库
  4. 按第七节临时放宽程序根写权限后再访问 /install
  5. 装完立刻按第九节收紧权限

正式演示站建议装好并完成安全权限设置后,再做一次完整备份,然后对外宣传域名。