-
AWS Setting - EC2Server Side/AWS 2020. 1. 13. 18:10
AWS key를 ssh.config에 등록
# xxx.pem 파일을 .ssh 폴더에 위치시킨다. $ vim ~/.ssh/config Host linux_app HostName ec2-54-180-87-138.ap-northeast-2.compute.amazonaws.com User ubuntu IdentityFile ~/.ssh/jihoon_linux.pem # server 접속 $ ssh linux_app
EC2 주요 설치 목록 및 셋팅
apt-get update apt-get install nginx apt-get install vim apt-get install python3-dev python3-venv python3-pip # application 계정 useradd -b /home -m -s bin/bash <username>
-
-b: base directory(새로 등록한 유저의 홈 디렉토리를 /home으로 지정)
-
-m: 홈디렉토리 생성
-
-s: shell 설정
소유자 및 권한
usermod -a -G www-data <username> # source folder 소유자 및 권한 설정 chown -R <username>:www-data /var/www/<source folder> chmod -R g+w /var/www/<source folder>
chmod 옵션 설정
-
-R(recursive): 폴더 내의 하위 폴더까지 권한 부여
-
target(-u, -g, -o, -a): user, group, other, all
-
operator(+, -, =): 추가, 제거, 지정(기존 속성은 사라짐)
-
permission(r, w, x): 읽기, 쓰기, 실행
Nginx 및 uWSGI 설정
- 각 옵션이 무엇을 의미하는지 정리(예정)
# /var/www/<sourcefolder>/ini/uwsgi.ini [uwsgi] uid = <username> base = /var/www/<sourcefolder> home = %(base)/venv chdir = %(base) module = config.wsgi:application env = DJANGO_SETTINGS_MODULE=config.settings master = true processes = 5 socket = %(base)/run/uwsgi.sock logto = %(base)/logs/uwsgi.log chown-socket = %(uid):www-data chmod-socket = 660 vacuum = true
# /etc/systemd/system/uwsgi.service [Unit] Description = uWSGI Emperor service [Service] ExecStart = /var/www/<source folder>/venv/bin/uwsgi --emperor /var/www/<source folder>/ini User = <username> Group = www-data Restart = on-failure KillSignal = SIGQUIT Type = notify NotifyAccess = all StandardError = syslog [Install] WantedBy = multi-user.target
# /etc/nginx/sites-available/default(default setting) upstream updjango{ server unix:/var/www/<sourcefolder>/run/uwsgi.sock; } server { listen 80 default_server; listen [::]:80 default_server; index index.html index.htm index.nginx-debian.html; server_name _; location / { include /etc/nginx/uwsgi_params; uwsgi_pass updjango; } }
Gunicorn & Supervisor
Gunicorn
$ sudo apt-get update -y $ sudo apt-get install supervisor -y $ sudo service supervisor start # 가상화 (venv)$ pip install gunicorn $ /var/www/myproject/bin/gunicorn --workers 3 # 정상적인 output usage: gunicorn [OPTIONS] [APP_MODULE] gunicorn: error: No application module specified.
Supervisor: process 모니터링 프로그램
$ cd /etc/supervisor/conf.d/ $ vim /etc/supervisor/conf.d/myproject-gunicorn.conf [program:myproject_gunicorn] # supervisorctl에서 사용될 이름 user=root directory=/var/www/myproject/src/ command=/var/www/myproject/bin/gunicorn --workers 3 --bind unix:myproject.sock config.wsgi:application autostart=true autorestart=true stdout_logfile=/var/log/myproject/gunicorn.log stderr_logfile=/var/log/myproject/gunicorn.err.log
- [program:myproject_gunicorn]: 일반적으로 <projectname>_gunicorn으로 작성한다.
- sudo supervisorctl status <projectname>_gunicorn
- sudo supervisorctl start <projectname>_gunicorn
- sudo supervisorctl stop <projectname>_gunicorn
- sudo supervisorctl restart <projectname>_gunicorn
- supervisorctl == systemctl과 유사
- user=root: 접근권한 유저
- directory=/var/www/myproject/src/: 프로젝트 폴더
- command=...: 실행시킬 명령
- /var/www/myproject/bin/gunicorn --worker 3 : 작업자의 수 설정
- --bind unix:myproject.sock: directory에 설정된 socket에 연결
- home.wsgi:application: src/config/wsgi.py/application
- autostart: 서버 실행 시 gunicorn 실행
- autorestart: 서버 재 실행 시 gunicorn 실행
- stdout_logfile & stderr_logfile: 로그 파일 위치
# 반드시 로그 폴더 생성해야 함 $ mkdir /var/log/myproject/ # 초기화 $ sudo supervisorctl reread >> myproject_gunicorn: available $ sudo supervisorctl update >> myproject_gunicorn: added process group
Django 배포(Gunicorn)
# settings.py의 ALLOWED_HOSTS = ['*'] # 가상화 상태(venv)/var/www/myproject/src: pip install django==2.2 django-admin startproject config . # local ip localip=$(hostname -I | cut -f1 -d' ') echo $localip >> 172.31.43.59 # ->(private ip) # myproject.sock 확인 ls >>config manage.py myproject.sock systemctl daemon-reload systemctl reload nginx # gunicorn을 이용한 django 실행 gunicorn config.wsgi # gunicorn 설정 변경 후 재시작 supervisorctl restart myproject_gunicorn
SCP - local 과 server 간 파일 전송
# 로컬에서 EC2로 파일 전송 - scp <local-file> <ssh-config>:<EC2-directory> scp pemtest.txt testserver:/var/www/myproject/ # 파일 scp -r tempfolder testserver:/var/www/server_folder/ # 폴더 # EC2파일을 로컬로 전송 - scp <ssh-config>:<EC2-file> <local-directory> scp testserver:/var/www/myproject/pemtest.txt ./myproject/ # 파일 scp -r testserver:/var/www/server_folder ./local_foler/ # 폴더
'Server Side > AWS' 카테고리의 다른 글
Boto3 파일 업로드 & 다운로드- upload and download (0) 2020.01.15 Boto3 - 기본 설정 및 사용법 (1) 2020.01.13 -