PHPackages                             snowmannunu/snowman-blog - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Framework](/categories/framework)
4. /
5. snowmannunu/snowman-blog

ActiveProject[Framework](/categories/framework)

snowmannunu/snowman-blog
========================

An open-source personal blog built with Laravel 12 and Filament v3.

v1.11.1(4w ago)10MITPHPPHP ^8.2CI passing

Since Apr 23Pushed 2w agoCompare

[ Source](https://github.com/SnowmanNunu/SnowmanBlog)[ Packagist](https://packagist.org/packages/snowmannunu/snowman-blog)[ RSS](/packages/snowmannunu-snowman-blog/feed)WikiDiscussions master Synced 1w ago

READMEChangelogDependencies (18)Versions (38)Used By (0)

SnowmanBlog
===========

[](#snowmanblog)

一个基于 Laravel 12 + Filament v3 构建的开源个人博客系统，包含完整的前端展示与后台管理功能。

[![PHP Version](https://camo.githubusercontent.com/67a32f402a91bc65d5e4395899ae9ade08800fc04669d5e7a359d9212aafa10a/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f5048502d253345253344382e322d3737374242343f6c6f676f3d706870)](https://php.net)[![Laravel Version](https://camo.githubusercontent.com/3d9c6b5ae9bf4a266a0111ab622c86271130f96e4fd3062a0a44d8ad66cae46c/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c61726176656c2d31322e782d4646324432303f6c6f676f3d6c61726176656c)](https://laravel.com)[![Filament Version](https://camo.githubusercontent.com/a6e86eba9ec4f8a4c4a8eb17fd644c9df232ed4e2a0af0de16cffc2dfd1c68c0/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f46696c616d656e742d76332d464441344146)](https://filamentphp.com)[![CI](https://github.com/SnowmanNunu/SnowmanBlog/actions/workflows/ci.yml/badge.svg)](https://github.com/SnowmanNunu/SnowmanBlog/actions/workflows/ci.yml)[![PHPStan](https://camo.githubusercontent.com/b36a3f84ed1085ab26c867199cfdc78e522c436a9f9acad9eabeb0a2db108db1/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f5048505374616e2d4c6576656c253230352d626c7565)](phpstan.neon)[![Laravel Pint](https://camo.githubusercontent.com/aaec3e8c10398254c9312e6f79f7ffad19b620df035d26afbb2a6647a5f45859/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f436f64652532305374796c652d4c61726176656c25323050696e742d666661373333)](https://laravel.com/docs/12.x/pint)[![License](https://camo.githubusercontent.com/784362b26e4b3546254f1893e778ba64616e362bd6ac791991d2c9e880a3a64e/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c6963656e73652d4d49542d677265656e2e737667)](LICENSE)

在线预览
----

[](#在线预览)

- 博客首页：
- 后台管理：

功能特性
----

[](#功能特性)

### 前端展示

[](#前端展示)

- 文章列表与分页浏览
- 文章详情页（支持封面图、分类、标签、SEO Meta 自定义）
- 文章上一篇 / 下一篇导航
- 相关文章推荐
- 文章分类与标签筛选
- **专栏系统** — 按内容系列聚合文章，支持专栏列表页与专栏内文章浏览
- 全局实时搜索（`Ctrl + K` 唤起，支持标题/内容/摘要搜索，关键词高亮）
- 留言板（访客可发表留言，博主可在后台回复）
- 文章评论系统（支持嵌套回复、邮件通知）
- 文章点赞功能
- Sitemap 站点地图（`/sitemap.xml`）
- RSS 订阅（`/rss.xml`）
- 响应式设计，适配桌面端与移动端
- 暗黑模式支持
- 站点 Logo 自定义

### 后台管理

[](#后台管理)

- **文章管理** — 发布、编辑、草稿、封面图上传、SEO 设置、定时发布、**软删除与回收站**
- **专栏管理** — 专栏的增删改查、封面图、排序、文章归属
- **分类管理** — 文章分类的增删改查
- **标签管理** — 文章标签的增删改查
- **留言管理** — 审核留言、博主回复、**博主标识**
- **评论管理** — 审核评论、回复评论、邮件通知开关、**博主标识**
- **友链管理** — 友情链接的增删改查与排序
- **站点设置** — 博客标题、描述、ICP 备案号、管理员邮箱、**站点 Logo** 等基础配置
- **存储设置** — 可视化切换本地磁盘 / 阿里云 OSS / 腾讯云 COS / 七牛云 / AWS S3，无需修改 `.env`
- **缓存管理** — 一键清除应用缓存、视图缓存、配置缓存
- **备份管理** — 数据库备份与下载

项目截图
----

[](#项目截图)

### 前台首页

[](#前台首页)

[![前台首页](./screenshots/frontend_home.png)](./screenshots/frontend_home.png)

### 后台管理

[](#后台管理-1)

[![后台管理](./screenshots/admin_dashboard.png)](./screenshots/admin_dashboard.png)

技术栈
---

[](#技术栈)

层级技术后端框架Laravel 12.x (PHP 8.2+)后台面板Filament v3数据库MySQL 5.7+ / SQLite前端模板BladeCSS 框架Tailwind CSS 4.x (CDN)JS 交互Alpine.js (CDN)构建工具ViteMarkdownleague/commonmark安装教程
----

[](#安装教程)

### 环境要求

[](#环境要求)

- PHP &gt;= 8.2
- Composer
- MySQL 5.7+ 或 SQLite
- Node.js &gt;= 18 + npm
- Nginx 或 Apache（生产环境）
- Redis（可选，用于缓存/队列）

### 1. 克隆代码

[](#1-克隆代码)

```
git clone https://github.com/SnowmanNunu/SnowmanBlog.git
cd SnowmanBlog
```

### 2. 安装 PHP 依赖

[](#2-安装-php-依赖)

```
composer install --no-dev --optimize-autoloader
```

本地开发可去掉 `--no-dev`：

```
composer install
```

### 3. 安装前端依赖

[](#3-安装前端依赖)

```
npm install
npm run build
```

### 4. 环境配置

[](#4-环境配置)

```
cp .env.example .env
php artisan key:generate
```

编辑 `.env` 文件，配置数据库连接：

```
APP_NAME=SnowmanBlog
APP_URL=https://your-domain.com
APP_LOCALE=zh_CN
APP_FALLBACK_LOCALE=zh_CN
APP_FAKER_LOCALE=zh_CN

# MySQL 配置示例
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=snowmanblog
DB_USERNAME=root
DB_PASSWORD=your_password

# SQLite 配置示例（本地测试）
# DB_CONNECTION=sqlite
# DB_DATABASE=/absolute/path/to/database.sqlite
```

### 5. 创建数据库（MySQL）

[](#5-创建数据库mysql)

```
mysql -u root -p -e "CREATE DATABASE snowmanblog CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"
```

### 6. 运行数据库迁移

[](#6-运行数据库迁移)

```
php artisan migrate
```

### 7. 填充演示数据（可选）

[](#7-填充演示数据可选)

一键生成包含文章、分类、标签、评论、留言、友链的演示数据，方便快速体验：

```
php artisan db:seed
```

> **提示**：演示数据会创建一个默认管理员账号 `admin@example.com`，密码 `password`。安装完成后请立即修改密码。

### 8. 创建存储软链接

[](#8-创建存储软链接)

```
php artisan storage:link
```

### 9. 创建后台管理员账号（如未执行 db:seed）

[](#9-创建后台管理员账号如未执行-dbseed)

```
php artisan tinker
```

在 tinker 中执行：

```
App\Models\User::create([
    'name' => 'Admin',
    'email' => 'admin@example.com',
    'password' => bcrypt('your_password'),
]);
```

退出 tinker：`exit`

### 10. 配置定时任务（文章定时发布）

[](#10-配置定时任务文章定时发布)

将以下命令添加到系统的 crontab 中：

```
* * * * * cd /path/to/SnowmanBlog && php artisan schedule:run >> /dev/null 2>&1
```

### 11. 配置邮件（可选，用于评论邮件通知）

[](#11-配置邮件可选用于评论邮件通知)

如需开启评论邮件通知，在 `.env` 中配置 SMTP：

```
MAIL_MAILER=smtp
MAIL_SCHEME=smtp
MAIL_HOST=smtp.qq.com
MAIL_PORT=465
MAIL_USERNAME=your_email@qq.com
MAIL_PASSWORD=your_smtp_auth_code
MAIL_ENCRYPTION=ssl
MAIL_FROM_ADDRESS=your_email@qq.com
MAIL_FROM_NAME=SnowmanBlog
```

然后在后台 **设置管理** 中配置 `admin_email` 为接收通知的邮箱地址。

### 12. 配置队列（可选，用于异步发送邮件）

[](#12-配置队列可选用于异步发送邮件)

如需使用数据库队列处理邮件发送，在 `.env` 中确认：

```
QUEUE_CONNECTION=database
```

并启动队列监听器：

```
php artisan queue:listen
```

生产环境建议使用 Supervisor 管理队列进程。

### 13. 配置 Web 服务器

[](#13-配置-web-服务器)

#### Nginx 配置示例

[](#nginx-配置示例)

```
server {
    listen 80;
    server_name your-domain.com;
    root /path/to/SnowmanBlog/public;
    index index.php index.html;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location ~ \.php$ {
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
        include fastcgi_params;
    }

    location ~ /\.(?!well-known).* {
        deny all;
    }
}
```

### 14. 目录权限

[](#14-目录权限)

确保以下目录 Web 服务器可写：

```
chmod -R 755 storage bootstrap/cache
chown -R www-data:www-data storage bootstrap/cache
```

### 15. 完成

[](#15-完成)

访问 `http://your-domain.com` 查看博客首页，访问 `http://your-domain.com/admin` 进入后台管理面板。

如果执行了 `db:seed`，使用以下账号登录：

- 邮箱：`admin@example.com`
- 密码：`password`

---

Docker 部署
---------

[](#docker-部署)

本项目提供完整的 Docker 支持，一键启动包含 PHP-FPM、Nginx、MySQL、Redis 的全栈环境。

### 环境要求

[](#环境要求-1)

- Docker &gt;= 20.10
- Docker Compose &gt;= 2.0

### 1. 克隆代码

[](#1-克隆代码-1)

```
git clone https://github.com/SnowmanNunu/SnowmanBlog.git
cd SnowmanBlog
```

### 2. 启动容器

[](#2-启动容器)

```
docker-compose up -d
```

首次启动会自动完成：

- 安装 Composer 依赖
- 生成应用密钥
- 运行数据库迁移
- 创建存储软链接
- 生成配置 / 路由 / 视图缓存

### 3. 填充演示数据（可选）

[](#3-填充演示数据可选)

```
docker-compose exec app php artisan db:seed
```

### 4. 创建管理员账号（如未执行 db:seed）

[](#4-创建管理员账号如未执行-dbseed)

```
docker-compose exec app php artisan tinker
```

在 tinker 中执行：

```
App\Models\User::create([
    'name' => 'Admin',
    'email' => 'admin@example.com',
    'password' => bcrypt('your_password'),
]);
```

### 5. 访问应用

[](#5-访问应用)

- 博客首页：
- 后台管理：

如果执行了 `db:seed`，使用以下账号登录：

- 邮箱：`admin@example.com`
- 密码：`password`

### 6. 常用命令

[](#6-常用命令)

```
# 查看容器状态
docker-compose ps

# 查看应用日志
docker-compose logs -f app

# 进入应用容器
docker-compose exec app sh

# 重启服务
docker-compose restart

# 停止并移除容器
docker-compose down

# 重建镜像（代码变更后）
docker-compose up -d --build
```

### 7. 容器架构

[](#7-容器架构)

容器服务端口说明`snowmanblog-app`PHP-FPM + Supervisor—主应用、队列 Worker`snowmanblog-web`Nginx`8080`Web 入口`snowmanblog-db`MySQL 8.0`3306`数据库`snowmanblog-redis`Redis`6379`缓存 / 队列`snowmanblog-scheduler`Cron—定时任务调度---

云存储配置
-----

[](#云存储配置)

SnowmanBlog 支持在后台直接切换图片存储位置，无需修改代码或 `.env` 文件：

1. 进入后台 **存储设置** 页面（`/admin/storage-settings`）
2. 选择存储驱动：本地磁盘 / 阿里云 OSS / 腾讯云 COS / 七牛云 / AWS S3
3. 填写对应云存储的 Access Key、Bucket、Endpoint 等参数
4. 点击保存，配置立即生效

新上传的封面图和文章内嵌图片将自动保存到所选存储。前台图片 URL 会自动适配对应的 CDN 域名。

> 注意：切换存储驱动不会影响已上传的历史图片。如需迁移已有图片，请手动同步到新的存储桶。

---

项目结构
----

[](#项目结构)

```
SnowmanBlog/
├── app/
│   ├── Console/Commands/         # Artisan 命令（如定时发布文章）
│   ├── Filament/Resources/       # Filament 后台资源
│   ├── Filament/Pages/           # Filament 自定义页面（缓存、备份、存储设置）
│   ├── Http/Controllers/         # 前端控制器
│   ├── Mail/                     # 邮件类
│   ├── Models/                   # Eloquent 模型
│   └── Providers/                # 服务提供者
├── database/migrations/          # 数据库迁移文件
├── database/seeders/             # 数据库种子（含演示数据）
├── resources/views/              # Blade 模板
├── routes/web.php                # Web 路由
└── public/                       # 入口目录

```

开发说明
----

[](#开发说明)

本项目采用简洁的架构设计，便于扩展与维护。关键设计决策：

- **设置存储**：使用 `settings` 表（key-value 结构）存储站点配置，通过 `Setting::get('key')` 读取
- **视图共享**：在 `ViewComposerServiceProvider` 中全局注入站点标题、描述等变量
- **定时发布**：利用 Laravel Schedule + Cron，每分钟检查并发布到期文章
- **邮件通知**：评论提交时自动发送邮件给管理员，仅对访客评论生效
- **云存储抽象**：通过 `media_url()` 助手函数统一处理本地和云存储图片 URL，切换存储驱动对业务代码无侵入

更新日志
----

[](#更新日志)

详见 [CHANGELOG.md](./CHANGELOG.md) 与 [roadmap.md](./roadmap.md)

License
-------

[](#license)

MIT License

###  Health Score

43

—

FairBetter than 89% of packages

Maintenance96

Actively maintained with recent releases

Popularity2

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity58

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~0 days

Total

36

Last Release

28d ago

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/32590260?v=4)[SnowmanNunu](/maintainers/SnowmanNunu)[@SnowmanNunu](https://github.com/SnowmanNunu)

---

Top Contributors

[![SnowmanNunu](https://avatars.githubusercontent.com/u/32590260?v=4)](https://github.com/SnowmanNunu "SnowmanNunu (172 commits)")

---

Tags

frameworklaravel

###  Code Quality

TestsPHPUnit

Static AnalysisPHPStan

Code StyleLaravel Pint

### Embed Badge

![Health badge](/badges/snowmannunu-snowman-blog/health.svg)

```
[![Health](https://phpackages.com/badges/snowmannunu-snowman-blog/health.svg)](https://phpackages.com/packages/snowmannunu-snowman-blog)
```

###  Alternatives

[laravel/laravel

The skeleton application for the Laravel framework.

84.4k62.4M1.0k](/packages/laravel-laravel)[nasirkhan/laravel-starter

A CMS like modular Laravel starter project.

1.4k2.7k](/packages/nasirkhan-laravel-starter)[unopim/unopim

UnoPim Laravel PIM

10.1k2.2k](/packages/unopim-unopim)[codewithdennis/larament

Larament is a time-saving starter kit to quickly launch Laravel 13.x projects. It includes FilamentPHP 5.x pre-installed and configured, along with additional tools and features to streamline your development workflow.

3861.7k](/packages/codewithdennis-larament)[ercogx/laravel-filament-starter-kit

This is a Filament v5 Starter Kit for Laravel 13, designed to accelerate the development of Filament-powered applications.

441.7k](/packages/ercogx-laravel-filament-starter-kit)[raugadh/fila-starter

Laravel Filament Starter.

625.1k](/packages/raugadh-fila-starter)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
