티스토리 뷰
Gunicorn과 Nginx를 이용한 Django 애플리케이션 배포 및 자동화 (가상환경 적용)
4OurFuture 2025. 2. 18. 17:07Gunicorn과 Nginx를 활용하여 Django 애플리케이션을 배포하는 방법을 처음부터 정리하겠습니다.
특히 가상환경을 적용한 실행 방식과 유저/유저그룹 권한 충돌 방지 설정을 포함하고, 마지막에는 배포 자동화를 위한 재기동 자동화 스크립트도 추가하겠습니다.
1. Gunicorn과 Nginx 개요
- Gunicorn: Python WSGI HTTP 서버로, Django와 같은 Python 애플리케이션을 실행하는 데 사용됨
- Nginx: 리버스 프록시 서버로, Gunicorn과 연동하여 요청을 처리
- Systemd: Gunicorn을 서비스로 등록하여 자동 실행
- 유저 및 그룹 설정: Gunicorn과 Nginx가 동일한 유저 및 그룹을 사용하도록 설정하여 충돌 방지
2. Gunicorn 및 Nginx 설치
(1) Nginx 설치
- Nginx는 Python 환경에서 실행되는 것이 아니라, 독립적인 웹 서버 서비스입니다.
- 시스템 전체에서 동작해야 하므로, 특정 가상환경에서만 실행되면 정상적으로 작동하지 않습니다.
sudo dnf install -y nginx
(2) GUnicorn 설치
- 가상환경에서 Gunicorn을 설치합니다.
cd /opt/django-apps/<git-hub 동기화 되는 폴더>
source venv/bin/activate
pip install gunicorn
3. 배포를 위한 유저 및 그룹 설정
Gunicorn과 Nginx가 동일한 유저 그룹을 사용하도록 설정합니다.
sudo usermod -aG www-data $(whoami)
newgrp www-data
📌 Gunicorn과 Nginx 모두 www-data 그룹을 사용하도록 설정
sudo chown -R $(whoami):www-data /opt/django-apps/<git-hub 동기화 프로젝트 폴더>
sudo chmod -R 775 /opt/django-apps/<git 프로젝트명>
4. Gunicorn 실행 테스트 (가상환경 적용)
Django 프로젝트 루트에서 다음 명령을 실행하여 Gunicorn이 정상 동작하는지 확인합니다.
cd /opt/django-apps/<git-hub 동기화 프로젝트 폴더>
source venv/bin/activate
# Gunicorn 실행
gunicorn --bind 0.0.0.0:8000 <프로젝트명>.wsgi:application
브라우저에서 http://server-ip:8000에 접속하여 Django 애플리케이션이 정상적으로 실행되는지 확인합니다.
5. Gunicorn을 systemd 서비스로 등록 (가상환경 적용)
서비스 파일 생성
sudo nano /etc/systemd/system/gunicorn.service
다음 내용을 추가합니다.
[Unit]
Description=Gunicorn Daemon for Django Project
After=network.target
[Service]
User=deploy_user
Group=www-data
WorkingDirectory=/opt/django-apps/<git 프로젝트명>
ExecStart=/bin/bash -c 'source /opt/django-apps/<git 프로젝트경로>/venv/bin/activate && exec gunicorn --workers 3 --chdir /opt/django-apps/iis_jira_to_okta --bind unix:/opt/django-apps/iis_jira_to_okta/gunicorn.sock jira_to_okta.wsgi:application'
Restart=always
Environment="PATH=/opt/django-apps/<git 프로젝트명>/venv/bin:/usr/local/bin:/usr/bin:/bin"
Environment="DJANGO_SETTINGS_MODULE=<git 프로젝트명>.settings.dev"
[Install]
WantedBy=multi-user.target
📌 설정 적용 및 서비스 시작
sudo systemctl daemon-reload
sudo systemctl enable gunicorn
sudo systemctl start gunicorn
sudo systemctl status gunicorn
6. Nginx 설정 및 연동
Gunicorn이 생성한 소켓을 통해 Nginx가 요청을 전달하도록 설정합니다.
Nginx 설정 파일 생성
sudo nano /etc/nginx/conf.d/myproject.conf
다음 내용을 추가합니다.
server {
listen 80;
server_name yourdomain.com;
location / {
proxy_pass http://unix:/opt/django-apps/<git 프로젝트명>/gunicorn.sock;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
📌 설정 적용 및 서비스 시작
sudo systemctl restart nginx
sudo systemctl enable nginx
sudo systemctl status nginx
7. 자동 실행 스크립트 작성 (sh 파일 생성, 가상환경 적용)
반복적인 설정을 자동화하기 위해 sh 스크립트를 작성합니다.
스크립트 파일 생성
touch deploy.sh
chmod +x deploy.sh
nano deploy.sh
다음 내용을 추가합니다.
#!/bin/bash
# 프로젝트 디렉토리 이동
cd /opt/django-apps/<git 프로젝트명>
# 가상환경 활성화
source venv/bin/activate
# Gunicorn 서비스 재시작
sudo systemctl restart gunicorn
# Nginx 서비스 재시작
sudo systemctl restart nginx
스크립트 실행
./deploy.sh
8. 배포 후 상태 확인
sudo systemctl status gunicorn
sudo systemctl status nginx
웹 브라우저에서 http://yourdomain.com에 접속하여 서비스가 정상적으로 실행되는지 확인합니다.
9. 마무리
✅ Gunicorn과 Nginx 설치 및 실행 (가상환경 적용) ✅ Gunicorn을 systemd 서비스로 등록하여 자동 실행 ✅ Nginx를 설정하여 리버스 프록시로 활용 ✅ 배포 자동화 스크립트(deploy.sh)를 작성하여 편리한 실행 지원
이제 Gunicorn과 Nginx를 활용하여 Django 애플리케이션을 안정적으로 운영할 수 있습니다! 🚀
'Python > Django Framework (DRF)' 카테고리의 다른 글
| Django ORM의 특성과 깊이 있는 이해 (1) | 2025.03.09 |
|---|---|
| Django의 정적 파일이 정상적으로 동작하지 않는 경우 확인할 것 (0) | 2025.02.25 |
| manage.py migrate 오류 해결 (0) | 2025.02.18 |
| Django Settings 관리하기: 로컬과 프로덕션 환경 분리 전략 (0) | 2025.02.12 |
| Django REST Framework에서 Basic Token 인증 방식 사용하기 (1) | 2025.02.06 |
- Total
- Today
- Yesterday
- 자동매매
- chat gpt 모델 api 가격 예측
- 1165회 로또
- chat gpt 한국어 가격
- 기술적분석
- 주린이탈출
- 로또 1164회 당첨
- 인공지능 로또 예측
- 티스토리챌린지
- 퀀트투자
- chat gpt 모델별 예산
- 로또 ai
- 1164회 로또
- 차트분석
- 클래스형 뷰
- 오블완
- chat gpt 4o 예산
- 케라스
- 주식공부
- 재테크
- 주식투자
- 장고 orm sql문 비교
- 자동매매로직
- Python
- chat gpt 가격 예상
- chat gpt 모델 별 가격
- 골든크로스
- 토치비전
- Numpy
- chat gpt api 비용 계산
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 8 | 9 | 10 | 11 | 12 | 13 | 14 |
| 15 | 16 | 17 | 18 | 19 | 20 | 21 |
| 22 | 23 | 24 | 25 | 26 | 27 | 28 |