# 飞牛 NAS 部署总结 ## ✅ 部署成功总结 本次部署成功将 dysync.net 项目部署到飞牛 NAS,以下是完整的部署过程和关键要点。 --- ## 📋 部署流程概览 ### 1. 环境准备 ✅ - **NAS 路径**:`/vol2/1000/docker/dysync` - **NAS IP**:`192.168.1.99` - **SSH 用户**:`adminym` - **Docker**:已安装并运行 ### 2. 文件上传 ✅ - 使用 `tar` 压缩项目文件(排除不必要的文件) - 通过 `scp` 上传到 NAS - 在 NAS 上解压到 `dysync.net` 目录 ### 3. Docker 镜像构建 ✅ - **基础镜像**:`node:18-alpine`、`.NET SDK 6.0`、`.NET ASP.NET 6.0` - **构建时间**:约 50 秒(使用缓存) - **镜像大小**:268MB - **镜像名称**:`dysync.net:latest` ### 4. 容器部署 ✅ - **容器名称**:`dysync` - **端口映射**:`10101:10101` - **数据目录挂载**:`db`、`collect`、`favorite`、`uper`、`logs` - **状态**:运行中 --- ## 🔧 关键配置和修复 ### 1. Dockerfile 修复 #### 问题:dotnet 命令缺少项目文件 **修复**: ```dockerfile RUN dotnet restore dy.net.csproj RUN dotnet publish dy.net.csproj -c Release -o /app/publish ``` #### 问题:npm/pnpm 网络超时 **修复**:添加国内镜像源配置 ```dockerfile RUN npm config set registry https://registry.npmmirror.com && \ npm install -g pnpm && \ pnpm config set registry https://registry.npmmirror.com && \ ... ``` #### 问题:macOS 资源分叉文件导致编译错误 **修复**: 1. 在 `.dockerignore` 中添加 `._*` 2. 在 Dockerfile 中添加删除步骤: ```dockerfile RUN find . -name "._*" -type f -delete ``` ### 2. docker-compose 配置 **文件**:`docker-compose.feiniu.vol2.yml` **关键配置**: - 镜像:`dysync.net:latest`(本地构建) - 数据目录:`/vol2/1000/docker/dysync/{db,collect,favorite,uper,logs}` - DNS 配置:`8.8.8.8`、`114.114.114.114`、`223.5.5.5` - 环境变量:`TZ=Asia/Shanghai`、`ASPNETCORE_ENVIRONMENT=Production` --- ## 📝 部署命令总结 ### 完整部署流程 ```bash # 1. 本地压缩项目 cd /Users/gaotu/WebstormProjects/dysync.net tar -czf ../dysync.net.tar.gz \ --exclude='.git' --exclude='node_modules' --exclude='app/node_modules' \ --exclude='bin' --exclude='obj' --exclude='.vs' --exclude='.idea' \ --exclude='videos' --exclude='*.md' --exclude='docs' --exclude='*.tar.gz' . # 2. 上传到 NAS scp ../dysync.net.tar.gz adminym@192.168.1.99:/vol2/1000/docker/dysync/ # 3. SSH 连接到 NAS ssh adminym@192.168.1.99 # 4. 解压文件 cd /vol2/1000/docker/dysync mkdir -p dysync.net tar -xzf dysync.net.tar.gz -C dysync.net/ # 5. 拉取基础镜像 sudo docker pull node:18-alpine sudo docker pull mcr.microsoft.com/dotnet/sdk:6.0 sudo docker pull mcr.microsoft.com/dotnet/aspnet:6.0 # 6. 修复 Dockerfile(如需要) cd dysync.net sudo sed -i 's/RUN dotnet restore/RUN dotnet restore dy.net.csproj/' Dockerfile.prod sudo sed -i 's/RUN dotnet publish -c Release -o \/app\/publish/RUN dotnet publish dy.net.csproj -c Release -o \/app\/publish/' Dockerfile.prod echo "._*" >> .dockerignore # 7. 构建镜像 sudo docker build -f Dockerfile.prod -t dysync.net:latest . # 8. 创建数据目录 sudo mkdir -p /vol2/1000/docker/dysync/{db,collect,favorite,uper,logs} sudo chmod -R 755 /vol2/1000/docker/dysync # 9. 启动容器 sudo docker compose -f docker-compose.feiniu.vol2.yml up -d # 10. 验证服务 sudo docker ps | grep dysync sudo docker logs dysync ``` --- ## 🎯 关键路径和端口 | 项目 | 值 | |------|-----| | **项目路径** | `/vol2/1000/docker/dysync` | | **数据目录** | `/vol2/1000/docker/dysync/{db,collect,favorite,uper,logs}` | | **服务端口** | `10101` | | **访问地址** | `http://192.168.1.99:10101` | | **容器名称** | `dysync` | | **镜像名称** | `dysync.net:latest` | --- ## 🛠️ 常用管理命令 ### 查看服务状态 ```bash sudo docker ps | grep dysync sudo docker logs dysync ``` ### 重启服务 ```bash sudo docker restart dysync # 或 sudo docker compose -f docker-compose.feiniu.vol2.yml restart ``` ### 停止服务 ```bash sudo docker stop dysync # 或 sudo docker compose -f docker-compose.feiniu.vol2.yml down ``` ### 更新部署(本地修改后) #### 完整更新流程 **本地操作**: ```bash # 1. 压缩项目 cd /Users/gaotu/WebstormProjects/dysync.net tar -czf ../dysync.net.tar.gz \ --exclude='.git' --exclude='node_modules' --exclude='app/node_modules' \ --exclude='bin' --exclude='obj' --exclude='.vs' --exclude='.idea' \ --exclude='videos' --exclude='*.md' --exclude='docs' --exclude='*.tar.gz' . # 2. 上传到 NAS scp ../dysync.net.tar.gz adminym@192.168.1.99:/vol2/1000/docker/dysync/ ``` **NAS 操作**: ```bash # 1. SSH 连接 ssh adminym@192.168.1.99 # 2. 更新文件 cd /vol2/1000/docker/dysync mv dysync.net dysync.net.backup.$(date +%Y%m%d_%H%M%S) mkdir -p dysync.net tar -xzf dysync.net.tar.gz -C dysync.net/ # 3. 重新部署 cd dysync.net sudo docker compose -f docker-compose.feiniu.vol2.yml down sudo docker build -f Dockerfile.prod -t dysync.net:latest . sudo docker compose -f docker-compose.feiniu.vol2.yml up -d # 4. 验证 sudo docker ps | grep dysync sudo docker logs --tail 50 dysync ``` #### 快速更新(如果文件已在 NAS) ```bash cd /vol2/1000/docker/dysync/dysync.net sudo docker compose -f docker-compose.feiniu.vol2.yml down sudo docker build -f Dockerfile.prod -t dysync.net:latest . sudo docker compose -f docker-compose.feiniu.vol2.yml up -d ``` --- ## ⚠️ 常见问题和解决方案 ### 1. 网络超时问题 - **原因**:npm/pnpm 从官方源下载包超时 - **解决**:在 Dockerfile 中配置国内镜像源 ### 2. macOS 资源分叉文件问题 - **原因**:macOS 创建的 `._*` 文件被包含在构建中 - **解决**:在 `.dockerignore` 中排除,并在 Dockerfile 中删除 ### 3. dotnet 命令缺少项目文件 - **原因**:Dockerfile 中 `dotnet restore` 和 `dotnet publish` 未指定项目文件 - **解决**:添加项目文件参数 `dy.net.csproj` --- ## 📚 相关文档 - **[飞牛NAS部署完整指南.md](./飞牛NAS部署完整指南.md)** - 最新、最完整的部署文档 - [本地启动指南](./本地启动指南.md) - 本地开发环境配置 - [网络问题解决方案](./网络问题解决方案.md) - 网络相关问题 - [构建问题排查](./构建问题排查.md) - 构建相关问题 --- ## ✨ 部署成功标志 - ✅ 镜像构建成功:`dysync.net:latest` (268MB) - ✅ 容器运行正常:`dysync` 容器状态为 `Up` - ✅ 服务可访问:`http://192.168.1.99:10101` 可正常访问 - ✅ 日志正常:容器日志显示服务已启动并监听端口 --- **部署日期**:2024-12-17 **部署人员**:adminym **NAS 系统**:飞牛 NAS **Docker 版本**:28.5.2