.

[Python] Ubuntu+ Django + Gunicorn + Nginx + Postgres

by 담배맛구마

CentOS Ubuntu + Django + Gunicorn + Nginx + Postgres


ㅇ ㅈ ㄷ ㅇ !





1. Setting Ubuntu Server 16.04


Image : https://www.ubuntu.com/download/server


1) 어... 인터페이스가 그냥 안잡히네

sudo nano /etc/network/interfaces

auto ens33
iface ens33 inet static
	address x.x.x.x
	netmask x.x.x.x
	gateway x.x.x.x
	dns-nameservers 8.8.8.8 168.126.63.1


2) Minimal로 깔아서 ssh 서버도 없네

sudo apt-get install openssh-server


3) 필요한거 다깔아보자

sudo apt-get install python3-pip python3-dev virtualenv
sudo apt-get install postgresql postgresql-contrib libpq-dev
sudo apt-get install nginx

Python3-dev는 Python관련되서 컴파일 할때 쓰는 헤더 같은 정보(#include <Python.h> 요런거)



2. Postgres 9.5.7


postgresSQL 설치하면 posergres 계정이 자동생성됨


1) postgres 계정으로 psql 실행해서 기본적인 설정하자

sudo -u postgres psql
CREATE DATABASE 데이터베이스이름;
CREATE USER 계정명 WITH PASSWORD 'password';
ALTER ROLE 계정명 SET client_encoding TO 'utf8';
ALTER ROLE 계정명 SET default_transaction_isolation TO 'read committed';
ALTER ROLE 계정명 SET timezone TO 'UTC';
GRANT ALL PRIVILEGES ON DATABASE 데이터베이스이름 TO 계정명;




3. Python - Django


1) virtualenv으로 환경 만들고 사용하기

virtualenv -p python3 경로명
source 경로명/env/bin/activate

아래부터는 activate를 실행한 상태로 진행해야 함


2) Django Gunicorn psycopg2를 설치하자

pip3 install django gunicorn psycopg2

psycopg2는 Django와 PostgresSQL과의 Adapter기능


3) Django 프로젝트를 생성

django-admin startproject 프로젝트명


4) Setting.py 수정 (Database 및 Static 디렉토리 수정)


# setting.py
DATABASES = {
    'default': {
		'ENGINE'  : 'django.db.backends.postgresql_psycopg2',
		'NAME'    : '데이터베이스명',
		'USER'    : '유저명',
		'PASSWORD': '유저패스워드명',
		'HOST' : 'localhost',
		'PORT' : '',
	}
}
STATIC_ROOT = os.path.join(BASE_DIR, 'static/')


5) Database 마이그레이션

./manage.py migrate
Operations to perform:
  Apply all migrations: admin, auth, contenttypes, sessions
Running migrations:
  Applying contenttypes.0001_initial... OK
  Applying auth.0001_initial... OK
  Applying admin.0001_initial... OK
  Applying admin.0002_logentry_remove_auto_add... OK
  Applying contenttypes.0002_remove_content_type_name... OK
  Applying auth.0002_alter_permission_name_max_length... OK
  Applying auth.0003_alter_user_email_max_length... OK
  Applying auth.0004_alter_user_username_opts... OK
  Applying auth.0005_alter_user_last_login_null... OK
  Applying auth.0006_require_contenttypes_0002... OK
  Applying auth.0007_alter_validators_add_error_messages... OK
  Applying auth.0008_alter_user_username_max_length... OK
  Applying sessions.0001_initial... OK


6) Static 파일들을 아까 Setting.py에서 정의한 경로로 모으기

manage.py collectstatic




4. Gunicorn


1) 시스템 서비스에 등록해서 자동으로 실행되게끔!

sudo vim /etc/systemd/system/gunicorn.service
[Unit]
Description=gunicorn daemon
After=network.target

[Service]
User=실행할 유저명
Group=www-data
WorkingDirectory=디렉토리경로
ExecStart=gunicorn경로 --access-logfile - --workers 3 --bind unix:프로젝트경로/socket.sock 프로젝트명.wsgi:application

[Install]
WantedBy=multi-user.target
sudo systemctl start gunicorn
sudo systemctl enable gunicorn




5. Nginx


1) Gunicorn으로 프록시 타도록 설정!

sudo nano /etc/nginx/sites-available/프로젝트명
server {
    listen 80;
    server_name HOST헤더에찍힐IP나도메인;

    location = /favicon.ico { access_log off; log_not_found off; }
    location /static/ {
        root Static디렉토리경로;
    }

    location / {
        include proxy_params;
        proxy_pass http://unix:프로젝트경로/socket.sock;
    }
}
sudo ln -s /etc/nginx/sites-available/프로젝트명 /etc/nginx/sites-enabled
sudo nginx -t
sudo systemctl restart nginx

안된다면 방화벽설정보기 ufw 같은 암덩어리가 있을수도



참조

https://www.digitalocean.com/community/tutorials/how-to-set-up-django-with-postgres-nginx-and-gunicorn-on-ubuntu-16-04

반응형

블로그의 정보

정윤상이다.

담배맛구마

활동하기