|
# 🚀 Linux部署指南 |
|
|
|
这是一个完整的聊天应用Linux部署指南,包含所有必要的脚本和配置文件。 |
|
|
|
## 📋 部署清单 |
|
|
|
### 🔧 必需软件 |
|
- [ ] Docker Engine |
|
- [ ] Docker Compose |
|
- [ ] Git (可选,用于版本控制) |
|
- [ ] Nginx (用于反向代理,可选) |
|
- [ ] Certbot (用于SSL证书,可选) |
|
|
|
### 📁 文件清单 |
|
- [ ] `docker-compose.yml` - 生产环境配置 |
|
- [ ] `docker-compose.dev.yml` - 开发环境配置 |
|
- [ ] `Dockerfile` (client & server) - 容器构建文件 |
|
- [ ] `start.sh` - Linux启动脚本 |
|
- [ ] `stop.sh` - Linux停止脚本 |
|
- [ ] `deploy.sh` - 自动部署脚本 |
|
- [ ] `monitor.sh` - 监控脚本 |
|
- [ ] `test.sh` - 功能测试脚本 |
|
- [ ] `Makefile` - 管理命令 |
|
|
|
## 🚀 快速部署 |
|
|
|
### 方法1: 一键部署(推荐) |
|
```bash |
|
# 下载项目 |
|
git clone <your-repo-url> |
|
cd chat-app |
|
|
|
# 设置权限 |
|
chmod +x *.sh |
|
|
|
# 一键部署 |
|
sudo ./deploy.sh |
|
``` |
|
|
|
### 方法2: 手动部署 |
|
```bash |
|
# 1. 安装Docker |
|
curl -fsSL https://get.docker.com -o get-docker.sh |
|
sudo sh get-docker.sh |
|
|
|
# 2. 启动应用 |
|
./start.sh |
|
|
|
# 3. 验证部署 |
|
./test.sh |
|
``` |
|
|
|
### 方法3: 使用Makefile |
|
```bash |
|
make install # 设置权限 |
|
make start # 启动应用 |
|
make health # 检查状态 |
|
``` |
|
|
|
## 🔒 SSL配置(生产环境推荐) |
|
|
|
```bash |
|
# 自动配置SSL和nginx反向代理 |
|
sudo ./setup-ssl.sh |
|
``` |
|
|
|
## 📊 监控和维护 |
|
|
|
```bash |
|
# 查看实时监控 |
|
./monitor.sh |
|
|
|
# 自动刷新监控(每30秒) |
|
watch -n 30 ./monitor.sh |
|
|
|
# 查看日志 |
|
make logs |
|
|
|
# 备份数据库 |
|
make backup |
|
|
|
# 测试功能 |
|
./test.sh |
|
``` |
|
|
|
## 🔧 故障排除 |
|
|
|
### 常见问题 |
|
|
|
1. **端口被占用** |
|
```bash |
|
# 检查端口使用情况 |
|
sudo netstat -tulpn | grep :3000 |
|
sudo netstat -tulpn | grep :5000 |
|
sudo netstat -tulpn | grep :27017 |
|
``` |
|
|
|
2. **Docker权限问题** |
|
```bash |
|
# 将用户添加到docker组 |
|
sudo usermod -aG docker $USER |
|
# 重新登录或执行 |
|
newgrp docker |
|
``` |
|
|
|
3. **服务启动失败** |
|
```bash |
|
# 查看详细日志 |
|
docker-compose logs -f |
|
|
|
# 检查容器状态 |
|
docker-compose ps |
|
``` |
|
|
|
4. **内存不足** |
|
```bash |
|
# 检查系统资源 |
|
free -h |
|
df -h |
|
|
|
# 清理Docker资源 |
|
make clean |
|
``` |
|
|
|
## 🔐 安全配置 |
|
|
|
### 防火墙设置 |
|
```bash |
|
# Ubuntu/Debian |
|
sudo ufw allow 22 # SSH |
|
sudo ufw allow 80 # HTTP |
|
sudo ufw allow 443 # HTTPS |
|
sudo ufw enable |
|
|
|
# CentOS/RHEL |
|
sudo firewall-cmd --permanent --add-service=ssh |
|
sudo firewall-cmd --permanent --add-service=http |
|
sudo firewall-cmd --permanent --add-service=https |
|
sudo firewall-cmd --reload |
|
``` |
|
|
|
### 环境变量安全 |
|
1. 修改 `server/.env` 中的JWT密钥 |
|
2. 更改MongoDB默认密码 |
|
3. 设置强密码策略 |
|
|
|
### 定期维护 |
|
```bash |
|
# 每日备份(添加到crontab) |
|
0 2 * * * /path/to/chat-app/make backup |
|
|
|
# 每周更新 |
|
0 3 * * 0 /path/to/chat-app/make update |
|
|
|
# 监控磁盘空间 |
|
0 */6 * * * df -h | mail -s "Disk Usage Report" admin@yourdomain.com |
|
``` |
|
|
|
## 📈 性能优化 |
|
|
|
### 系统级优化 |
|
```bash |
|
# 增加文件描述符限制 |
|
echo "* soft nofile 65536" >> /etc/security/limits.conf |
|
echo "* hard nofile 65536" >> /etc/security/limits.conf |
|
|
|
# 优化网络参数 |
|
echo "net.core.somaxconn = 65536" >> /etc/sysctl.conf |
|
sysctl -p |
|
``` |
|
|
|
### Docker优化 |
|
```bash |
|
# 限制日志大小 |
|
echo '{ |
|
"log-driver": "json-file", |
|
"log-opts": { |
|
"max-size": "10m", |
|
"max-file": "3" |
|
} |
|
}' > /etc/docker/daemon.json |
|
|
|
systemctl restart docker |
|
``` |
|
|
|
## 🆘 紧急恢复 |
|
|
|
### 快速恢复步骤 |
|
1. 停止所有服务: `make stop` |
|
2. 恢复数据库备份: `make restore FILE=backup.gz` |
|
3. 重启服务: `make start` |
|
4. 验证功能: `./test.sh` |
|
|
|
### 数据备份策略 |
|
- 每日自动备份数据库 |
|
- 保留最近30天的备份 |
|
- 异地备份重要数据 |
|
|
|
## 📞 支持联系 |
|
|
|
如果遇到问题,请: |
|
1. 查看日志: `make logs` |
|
2. 运行测试: `./test.sh` |
|
3. 检查监控: `./monitor.sh` |
|
4. 提交Issue到项目仓库 |
|
|