# bbs1org
**Repository Path**: wfdaj/bbs1org
## Basic Information
- **Project Name**: bbs1org
- **Description**: No description available
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: main
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2026-07-27
- **Last Updated**: 2026-07-27
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# bbs1org
一个极简 PHP 论坛。核心代码仅200多KB,纯原生、无框架、无依赖;支持 SQLite、MySQL 和 PostgreSQL;适合社区站点、低成本部署和 AI 二次开发。
## 特点
- 纯原生 PHP,单核心代码文件,无框架和 Composer 依赖,部署与维护简单
- 支持 SQLite、MySQL 和 PostgreSQL,数据库结构和搜索能力保持跨引擎兼容
- 包含首页、版块、主题、回帖、收藏、个人主页和后台管理等完整论坛功能
- 支持用户组、版块权限、站点设置、注册控制、发帖限制和附件管理
- 插件机制支持 Hook、路由、后台页面、资源合并、在线安装更新和统一计划任务
- 站点设置、版块和用户组按需懒加载,数据库结构简单,负载能力强
- 支持 AJAX 交互和响应式布局,兼顾 PC 与移动端使用体验
## 环境
- PHP 8.1+
- PDO SQLite、PDO MySQL 或 PDO PostgreSQL 扩展
## 演示
https://bbs1.org
## Docker 部署
服务器需先安装 Docker Engine 和 Docker Compose 插件,并确保 `80` 端口未被占用。
```bash
cd /opt
git clone https://github.com/bbs1org/bbs1org.git bbs1org
git clone https://github.com/bbs1org/bbs1org_docker.git docker
cd /opt/docker
cp .env.example .env
nano .env
```
编辑 `/opt/docker/.env` 选择 SQLite、MySQL 或 PostgreSQL。
```bash
docker compose up -d
```
访问 `http://服务器地址/index.php?a=install` 完成安装。
Compose 会自动启动 `cron` 容器,每分钟以 CLI 方式执行 `php index.php cron`;无需配置宿主机 crontab 或第三方 URL 定时服务。
完整配置、更新、备份和维护说明见 [bbs1org_docker](https://github.com/bbs1org/bbs1org_docker)。
## 手动部署
使用宝塔面板部署请参考 [宝塔部署指南](https://github.com/bbs1org/bbs1org_docker/blob/main/README_BT.md)。
```bash
git clone https://github.com/bbs1org/bbs1org.git /var/www/bbs1org
cd /var/www/bbs1org
chown -R www-data:www-data .
```
1. 将站点根目录指向项目目录,并将 PHP 请求交给 PHP-FPM
2. 配置不存在文件回退到 `/index.php?$query_string`,禁止公网访问 `app/data/`、`app/cache/`、`app/plugins/`、点文件及 `app/upload/` 中的脚本文件;Nginx 可参考 [bbs1org_docker/nginx.conf](https://github.com/bbs1org/bbs1org_docker/blob/main/nginx.conf),并将 `fastcgi_pass php:9000` 改为本机 PHP-FPM 地址
3. 确保项目根目录和 `app/` 可写
4. MySQL/PostgreSQL 需提前创建空数据库;然后访问 `http://服务器地址/index.php?a=install`,选择已安装 PDO 驱动对应的数据库并完成安装
若重新部署程序后连接到已有完整站点数据的数据库,安装器会恢复本地数据库配置和安装锁,并跳转登录页使用原账号登录,不会重复初始化数据。
完成安装后,为运行 PHP 的系统用户配置每分钟一次的 CLI 计划任务:
```cron
* * * * * cd /var/www/bbs1org && /usr/bin/php index.php cron >> app/data/cron.log 2>&1
```
可通过 `crontab -e` 添加;`/usr/bin/php` 请按服务器上的 `command -v php` 结果调整。
若主机不支持 CLI 计划任务,可使用云监控、cron-job.org 等定时 URL 服务每分钟访问:
```text
https://你的域名/index.php?a=cron
```
## 升级
在后台设置底部点击“升级”,检测更新后选择文件并执行“在线升级”。升级前请先备份数据库、附件、头像和插件目录。
## 数据库迁移
先在新数据库完成安装并登录管理员账号,再从升级页进入“数据迁入”,或访问 `index.php?a=migrate`。选择旧数据库类型并填写连接信息,程序会迁入旧库的全部普通数据表;当前库没有的表会自动复制字段、主键和索引后再导入数据,同名表则清空后替换,并保留原 ID。
插件数据表会一并迁入。附件、头像和插件程序文件不在数据库中,需要另外复制 `app/upload/`、`app/avatars/` 和 `app/plugins/`。迁移前请备份新旧数据库。
## 文件目录权限
### 公网开放访问
```text
index.php 论坛唯一主程序
app/assets/ 静态资源
app/avatars/ 头像镜像,需持久存储
app/upload/ 附件,需持久存储
```
### 公网禁止访问
```text
app/data/ 数据文件,需持久存储
app/plugins/ 插件,需持久存储
app/cache/ 插件及临时缓存
app/setup/ 安装升级与数据迁入
```
## 插件开发指南
### AI 插件开发规则
使用 AI 新建、修改或审查插件前,应先让 AI 完整读取项目根目录的 [`.ai-rules.md`](.ai-rules.md)。该文件将本节开发规范提炼为短句强约束,重点覆盖插件结构、跨数据库兼容、Schema、查询性能、Hook、资源、安全、外部采集和交付检查,用于减少 AI 在长文档中遗漏关键规则。入口位于项目根目录 `.ai-rules.md`,可在提示词中直接写“先读取并遵守 `.ai-rules.md`,再开发插件”。
插件放在 `app/plugins/插件ID/plugin.php`,然后在后台“插件”页点击“同步插件”。注册信息保存到 `app_plugins`,普通请求不扫描插件目录。新插件默认停用,启用后才会执行;从插件市场更新或重新安装后也会自动停用,再次启用时执行新版插件的 `install`。插件 ID 必须使用小写字母、数字、下划线或短横线。
插件读写目录应使用 `DATA_DIR`、`CACHE_DIR`、`PLUGIN_DIR`、`UPLOAD_DIR` 等核心常量,附件公开地址使用 `upload_url()`,不要硬编码目录。
最小示例:
```php
el.dataset.ready="1");';
}
function hello_footer($html, array $ctx): string
{
return (string)$html . 'Hello';
}
return [
'id' => 'hello',
'name' => 'Hello',
'version' => '1.0.0',
'description' => '给页脚追加内容',
'author' => 'your-name',
'assets' => [
'css' => 'hello_css',
'js' => 'hello_js',
],
'hooks' => [
'page.footer' => 'hello_footer',
],
];
```
### 插件 CSS 和 JavaScript
插件的固定 CSS、JavaScript 必须通过 `assets` 声明,不要通过 `page.head`、`page.footer` 输出 `