一个现代化的匿名留言墙应用,专为校园环境设计,支持发表表白、感谢、道歉等多种类型的留言。
git clone https://cnb.cool/i.o/biaobaiqiang.git
cd biaobaiqiang
npm install
npm run init-db
npm start
打开浏览器访问:http://localhost:3000
ssh root@your-server-ip
# 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
mkdir -p /var/www/confession-wall
cd /var/www/confession-wall
# 使用 scp 上传本地项目到服务器
scp -r ./biaobaiqiang/* root@your-server-ip:/var/www/confession-wall/
npm install --production
npm run init-db
# 安装 PM2
npm install -g pm2
# 启动应用
pm2 start server.js --name "confession-wall"
# 设置开机自启
pm2 startup
pm2 save
# 如果使用 ufw
sudo ufw allow 3000
# 如果使用 iptables
sudo iptables -A INPUT -p tcp --dport 3000 -j ACCEPT
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"]
docker build -t confession-wall . docker run -d -p 3000:3000 --name confession-wall confession-wall
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
sudo apt install nginx
sudo nano /etc/nginx/sites-available/confession-wall
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; } }
sudo ln -s /etc/nginx/sites-available/confession-wall /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl restart nginx
使用 Let's Encrypt 免费证书:
sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d your-domain.com
sudo crontab -e
# 添加以下行
0 12 * * * /usr/bin/certbot renew --quiet
创建 .env 文件配置环境变量:
NODE_ENV=production PORT=3000 SESSION_SECRET=your-secret-key-here
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 配置
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | /api/confessions | 获取所有表白 |
| POST | /api/confessions | 发表新表白 |
| POST | /api/confessions/user-confessions | 获取用户的表白 |
| DELETE | /api/confessions/:id | 删除表白 |
| POST | /api/confessions/cleanup | 清理过期表白 |
| GET | /api/status | 服务状态 |
| GET | /health | 健康检查 |
# 查看端口占用
sudo netstat -tlnp | grep :3000
# 杀死进程
sudo kill -9 <PID>
sudo chown -R $USER:$USER /var/www/confession-wall
chmod 644 database.sqlite
# 更新 Node.js 到最新 LTS 版本
nvm install --lts
nvm use --lts
# 增加 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 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
git checkout -b feature/AmazingFeature)git commit -m 'Add some AmazingFeature')git push origin feature/AmazingFeature)本项目采用 MIT 许可证 - 查看 LICENSE 文件了解详情。
如果你在使用过程中遇到问题,可以:
感谢所有为这个项目做出贡献的开发者!
📝 校园留言墙 - 让每一份心声都被听见