[Unit]
Description=gunicorn daemon
After=network.target
[Service]
User=root
Group=root
WorkingDirectory=/root/greenyday/backend
ExecStart=/root/greenyday/backend/venv/bin/gunicorn --workers 3 --bind 0.0.0.0:8000 backend.wsgi:application
[Install]
WantedBy=multi-user.target
Gunicorn은 WSGI(Web Server Gateway Interface) 애플리케이션 서버로, HTTP 요청을 Django 애플리케이션으로 전달하고 그 결과를 다시 HTTP 응답으로 반환하는 역할을 한다.
하지만 Gunicorn은 Django의 정적 파일(Static files)과 미디어 파일(Media files)을 자동으로 처리하지 않는다.
Django의 정적 파일은 CSS, JavaScript, 이미지 등의 파일로, 애플리케이션에서 사용하는 파일이다.
이 파일들은 애플리케이션 코드와는 별도로 관리되어야 한다.
보통 이러한 파일들은 웹 서버(apache, nginx 등)에서 직접 제공하거나, Django에서 제공하는 collectstatic 명령을 사용하여 별도의 디렉토리에 모아놓고 웹 서버에서 이를 서빙한다.
반면, 미디어 파일은 애플리케이션에서 업로드되는 이미지, 동영상 등의 파일이다.
이 파일들은 Django의 MEDIA_ROOT 설정에 지정된 디렉토리에 저장된다.
웹 서버는 이러한 미디어 파일을 직접 서빙하거나, Django에서 제공하는 MEDIA_URL 설정에 따라 서빙한다.
따라서, Gunicorn을 사용하더라도 Django의 정적 파일과 미디어 파일은 웹 서버에서 처리되어야 하며, 애플리케이션 서버는 그저 HTTP 요청을 받아서 Django 애플리케이션으로 전달하는 역할을 한다.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowPublicRead",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::greenyday/*"
}
]
}
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
# AWS S3
'storages',
]
설치
# AWS Setting
AWS_REGION = 'ap-northeast-2'
AWS_STORAGE_BUCKET_NAME = 'BUCKET_NAME'
AWS_QUERYSTRING_AUTH = False
AWS_S3_HOST = 's3.%s.amazonaws.com' % AWS_REGION
AWS_ACCESS_KEY_ID = 'ACCESS_KEY_ID'
AWS_SECRET_ACCESS_KEY = 'SECRET_ACCESS_KEY'
AWS_S3_CUSTOM_DOMAIN = '%s.s3.amazonaws.com' % AWS_STORAGE_BUCKET_NAME
# Static Setting
STATIC_DIR = os.path.join(BASE_DIR, 'static')
STATICFILES_DIRS = [
STATIC_DIR,
]
STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles/')
STATIC_URL = "https://%s/" % AWS_S3_CUSTOM_DOMAIN
STATICFILES_STORAGE = 'backend.storages.StaticStorage'
#Media Setting
MEDIA_URL = "https://%s/" % AWS_S3_CUSTOM_DOMAIN
DEFAULT_FILE_STORAGE = 'backend.storages.MediaStorage'
from django.conf import settings
from storages.backends.s3boto3 import S3Boto3Storage
class MediaStorage(S3Boto3Storage):
location = settings.MEDIAFILES_LOCATION
class StaticStorage(S3Boto3Storage):
location = settings.STATICFILES_LOCATION