리눅스 서버 설정

AWS EC2 인스턴스를 생성해 작업했다.

$ sudo apt-get install language-pack-ko
$ sudo locale-gen ko_KR.UTF-8
$ sudo apt-get update

$ sudo apt-get install python-pip

# zsh
$ sudo apt-get install zsh
$ sudo curl -L http://install.ohmyz.sh | sh
$ sudo chsh ubuntu -s /usr/bin/zsh

# pyenv
$ sudo apt-get install -y make build-essential libssl-dev zlib1g-dev libbz2-dev \
libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev libncursesw5-dev xz-utils
$ curl -L https://raw.githubusercontent.com/yyuu/pyenv-installer/master/bin/pyenv-installer | bash
$ vi ~/.zshrc
# .zshrc
export PATH="/home/ubuntu/.pyenv/bin:$PATH"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"
$ source ~/.zshrc
$ sudo apt-get dist-upgrade
$ sudo shutdown -r now

장고 프로젝트

1. 디렉토리 생성

$ cd /
$ l
drwxr-xr-x   2 root root 4.0K Jan 13 14:20 srv

$ sudo chown -R ubuntu:ubuntu /srv/
$ l
drwxr-xr-x   2 ubuntu ubuntu 4.0K Jan 13 14:20 srv

$ cd srv
$ mkdir app

2. 서버 전송

$ l
total 24
drwxr-xr-x   9 limhm  staff   306B  3  6 11:40 .
drwxr-xr-x  21 limhm  staff   714B  3  6 11:17 ..
drwxr-xr-x   4 limhm  staff   136B  3  6 11:51 .conf-secret
drwxr-xr-x  12 limhm  staff   408B  3  6 12:09 .git
-rw-r--r--   1 limhm  staff   2.7K  3  6 11:40 .gitignore
drwxr-xr-x   8 limhm  staff   272B  3  6 12:23 .idea
-rw-r--r--   1 limhm  staff    11B  3  6 11:21 .python-version
drwxr-xr-x   6 limhm  staff   204B  3  6 11:40 django_app
-rw-r--r--   1 limhm  staff    31B  3  6 11:29 requirements.txt


$ scp -r -i ~/.ssh/YOUR_KEY_PAIR.pem . ubuntu@YOUR_PublicDNS:/srv/app/

3. 서버 프로젝트 설정

$ pyenv install 3.6.0
$ pyenv virtualenv 3.6.0 ps
$ pip install  -r requirements.txt

uWSGI

1. 설치

$ pip install uwsgi

2. .ini 파일 작성

$ sudo mkdir /etc/uwsgi
$ sudo mkdir /etc/uwsgi/sites
$ sudo vi /etc/uwsgi/sites/app.ini
[uwsgi]
chdir = /srv/app/django_app
module = config.wsgi
home = /home/ubuntu/.pyenv/versions/ps

uid = ubuntu
gid = ubuntu

socket = /tmp/app.sock
chmod-socket = 666
chown-socket = ubuntu:ubuntu

enable-threads = true
master = true
vacuum = true
pidfile = /tmp/app.pid

3. 서비스 파일 작성

$ sudo vi /etc/systemd/system/uwsgi.service
[Unit]
Description=uWSGI Emperor service
After=syslog.target

[Service]
ExecPre=/bin/sh -c 'mkdir -p /run/uwsgi; chown ubuntu:ubuntu /run/uwsgi'
ExecStart=/home/ubuntu/.pyenv/versions/ps/bin/uwsgi --uid ubuntu --gid ubuntu --master --emperor /etc/uwsgi/sites

Restart=always
KillSignal=SIGQUIT
Type=notify
StandardError=syslog
NotifyAccess=all

[Install]
WantedBy=multi-user.target

4. uWSGI 재실행

$ sudo systemctl daemon-reload
$ sudo systemctl restart uwsgi

$ cd /tmp
$ l
# app.pid, app.sock 확인
-rw-r--r--  1 ubuntu ubuntu    6 Oct 17 04:37 app.pid
srw-rw-rw-  1 ubuntu ubuntu    0 Oct 17 04:37 app.sock

Nginx

1. 설치

$ sudo apt-get install nginx

2. 서버 설정 파일 작성

$ cd /etc/nginx/sites-available
$ touch app
$ sudo vi app
server {
  listen 80;
  server_name *.compute.amazonaws.com;
  charset utf-8;
  client_max_body_size 128M;

  location / {
    uwsgi_pass unix:///tmp/app.sock;
    include uwsgi_params;
  }
}

3. 심볼릭 링크 생성

$ cd /etc/nginx/sites-enabled
$ sudo ln -s ../sites-available/app .

4. Nginx 재실행

$ sudo systemctl restart nginx