push main 触发:docker build Dockerfile.prod → 停旧启新容器 端口 10101:10101,数据卷按 volume1(db/logs)+ volume2(视频)分卷 Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,47 @@
|
|||||||
|
name: 部署到群晖
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches: [main]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
deploy:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: 安装 Docker CLI
|
||||||
|
run: |
|
||||||
|
# 替换 Debian 源为清华镜像,避免国内连 deb.debian.org 超时
|
||||||
|
sed -i 's|deb.debian.org|mirrors.tuna.tsinghua.edu.cn|g' /etc/apt/sources.list /etc/apt/sources.list.d/*.list 2>/dev/null || true
|
||||||
|
sed -i 's|security.debian.org|mirrors.tuna.tsinghua.edu.cn/debian-security|g' /etc/apt/sources.list /etc/apt/sources.list.d/*.list 2>/dev/null || true
|
||||||
|
apt-get update -qq
|
||||||
|
apt-get install -y -qq docker.io
|
||||||
|
|
||||||
|
- name: 拉取代码
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: 构建镜像
|
||||||
|
run: docker build -f Dockerfile.prod -t dysync:latest .
|
||||||
|
|
||||||
|
- name: 停止旧容器
|
||||||
|
run: |
|
||||||
|
docker stop dysync 2>/dev/null || true
|
||||||
|
docker rm dysync 2>/dev/null || true
|
||||||
|
|
||||||
|
- name: 启动新容器
|
||||||
|
run: |
|
||||||
|
docker run -d \
|
||||||
|
--name dysync \
|
||||||
|
--restart unless-stopped \
|
||||||
|
-p 10101:10101 \
|
||||||
|
-e TZ=Asia/Shanghai \
|
||||||
|
-e ASPNETCORE_ENVIRONMENT=Production \
|
||||||
|
-v /volume1/docker/apps/dysync/db:/app/db \
|
||||||
|
-v /volume1/docker/apps/dysync/logs:/app/logs \
|
||||||
|
-v /volume2/save/dysync/collect:/app/collect \
|
||||||
|
-v /volume2/save/dysync/favorite:/app/favorite \
|
||||||
|
-v /volume2/save/dysync/uper:/app/uper \
|
||||||
|
dysync:latest
|
||||||
|
|
||||||
|
- name: 部署完成提示
|
||||||
|
run: |
|
||||||
|
echo "✅ 部署完成,浏览器访问 http://192.168.1.66:10101 查看"
|
||||||
@@ -0,0 +1,69 @@
|
|||||||
|
# 多阶段构建 Dockerfile
|
||||||
|
# 第一阶段:构建前端
|
||||||
|
# 使用国内镜像源,避免 Docker Hub 拉取失败(可改为 node:18-alpine 若已配置 Docker 镜像加速)
|
||||||
|
FROM registry.cn-hangzhou.aliyuncs.com/library/node:18-alpine AS frontend-builder
|
||||||
|
|
||||||
|
WORKDIR /app/frontend
|
||||||
|
|
||||||
|
# 复制前端依赖文件
|
||||||
|
COPY app/package.json app/pnpm-lock.yaml* ./
|
||||||
|
|
||||||
|
# 配置 npm 和 pnpm 使用国内镜像源
|
||||||
|
RUN npm config set registry https://registry.npmmirror.com && \
|
||||||
|
npm install -g pnpm && \
|
||||||
|
pnpm config set registry https://registry.npmmirror.com && \
|
||||||
|
if [ -f pnpm-lock.yaml ]; then \
|
||||||
|
pnpm install --frozen-lockfile; \
|
||||||
|
else \
|
||||||
|
npm install; \
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 复制前端源码
|
||||||
|
COPY app/ ./
|
||||||
|
|
||||||
|
# 构建前端
|
||||||
|
RUN pnpm build || npm run build
|
||||||
|
|
||||||
|
# 第二阶段:构建后端
|
||||||
|
FROM mcr.microsoft.com/dotnet/sdk:6.0 AS backend-builder
|
||||||
|
|
||||||
|
WORKDIR /src
|
||||||
|
|
||||||
|
# 复制项目文件
|
||||||
|
COPY *.csproj ./
|
||||||
|
RUN dotnet restore dy.net.csproj
|
||||||
|
|
||||||
|
# 复制所有文件
|
||||||
|
COPY . .
|
||||||
|
|
||||||
|
# 删除 macOS 资源分叉文件(._* 文件)
|
||||||
|
RUN find . -name "._*" -type f -delete
|
||||||
|
|
||||||
|
# 复制前端构建产物
|
||||||
|
COPY --from=frontend-builder /app/frontend/dist ./app/dist
|
||||||
|
|
||||||
|
# 发布后端
|
||||||
|
RUN dotnet publish dy.net.csproj -c Release -o /app/publish
|
||||||
|
|
||||||
|
# 第三阶段:运行镜像
|
||||||
|
FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS final
|
||||||
|
|
||||||
|
WORKDIR /app
|
||||||
|
|
||||||
|
# 设置时区
|
||||||
|
ENV TZ=Asia/Shanghai
|
||||||
|
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
|
||||||
|
|
||||||
|
# 从构建阶段复制发布文件
|
||||||
|
COPY --from=backend-builder /app/publish .
|
||||||
|
|
||||||
|
# 暴露端口
|
||||||
|
EXPOSE 10101
|
||||||
|
|
||||||
|
# 设置环境变量
|
||||||
|
ENV ASPNETCORE_URLS=http://*:10101
|
||||||
|
ENV ASPNETCORE_ENVIRONMENT=Production
|
||||||
|
|
||||||
|
# 启动应用
|
||||||
|
ENTRYPOINT ["dotnet", "dy.net.dll"]
|
||||||
|
|
||||||
Reference in New Issue
Block a user