본문 바로가기

내일배움 캠프/TIL

인스턴스 서버 접속후 서버 세팅...

sudo apt update
sudo apt upgrade
sudo apt install python3-pip python3-dev python3-venv


sudo apt-get install libmysqlclient-dev #mysql-client를 사용하는경우

를 먼저 해줍니다 그다음에 서버에 배포할 django파일을 ssh키를 저장하고 git clone을 해서 가지고옵니다

ALLOWED_HOSTS = [
	'아이피 또는 도메인',
]
CSRF_TRUSTED_ORIGINS = [
    '아이피 또는 도메인',
]
CORS_ALLOWED_ORIGINS = [
	'아이피 또는 도메인',
]
DEBUG = False

settings에 위와 같은 코드를 설정해줘서 배포 가능한 도메인 csrf cors 오류가 뜨지않게해줘야합니다

 

gunicorn 설치

pip install gunicorn
sudo vim /etc/systemd/system/gunicorn.service

를 해준다음에

[Unit]
Description=gunicorn daemon
After=network.target

[Service]
User=ubuntu
Group=www-data
WorkingDirectory=/home/ubuntu/{루트폴더이름}
ExecStart=/home/ubuntu/{루트폴더이름}/venv/bin/gunicorn --access-logfile - --workers 3 --bind unix:/home/ubuntu/{루트폴더이름}/{프로젝트이름}.sock {프로젝트이름}.wsgi:application
Environment="DJANGO_SETTINGS_MODULE={프로젝트이름}.settings"
RuntimeDirectory=gunicorn
ForwardedAllowIPS=*

[Install]
WantedBy=multi-user.target

위와같이 설정을 해줍니다

// 인스턴스 시작시 자동시작
sudo systemctl enable gunicorn
// 지금 시작
sudo systemctl start gunicorn
// 상태 
sudo systemctl status gunicorn

nginx 설치

sudo apt install nginx
sudo vim /etc/nginx/sites-available/{프로젝트 이름}

로 설치를 하고 파일을

server {
    listen 80;
    server_name your_domain_or_ip;

    location / {
        include proxy_params;
        proxy_pass http://unix:/home/ubuntu/{루트폴더이름}/{프로젝트이름}.sock;
        proxy_set_header Referer $http_referer; 
    }

    location /static {
        root /home/ubuntu/{루트폴더이름}/;
    }

    location /media {
        root /home/ubuntu/{루트폴더이름}/;
    }
}
  • listen 80;: Nginx가 80번 포트에서 HTTP 요청을 수신합니다.
  • server_name your_domain_or_ip;: 실제 도메인 이름이나 IP 주소로 **your_domain_or_ip**을 대체하세요.
  • location / 블록은 Django 애플리케이션에 대한 요청을 처리합니다.
  • **include proxy_params;**는 필요한 프록시 매개변수를 포함합니다.
  • **proxy_pass <http://unix>:/path/to/your/django/project/myproject.sock;**는 요청을 지정된 Unix 소켓이나 TCP 주소로 전달합니다. 여기서 Django 애플리케이션이 실행 중인 위치를 지정하세요.
  • location /static 블록은 정적 파일에 대한 요청을 처리합니다.
  • **root /home/ubuntu/{루트폴더이름}/;**는 정적 파일이 위치한 루트 디렉토리를 지정합니다. **{루트폴더이름}**을 실제 루트 폴더 이름으로 대체하세요.
  • 이러한 location 블록을 구성함으로써 Nginx는 다른 URL 경로에 대한 요청을 처리하고 적절한 내용을 제공합니다. 루트 URL ("/")에 대한 요청은 Django 애플리케이션으로 전달되며, "/static" 및 "/media"에 대한 요청은 지정된 디렉토리에서 제공됩니다.
sudo ln -s /etc/nginx/sites-available/{프로젝트이름} /etc/nginx/sites-enabled/

sudo nginx -t

sudo systemctl restart nginx
sudo systemctl status nginx
namei -nom /home/ubuntu/{루트폴더이름}/{프로젝트이름}.sock

chmod 755 ~/{루트폴더이름}/
chmod 755 ~

chmod 명령은 숫자 모드 또는 기호 모드를 사용하여 권한을 설정합니다.

숫자 모드: 숫자 모드는 퍼미션을 3비트 단위로 표현하며, 각 비트는 읽기(4), 쓰기(2) 및 실행(1) 권한을 나타냅니다. 이러한 권한의 조합으로 3비트 숫자를 생성하여 퍼미션을 설정합니다.

  • 사용법: chmod [퍼미션 숫자] [파일 또는 디렉토리]

예를 들어, **chmod 755 filename**은 파일 **filename**에 대해 소유자에게 읽기, 쓰기, 실행 권한(7), 그룹 및 기타 사용자에게 읽기 및 실행 권한(5)을 부여합니다.

python manage.py collectstatic

까지 해주고 db가 migrate가 안이루어져있는상태라면

python manage.py makemigrations
python manage.py migrate

로 설정까지 해주시면됩니다

그리고 서버 파일을 수정하게되면

sudo service gunicorn restart
sudo service nginx restart

로 재시작을 해줘서 서버에 적용을 합시다 춍춍