※ github 에 있는 인프런 클론코딩 프로젝트를 이용했습니다
※ CentOS8 가상머신 2대 사용
☆ 개요 정리 ☆
① 프론트엔드 : React → Nginx 서버에 배포
② 백엔드 : Django → Gunicorn 서버에 배포
③ 프론트엔드 & 백엔드 서버 연동
[ Nginx ]
※ 참고 : CentOS에서 NginX 설치, 설정하는 방법 | 써드아이시스템 기술문서 (3rdeyesys.com)
CentOS에서 NginX 설치, 설정하는 방법
Ncloud CentOS 서버에 NginX를 Package로 설치하고 기본 설정을 하는 방법입니다
docs.3rdeyesys.com
※ 참고 : React.js - 배포를 위한 빌드하기 "npm run build" (tistory.com)
React.js - 배포를 위한 빌드하기 "npm run build"
리액트 배포 파일 만들기 안녕하세요. 고코더 입니다. ● 1. 리액트를 만들면 이것을 배포하여서 서비스를 게시해야 합니다. 아무리 열심히 만들어도 다른 사람에게 보여주지 못한다면 의미가
gocoder.tistory.com
● yum-utils 설치
yum install yum-utils
● /etc/yum.repos.d/nginx.repo 파일 설정
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
● Nginx 설치
yum install nginx
● React 코드가 담긴 프론트엔드 코드를 Nginx 서버가 설치된 가상머신으로 옮겨주기
》 FileZilla 이용
● 해당 폴더로 이동해 빌드하기
npm run build
》 npm 명령어가 설치되어 있지 않다면 : yum install npm
● /etc/nginx/conf.d/default.conf 파일 설정
server {
listen 80;
server_name localhost;
# build 까지의 파일 경로 써주기 (홈 디렉토리 경로 설정)
root /test/build;
index index.html index.htm;
location / {
try_files $uri $uri/ = 404;
}
# 에러 페이지 설정
error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /test/build;
}
#.htaccess 파일 접근 금지 설정
location ~ /\.ht {
deny all;
}
}
● Nginx 실행
#실행
systemctl start nginx
#상태 확인
systemctl status nginx
☞ 확인하기~ ☜
》 Nginx 서버 ip 로 접속
[ Gunicorn ]
Gunicorn+Nginx 리눅스 서버에서 배포하기
Django나 Flask와 같이 파이썬 기반 프레임워크를 사용한 웹을 배포할 때, 주로 Gunicorn과 Nginx, Django/Flask로 만든 앱을 엮어서 배포하는 것이 정석이라 여겨진다 물론, 로컬 환경에서 개발하는 것처럼
velog.io
● Gunicorn 서버에 django 프로젝트 파일 옮기기
》 FileZilla 이용
● 가상환경 생성
virtualenv venv
》 virtualenv 명령어 없을 시 : yum install virtualenv
● venv 실행
source venv/bin/activate
● 서버 접속 확인
python manage.py runserver [서버 ip]:8000
¿ 에러 발생 : ModuleNotFoundError: No module named 'django'
¡ 해결 ¡
pip install django
¿ 에러 발생 : ModuleNotFoundError: No module named 'ckeditor'
¡ 해결 ¡
pip install django-ckeditor --upgrade
● Gunicorn 설치
pip install Django gunicorn
》 Gunicorn 서버 접속 확인
gunicorn --bind [서버 ip]:8000 [wsgi.py 있는 폴더명].wsgi:application
● /etc/systemd/system/gunicorn.service 파일 설정
[Unit]
Description=gunicorn daemon
After=network.target
[Service]
User=root #사용자
Group=root #사용자
WorkingDirectory=/guni #manage.py가 위치한 폴더 경로
ExecStart=/guni/venv/bin/gunicorn \ #gunicorn 경로
--workers 3 \
--bind unix:/guni/gunicorn.sock \
inflearn.wsgi:application #[wsgi.py가 위치한 폴더명].wsgi
[Install]
WantedBy=multi-user.target
● 실행
#실행
systemctl start gunicorn
#상태 확인
systemctl status gunicorn
☞ 확인하기~ ☜
》 Gunicorn 서버 (venv) : python manage.py runserver [서버 ip]:8000 명령어 실행
》 웹 브라우저 : [Gunicorn 서버 ip]:8000 으로 접속
[ Nginx & Gunicorn 연동 ]
※ 참고 : https://seowoosung.github.io/architecture/2020/05/11/nginx.html
3. nginx 웹서버와 Gunicorn 연동 · Woosung
2. Django와 WSGI 서버(Gunicorn) 연동 에서 Gunicorn과 Django 연동을 통해 실제 8000번 포트로 http request를 받아 처리하는 서버를 띄운적이 있다. Gunicorn만 있어도 http request들을 처리할 수 있지만, production
seowoosung.github.io
● Nginx 서버 파일 설정
》 /etc/nginx/nginx.conf
events {}
http {
server {
listen 80;
server_name 0.0.0.0;
charset utf-8;
location / {
proxy_pass http://200.200.200.136:8000; #Gunicorn 서버 ip 작성!
}
}
}
● Nginx 새로 설정한 파일로 실행
nginx -s stop
nginx -c /etc/nginx/nginx.conf #nginx.conf 경로
● Gunicorn 서버 파일 설정
》 Django 의 settings.py
ALLOWED_HOSTS = ['Nginx ip']
#혹은 '*' (모든 ip 접속 허용)
☞ 확인하기~ ☜
》 Nginx 서버 접속 시 Django의 페이지가 보임
※ 주의사항 ※
》 네트워크 설정
》 방화벽 해제
》 setenforce 0
》 파일 설정 후엔 재시작
'CLOUD > Server' 카테고리의 다른 글
[DB 이중화] Active - Standby (0) | 2023.03.06 |
---|---|
[Django] 웹페이지 배포하기 (0) | 2023.03.06 |
[DB 이중화] Active(읽기,쓰기) - Active(읽기,쓰기) (0) | 2023.03.02 |
[DB 이중화] Active(쓰기) - Active(읽기) (0) | 2023.03.02 |
[DB] SQL (0) | 2023.03.02 |