2025-07-19 08:44:29 +08:00
|
|
|
|
# 🐳 Docker 部署
|
|
|
|
|
|
|
|
|
|
|
|
## 概述
|
|
|
|
|
|
|
|
|
|
|
|
urlDB 支持使用 Docker 进行容器化部署,提供了完整的前后端分离架构。
|
|
|
|
|
|
|
|
|
|
|
|
## 系统架构
|
|
|
|
|
|
|
|
|
|
|
|
| 服务 | 端口 | 说明 |
|
|
|
|
|
|
|------|------|------|
|
|
|
|
|
|
| frontend | 3000 | Nuxt.js 前端应用 |
|
|
|
|
|
|
| backend | 8080 | Go API 后端服务 |
|
|
|
|
|
|
| postgres | 5432 | PostgreSQL 数据库 |
|
|
|
|
|
|
|
|
|
|
|
|
## 快速部署
|
|
|
|
|
|
|
|
|
|
|
|
### 1. 克隆项目
|
|
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
|
git clone https://github.com/ctwj/urldb.git
|
|
|
|
|
|
cd urldb
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 2. 使用启动脚本(推荐)
|
|
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
|
# 给脚本执行权限
|
|
|
|
|
|
chmod +x docker-start.sh
|
|
|
|
|
|
|
|
|
|
|
|
# 启动服务
|
|
|
|
|
|
./docker-start.sh
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 3. 手动启动
|
|
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
|
# 构建并启动所有服务
|
|
|
|
|
|
docker compose up --build -d
|
|
|
|
|
|
|
|
|
|
|
|
# 查看服务状态
|
|
|
|
|
|
docker compose ps
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
## 配置说明
|
|
|
|
|
|
|
|
|
|
|
|
### 环境变量
|
|
|
|
|
|
|
|
|
|
|
|
可以通过修改 `docker-compose.yml` 文件中的环境变量来配置服务:
|
|
|
|
|
|
|
2025-07-21 15:27:58 +08:00
|
|
|
|
后端 backend
|
2025-07-19 08:44:29 +08:00
|
|
|
|
```yaml
|
|
|
|
|
|
environment:
|
|
|
|
|
|
DB_HOST: postgres
|
|
|
|
|
|
DB_PORT: 5432
|
|
|
|
|
|
DB_USER: postgres
|
|
|
|
|
|
DB_PASSWORD: password
|
|
|
|
|
|
DB_NAME: url_db
|
|
|
|
|
|
PORT: 8080
|
2025-07-21 15:27:58 +08:00
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
前端 frontend
|
|
|
|
|
|
```yaml
|
|
|
|
|
|
environment:
|
|
|
|
|
|
API_BASE: /api
|
2025-07-19 08:44:29 +08:00
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 端口映射
|
|
|
|
|
|
|
|
|
|
|
|
如果需要修改端口映射,可以编辑 `docker-compose.yml`:
|
|
|
|
|
|
|
|
|
|
|
|
```yaml
|
|
|
|
|
|
ports:
|
|
|
|
|
|
- "3001:3000" # 前端端口
|
|
|
|
|
|
- "8081:8080" # API端口
|
|
|
|
|
|
- "5433:5432" # 数据库端口
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
## 常用命令
|
|
|
|
|
|
|
|
|
|
|
|
### 服务管理
|
|
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
|
# 启动服务
|
|
|
|
|
|
docker compose up -d
|
|
|
|
|
|
|
|
|
|
|
|
# 停止服务
|
|
|
|
|
|
docker compose down
|
|
|
|
|
|
|
|
|
|
|
|
# 重启服务
|
|
|
|
|
|
docker compose restart
|
|
|
|
|
|
|
|
|
|
|
|
# 查看服务状态
|
|
|
|
|
|
docker compose ps
|
|
|
|
|
|
|
|
|
|
|
|
# 查看日志
|
|
|
|
|
|
docker compose logs -f [service_name]
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 数据管理
|
|
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
|
# 备份数据库
|
|
|
|
|
|
docker compose exec postgres pg_dump -U postgres url_db > backup.sql
|
|
|
|
|
|
|
|
|
|
|
|
# 恢复数据库
|
|
|
|
|
|
docker compose exec -T postgres psql -U postgres url_db < backup.sql
|
|
|
|
|
|
|
|
|
|
|
|
# 进入数据库
|
|
|
|
|
|
docker compose exec postgres psql -U postgres url_db
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 容器管理
|
|
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
|
# 进入容器
|
|
|
|
|
|
docker compose exec [service_name] sh
|
|
|
|
|
|
|
|
|
|
|
|
# 查看容器资源使用
|
|
|
|
|
|
docker stats
|
|
|
|
|
|
|
|
|
|
|
|
# 清理未使用的资源
|
|
|
|
|
|
docker system prune -a
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
## 生产环境部署
|
|
|
|
|
|
|
|
|
|
|
|
### 1. 环境准备
|
|
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
|
# 安装 Docker 和 Docker Compose
|
|
|
|
|
|
# 确保服务器有足够资源(建议 4GB+ 内存)
|
|
|
|
|
|
|
|
|
|
|
|
# 创建部署目录
|
|
|
|
|
|
mkdir -p /opt/urldb
|
|
|
|
|
|
cd /opt/urldb
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 2. 配置文件
|
|
|
|
|
|
|
|
|
|
|
|
创建生产环境配置文件:
|
|
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
|
# 复制项目文件
|
|
|
|
|
|
git clone https://github.com/ctwj/urldb.git .
|
|
|
|
|
|
|
|
|
|
|
|
# 创建环境变量文件
|
|
|
|
|
|
cp env.example .env.prod
|
|
|
|
|
|
|
|
|
|
|
|
# 编辑生产环境配置
|
|
|
|
|
|
vim .env.prod
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 3. 启动服务
|
|
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
|
# 使用生产环境配置启动
|
|
|
|
|
|
docker compose -f docker-compose.yml --env-file .env.prod up -d
|
|
|
|
|
|
|
|
|
|
|
|
# 检查服务状态
|
|
|
|
|
|
docker compose ps
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 4. 配置反向代理
|
|
|
|
|
|
|
|
|
|
|
|
#### Nginx 配置示例
|
|
|
|
|
|
|
|
|
|
|
|
```nginx
|
|
|
|
|
|
server {
|
|
|
|
|
|
listen 80;
|
|
|
|
|
|
server_name your-domain.com;
|
|
|
|
|
|
|
|
|
|
|
|
# 前端代理
|
|
|
|
|
|
location / {
|
|
|
|
|
|
proxy_pass http://localhost:3000;
|
|
|
|
|
|
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;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
# API 代理
|
|
|
|
|
|
location /api/ {
|
|
|
|
|
|
proxy_pass http://localhost:8080;
|
|
|
|
|
|
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;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 5. SSL 配置
|
|
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
|
# 使用 Let's Encrypt 获取证书
|
|
|
|
|
|
sudo certbot --nginx -d your-domain.com
|
|
|
|
|
|
|
|
|
|
|
|
# 或使用自签名证书
|
|
|
|
|
|
openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
|
|
|
|
|
|
-keyout /etc/ssl/private/urldb.key \
|
|
|
|
|
|
-out /etc/ssl/certs/urldb.crt
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
## 监控和维护
|
|
|
|
|
|
|
|
|
|
|
|
### 1. 日志管理
|
|
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
|
# 查看所有服务日志
|
|
|
|
|
|
docker compose logs -f
|
|
|
|
|
|
|
|
|
|
|
|
# 查看特定服务日志
|
|
|
|
|
|
docker compose logs -f backend
|
|
|
|
|
|
|
|
|
|
|
|
# 导出日志
|
|
|
|
|
|
docker compose logs > urldb.log
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 2. 性能监控
|
|
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
|
# 查看容器资源使用
|
|
|
|
|
|
docker stats
|
|
|
|
|
|
|
|
|
|
|
|
# 查看系统资源
|
|
|
|
|
|
htop
|
|
|
|
|
|
df -h
|
|
|
|
|
|
free -h
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 3. 备份策略
|
|
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
|
#!/bin/bash
|
|
|
|
|
|
# 创建备份脚本 backup.sh
|
|
|
|
|
|
|
|
|
|
|
|
DATE=$(date +%Y%m%d_%H%M%S)
|
|
|
|
|
|
BACKUP_DIR="/backup/urldb"
|
|
|
|
|
|
|
|
|
|
|
|
# 创建备份目录
|
|
|
|
|
|
mkdir -p $BACKUP_DIR
|
|
|
|
|
|
|
|
|
|
|
|
# 备份数据库
|
|
|
|
|
|
docker compose exec -T postgres pg_dump -U postgres url_db > $BACKUP_DIR/db_$DATE.sql
|
|
|
|
|
|
|
|
|
|
|
|
# 备份上传文件
|
|
|
|
|
|
tar -czf $BACKUP_DIR/uploads_$DATE.tar.gz uploads/
|
|
|
|
|
|
|
|
|
|
|
|
# 删除7天前的备份
|
|
|
|
|
|
find $BACKUP_DIR -name "*.sql" -mtime +7 -delete
|
|
|
|
|
|
find $BACKUP_DIR -name "*.tar.gz" -mtime +7 -delete
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 4. 自动更新
|
|
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
|
#!/bin/bash
|
|
|
|
|
|
# 创建更新脚本 update.sh
|
|
|
|
|
|
|
|
|
|
|
|
cd /opt/urldb
|
|
|
|
|
|
|
|
|
|
|
|
# 拉取最新代码
|
|
|
|
|
|
git pull origin main
|
|
|
|
|
|
|
|
|
|
|
|
# 重新构建并启动
|
|
|
|
|
|
docker compose down
|
|
|
|
|
|
docker compose up --build -d
|
|
|
|
|
|
|
|
|
|
|
|
# 检查服务状态
|
|
|
|
|
|
docker compose ps
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
## 故障排除
|
|
|
|
|
|
|
|
|
|
|
|
### 1. 服务启动失败
|
|
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
|
# 查看详细错误信息
|
|
|
|
|
|
docker compose logs [service_name]
|
|
|
|
|
|
|
|
|
|
|
|
# 检查端口占用
|
|
|
|
|
|
netstat -tulpn | grep :3000
|
|
|
|
|
|
netstat -tulpn | grep :8080
|
|
|
|
|
|
|
|
|
|
|
|
# 检查磁盘空间
|
|
|
|
|
|
df -h
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 2. 数据库连接问题
|
|
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
|
# 检查数据库状态
|
|
|
|
|
|
docker compose exec postgres pg_isready -U postgres
|
|
|
|
|
|
|
|
|
|
|
|
# 检查数据库日志
|
|
|
|
|
|
docker compose logs postgres
|
|
|
|
|
|
|
|
|
|
|
|
# 重启数据库服务
|
|
|
|
|
|
docker compose restart postgres
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 3. 前端无法访问后端
|
|
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
|
# 检查网络连接
|
|
|
|
|
|
docker compose exec frontend ping backend
|
|
|
|
|
|
|
|
|
|
|
|
# 检查 API 配置
|
|
|
|
|
|
docker compose exec frontend env | grep API_BASE
|
|
|
|
|
|
|
|
|
|
|
|
# 测试 API 连接
|
|
|
|
|
|
curl http://localhost:8080/api/health
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 4. 内存不足
|
|
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
|
# 查看内存使用
|
|
|
|
|
|
free -h
|
|
|
|
|
|
|
|
|
|
|
|
# 增加 swap 空间
|
|
|
|
|
|
sudo fallocate -l 2G /swapfile
|
|
|
|
|
|
sudo chmod 600 /swapfile
|
|
|
|
|
|
sudo mkswap /swapfile
|
|
|
|
|
|
sudo swapon /swapfile
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
## 安全建议
|
|
|
|
|
|
|
|
|
|
|
|
### 1. 网络安全
|
|
|
|
|
|
|
|
|
|
|
|
- 使用防火墙限制端口访问
|
|
|
|
|
|
- 配置 SSL/TLS 加密
|
|
|
|
|
|
- 定期更新系统和 Docker 版本
|
|
|
|
|
|
|
|
|
|
|
|
### 2. 数据安全
|
|
|
|
|
|
|
|
|
|
|
|
- 定期备份数据库
|
|
|
|
|
|
- 使用强密码
|
|
|
|
|
|
- 限制数据库访问权限
|
|
|
|
|
|
|
|
|
|
|
|
### 3. 容器安全
|
|
|
|
|
|
|
|
|
|
|
|
- 使用非 root 用户运行容器
|
|
|
|
|
|
- 定期更新镜像
|
|
|
|
|
|
- 扫描镜像漏洞
|
|
|
|
|
|
|
|
|
|
|
|
## 下一步
|
|
|
|
|
|
|
|
|
|
|
|
- [了解系统配置](../guide/configuration.md)
|
|
|
|
|
|
- [查看 API 文档](../api/overview.md)
|
|
|
|
|
|
- [学习监控和维护](../development/deployment.md)
|