# 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` 输出 `