/deploy-command

uwsgi - nginx - postgresql

DEPLOY-COMMAND

apt-get essential

sudo apt-get update
sudo apt-get install build-essential
sudo apt-get install python3
sudo apt-get install python3-pip
sudo pip3 install --upgrade pip

clone with ssh

ssh-keygen -t rsa
cat /home/ubuntu/.ssh/id_rsa.pub
git clone ssh
sudo apt-get install virtualenv
cd /경로
virtualenv -p python3 venv
source venv/bin/activate
pip install -r requirements.txt

runserver Test

exit 해도 유지 : nohup python3 manage.py 0.0.0.0:8000 &
PID확인 : ps -ef
종료 : kill -9 [PID]

uwsgi

pip install uwsgi 
vi uwsgi.ini
uwsgi는 manage.py 같은 경로 기준
venv는 프로젝트 폴더/venv 기준
[uwsgi]
chdir=/home/ubuntu/{프로젝트 폴더}
module={프로젝트 내 파일이름}.wsgi:application
master=True
pidfile=/tmp/project-master.pid
vacuum=True
max-requests=5000
daemonize=/home/ubuntu/{프로젝트 폴더}/django.log
home=/home/ubuntu/{프로젝트 폴더}/venv
virtualenv=/home/ubuntu/{프로젝트 폴더}/venv
socket=/home/ubuntu/{프로젝트 폴더}/uwsgi.sock
chmod-socket=666

[uwsgi-example]
chdir=/home/ubuntu/SPNU_DP
module=TPNU.wsgi:application
master=True
pidfile=/tmp/project-master.pid
vacuum=True
max-requests=5000
daemonize=/home/ubuntu/SPNU_DP/django.log
home=/home/ubuntu/SPNU_DP/venv
virtualenv=/home/ubuntu/SPNU_DP/venv
socket=/home/ubuntu/SPNU_DP/uwsgi.sock
chmod-socket=666

uwsgi command

# django-nginx연결 업데이트
uwsgi --ini uwsgi.ini

nginx

nginx.conf, sites-enabled, sites-available은 서로를 참조함

sudo apt-get install nginx

nginx.conf 설정

sudo vi /etc/nginx/nginx.conf

http {
	upstream django {
        server unix:/home/ubuntu/프로젝트 폴더/uwsgi.sock;
        #.sock은 uwsgi.ini와 같은 경로
		# ex) server unix:home/ubuntu/{경로}/uwsgi.sock;
	}
	##
	#client_max_body_size 
    #server_name(도메인) 설정 가능 => ip접근 시 raise 400
    ...

uwsgi pass 및 static, media루트 설정

sudo vi /etc/nginx/sites-enabled/default
	location / {
		#
		#
		include /etc/nginx/uwsgi_params;
		uwsgi_pass django;
	}
	location /static/ {
		alias /home/ubuntu/{static경로}/static/;
	}
	location /media/ {
		alias https:/storage.s3.amazonaws.com/media/;
		# 위 경로는 s3사용했을 시 경로입니다!
		# django project 내부의 media폴더를 사용할 시 해당 경로를 입력하시면 됩니다! 
	}
    ...

tip : nginx에서 유효하지 않은 응답 넣어주기

server {
    listen 80 default_server;
    return 444;
}

nginx Command

sudo service nginx start
sudo service nginx stop
sudo service nginx reload
sudo service nginx restart

postgresql

install

sudo apt-get update
sudo apt-get install libpq-dev
sudo apt-get install python3-psycopg2
sudo apt-get install postgresql

psql cli command

#관리자 계정 접근
sudo -u postgres psql

# root계정 비밀번호 설정
postgres=# ALTER USER postgres WITH ENCRYPTED PASSWORD 'password'
;

# user 생성
CREATE USER [username] WITH ENCRYPTED PASSWORD 'password';

# user 소유의 DB생성
CREATE DATABASE [db_name] OWNER [username];

# user에게 DB모든 권한 부여
GRANT ALL PRIVILEGES ON DATABASE [db_name] TO [username];

# 재시작
sudo /etc/init.d/postgresql restart

psql

# 데이터베이스 리스트 보기
\l

# 데이터베이스 접근
\c db_name

수정 및 배포

git pull
python manage.py collectstatic
migration or migrate
uwsgi --ini uwsgi.ini
sudo service nginx reload #nginx의 설정이 바뀌었을 때만