fix(deploy): SSH 호스트 IP 동적 감지 + health check 개선 #45
@ -89,8 +89,8 @@ jobs:
|
||||
mkdir -p ~/.ssh
|
||||
echo "$DEPLOY_KEY" > ~/.ssh/id_deploy
|
||||
chmod 600 ~/.ssh/id_deploy
|
||||
# Docker 컨테이너 → 호스트: bridge gateway(172.17.0.1) 경유
|
||||
DOCKER_HOST_IP=172.17.0.1
|
||||
# Docker 컨테이너 → 호스트: services_devnet gateway 경유
|
||||
DOCKER_HOST_IP=$(ip route | awk '/default/ {print $3}')
|
||||
ssh-keyscan $DOCKER_HOST_IP >> ~/.ssh/known_hosts 2>/dev/null || true
|
||||
|
||||
SSH_CMD="ssh -i ~/.ssh/id_deploy -o StrictHostKeyChecking=no root@$DOCKER_HOST_IP"
|
||||
@ -112,10 +112,11 @@ jobs:
|
||||
echo "--- Restarting kcg-backend ---"
|
||||
systemctl restart kcg-backend
|
||||
|
||||
# 기동 확인 (최대 30초)
|
||||
for i in $(seq 1 30); do
|
||||
if curl -sf http://localhost:8080/api/aircraft > /dev/null 2>&1; then
|
||||
echo "Backend started successfully (${i}s)"
|
||||
# 기동 확인 (최대 60초, 401=인증필요=정상 기동)
|
||||
for i in $(seq 1 60); do
|
||||
HTTP=$(curl -s -o /dev/null -w '%{http_code}' http://localhost:8080/api/aircraft 2>/dev/null)
|
||||
if [ "$HTTP" = "200" ] || [ "$HTTP" = "401" ] || [ "$HTTP" = "403" ]; then
|
||||
echo "Backend started successfully (${i}s, HTTP $HTTP)"
|
||||
exit 0
|
||||
fi
|
||||
sleep 1
|
||||
|
||||
@ -91,19 +91,16 @@ public class PressureCollector {
|
||||
try {
|
||||
// Open-Meteo 시간 형식: "2026-03-18T07:00" (Z 없음) → Z 추가
|
||||
Instant readingTime = OffsetDateTime.parse(timeStr + "Z").toInstant();
|
||||
try {
|
||||
repository.save(PressureReading.builder()
|
||||
.station(station)
|
||||
.lat(lat)
|
||||
.lng(lng)
|
||||
.pressureHpa(pressure)
|
||||
.readingTime(readingTime)
|
||||
.collectedAt(now)
|
||||
.build());
|
||||
saved++;
|
||||
} catch (Exception ignored) {
|
||||
// unique constraint violation = 이미 존재, 무시
|
||||
}
|
||||
if (repository.existsByStationAndReadingTime(station, readingTime)) continue;
|
||||
repository.save(PressureReading.builder()
|
||||
.station(station)
|
||||
.lat(lat)
|
||||
.lng(lng)
|
||||
.pressureHpa(pressure)
|
||||
.readingTime(readingTime)
|
||||
.collectedAt(now)
|
||||
.build());
|
||||
saved++;
|
||||
} catch (DateTimeParseException e) {
|
||||
log.debug("기압 시간 파싱 실패: {}", timeStr);
|
||||
}
|
||||
|
||||
@ -6,6 +6,7 @@ import java.time.Instant;
|
||||
import java.util.List;
|
||||
|
||||
public interface PressureReadingRepository extends JpaRepository<PressureReading, Long> {
|
||||
boolean existsByStationAndReadingTime(String station, Instant readingTime);
|
||||
List<PressureReading> findByStationAndReadingTimeAfterOrderByReadingTimeAsc(String station, Instant since);
|
||||
List<PressureReading> findByReadingTimeAfterOrderByReadingTimeAsc(Instant since);
|
||||
}
|
||||
|
||||
불러오는 중...
Reference in New Issue
Block a user