Spaces:
Running
Running
Create Dockerfile
Browse files- Dockerfile +51 -0
Dockerfile
ADDED
@@ -0,0 +1,51 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
# 使用轻量级 Alpine 作为基础构建镜像,体积小、安全性高
|
2 |
+
FROM alpine AS builder
|
3 |
+
|
4 |
+
# 安装必需的软件包:
|
5 |
+
# nodejs 和 npm 用于运行 Node.js 应用和安装依赖
|
6 |
+
# git 用于拉取项目代码
|
7 |
+
# curl 和 jq 用于脚本处理(网络请求和JSON解析)
|
8 |
+
# python3 及相关开发包和 pip,用于运行 Python 脚本和安装依赖
|
9 |
+
RUN apk add --no-cache nodejs npm git curl jq python3 python3-dev py3-pip
|
10 |
+
|
11 |
+
# 创建一个普通用户 app,避免用 root 运行容器,提高安全性
|
12 |
+
RUN adduser -D app
|
13 |
+
|
14 |
+
# 切换到 app 用户身份,后续操作都以 app 用户执行
|
15 |
+
USER app
|
16 |
+
|
17 |
+
# 设置工作目录为 /home/app
|
18 |
+
WORKDIR /home/app
|
19 |
+
|
20 |
+
# 克隆你的项目源码(这里是 site-alert 项目)
|
21 |
+
RUN git clone https://github.com/vipmc838/site-alert.git site-alert
|
22 |
+
|
23 |
+
# 进入项目目录
|
24 |
+
WORKDIR /home/app/site-alert
|
25 |
+
|
26 |
+
# 安装生产依赖(忽略开发依赖),并执行构建脚本下载前端资源
|
27 |
+
RUN npm ci --omit dev && npm run download-dist
|
28 |
+
|
29 |
+
# 设置 Python 虚拟环境路径,避免影响系统环境
|
30 |
+
ENV VIRTUAL_ENV=/home/app/venv
|
31 |
+
|
32 |
+
# 创建 Python 虚拟环境
|
33 |
+
RUN python3 -m venv $VIRTUAL_ENV
|
34 |
+
|
35 |
+
# 把虚拟环境的 bin 目录加入 PATH,确保运行 Python 和 pip 时使用虚拟环境
|
36 |
+
ENV PATH="$VIRTUAL_ENV/bin:$PATH"
|
37 |
+
|
38 |
+
# 安装 Python 依赖包 requests 和 webdavclient3,用于网络请求和 WebDAV 交互
|
39 |
+
RUN pip install --no-cache-dir requests webdavclient3
|
40 |
+
|
41 |
+
# 拷贝备份同步脚本到项目目录,并把文件属主设置为 app 用户,确保权限正确
|
42 |
+
COPY --chown=app:app backup_data.sh /home/app/site-alert/
|
43 |
+
|
44 |
+
# 给同步脚本添加可执行权限
|
45 |
+
RUN chmod +x /home/app/site-alert/backup_data.sh
|
46 |
+
|
47 |
+
# 容器对外暴露端口 7860(根据你的项目端口)
|
48 |
+
EXPOSE 7860
|
49 |
+
|
50 |
+
# 容器启动时,后台先运行备份脚本,等待30秒后启动主程序(node server/server.js)
|
51 |
+
CMD ["/bin/sh", "-c", "./backup_data.sh & sleep 30 && node server/server.js"]
|