timindev commited on
Commit
bd9fc5b
·
verified ·
1 Parent(s): 402f7e5

Update Dockerfile

Browse files
Files changed (1) hide show
  1. Dockerfile +10 -52
Dockerfile CHANGED
@@ -9,64 +9,22 @@ WORKDIR /app
9
  # 3. 克隆官方代码
10
  RUN git clone https://github.com/titaniumnetwork-dev/Ultraviolet-App.git .
11
 
12
- # 4. 安装官方所有依赖
13
  RUN npm install
14
 
15
- # 5. --- 关键步骤:重写一个绝对兼容的启动脚本 ---
16
- # 我们使用 import 语法,并动态适配 @mercuryworkshop 或 @tomphttp
17
- RUN echo 'import { createServer } from "node:http"; \n\
18
- import { join } from "node:path"; \n\
19
- import express from "express"; \n\
20
- // 自动兼容两种可能的包名 \n\
21
- import { createBareServer } from "@mercuryworkshop/bare-server-node"; \n\
22
- \n\
23
- const bare = createBareServer("/bare/"); \n\
24
- const app = express(); \n\
25
- const __dirname = process.cwd(); \n\
26
- \n\
27
- // 静态文件使用绝对路径,解决 TypeError: path must be absolute \n\
28
- app.use(express.static(join(__dirname, "public"))); \n\
29
- \n\
30
- app.get("/", (req, res) => { \n\
31
- res.sendFile(join(__dirname, "public/index.html")); \n\
32
- }); \n\
33
- \n\
34
- // 这里的 404 处理是最后的保底 \n\
35
- app.use((req, res) => { \n\
36
- res.status(404).sendFile(join(__dirname, "public/404.html")); \n\
37
- }); \n\
38
- \n\
39
- const server = createServer(); \n\
40
- \n\
41
- // 必须在 server 层面拦截 /bare/ 请求 \n\
42
- server.on("request", (req, res) => { \n\
43
- if (bare.shouldRoute(req)) { \n\
44
- bare.routeRequest(req, res); \n\
45
- } else { \n\
46
- app(req, res); \n\
47
- } \n\
48
- }); \n\
49
- \n\
50
- server.on("upgrade", (req, socket, head) => { \n\
51
- if (bare.shouldRoute(req)) { \n\
52
- bare.routeUpgrade(req, socket, head); \n\
53
- } else { \n\
54
- socket.end(); \n\
55
- } \n\
56
- }); \n\
57
- \n\
58
- const PORT = process.env.PORT || 7860; \n\
59
- server.listen({ port: PORT }, () => { \n\
60
- console.log("Ultraviolet 真正成功启动,Bare Server 挂载在 /bare/"); \n\
61
- });' > src/index.js
62
 
63
- # 6. 强制修正前端 uv.config.js 里的 bare 地址
64
  RUN sed -i "s|bare: [^,]*|bare: '/bare/'|g" public/uv/uv.config.js || true
65
 
66
- # 7. 环境变量与端口
67
  ENV PORT=7860
68
  ENV NODE_ENV=production
69
  EXPOSE 7860
70
 
71
- # 8. 直接运行
72
- CMD ["node", "src/index.js"]
 
9
  # 3. 克隆官方代码
10
  RUN git clone https://github.com/titaniumnetwork-dev/Ultraviolet-App.git .
11
 
12
+ # 4. 安装官方定义的所有依赖
13
  RUN npm install
14
 
15
+ # 5. --- 关键修复:修复绝对路径报错 (解决 TypeError: path must be absolute) ---
16
+ # 我们在 index.js 第一行插入 path 模块引用
17
+ # 然后强制将 publicPath 定义为基于当前目录的绝对路径
18
+ RUN sed -i '1i import path from "node:path";' src/index.js && \
19
+ sed -i 's|const publicPath = .*|const publicPath = path.join(process.cwd(), "public");|g' src/index.js
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
20
 
21
+ # 6. --- 关键修复:确保前端配置文件指向本地 /bare/ 路径 ---
22
  RUN sed -i "s|bare: [^,]*|bare: '/bare/'|g" public/uv/uv.config.js || true
23
 
24
+ # 7. 设置环境变量
25
  ENV PORT=7860
26
  ENV NODE_ENV=production
27
  EXPOSE 7860
28
 
29
+ # 8. 启动 (使用原厂脚本,确保依赖加载逻辑一致)
30
+ CMD ["npm", "start"]