# 萌芽短链 - 前后端分离部署说明 ## 架构说明 - **前端**:构建为静态HTML文件,部署在Nginx服务器(8989端口) - **后端**:部署在Docker容器中(7878端口) ## 部署步骤 ### 一、后端部署(Docker容器) 1. **构建Docker镜像** ```bash cd mengyalinkfly-backend docker build -t mengyalinkfly-backend:latest . ``` 2. **运行Docker容器** ```bash docker run -d \ --name mengyalinkfly-backend \ -p 7878:7878 \ -v /shumengya/docker/storage/mengyalinkfly:/app/data \ --restart unless-stopped \ mengyalinkfly-backend:latest ``` 3. **查看容器日志** ```bash docker logs -f mengyalinkfly-backend ``` ### 二、前端部署(静态文件) 1. **构建前端** ```bash cd mengyalinkfly-frontend npm install npm run build ``` 2. **部署到Nginx** ```bash # 复制构建产物到服务器 cp -r dist/* /shumengya/www/mengyalinkfly-frontend/ # 复制nginx配置(根目录下的nginx.conf) cp nginx.conf /etc/nginx/sites-available/mengyalinkfly ln -s /etc/nginx/sites-available/mengyalinkfly /etc/nginx/sites-enabled/ # 测试nginx配置 nginx -t # 重启nginx systemctl restart nginx ``` ## 配置说明 ### 1. 修改前端服务器地址 编辑 `nginx.conf`,将 `localhost` 替换为实际的后端服务器IP(如果前后端不在同一台机器): ```nginx # 如果后端在其他服务器,修改为实际IP location /api { proxy_pass http://后端服务器IP:7878; ... } location ~ ^/[a-zA-Z0-9]{4}$ { proxy_pass http://后端服务器IP:7878; ... } ``` ### 2. 修改CORS配置 编辑 `mengyalinkfly-backend/app.py`,添加你的前端域名: ```python CORS(app, origins=[ "http://localhost:8989", "http://127.0.0.1:8989", "http://your-frontend-domain.com" # 添加你的实际域名 ]) ``` ## 访问方式 - **前端页面**:http://your-server:8989 - **后端API**:http://your-server:7878/api/* - **短链跳转**:http://your-server:8989/XXXX (4位短链代码) ## 功能特点 ✅ **支持浏览器访问** - 通过前端页面创建和管理短链接 ✅ **支持命令行工具** - wget、curl可直接下载文件(自动HTTP 302重定向) ✅ **前后端分离** - 易于扩展和维护 ✅ **Docker容器化** - 后端一键部署 ## 测试命令 ```bash # 测试后端API curl http://localhost:7878/api/links # 测试短链跳转(浏览器) curl -L http://localhost:8989/4GLS # 测试wget下载(命令行) wget http://localhost:8989/4GLS ``` ## 目录结构 ``` /shumengya/ ├── www/ │ └── mengyalinkfly-frontend/ # 前端静态文件目录 │ ├── index.html │ ├── assets/ │ └── ... └── docker/ └── storage/ └── mengyalinkfly/ # 后端数据持久化目录 └── link_data.json ``` ## 常见问题 ### 1. wget下载HTML而不是文件? 确保nginx配置中有短链匹配规则,并且优先级在前端路由之前。 ### 2. API跨域错误? 检查后端的CORS配置,确保包含了前端域名。 ### 3. 容器无法启动? 检查端口7878是否被占用:`netstat -tulpn | grep 7878`