페이지 4: 서버 서비스 관리, 마이그레이션 및 방화벽 허용

Django 프로젝트의 데이터베이스 스키마를 적용하고, 웹 서비스에 필요한 정적 파일들을 수집합니다. 선택한 연동 방식(Gunicorn 또는 mod_wsgi)에 따라 서버 애플리케이션을 관리하고, Apache 웹 서버를 시작하며, 시스템 방화벽을 설정하여 웹사이트에 접근할 수 있도록 합니다.


7. 마이그레이션 및 정적파일 수집

Django 데이터베이스 마이그레이션을 실행하고, 웹 서비스에 필요한 정적 파일들을 수집합니다.

source /home/hello/venv/bin/activate # 가상 환경 활성화
python /home/hello/manage.py migrate # 데이터베이스 스키마 적용 (테이블 생성/수정)
python /home/hello/manage.py collectstatic --noinput # 프로젝트 내 모든 정적 파일 수집

8. Gunicorn 서비스 설정 및 시작 (Gunicorn 연동 방식)

Gunicorn을 시스템 서비스로 등록하여 서버 부팅 시 자동으로 실행되고 관리될 수 있도록 합니다. (권장)

gunicorn.service 생성 또는 수정:

cat | sudo tee /etc/systemd/system/gunicorn.service > /dev/null << EOF
[Unit]
Description=Gunicorn daemon for Django project
After=network.target
[Service]
User=root # Gunicorn을 실행할 사용자 (프로젝트 소유자 또는 웹서버 사용자)
Group=root # Gunicorn을 실행할 그룹
# 주의: 보안 강화를 위해 www-data 또는 apache와 같은 최소 권한의 사용자를 지정하는 것이 좋습니다.
# Gunicorn 실행 명령어
ExecStart=/home/hello/venv/bin/gunicorn \
          --workers 3 \
          --bind 127.0.0.1:8000 \
          config.wsgi:application
WorkingDirectory=/home/hello # Django 프로젝트 루트 디렉토리
ExecReload=/bin/kill -s HUP $MAINPID
KillMode=mixed
TimeoutStopSec=5
PrivateTmp=true
[Install]
WantedBy=multi-user.target
EOF

Gunicorn 서비스 활성화 및 시작:

sudo systemctl daemon-reload # systemd 설정 다시 로드
sudo systemctl enable gunicorn # gunicorn 서비스 활성화
sudo systemctl start gunicorn # gunicorn 서비스 시작
sudo systemctl status gunicorn # gunicorn 서비스 상태 확인

8. Apache 시작 및 방화벽 허용 (공통)

Apache 웹 서버를 재시작하여 웹 서버 설정을 적용하고, 방화벽에서 HTTP 트래픽을 허용합니다.

sudo firewall-cmd --permanent --add-port=8000/tcp # Firewalld에서 Gunicorn 포트 (8000/tcp) 영구 허용 (Gunicorn HTTP 방식 사용 시)
sudo firewall-cmd --reload # 방화벽 설정 다시 로드 (즉시 적용)
sudo systemctl enable httpd # 시스템 부팅 시 Apache 자동 시작 설정 (이미 활성화되어 있을 수 있음)
sudo systemctl restart httpd # Apache 서비스 재시작 (Gunicorn/mod_wsgi 연동 설정 적용)
sudo firewall-cmd --permanent --add-service=http # 방화벽에서 HTTP(80번 포트) 트래픽 영구 허용
sudo firewall-cmd --reload # 방화벽 설정 다시 로드 (즉시 적용)
# HTTPS(443번 포트)도 사용한다면: sudo firewall-cmd --permanent --add-service=https && sudo firewall-cmd --reload