logo
0
0
WeChat Login

📝 校园留言墙

一个现代化的匿名留言墙应用,专为校园环境设计,支持发表表白、感谢、道歉等多种类型的留言。

✨ 功能特性

  • 🎯 匿名发表 - 支持完全匿名的留言发表
  • 💝 多种类型 - 支持表白、感谢、道歉、祝福等多种留言类型
  • 自动过期 - 支持1-7天自定义显示时长,过期自动删除
  • 🎨 精美UI - 现代化设计,响应式布局,支持移动端
  • 🔄 实时刷新 - 每30秒自动刷新内容
  • 🛡️ 内容过滤 - 智能过滤敏感词汇,维护健康环境
  • 🚫 防刷机制 - 速率限制和频率控制,防止恶意刷屏
  • 👤 用户控制 - 可删除自己发表的留言
  • 📱 拖拽交互 - 留言卡片支持自由拖拽定位

🛠️ 技术栈

  • 后端: Node.js + Express.js
  • 数据库: SQLite3
  • 前端: 原生 JavaScript + HTML5 + CSS3
  • 样式: Tailwind CSS
  • 功能: Session管理、速率限制、内容过滤

🚀 快速开始

环境要求

  • Node.js >= 16.0.0
  • npm >= 8.0.0

本地开发部署

1. 克隆项目

git clone https://cnb.cool/i.o/biaobaiqiang.git cd biaobaiqiang

2. 安装依赖

npm install

3. 初始化数据库

npm run init-db

4. 启动服务

npm start

5. 访问应用

打开浏览器访问:http://localhost:3000

🌐 生产环境部署

VPS/云服务器部署

方法一:直接部署 (推荐)

  1. 连接服务器
ssh root@your-server-ip
  1. 安装 Node.js
# Ubuntu/Debian curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash - sudo apt-get install -y nodejs # CentOS/RHEL curl -fsSL https://rpm.nodesource.com/setup_18.x | sudo bash - sudo yum install -y nodejs
  1. 创建项目目录
mkdir -p /var/www/confession-wall cd /var/www/confession-wall
  1. 上传项目文件
# 使用 scp 上传本地项目到服务器 scp -r ./biaobaiqiang/* root@your-server-ip:/var/www/confession-wall/
  1. 安装依赖
npm install --production
  1. 初始化数据库
npm run init-db
  1. 使用 PM2 管理进程
# 安装 PM2 npm install -g pm2 # 启动应用 pm2 start server.js --name "confession-wall" # 设置开机自启 pm2 startup pm2 save
  1. 配置防火墙
# 如果使用 ufw sudo ufw allow 3000 # 如果使用 iptables sudo iptables -A INPUT -p tcp --dport 3000 -j ACCEPT

方法二:使用 Docker 部署

  1. 创建 Dockerfile
FROM node:18-alpine WORKDIR /app COPY package*.json ./ RUN npm ci --only=production COPY . . RUN npm run init-db EXPOSE 3000 USER node CMD ["npm", "start"]
  1. 构建并运行容器
docker build -t confession-wall . docker run -d -p 3000:3000 --name confession-wall confession-wall
  1. 使用 docker-compose (推荐)
version: '3.8' services: confession-wall: build: . ports: - "3000:3000" volumes: - ./database.sqlite:/app/database.sqlite environment: - NODE_ENV=production - PORT=3000 restart: unless-stopped
docker-compose up -d

Nginx 反向代理配置

  1. 安装 Nginx
sudo apt install nginx
  1. 创建配置文件
sudo nano /etc/nginx/sites-available/confession-wall
  1. 配置内容
