- 공유 링크 만들기
- X
- 이메일
- 기타 앱
- 공유 링크 만들기
- X
- 이메일
- 기타 앱
AWS EC2에 Django 앱 배포하는 가장 실용적인 방법 (초보부터 실무까지)
안녕하세요! 오늘은 AWS EC2에 Django 애플리케이션을 배포하는 실용적인 방법에 대해 알아보겠습니다. 초보자부터 실무 개발자까지 따라할 수 있는 단계별 가이드를 제공합니다.
배포 전 준비사항
- AWS 계정 생성
- EC2 인스턴스 생성
- 도메인 구매 및 설정 (선택사항)
- SSL 인증서 준비 (선택사항)
1. EC2 인스턴스 설정
1.1 인스턴스 생성
- AWS 콘솔에서 EC2 서비스 선택
- "인스턴스 시작" 클릭
- Amazon Linux 2 AMI 선택
- 인스턴스 유형 선택 (t2.micro로 시작 추천)
- 보안 그룹 설정:
- SSH (22)
- HTTP (80)
- HTTPS (443)
1.2 SSH 접속
# 키 파일 권한 설정
chmod 400 your-key.pem
# SSH 접속
ssh -i your-key.pem ec2-user@your-ec2-public-ip
2. 서버 환경 설정
2.1 시스템 업데이트
sudo yum update -y
2.2 필요한 패키지 설치
# 개발 도구 설치
sudo yum groupinstall -y "Development Tools"
# Python 3.9 설치
sudo yum install -y python39 python39-devel
# 기타 필요한 패키지
sudo yum install -y nginx git postgresql-devel
2.3 Python 가상환경 설정
# pip 업그레이드
python3.9 -m pip install --upgrade pip
# virtualenv 설치
python3.9 -m pip install virtualenv
# 프로젝트 디렉토리 생성
mkdir /var/www/myproject
cd /var/www/myproject
# 가상환경 생성 및 활성화
python3.9 -m virtualenv venv
source venv/bin/activate
3. Django 프로젝트 설정
3.1 프로젝트 클론
git clone https://github.com/yourusername/yourproject.git .
3.2 의존성 설치
pip install -r requirements.txt
3.3 환경 변수 설정
# .env 파일 생성
vim .env
# 환경 변수 설정 예시
DEBUG=False
SECRET_KEY=your-secret-key
ALLOWED_HOSTS=your-domain.com,ec2-public-ip
DATABASE_URL=postgres://user:password@localhost:5432/dbname
3.4 데이터베이스 설정
# PostgreSQL 설치 및 시작
sudo amazon-linux-extras install postgresql13
sudo systemctl start postgresql
sudo systemctl enable postgresql
# 데이터베이스 및 사용자 생성
sudo -u postgres psql
CREATE DATABASE yourdb;
CREATE USER youruser WITH PASSWORD 'yourpassword';
GRANT ALL PRIVILEGES ON DATABASE yourdb TO youruser;
\q
4. Gunicorn 설정
4.1 Gunicorn 설치
pip install gunicorn
4.2 Gunicorn 서비스 파일 생성
sudo vim /etc/systemd/system/gunicorn.service
[Unit]
Description=gunicorn daemon
After=network.target
[Service]
User=ec2-user
Group=nginx
WorkingDirectory=/var/www/myproject
Environment="PATH=/var/www/myproject/venv/bin"
ExecStart=/var/www/myproject/venv/bin/gunicorn \
--workers 3 \
--bind unix:/var/www/myproject/myproject.sock \
yourproject.wsgi:application
[Install]
WantedBy=multi-user.target
4.3 Gunicorn 서비스 시작
sudo systemctl start gunicorn
sudo systemctl enable gunicorn
5. Nginx 설정
5.1 Nginx 설정 파일 생성
sudo vim /etc/nginx/conf.d/myproject.conf
server {
listen 80;
server_name your-domain.com;
location = /favicon.ico { access_log off; log_not_found off; }
location /static/ {
root /var/www/myproject;
}
location /media/ {
root /var/www/myproject;
}
location / {
include proxy_params;
proxy_pass http://unix:/var/www/myproject/myproject.sock;
}
}
5.2 Nginx 시작
sudo systemctl start nginx
sudo systemctl enable nginx
6. SSL 설정 (Let's Encrypt)
6.1 Certbot 설치
sudo yum install -y certbot python3-certbot-nginx
6.2 SSL 인증서 발급
sudo certbot --nginx -d your-domain.com
7. 정적 파일 수집
python manage.py collectstatic --noinput
8. 보안 설정
8.1 방화벽 설정
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload
8.2 SELinux 설정
sudo setsebool -P httpd_can_network_connect 1
9. 모니터링 설정
9.1 CloudWatch 에이전트 설치
sudo yum install -y amazon-cloudwatch-agent
9.2 로그 설정
sudo vim /etc/amazon-cloudwatch-agent.json
{
"logs": {
"logs_collected": {
"files": {
"collect_list": [
{
"file_path": "/var/log/nginx/access.log",
"log_group_name": "/aws/ec2/myproject/nginx/access",
"log_stream_name": "{instance_id}"
},
{
"file_path": "/var/log/nginx/error.log",
"log_group_name": "/aws/ec2/myproject/nginx/error",
"log_stream_name": "{instance_id}"
}
]
}
}
}
}
10. 자동화 스크립트
10.1 배포 스크립트
#!/bin/bash
# 프로젝트 디렉토리로 이동
cd /var/www/myproject
# 최신 코드 가져오기
git pull origin main
# 가상환경 활성화
source venv/bin/activate
# 의존성 설치
pip install -r requirements.txt
# 데이터베이스 마이그레이션
python manage.py migrate
# 정적 파일 수집
python manage.py collectstatic --noinput
# Gunicorn 재시작
sudo systemctl restart gunicorn
# Nginx 재시작
sudo systemctl restart nginx
11. 백업 전략
11.1 데이터베이스 백업
#!/bin/bash
# 백업 디렉토리 생성
mkdir -p /var/backups/postgresql
# 백업 수행
pg_dump -U youruser yourdb > /var/backups/postgresql/backup_$(date +%Y%m%d).sql
# S3에 백업 업로드
aws s3 cp /var/backups/postgresql/backup_$(date +%Y%m%d).sql s3://your-backup-bucket/
12. 문제 해결
12.1 로그 확인
# Nginx 로그
sudo tail -f /var/log/nginx/error.log
# Gunicorn 로그
sudo journalctl -u gunicorn
# Django 로그
tail -f /var/www/myproject/logs/django.log
12.2 일반적인 문제 해결
- 502 Bad Gateway: Gunicorn이 실행 중인지 확인
- Static 파일 404: collectstatic 실행 및 Nginx 설정 확인
- 데이터베이스 연결 오류: PostgreSQL 서비스 상태 및 연결 정보 확인
13. 성능 최적화
13.1 Gunicorn 설정 최적화
[Service]
ExecStart=/var/www/myproject/venv/bin/gunicorn \
--workers 4 \
--threads 2 \
--worker-class gthread \
--bind unix:/var/www/myproject/myproject.sock \
--timeout 120 \
yourproject.wsgi:application
13.2 Nginx 캐싱 설정
location /static/ {
expires 30d;
add_header Cache-Control "public, no-transform";
}
location /media/ {
expires 30d;
add_header Cache-Control "public, no-transform";
}
결론
AWS EC2에 Django 애플리케이션을 배포하는 과정을 단계별로 알아보았습니다. 이 가이드를 따라하면 안정적이고 확장 가능한 프로덕션 환경을 구축할 수 있습니다. 추가적인 질문이나 궁금한 점이 있으시면 댓글로 남겨주세요!
댓글
댓글 쓰기