Spaces:
Running
Running
Update Dockerfile
Browse files- Dockerfile +12 -24
Dockerfile
CHANGED
|
@@ -21,27 +21,15 @@ ENV PORT=7860
|
|
| 21 |
ENV NODE_ENV=production
|
| 22 |
ENV DATABASE_URL="file:/data/database.sqlite"
|
| 23 |
|
| 24 |
-
# 3. 【
|
| 25 |
-
|
| 26 |
-
|
| 27 |
-
|
| 28 |
-
|
| 29 |
-
const
|
| 30 |
-
|
| 31 |
-
|
| 32 |
-
|
| 33 |
-
|
| 34 |
-
|
| 35 |
-
|
| 36 |
-
const pass = process.env.SPACE_BASIC_AUTH_PASSWORD || 'admin123'; \
|
| 37 |
-
const auth = { login: user, password: pass }; \
|
| 38 |
-
const b64auth = (req.headers.authorization || '').split(' ')[1] || ''; \
|
| 39 |
-
const [login, password] = Buffer.from(b64auth, 'base64').toString().split(':'); \
|
| 40 |
-
if (req.url.startsWith('/v1')) return next(); \
|
| 41 |
-
if (login && password && login === auth.login && password === auth.password) return next(); \
|
| 42 |
-
res.statusCode = 401; \
|
| 43 |
-
res.setHeader('WWW-Authenticate', 'Basic realm=\\\"Secure Area\\\"'); \
|
| 44 |
-
res.end('Unauthorized'); \
|
| 45 |
-
}; \
|
| 46 |
-
`; \
|
| 47 |
-
content = injectCode + content.replace('const app =', 'const app = ; app
|
|
|
|
| 21 |
ENV NODE_ENV=production
|
| 22 |
ENV DATABASE_URL="file:/data/database.sqlite"
|
| 23 |
|
| 24 |
+
# 3. 【核心修复】:用最直观的方式,把看门大爷的代码写进独立的 security.js 文件里
|
| 25 |
+
RUN echo "const fs = require('fs');" > security.js && \
|
| 26 |
+
echo "const file = 'server/dist/index.js';" >> security.js && \
|
| 27 |
+
echo "if (fs.existsSync(file)) {" >> security.js && \
|
| 28 |
+
echo " let content = fs.readFileSync(file, 'utf8');" >> security.js && \
|
| 29 |
+
echo " const injectCode = \`global.authMiddleware = (req, res, next) => { const user = process.env.SPACE_BASIC_AUTH_USERNAME || 'admin'; const pass = process.env.SPACE_BASIC_AUTH_PASSWORD || 'admin123'; const b64auth = (req.headers.authorization || '').split(' ')[1] || ''; const [login, password] = Buffer.from(b64auth, 'base64').toString().split(':'); if (req.url.startsWith('/v1')) return next(); if (login && password && login === user && password === pass) return next(); res.statusCode = 401; res.setHeader('WWW-Authenticate', 'Basic realm=\"Secure\"'); res.end('Unauthorized'); };\`;" >> security.js && \
|
| 30 |
+
echo " content = content.replace('const app =', 'const app = ; app.use(global.authMiddleware); //');" >> security.js && \
|
| 31 |
+
echo " fs.writeFileSync(file, injectCode + content, 'utf8');" >> security.js && \
|
| 32 |
+
echo "}" >> security.js
|
| 33 |
+
|
| 34 |
+
# 4. 彻底没有引号冲突的干净启动命令
|
| 35 |
+
CMD ["sh", "-c", "rm -rf /app/server/data && ln -s /data/freellm /app/server/data && node security.js && export ENCRYPTION_KEY=$(node -e \"console.log(require('crypto').randomBytes(32).toString('hex'))\") && node server/dist/index.js"]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|