웹훅 통합 및 프로젝트 구조 변경 및 개선
This commit is contained in:
@ -28,7 +28,8 @@ RUN pip install --no-cache-dir --upgrade pip && \
|
||||
pillow \
|
||||
pyvirtualdisplay \
|
||||
requests \
|
||||
python-dotenv
|
||||
python-dotenv \
|
||||
flask
|
||||
|
||||
WORKDIR /app
|
||||
|
||||
@ -39,10 +40,15 @@ COPY app/ /app/
|
||||
# 로그 디렉토리 생성
|
||||
RUN mkdir -p /logs && chmod 777 /logs
|
||||
|
||||
# Crontab 설정: 매일 09:00에 절대 경로로 Python 실행
|
||||
# cron은 컨테이너의 환경 변수를 상속받으므로 env_file로 주입된 변수들을 사용 가능
|
||||
RUN echo "0 9 * * * /usr/bin/python /app/gnu_autoupload.py >> /logs/cron.log 2>&1" | crontab - && \
|
||||
chmod 666 /logs
|
||||
# Entrypoint 스크립트를 사용하여 Flask + Cron 동시 실행
|
||||
COPY build/app/entrypoint.sh /entrypoint.sh
|
||||
RUN chmod +x /entrypoint.sh
|
||||
|
||||
# Cron을 포그라운드에서 실행 (docker logs에 출력되도록)
|
||||
CMD ["/usr/sbin/cron", "-f"]
|
||||
# Crontab 설정: 매일 09:00에 절대 경로로 Python 실행
|
||||
RUN echo "0 9 * * * /usr/bin/python /app/gnu_autoupload.py >> /logs/cron.log 2>&1" | crontab -
|
||||
|
||||
# 포트 노출 (Flask)
|
||||
EXPOSE 5000
|
||||
|
||||
# Entrypoint 실행 (Flask + Cron)
|
||||
ENTRYPOINT ["/entrypoint.sh"]
|
||||
|
||||
23
build/app/entrypoint.sh
Normal file
23
build/app/entrypoint.sh
Normal file
@ -0,0 +1,23 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Entrypoint 스크립트: Flask 웹서버 + Crontab 동시 실행
|
||||
|
||||
set -e
|
||||
|
||||
echo "[$(date '+%Y-%m-%d %H:%M:%S')] ========================================"
|
||||
echo "[$(date '+%Y-%m-%d %H:%M:%S')] gnu-autouploader 컨테이너 시작"
|
||||
echo "[$(date '+%Y-%m-%d %H:%M:%S')] ========================================"
|
||||
|
||||
# Flask 웹서버를 백그라운드에서 시작
|
||||
echo "[$(date '+%Y-%m-%d %H:%M:%S')] Flask 웹서버 시작 (포트 5000)..."
|
||||
cd /app
|
||||
/usr/bin/python -m flask run --host=0.0.0.0 --port=5000 >> /logs/flask.log 2>&1 &
|
||||
FLASK_PID=$!
|
||||
echo "[$(date '+%Y-%m-%d %H:%M:%S')] Flask PID: $FLASK_PID"
|
||||
|
||||
# 함정 설정: 스크립트 종료 시 Flask도 종료
|
||||
trap "kill $FLASK_PID 2>/dev/null; exit" SIGTERM SIGINT
|
||||
|
||||
# Crontab 데몬을 포그라운드에서 실행 (docker logs에 출력)
|
||||
echo "[$(date '+%Y-%m-%d %H:%M:%S')] Crontab 데몬 시작..."
|
||||
/usr/sbin/cron -f
|
||||
@ -1,28 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
# 이 스크립트는 수동 실행 시 사용됩니다.
|
||||
# Crontab은 python을 직접 실행하므로 이 스크립트를 거치지 않습니다.
|
||||
|
||||
log() {
|
||||
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $*"
|
||||
}
|
||||
|
||||
log "========================================"
|
||||
log "날씨 정보 자동 게시글 생성 시작"
|
||||
log "========================================"
|
||||
|
||||
cd /app
|
||||
if [ -f "gnu_autoupload.py" ]; then
|
||||
/usr/bin/python gnu_autoupload.py 2>&1
|
||||
EXIT_CODE=$?
|
||||
if [ $EXIT_CODE -eq 0 ]; then
|
||||
log "✅ 실행 완료 (종료 코드: $EXIT_CODE)"
|
||||
else
|
||||
log "❌ 실행 실패 (종료 코드: $EXIT_CODE)"
|
||||
fi
|
||||
else
|
||||
log "❌ 오류: gnu_autoupload.py 파일을 찾을 수 없습니다"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
log "========================================"
|
||||
@ -1,30 +0,0 @@
|
||||
# Dockerfile for webhook server (Ubuntu 22.04 + Python Flask)
|
||||
|
||||
FROM ubuntu:22.04
|
||||
|
||||
ENV DEBIAN_FRONTEND=noninteractive \
|
||||
LANG=ko_KR.UTF-8 \
|
||||
LANGUAGE=ko_KR:ko \
|
||||
LC_ALL=ko_KR.UTF-8
|
||||
|
||||
# 기본 패키지 설치 및 로케일 설정
|
||||
RUN apt-get update && \
|
||||
apt-get install -y --no-install-recommends \
|
||||
locales tzdata python3 python3-pip curl ca-certificates && \
|
||||
locale-gen ko_KR.UTF-8 && \
|
||||
ln -sf /usr/share/zoneinfo/Asia/Seoul /etc/localtime && \
|
||||
dpkg-reconfigure --frontend noninteractive tzdata && \
|
||||
ln -sf /usr/bin/python3 /usr/bin/python && \
|
||||
apt-get clean && rm -rf /var/lib/apt/lists/*
|
||||
|
||||
# Flask 설치
|
||||
RUN pip3 install --no-cache-dir flask requests
|
||||
|
||||
# 작업 디렉토리
|
||||
WORKDIR /app
|
||||
|
||||
# 외부 접속 허용 포트
|
||||
EXPOSE 5000
|
||||
|
||||
# Flask 앱 실행
|
||||
CMD ["python3", "webhook.py"]
|
||||
Reference in New Issue
Block a user