墨林 - Molinink · 作者 Kira · https://www.molinink.com

============================================================
安装说明(以宝塔面板为例,大约十分钟)
============================================================

你需要准备:
· PHP 7.4 或更高版本(8.x 也能跑,推荐 8.x)
  必需扩展:pdo_mysql、mbstring、json、openssl、fileinfo
  建议再装:gd(缩略图)、zip(后台传主题/插件包)、intl(日期格式)
· MySQL 5.7 或更高(或 MariaDB 10.3 以上)
· 一个域名,已经解析到这台服务器

------------------------------------------------------------
第零步:安装包从哪下(先看这条,能省一次报错)
------------------------------------------------------------
用官方下载页或 Releases 给的安装包(文件名带版本号)。它自带 vendor/(依赖),解压到站点根就能装。

仓库页的 Code → Download ZIP 下的是源码包:仓库不提交 vendor/,打开会直接报
    require(.../vendor/autoload.php): Failed to open stream
那不是程序坏了,是少了一步 —— 在站点根跑一次 composer install --no-dev 就好,
或者干脆换 Releases 里的包。源码包还会多套一层 molinink-main/ 目录(打 tag 下的
是 molin-版本号/ 这种),必须把里面的东西提到站点根,不能就这么用。

------------------------------------------------------------
第一步:在宝塔里建站点(约 2 分钟)
------------------------------------------------------------
1. 登录宝塔 → 左侧「网站」→「添加站点」
2. 域名:填你的域名(不带 http://)
3. PHP 版本:选 7.4 或更高(推荐 8.x;选错了后面会一片白屏)
4. 数据库:选 MySQL,它会顺手给你建一个库
   **把「数据库名 / 用户名 / 密码」三样记下来**,第四步要填
5. FTP、SSL 可以先不勾(证书装完再申请)

------------------------------------------------------------
第二步:把程序传上去并解压(约 1 分钟)
------------------------------------------------------------
1. 宝塔 → 网站 → 点你的站点名 →「文件」
2. 进入站点根目录(一般是 /www/wwwroot/你的域名)
3. 点「上传」,选下载到的安装包,传完右键这个压缩包 →「解压」,解压到当前目录
4. 解压后必须**直接**看到这些:
      index.php   core/   install/   plugins/   themes/   storage/
   如果看到的是一层多出来的文件夹(里面才是 index.php),点进去全选 → 剪切 → 回到根目录粘贴,
   把文件"提"到根目录来(多套一层会打不开)
   别改用面板「网站 → 设置 → 网站目录 → 运行目录」指到那层子目录:/uploads/ 与
   /storage/ 的规则都是按站点根写的,运行目录一偏移它们就失效(症状是图片 404、
   备份又能被直接下载)。拍平,别指偏。

------------------------------------------------------------
第三步:粘两段配置(关键,别跳)
------------------------------------------------------------
3.1 伪静态 —— 让后台和文章页能打开

程序只有一个入口 index.php。像 /admin、/blog、/2026/10/hello 这样的地址,
磁盘上并没有对应文件,nginx 找不到就直接 404。所以要让它"找不到就交给 index.php"。

宝塔 → 网站 → 设置 →「伪静态」,把下面这段粘进去,保存:

    location / {
        try_files $uri $uri/ /index.php$is_args$args;
    }

    # 后台走程序路由。站点根下真有一个 admin/ 目录,里面只有静态资源(css/js/模板),
    # 没有 index 文件;不单独接管的话 nginx 会按目录索引处理,点「进入后台」直接
    # 403 Forbidden。这两行就是为它准备的。
    location = /admin {
        try_files $uri /index.php$is_args$args;
    }
    location = /admin/ {
        return 301 /admin;
    }

不加这一段的表现很具体:首页能打开,但 /admin 和所有文章页都是 404。
如果只粘了第一段、漏掉 /admin 那两行,症状会变成:文章页正常,进后台 403 Forbidden。

3.2 挡住 /storage/ —— 别让人把你的备份下载走

storage/ 里是全站备份包(整库 + 全部文件)、运行日志、缓存,以及你填过的远端备份凭据。
它在站点根目录里,不拦的话,知道地址的人就能直接下载。

宝塔 → 网站 → 设置 →「配置文件」,找到 server { ... } 这一块,在里面粘:

    location ^~ /storage/ {
        return 404;
    }

保存,宝塔会自动重载 nginx。

------------------------------------------------------------
第四步:打开站点,跟着向导走(约 3 分钟)
------------------------------------------------------------
浏览器打开 https://你的域名/ ,会看到「站点还没装好」,点「开始安装」。

向导一共五步:
1) 环境自检 —— PHP 版本、扩展、目录可写,缺什么它会直接说
2) 数据库 —— 填第一步记下的三样:
      主机 127.0.0.1  端口 3306
      库名 / 用户名 / 密码
   表前缀保持默认即可;填完可以点「测试连接」
3) 站点 —— 站点名称、站点地址(填 https://你的域名,带协议)、
   管理员用户名、邮箱、密码(至少 8 位,带大小写和数字)
4) 写入 —— 建表、建管理员、生成 config.php。中途失败会整体回滚,不会留半装的站
5) 完成

------------------------------------------------------------
第五步:收尾(三件,约 2 分钟)
------------------------------------------------------------
1. 删掉站点根目录下的 install/ 整个目录(留着别人还能打开安装页)
2. 打开 你的域名/admin 登录,进「设置 → 固定链接」选一个样式并保存
3. 在浏览器地址栏敲这四个地址自查:

      你的域名/                  → 首页能打开
      你的域名/admin             → 出现后台登录页(404 = 第三步 3.1 没生效)
      你的域名/storage/backups/  → 应该是 404
      你的域名/uploads/某张图片   → 能显示(这一条不用配,程序自己会发图)

四条都对上,就算装好了。

------------------------------------------------------------
可选:让图片和主题静态文件走 nginx(更快,不是必须)
------------------------------------------------------------
不加也能正常用 —— 程序自己会把这些文件发出去,只是多一次 PHP 开销。
想更快,把下面两段也粘进「配置文件」的 server { } 里:

    # 图片直接由 nginx 发,带 30 天长缓存
    location ^~ /uploads/ {
        alias /www/wwwroot/你的域名/storage/uploads/;   # 换成你的真实路径
        try_files $uri =404;
        expires 30d;
        add_header Cache-Control "public, immutable";
        location ~* \.(php|phtml|phar|php\d)$ { deny all; }
    }

    # 主题的 css/js/字体带 ?v=版本号,可以缓存一年
    location ^~ /themes/ {
        expires 1y;
        add_header Cache-Control "public, immutable";
    }

------------------------------------------------------------
出问题了先看这里
------------------------------------------------------------
· 报 require(.../vendor/autoload.php): Failed to open stream
                              → 下的是源码包(Code → Download ZIP),不含 vendor/;
                                换官方下载页给的安装包,或在站点根跑
                                composer install --no-dev。见第零步
· /admin 或文章页 404         → 伪静态没生效,回到第三步 3.1
· 整站白屏、500               → PHP 版本低于 7.4,或 storage/ 不可写(目录权限给 www,755)
· 上传图片失败                → storage/uploads 需要可写;缺 gd 扩展也会失败
· 文章里的图是破图            → 先看 images 文件是否真的在 storage/uploads 下;
                                 不加第三步之外那两段也应该能显示(程序自兜底)
· 备份下载返回 404            → 正常,说明 3.2 生效了
· 具体报错看 storage/logs/ 下当天的日志文件
· 用 Apache 而不是 nginx      → 见同目录「服务器配置.txt」第五节
