Apache2를 사용하여 Django 애플리케이션 배포
나는 다음을 사용할 것이다:
시작하기 전에 매우 간단한 django 애플리케이션을 만들었습니다. 현재 localhost, 포트 8000에서 실행 중입니다.
requirements.txt 만들기
$ pip freeze > requirements.txt
1. EC2 설정
아나콘다3 설치
가상 환경을 만들기 위해 먼저 anaconda3를 설치합시다.
$ sudo apt-get update && sudo apt-get upgrade
$ sudo apt-get install curl
$ curl -O https://repo.anaconda.com/archive/Anaconda3-2020.02-Linux-x86_64.sh
(다른 버전here을 찾을 수 있습니다.)
$ bash Anaconda3-2020.02-Linux-x86_64.sh
이 명령의 경우
$ conda env list
오류를 반환하려면 이 명령을 실행하십시오.
$ export PATH=(path to anaconda3 directory)/anaconda3/bin:$PATH
$ source ~/.bashrc
그런 다음 가상 환경을 만듭니다.
$ conda create -n (any name you want) python=(python version)
Django 개발 환경 설정
생성한 가상 환경을 활성화한 후 django를 설치합니다. 그런 다음 로컬 django 파일을 EC2 인스턴스로 전송합니다. git 또는 FTP를 사용할 수 있습니다.
$ pip install -r /path/to/requirements.txt
필요한 모든 패키지가 설치되도록 이 명령을 실행하십시오.
이제 애플리케이션이 EC2 공개 IP에서 실행 중입니다.
2. 애플리케이션 배포
아파치2 설치
$ sudo apt-get install apache2
apache2가 설치되면 HTTP 포트에서 EC2 인스턴스에 연결을 시도할 때 이 페이지가 표시됩니다.
애플리케이션에 도메인 이름 연결
Apache 서버에 도메인 이름을 설정하려면 apache.conf 파일을 편집하십시오./etc/apache2에 있습니다.
$ sudo vim apache2.conf
이 줄을 추가하십시오.
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so
<VirtualHost *:80>
ServerAdmin (your contact address)
ServerName (your domain)
ProxyRequests Off
ProxyPreserveHost On
ProxyPass / http://localhost:8000/
ProxyPassReverse / http://localhost:8000/
<Directory (path to your django root - where wsgi.py is)>
<Files wsgi.py>
Require all granted
</Files>
</Directory>
</VirtualHost>
가상 호스트는 ServerName을 사용하여 이름 기반이 될 수 있습니다. http 서버는 일반적으로 포트 80을 사용하며 '*:80'은 포트 80의 모든 IP 주소를 의미합니다. 누군가가 ServerName으로 작성한 도메인을 사용하여 웹 브라우저로 서버에 액세스하면 apache2 서버는 localhost:8000으로 리디렉션됩니다.
이 명령으로 서버를 시작하십시오.
$ sudo systemctl restart apache2
명령이 오류를 반환하면 다음을 실행하여 오류 메시지를 확인하십시오.
$ sudo systemctl status apache2
또는/var/log/apache2/error.log에서 오류 로그를 확인할 수 있습니다.
/etc/apache2 내부에 'modules' 디렉토리가 없으면/usr/lib/apache2에 있습니다. 디렉토리를 찾아/etc/apache2에 복사합니다.
$ sudo cp -r /usr/lib/apache2/modules /etc/apache2/modules
모든 오류가 수정되었으면 서버를 다시 시작하십시오.
SSL 설정
이제 배포가 완료되었지만 주소 표시줄에 '안전하지 않음' 경고가 표시됩니까? 즉, HTTPS 대신 HTTP 프로토콜을 사용하기 때문에 연결에 대한 보안이 부족합니다. HTTPS는 암호화 및 인증을 제공하므로 HTTP보다 더 안전합니다.
아파치2 설정
Let's Encrypt는 무료 SSL 인증서를 제공합니다. Certbot은 Let's Encrypt 인증서를 자동으로 사용하여 HTTPS를 활성화하기 위한 것입니다.
$ sudo snap install --classic certbot
$ sudo certbot --apache
/etc/letsencrypt/live/(귀하의 도메인)에서 pem 파일을 찾을 수 있으면 준비가 된 것입니다.
이제 apache2.conf 파일을 다시 편집하십시오.
에 다음 줄을 추가하여 HTTP를 HTTPS로 리디렉션합니다.
<VirtualHost *:80>
...
RewriteEngine On
RewriteCond %{SERVER_NAME} =(your domain)
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
...
</VirtualHost>
Let's Encrypt를 설치하면/etc/apache2에서 apache2-le-ssl.conf 파일을 찾을 수 있습니다. 이 파일을 편집하십시오.
<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerAdmin (your contact address)
ServerName (your domain)
ProxyRequests Off
ProxyPreserveHost On
SSLProxyEngine on
SSLProxyVerify none
SSLProxyCheckPeerCN off
SSLProxyCheckPeerName off
SSLProxyCheckPeerExpire off
ProxyPass / https://localhost:8001/
ProxyPassReverse / https://localhost:8001/
<Directory (path to your django root - where wsgi.py is)>
<Files wsgi.py>
Require all granted
</Files>
</Directory>
SSLCertificateFile /etc/letsencrypt/live/(your domain)/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/(your domain)/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf
</VirtualHost>
</IfModule>
장고 설정
runserver는 HTTP에서만 작동하므로 django-sslserver를 설치합니다.
$ pip install django-sslserver
settings.py 편집
# settings.py
INSTALLED_APPS = [
...
'sslserver',
...
]
SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTOCOL', 'https')
SECURE_SSL_REDIRECT = True
SESSION_COOKIE_SECURE = True
CSRF_COOKIE_SECURE = True
SECURE_HSTS_PRELOAD = True
SECURE_HSTS_INCLUDE_SUBDOMAINS = True
그런 다음 이 명령을 실행합니다.
$ python manage.py runsslserver 0:8001
gunicorn을 사용하여 서버를 실행하려면 이것을 실행하십시오.
$ nohup gunicorn --certfile=/home/ubuntu/anaconda3/envs/(your conda virtual environment name)/lib/python3.9/site-packages/sslserver/certs/development.crt --keyfile=/home/ubuntu/anaconda3/envs/(your conda virtual environment name)/lib/python3.9/site-packages/sslserver/certs/development.key --bind 0.0.0.0:8001 (your django project name).wsgi &
저 자물쇠 보이시죠? 귀하의 사이트는 이제 암호화되었습니다.
Reference
이 문제에 관하여(Apache2를 사용하여 Django 애플리케이션 배포), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://dev.to/ninahwang/deploying-a-django-application-using-apache2-94g
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
$ sudo apt-get update && sudo apt-get upgrade
$ sudo apt-get install curl
$ curl -O https://repo.anaconda.com/archive/Anaconda3-2020.02-Linux-x86_64.sh
$ bash Anaconda3-2020.02-Linux-x86_64.sh
$ conda env list
$ export PATH=(path to anaconda3 directory)/anaconda3/bin:$PATH
$ source ~/.bashrc
$ conda create -n (any name you want) python=(python version)
$ pip install -r /path/to/requirements.txt
아파치2 설치
$ sudo apt-get install apache2
apache2가 설치되면 HTTP 포트에서 EC2 인스턴스에 연결을 시도할 때 이 페이지가 표시됩니다.
애플리케이션에 도메인 이름 연결
Apache 서버에 도메인 이름을 설정하려면 apache.conf 파일을 편집하십시오./etc/apache2에 있습니다.
$ sudo vim apache2.conf
이 줄을 추가하십시오.
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so
<VirtualHost *:80>
ServerAdmin (your contact address)
ServerName (your domain)
ProxyRequests Off
ProxyPreserveHost On
ProxyPass / http://localhost:8000/
ProxyPassReverse / http://localhost:8000/
<Directory (path to your django root - where wsgi.py is)>
<Files wsgi.py>
Require all granted
</Files>
</Directory>
</VirtualHost>
가상 호스트는 ServerName을 사용하여 이름 기반이 될 수 있습니다. http 서버는 일반적으로 포트 80을 사용하며 '*:80'은 포트 80의 모든 IP 주소를 의미합니다. 누군가가 ServerName으로 작성한 도메인을 사용하여 웹 브라우저로 서버에 액세스하면 apache2 서버는 localhost:8000으로 리디렉션됩니다.
이 명령으로 서버를 시작하십시오.
$ sudo systemctl restart apache2
명령이 오류를 반환하면 다음을 실행하여 오류 메시지를 확인하십시오.
$ sudo systemctl status apache2
또는/var/log/apache2/error.log에서 오류 로그를 확인할 수 있습니다.
/etc/apache2 내부에 'modules' 디렉토리가 없으면/usr/lib/apache2에 있습니다. 디렉토리를 찾아/etc/apache2에 복사합니다.
$ sudo cp -r /usr/lib/apache2/modules /etc/apache2/modules
모든 오류가 수정되었으면 서버를 다시 시작하십시오.
SSL 설정
이제 배포가 완료되었지만 주소 표시줄에 '안전하지 않음' 경고가 표시됩니까? 즉, HTTPS 대신 HTTP 프로토콜을 사용하기 때문에 연결에 대한 보안이 부족합니다. HTTPS는 암호화 및 인증을 제공하므로 HTTP보다 더 안전합니다.
아파치2 설정
Let's Encrypt는 무료 SSL 인증서를 제공합니다. Certbot은 Let's Encrypt 인증서를 자동으로 사용하여 HTTPS를 활성화하기 위한 것입니다.
$ sudo snap install --classic certbot
$ sudo certbot --apache
/etc/letsencrypt/live/(귀하의 도메인)에서 pem 파일을 찾을 수 있으면 준비가 된 것입니다.
이제 apache2.conf 파일을 다시 편집하십시오.
<VirtualHost *:80>
...
RewriteEngine On
RewriteCond %{SERVER_NAME} =(your domain)
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
...
</VirtualHost>
Let's Encrypt를 설치하면/etc/apache2에서 apache2-le-ssl.conf 파일을 찾을 수 있습니다. 이 파일을 편집하십시오.
<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerAdmin (your contact address)
ServerName (your domain)
ProxyRequests Off
ProxyPreserveHost On
SSLProxyEngine on
SSLProxyVerify none
SSLProxyCheckPeerCN off
SSLProxyCheckPeerName off
SSLProxyCheckPeerExpire off
ProxyPass / https://localhost:8001/
ProxyPassReverse / https://localhost:8001/
<Directory (path to your django root - where wsgi.py is)>
<Files wsgi.py>
Require all granted
</Files>
</Directory>
SSLCertificateFile /etc/letsencrypt/live/(your domain)/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/(your domain)/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf
</VirtualHost>
</IfModule>
장고 설정
runserver는 HTTP에서만 작동하므로 django-sslserver를 설치합니다.
$ pip install django-sslserver
settings.py 편집
# settings.py
INSTALLED_APPS = [
...
'sslserver',
...
]
SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTOCOL', 'https')
SECURE_SSL_REDIRECT = True
SESSION_COOKIE_SECURE = True
CSRF_COOKIE_SECURE = True
SECURE_HSTS_PRELOAD = True
SECURE_HSTS_INCLUDE_SUBDOMAINS = True
그런 다음 이 명령을 실행합니다.
$ python manage.py runsslserver 0:8001
gunicorn을 사용하여 서버를 실행하려면 이것을 실행하십시오.
$ nohup gunicorn --certfile=/home/ubuntu/anaconda3/envs/(your conda virtual environment name)/lib/python3.9/site-packages/sslserver/certs/development.crt --keyfile=/home/ubuntu/anaconda3/envs/(your conda virtual environment name)/lib/python3.9/site-packages/sslserver/certs/development.key --bind 0.0.0.0:8001 (your django project name).wsgi &
저 자물쇠 보이시죠? 귀하의 사이트는 이제 암호화되었습니다.
Reference
이 문제에 관하여(Apache2를 사용하여 Django 애플리케이션 배포), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/ninahwang/deploying-a-django-application-using-apache2-94g텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)