76 lines
2.4 KiB
Bash
76 lines
2.4 KiB
Bash
#!/bin/sh
|
|
set -eu
|
|
|
|
echo "[api] starting entrypoint at $(date -u +%Y-%m-%dT%H:%M:%SZ)"
|
|
echo "[api] node=$(node -v) cwd=$(pwd)"
|
|
echo "[api] release check: app.js=$(test -f app.js && echo yes || echo NO) prisma=$(test -f node_modules/prisma/build/index.js && echo yes || echo NO)"
|
|
|
|
if [ ! -f app.js ]; then
|
|
echo "[api] FATAL: app.js missing — release copy failed" >&2
|
|
exit 1
|
|
fi
|
|
|
|
if [ ! -f node_modules/prisma/build/index.js ]; then
|
|
echo "[api] FATAL: prisma CLI missing — commit apps/api/release/node_modules" >&2
|
|
ls -la node_modules 2>&1 || true
|
|
exit 1
|
|
fi
|
|
|
|
SCHEMA_ENGINE=$(ls node_modules/@prisma/engines/schema-engine*debian* 2>/dev/null | head -n 1 || true)
|
|
if [ -z "$SCHEMA_ENGINE" ]; then
|
|
echo "[api] FATAL: schema-engine لینوکس در release نیست." >&2
|
|
echo "[api] لوکال دوباره بسازید: pnpm run build:api:release" >&2
|
|
ls -la node_modules/@prisma/engines/ 2>&1 || true
|
|
exit 1
|
|
fi
|
|
echo "[api] schema-engine=$SCHEMA_ENGINE"
|
|
|
|
if [ -z "${DATABASE_URL:-}" ]; then
|
|
echo "[api] FATAL: DATABASE_URL is empty" >&2
|
|
exit 1
|
|
fi
|
|
|
|
echo "[api] DATABASE_URL (redacted)=$(node -e "try{const u=new URL(process.env.DATABASE_URL);u.password='***';console.log(u.toString())}catch(e){console.log('INVALID:'+e.message)}")"
|
|
echo "[api] REDIS_HOST=${REDIS_HOST:-unset} REDIS_PORT=${REDIS_PORT:-unset}"
|
|
|
|
echo "[api] probing postgres TCP (10s timeout)..."
|
|
node <<'NODE'
|
|
const net = require('net');
|
|
let u;
|
|
try {
|
|
u = new URL(process.env.DATABASE_URL);
|
|
} catch (e) {
|
|
console.error('[api] FATAL: invalid DATABASE_URL', e.message);
|
|
process.exit(1);
|
|
}
|
|
const host = u.hostname;
|
|
const port = Number(u.port || 5432);
|
|
const socket = net.connect({ host, port });
|
|
const timer = setTimeout(() => {
|
|
console.error(`[api] FATAL: TCP timeout to ${host}:${port}`);
|
|
socket.destroy();
|
|
process.exit(1);
|
|
}, 10000);
|
|
socket.on('connect', () => {
|
|
clearTimeout(timer);
|
|
console.log(`[api] TCP OK ${host}:${port}`);
|
|
socket.end();
|
|
process.exit(0);
|
|
});
|
|
socket.on('error', (err) => {
|
|
clearTimeout(timer);
|
|
console.error(`[api] FATAL: TCP error ${host}:${port} → ${err.message}`);
|
|
process.exit(1);
|
|
});
|
|
NODE
|
|
|
|
# جلوگیری از تلاش برای دانلود آنلاین روی سرور
|
|
export PRISMA_ENGINES_CHECKSUM_IGNORE_MISSING=1
|
|
|
|
echo "[api] running prisma migrate deploy..."
|
|
node node_modules/prisma/build/index.js migrate deploy --schema=./prisma/schema.prisma
|
|
echo "[api] migrate done"
|
|
|
|
echo "[api] launching app.js on 0.0.0.0:${PORT:-3000}"
|
|
exec node app.js
|