Fazendo deploy de uma aplicação django em um VPS

A necessidade de fazer o deploy em um VPS se deve ao fato de que eu necessitava de um host OffShore para essa aplicação. Eu pessoalmente curto a pythonanywhere, sem dúvidas a melhor empresa pra django hosting. Mas como minha aplicação quebrava ou tinha chances de quebrar os termos de utilização, eu optei por procurar alternativas. Tentei a webpythonhost onde o uso da minha aplicação era aceitável, mas fiquei totalmente desapontado com o sistema. É simplesmente um cpanel(aquele q vc usa no php) que tenta facilitar o deploy de uma aplicação python, mas falha imensamente. Fora o fato de que você não pode olhar os logs que te ajudam a debugar uma aplicação. Para cada log você tem que abrir um ticket e pedir para eles informarem para você.

O que me sobrou foi a escolha de um VPS OffShore em Netherlands.

Eu nunca tinha feito um deploy do zero em um servidor linux. Comprei o VPS com debian 8 e fui pesquisar. Então vamos lá.

A própria documentação do django já ajuda muito:

Preparando o sistema

apt update && apt dist-upgrade # Atualizar o sistema

Instalando os requerimentos

apt install apache2 # Instalando o apache
apt install python3-pip python-dev build-essential # necessário
apt install libapache2-mod-wsgi-py3 # necessário
python3 -m pip install virtualenv # Instalando virtualenv
cd /var/www/ # Pasta raiz onde tudo vai acontecer
python3 -m virtualenv env # criando o enviroment
# Ativando o env
source env/bin/activate
# Instalando os modules necessários
pip install django==1.11

Eu estou assumindo que você está usando python3, já que deixei de usar python2 faz um tempo. Então tudo aqui é relacionado para python3.

Criando um projeto

Dentro da pasta /var/www/env/ crie uma pasta “src”

cd src && django-admin createproject myapp

A partir daqui é django então você sabe. Vamos pro apache2

Configurando o apache

Por default, o arquivo de configuração do apache fica localizado em

/etc/apache2/sites-available/000-default.conf

Com um editor no console de sua preferência, apague tudo o que estiver dentro. Eu curto o nano.

Vamos configurar:

<VirtualHost *:80>
ServerName localhost
ServerAdmin webmaster@localhost

Alias /static /var/www/env/src/static-root # diretorio do seu static
<Directory /var/www/env/src/static-root>
Require all granted
</Directory>

Alias /media /var/www/env/src/media-root # diretorio do seu media
<Directory /var/www/env/src/media-root>
Require all granted
</Directory>

<Directory /var/www/env/src/myapp/myapp> # diretorio raiz do seu projeto onde fica o wsgi.py
<Files wsgi.py>
Require all granted
</Files>
</Directory>

WSGIDaemonProcess myapp python-path=/var/www/env/src/myapp/:/var/www/env/lib/python3.4/site-packages
WSGIProcessGroup myapp
WSGIScriptAlias / /var/www/env/src/myapp/myapp/wsgi.py
WSGIPassAuthorization On

ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined

</VirtualHost>

Salve o arquivo e dê um: service apache2 restart

Tente acessar o ip no navegador e deve estar correndo tudo bem.

Configurando o domínio

No registrar do seu domínio, coloque dois entry do tipo A para o ip do VPS.

Um com www e outro sem o www.

Feito isso, espere propagar e agora você já tem sua aplicação rodando no vps e com domínio :)

Like what you read? Give Cpybit a round of applause.

From a quick cheer to a standing ovation, clap to show how much you enjoyed this story.