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:
@@ -1,2 +1,3 @@
|
||||
node_modules/
|
||||
crawl-pgdata/
|
||||
data/
|
||||
|
||||
+2
-2
@@ -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
@@ -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
@@ -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 연결 성공');
|
||||
|
||||
// 스케줄러 초기화
|
||||
|
||||
@@ -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
@@ -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 ""
|
||||
|
||||
Reference in New Issue
Block a user