fix: DB 연결 재시도 + git 인증 + 볼륨 경로 수정

- db.js: waitForDB() 추가 (최대 10회, 3초 간격 재시도)
- app.js: DB 연결 시 waitForDB 사용
- start-server.sh: git 유저명 @를 %40으로 인코딩
- docker-compose.yml: 볼륨 상대경로로 변경 (./data/)
- 디렉토리 권한 문제 해결

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
chpark
2026-03-27 01:23:32 +09:00
parent 71329d72a9
commit 0a322bafa3
6 changed files with 32 additions and 11 deletions
+1
View File
@@ -1,2 +1,3 @@
node_modules/
crawl-pgdata/
data/
+2 -2
View File
@@ -13,7 +13,7 @@ services:
crawl-manager-db:
condition: service_healthy
volumes:
- /home/crawl-manager/app_data:/app/data
- ./data/app:/app/data
labels:
- traefik.enable=true
- traefik.http.routers.crawl-manager.rule=Host(`admin.startover.co.kr`)
@@ -29,7 +29,7 @@ services:
env_file:
- .env.production
volumes:
- /home/crawl-manager/postgres_data:/var/lib/postgresql/data
- ./data/postgres:/var/lib/postgresql/data
- ./src/migrations/init.sql:/docker-entrypoint-initdb.d/01-init.sql
ports:
- "11137:5432"
+3 -3
View File
@@ -8,7 +8,7 @@
# chmod +x setup-server.sh && ./setup-server.sh
# ==========================================
GIT_USER="chpark"
GIT_USER="chpark%40wace.me"
GIT_PASS="chpark"
GIT_REPO="39.117.244.52:3000/chpark/admin_st.git"
GIT_URL="http://${GIT_USER}:${GIT_PASS}@${GIT_REPO}"
@@ -38,8 +38,8 @@ fi
echo "[OK] 소스 준비 완료"
# 데이터 디렉토리
mkdir -p "$INSTALL_DIR/postgres_data"
mkdir -p "$INSTALL_DIR/app_data"
mkdir -p "$INSTALL_DIR/data/postgres"
mkdir -p "$INSTALL_DIR/data/app"
# 실행 권한
chmod +x start-server.sh
+2 -2
View File
@@ -75,8 +75,8 @@ app.use('/', publicRouter);
// ===== 시작 =====
async function start() {
try {
// DB 연결 확인
await db.query('SELECT 1');
// DB 연결 대기 (재시도)
await db.waitForDB();
console.log('[DB] PostgreSQL 연결 성공');
// 스케줄러 초기화
+18
View File
@@ -8,13 +8,31 @@ const pool = new Pool({
password: process.env.DB_PASSWORD || '',
max: 20,
idleTimeoutMillis: 30000,
connectionTimeoutMillis: 10000,
});
pool.on('error', (err) => {
console.error('[DB] Unexpected error on idle client', err);
});
/**
* DB 연결 재시도 (최대 10회, 3초 간격)
*/
async function waitForDB(retries = 10, delay = 3000) {
for (let i = 1; i <= retries; i++) {
try {
await pool.query('SELECT 1');
return true;
} catch (err) {
console.log(`[DB] 연결 대기 중... (${i}/${retries}) - ${err.message}`);
if (i === retries) throw new Error('DB 연결 실패: 최대 재시도 횟수 초과');
await new Promise(r => setTimeout(r, delay));
}
}
}
module.exports = {
query: (text, params) => pool.query(text, params),
pool,
waitForDB,
};
+6 -4
View File
@@ -41,7 +41,8 @@ docker system prune -af
docker image prune -af
# Git 설정 - 인증정보 URL에 포함시켜 비밀번호 입력 생략
GIT_USER="chpark"
# @는 %40으로 인코딩
GIT_USER="chpark%40wace.me"
GIT_PASS="chpark"
GIT_REPO="39.117.244.52:3000/chpark/admin_st.git"
GIT_URL="http://${GIT_USER}:${GIT_PASS}@${GIT_REPO}"
@@ -67,11 +68,12 @@ fi
echo "[OK] 최신 소스 적용 완료"
git log --oneline -3
# 데이터 디렉토리 생성
# 데이터 디렉토리 생성 (현재 위치 기준)
echo ""
echo "[4/5] 데이터 디렉토리 준비..."
mkdir -p /home/crawl-manager/postgres_data
mkdir -p /home/crawl-manager/app_data
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
mkdir -p "${SCRIPT_DIR}/data/postgres"
mkdir -p "${SCRIPT_DIR}/data/app"
# Docker 빌드 & 실행
echo ""