Tstore/README.md

224 lines
5.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Tstore
Tstore 是一个基于 Laravel 12 的 Typecho 插件/主题商店项目,包含展示前台、网页后台和 API 接口三部分。
## 功能概览
- 前台展示站:首页、插件列表、主题列表、详情页
- 网页后台账号密码登录、分类管理、扩展管理、版本管理、ZIP 发布
- 仓库 API扩展列表、详情、更新检查、下载、分类
- 管理 API包管理、分类管理、版本管理
## 技术栈
- PHP 8.2+
- Laravel 12
- Vite 7
- Tailwind CSS 4
## 主要入口
- 前台首页:`/`
- 后台登录:`/admin/login`
- 仓库 API`/api/v1/repo/*`
- 管理 API`/api/admin/*`
- 健康检查:`/up`
## 本地开发
```bash
composer install
cp .env.example .env
php artisan key:generate
php artisan migrate --force
npm install
npm run dev
php artisan serve
```
也可以直接使用项目内置脚本:
```bash
composer run setup
composer run dev
```
## 生产部署
以下步骤以 `Linux + Nginx + PHP-FPM` 为例。生产环境不要运行 `php artisan serve``npm run dev`
### 1. 准备运行环境
- 安装 PHP 8.2 及常用扩展:`mbstring`、`openssl`、`pdo`、`pdo_mysql` 或 `pdo_sqlite`、`fileinfo`、`zip`
- 安装 Composer 2
- 安装 Node.js 20+ 和 npm
- 准备 Web 服务器,例如 Nginx
- 准备数据库,生产建议使用 MySQL 或 MariaDB不建议继续使用 SQLite
### 2. 拉取代码并安装依赖
```bash
git clone <your-repo-url> /var/www/tstore
cd /var/www/tstore
composer install --no-dev --optimize-autoloader
npm ci
npm run build
```
如果前端资源在 CI 中已经构建好,也可以直接发布 `public/build`,服务器上就不必再执行 `npm ci``npm run build`
### 3. 配置环境变量
先创建生产环境配置文件:
```bash
cp .env.example .env
```
至少确认并修改以下配置:
```dotenv
APP_NAME=Tstore
APP_ENV=production
APP_DEBUG=false
APP_URL=https://your-domain.com
LOG_CHANNEL=stack
LOG_STACK=daily
LOG_LEVEL=info
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=tstore
DB_USERNAME=tstore
DB_PASSWORD=your-password
SESSION_DRIVER=file
CACHE_STORE=file
QUEUE_CONNECTION=sync
STORE_ADMIN_TOKEN=replace-with-a-long-random-token
STORE_PLUGIN_ACCESS_TOKEN=replace-with-a-long-random-token
ADMIN_NAME=Tstore Admin
ADMIN_EMAIL=admin@example.com
ADMIN_PASSWORD=change-this-password
```
说明:
- `STORE_ADMIN_TOKEN` 用于 `/api/admin/*` 管理接口鉴权
- `STORE_PLUGIN_ACCESS_TOKEN` 用于下载接口鉴权
- 网页后台 `/admin/login` 使用 `users` 表中的账号密码登录
- 如果生产环境使用 Redis可以把 `SESSION_DRIVER`、`CACHE_STORE`、`QUEUE_CONNECTION` 改为 Redis 相关配置
### 4. 初始化应用
```bash
php artisan key:generate
php artisan migrate --force
php artisan db:seed --class='Database\Seeders\AdminUserSeeder' --force
php artisan optimize
```
说明:
- 首次部署需要执行 `key:generate`
- 初始化管理员账号时,只建议运行 `AdminUserSeeder`
- 不要在生产环境直接执行 `php artisan db:seed`,因为当前 `DatabaseSeeder` 会同时导入演示数据
### 5. 设置目录权限
确保以下目录对 Web 服务用户可写:
- `storage/`
- `bootstrap/cache/`
如果你把上传的 ZIP 包存放在本机磁盘,还需要关注:
- `storage/app/packages/`
这个目录建议纳入备份策略。
### 6. 配置 Web 根目录
Nginx 或 Apache 的站点根目录必须指向项目的 `public/` 目录,而不是仓库根目录。
例如:
```nginx
server {
listen 80;
server_name your-domain.com;
root /var/www/tstore/public;
index index.php index.html;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_pass unix:/run/php/php8.2-fpm.sock;
}
location ~ /\.(?!well-known).* {
deny all;
}
}
```
### 7. 部署后验证
部署完成后,至少检查以下内容:
- 访问 `/up`,确认健康检查正常
- 访问 `/admin/login`,确认后台登录页正常打开
- 检查 `public/build/manifest.json` 是否存在
- 调用 `/api/v1/repo/index`,确认公开 API 正常返回
- 登录后台,确认可进入管理首页
### 8. 后续发布更新
应用更新时,建议按下面顺序执行:
```bash
cd /var/www/tstore
git pull
composer install --no-dev --optimize-autoloader
npm ci
npm run build
php artisan migrate --force
php artisan optimize:clear
php artisan optimize
```
### 9. 可选:队列进程
当前项目即使使用 `QUEUE_CONNECTION=sync` 也可以正常工作。如果你后续把下载日志、统计或发布流程改成异步任务,再配置常驻队列进程,例如:
```bash
php artisan queue:work --tries=3 --timeout=90
```
建议用 Supervisor 或 systemd 托管。
## 生产环境建议
- `APP_DEBUG` 必须为 `false`
- 使用 HTTPS并正确设置 `APP_URL`
- 管理 API 令牌和下载令牌使用高强度随机值
- 日志建议使用 `daily`
- 数据库、`storage/app/packages` 和 `.env` 要纳入备份
## 备注
- 生产环境不需要运行 Vite 开发服务器
- 生产环境不建议使用 `php artisan serve`
- 如果前端资源已由 CI 构建,可以只发布编译后的 `public/build`