local 설정
$ sudo vi /etc/default/locale
vi 명령을 통해 접근 후 아래 처럼 적습니다.
LC_CTYPE="en_US.UTF-8"
LC_ALL="en_US.UTF-8"
LANG="en_US.UTF-8"
기본 설정
$ sudo apt-get update
$ sudo apt-get dist-upgrade
$ sudo apt-get install python-pip
$ sudo apt-get install zsh
$ sudo curl -L http://install.ohmyz.sh | sh
$ sudo chsh ubuntu -s /usr/bin/zsh
기본 설정이 끝난 후 exit으로 연결 종료 후 재 연결을 하여 변경된 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 libpq-dev python-dev
$ curl -L https://raw.githubusercontent.com/yyuu/pyenv-installer/master/bin/pyenv-installer | bash
$ sudo vi ~/.zshrc
vi 명령을 통해 접근 후 맨 아래에 아래과 같이 적습니다.
...
export PATH="/home/ubuntu/.pyenv/bin:$PATH"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"
pillow ubuntu python 라이브라리 설치
$ sudo apt-get install python-dev python-setuptools
$ source ~/.zshrc
RSA Key를 이용한 Git 연결
https://help.github.com/en/github/authenticating-to-github/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent
$ ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
$ eval "$(ssh-agent -s)"
$ sudo vi ~/.ssh/config
아래와 같이 내용을 적습니다. Edit은 i
Host *
AddKeysToAgent yes
IdentityFile ~/.ssh/id_rsa
위의 내용을 복사 붙여 넣기를 한 후 esc -> : -> wq를 순서대로 눌러 저장합니다.
$ ssh-add -k ~/.ssh/id_rsa
복사가 잘 안될 경우 아래 명령어를 이용하여 파일을 연 후 복사를 하고 :wq -> enter를 눌러 저장합니다.
$ sudo vi ~/.ssh/id_rsa.pub
아래의 url에 접속합니다.
- Add SSH key를 누른 후 Title은 프로젝트 명 Key에는 복사한 값을 붙여 넣고 Add SSH Key를 합니다.
프로젝트 다운로드
아래의 주소는 자기 레파지토리의 주소로 변경합니다.
$ git clone <git@github.com:my_git_username/my_project.git>
$ cd my_project
pyenv 설정
$ pyenv install 3.7.3
$ pyenv virtualenv 3.7.3 mysite_venv
$ pyenv local mysite_venv
프로젝트 requirements 설치
$ pip install -r requirements.txt
gunicorn 설정
Gunicorn 설치
$ pyenv virtualenv 3.7.3 gunicorn
$ pyenv shell gunicorn
$ pip install gunicorn
gunicorn 서비스 파일 작성
$ sudo vi /etc/systemd/system/gunicorn.service
[Unit]
Description=gunicorn daemon
After=network.target
[Service]
User=ubuntu
Group=ubuntu
WorkingDirectory=/home/ubuntu/<project directory>
ExecStart=/home/ubuntu/.pyenv/versions/<pyenv name>/bin/gunicorn --access-logfile /srv/gunicorn/logs/gunicorn-access.log --error-logfile /srv/gunicorn/logs/gunicorn-error.log --access-logformat "{'remote_ip':'%(h)s','request_id':'%({X-Request-Id}i)s','response_code':'%(s)s','request_method':'%(m)s','request_path':'%(U)s','request_querystring':'%(q)s','request_timetaken':'%(D)s','response_length':'%(B)s'}" --worker-class=gevent --worker-connections=1000 --workers=4 --bind unix:/srv/gunicorn/gunicorn.sock config.wsgi:application
[Install]
WantedBy=multi-user.target
파일 서비스 연결
$ sudo systemctl daemon-reload
$ sudo systemctl enable gunicorn
소켓파일 경로 권한 설정
$ sudo chmod 777 /srv
$ take /srv/gunicorn
Nginx 관련 설정
Nginx 설치
$ sudo apt-get install software-properties-common
$ sudo add-apt-repository ppa:nginx/stable
$ sudo apt-get update
$ sudo apt-get install nginx
$ nginx -v
Nginx 설정 파일 작성
$ cd /etc/nginx/sites-available/
$ sudo vi mysite.conf
server {
server_name <server address>;
location /static/ {
root /home/ubuntu/my_project;
}
location /media/ {
root /home/ubuntu/my_project;
}
location / {
include proxy_params;
proxy_pass http://unix:/srv/gunicorn/gunicorn.sock;
}
listen 80;
}
$ sudo ln -sf /etc/nginx/sites-available/mysite.conf /etc/nginx/sites-enabled/mysite.conf
$ sudo rm /etc/nginx/sites-enabled/default
$ sudo systemctl restart gunicorn nginx