현제의 현재이야기

EC2 배포 정리 본문

etc

EC2 배포 정리

현재의 현제 2023. 1. 8. 09:36

ec2 설정

  • 리전을 서울로
  •  Ubuntu Server 18.04 LTS 운영체제 선택
  • 키페어 생성 - pem 파일로 만든다.
  • 다운로드 받은 폴더로 터미널 열고 소유주 설정
$ chmod 400 ~/.ssh/deploy_test.pem
  • 키페어 경로적고 해당 폴더 터미널에서 원격접속 (ec2에 연결 누르면 나옴)
$ ssh -i [키 페어 경로] [유저 이름]@[퍼블릭 DNS 주소]
  • 접속후 아래 명령어 실행
$ sudo apt-get update
$ sudo apt-get dist-upgrade
$ sudo apt-get install python3-pip
  • 깃 클론을 위한 /srv/ 폴더 소유권 변경
$ sudo chown -R ubuntu:ubuntu /srv/
  • srv 이동 후 깃 클론
$ cd /srv
$ git clone [레포지토리 주소]

uWSGI 연결

 

  • 가상환경
$ sudo apt-get install python3-venv
$ cd ~
$ python3 -m venv myvenv
  • pip 설치
$ cd /srv/django-deploy-test/
$ pip3 install -r requirements.txt
  • 런서버
$ python3 manage.py runserver 0:8080
  • 보안 그룹에 인바운드룰 추가

  • settings.py 수정
ALLOWED_HOSTS = [
    ".ap-northeast-2.compute.amazonaws.com"
]
  • uwsgi 패기지 설치
$ source ~/myvenv/bin/activate
$ pip3 install uwsgi
  • (로컬컴퓨터 )manage.py 있는 폴더로 가서 .config 폴더 생성, 그 안에 uwsgi 폴더 생성
$ ls
db.sqlite3       manage.py        requirements.txt
main             mysite
$ mkdir .config
$ cd .config
$ mkdir uwsgi
  • uwsgi 폴더에 mysite.ini 생성
[uwsgi]
chdir = /srv/django-deploy-test/ # 프로젝트 폴더 경로
module = mysite.wsgi:application # mysite에 .wsgi 파일 이름 적기 
home = /home/ubuntu/myvenv/ # 가상환경 경로
 
uid = ubuntu
gid = ubuntu
 
http = :8080
 