server { listen 80; server_name your-domain.com; # 替换为你的域名 location / { proxy_pass http://localhost:3000; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_cache_bypass $http_upgrade; } }
  1. 启用配置
sudo ln -s /etc/nginx/sites-available/confession-wall /etc/nginx/sites-enabled/ sudo nginx -t sudo systemctl restart nginx

SSL 证书配置 (HTTPS)

使用 Let's Encrypt 免费证书:

  1. 安装 Certbot
sudo apt install certbot python3-certbot-nginx
  1. 获取证书
sudo certbot --nginx -d your-domain.com
  1. 自动续期
sudo crontab -e # 添加以下行 0 12 * * * /usr/bin/certbot renew --quiet

🔧 配置说明

环境变量

创建 .env 文件配置环境变量:

NODE_ENV=production PORT=3000 SESSION_SECRET=your-secret-key-here

数据库配置

  • 默认使用 SQLite 数据库 database.sqlite
  • 数据库文件会在项目根目录自动创建
  • 支持自动清理过期表白

速率限制配置

server.js 中可以调整:

// 全局速率限制 const limiter = rateLimit({ windowMs: 15 * 60 * 1000, // 15分钟 max: 100, // 最多100个请求 }); // 发表白白限制 const publishLimiter = rateLimit({ windowMs: 5 * 60 * 1000, // 5分钟 max: 5, // 最多5条表白 });

📁 项目结构

confession-wall/ ├── database/ │ ├── database.js # 数据库操作类 │ └── init.js # 数据库初始化脚本 ├── public/ │ ├── index.html # 主页面 │ ├── js/ │ │ └── app.js # 前端逻辑 │ └── styles/ │ └── style.css # 样式文件 ├── routes/ │ └── confessions.js # API 路由 ├── utils/ │ └── contentFilter.js # 内容过滤器 ├── server.js # 主服务器文件 ├── package.json ├── tailwind.config.js # Tailwind 配置 └── postcss.config.js # PostCSS 配置

🔌 API 接口

方法路径说明
GET/api/confessions获取所有表白
POST/api/confessions发表新表白
POST/api/confessions/user-confessions获取用户的表白
DELETE/api/confessions/:id删除表白
POST/api/confessions/cleanup清理过期表白
GET/api/status服务状态
GET/health健康检查

🔒 安全特性

  • ✅ 内容敏感词过滤
  • ✅ 请求频率限制
  • ✅ 防止 XSS 攻击
  • ✅ 输入验证和转义
  • ✅ Session 管理
  • ✅ CORS 配置

🚀 性能优化

  • ✅ 静态文件缓存
  • ✅ 数据库连接池
  • ✅ 自动清理过期数据
  • ✅ 响应式设计
  • ✅ 懒加载图片

🛠️ 故障排除

常见问题

  1. 端口被占用
# 查看端口占用 sudo netstat -tlnp | grep :3000 # 杀死进程 sudo kill -9 <PID>
  1. 数据库权限问题
sudo chown -R $USER:$USER /var/www/confession-wall chmod 644 database.sqlite
  1. Node.js 版本过低
# 更新 Node.js 到最新 LTS 版本 nvm install --lts nvm use --lts
  1. 内存不足
# 增加 swap 空间 sudo fallocate -l 2G /swapfile sudo chmod 600 /swapfile sudo mkswap /swapfile sudo swapon /swapfile

日志查看

# PM2 日志 pm2 logs confession-wall # 系统日志 tail -f /var/log/nginx/error.log tail -f /var/log/syslog

📈 监控和维护

使用 PM2 监控

# 查看应用状态 pm2 status # 查看详细信息 pm2 show confession-wall # 重启应用 pm2 restart confession-wall # 重载应用 (零停机) pm2 reload confession-wall

定期维护

# 创建定时清理脚本 crontab -e # 每天凌晨2点清理过期表白 0 2 * * * cd /var/www/confession-wall && npm run cleanup # 每周重启应用 0 3 * * 0 pm2 restart confession-wall

🤝 贡献指南

  1. Fork 项目
  2. 创建功能分支 (git checkout -b feature/AmazingFeature)
  3. 提交更改 (git commit -m 'Add some AmazingFeature')
  4. 推送到分支 (git push origin feature/AmazingFeature)
  5. 开启 Pull Request

📄 许可证

本项目采用 MIT 许可证 - 查看 LICENSE 文件了解详情。

🙋‍♂️ 支持

如果你在使用过程中遇到问题,可以:

🌟 致谢

感谢所有为这个项目做出贡献的开发者!


📝 校园留言墙 - 让每一份心声都被听见