enable-threads = true
master = true
vacuum = true
pidfile = /tmp/mysite.pid
logto = /var/log/uwsgi/mysite/@(exec://date +%%Y-%%m-%%d).log
log-reopen = true
  • (서버컴퓨터) 깃풀 받고, logoto 폴더 생성
$ sudo mkdir -p /var/log/uwsgi/mysite
  • 소유주 변경
$ sudo chown -R ubuntu:ubuntu /var/log/uwsgi/mysite/
  • 서버 실행
$ sudo /home/ubuntu/myvenv/bin/uwsgi -i /srv/django-deploy-test/.config/uwsgi/mysite.ini
  • 로ㄱ보기
sudo cat /var/log/uwsgi/mysite/2020-03-15.log

nginx 연결

$ sudo apt-get install nginx
  • nginx 유저 선언
$ sudo vi /etc/nginx/nginx.conf
user ubuntu; # user을 ubuntu로 변경
worker_processes auto;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;
 
events {
        worker_connections 768;
        # multi_accept on;
}
 
http {
 
        ##
        # Basic Settings
        ##
.... 중략

esc + :wq로 탈출

  • (로컬컴퓨터) .config 폴더 안의 nginx 폴더 생성, 그 안에 mysite.conf 파일 생성
server {
    listen 80;
    server_name *.compute.amazonaws.com;
    charset utf-8;
    client_max_body_size 128M;
 
    location / {
        uwsgi_pass  unix:///tmp/mysite.sock;
        include     uwsgi_params;
    }
}
  • 포트 80 변경으로 인한 mysite.ini 수정
[uwsgi]
chdir = /srv/django-deploy-test/
module = mysite.wsgi:application
home = /home/ubuntu/myvenv/
 
uid = ubuntu
gid = ubuntu
# 밑 세줄 변경
socket = /tmp/mysite.sock
chmod-socket = 666
chown-socket = ubuntu:ubuntu
 
enable-threads = true
master = true
vacuum = true
pidfile = /tmp/mysite.pid
logto = /var/log/uwsgi/mysite/@(exec://date +%%Y-%%m-%%d).log
log-reopen = true
  • uswgi 항시 켜두기 위한 .config/uwsgi/ 에 uwsgi.service 파일 생성(경로 수정만 하면 됨)
[Unit]
Description=uWSGI service
After=syslog.target
 
[Service]
ExecStart=/home/ubuntu/myvenv/bin/uwsgi -i /srv/django-deploy-test/.config/uwsgi/mysite.ini
 
Restart=always
KillSignal=SIGQUIT
Type=notify
StandardError=syslog
NotifyAccess=all
 
[Install]
WantedBy=multi-user.target
  • 깃푸시 이후, 서버컴퓨터 깃 풀, uwsgi.service를 데몬에 등록하기 위해 /etc/systemd/system/ 에 링크를 걸기
$ sudo ln -f /srv/django-deploy-test/.config/uwsgi/uwsgi.service /etc/systemd/system/uwsgi.service
  • 데몬 새로고침
$ sudo systemctl daemon-reload
  • uwsgi 서비스를 위한 restart
$ sudo systemctl enable uwsgi
$ sudo systemctl restart uwsgi
  • django 내 nginx 파일을 nginx 어플리케이션에 등록하기 위해 등록 경로로 파일 복사
$ sudo cp -f /srv/django-deploy-test/.config/nginx/mysite.conf /etc/nginx/sites-available/mysite.conf
  • 등록 경로에 복사된 설정 파일을 sites-enables에도 링크
$ sudo ln -sf /etc/nginx/sites-available/mysite.conf /etc/nginx/sites-enabled/mysite.conf
  • sites-enables 폴더 안의 default 파일 삭제
$ sudo rm /etc/nginx/sites-enabled/default
  • 데몬 새로고침, 다시실행
$ sudo systemctl daemon-reload
$ sudo systemctl restart uwsgi nginx
  • 인바인드룰에 80포트 추가

  • 포트 없이 접속 시도

static 파일 설정

  • settings.py에 static 경로 추가
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
  • 깃 푸시이후 서버컴퓨터 풀, 그 이후 명령어, static 폴더 생김
$ python3 manage.py collectstatic
 
130 static files copied to '/srv/django-deploy-test/static'.
$ ls
db.sqlite3  main  manage.py  mysite  requirements.txt  static
  • (로컬컴퓨터) mysite.conf 수정
server {
    listen 80;
    server_name *.compute.amazonaws.com;
    charset utf-8;
    client_max_body_size 128M;
 
    location / {
        uwsgi_pass  unix:///tmp/mysite.sock;
        include     uwsgi_params;
    }
 
    location /static/ {
        alias /srv/django-deploy-test/static/;
    }
}
  • 서버컴퓨터 풀 이후 nginx에 등록 이후 재부팅
$ sudo cp -f /srv/django-deploy-test/.config/nginx/mysite.conf /etc/nginx/sites-available/mysite.conf
$ sudo ln -sf /etc/nginx/sites-available/mysite.conf /etc/nginx/sites-enabled/mysite.conf

$ sudo systemctl daemon-reload
$ sudo systemctl restart uwsgi nginx

 

 

Django 서비스 AWS로 배포하기 - [4] nginx 연결하기

Django 서비스 AWS로 배포하기 - [1] 프로젝트 준비와 AWS 서버 대여 Django 서비스 AWS로 배포하기 - [2] github과 프로젝트 업로드 Django 서비스 AWS로 배포하기 - [3] uWSGI 연결하기 사용자의 브라우저를 통

nerogarret.tistory.com

 

'etc' 카테고리의 다른 글

[GoLang] 잊지 말아야 할 것들  (0) 2023.08.21
SQL 서브쿼리 연습  (0) 2023.04.25
SQL 정리  (0) 2023.04.23
AWS 1주차  (0) 2023.01.12
새 토이 프로젝트 구상  (0) 2022.08.15
Comments