O django-fagungis permite que você configure e implante facilmente seu projeto django em seu servidor linux
O que é?
Django-Fagungis é um projeto original do Denis Darii, disponível no Pypi para instalação via pip. A idéia do projeto é simples: automatizar o deploy de projetos Django para servidores com acesso root, utilizando o Fabric, uma biblioteca e ferramenta de linha de comando em Python (2.5-2.7) que usa o protocolo SSH para o deploy de aplicações e realização de tarefas administrativas no sistema, não restrita a projetos Python.
Porém, nesse artigo, não vamos usar a versão original do Django-Fagungis. Em vez dela, usaremos um fork feito por Damian Moore.
Por isso, a instalação não será feita diretamente pelo pip, mas pelo repositório do Damian, em https://github.com/damianmoore/django-fagungis.
pip install git+https://github.com/damianmoore/django-fagungis.git
Pediu a senha de root? Que tal criar um virtualenv primeiro?
Atualmente, trabalho mais com Python3 que com Python2, porém o Fabric ainda não foi completamente portado para o Python3, por isso, sempre crio um virtualenv para trabalhar com ele.
No caso do Django-Fagungis creio que você tem um argumento a mais para usar um virtualenv: existem forks mais atuais que o projeto disponóvel no pip e possivelmente você vai querer testar diferentes versões.
Veja também: 74 sites que oferecem cursos online gratuitos com certificado
Então, vamos ao passo a passo.
Digamos que você queira criar um projeto chamado simpleproject, em Python3, em um virtualenv. (Eu vou usar ~/dev/simpleproject).
cd ~/dev/simpleproject
pip install –upgrade virtualenv
virtualenv –unzip-setuptools –python=/usr/bin/python3.4 .
source binactivate
pip install django
django-admin.py startproject simpleproject .
Oops, temos um problema, pois o fabric não suporta o Python3. Então criamos outro virtualenv para o django-fagungis. Você pode fazer isso em qualquer lugar. Nesse exemplo vou instalar em:
~/dev/tools/django-fagungis-damianmoore
Notem que deixei o nome do usuário github na pasta para lembrar que estou usando um fork.
Agora vou até a pasta e crio o virtualenv com Python2
mkdir -p ~/dev/tools/django-fagungis-damianmoore
cd ~/dev/tools/django-fagungis-damianmoore
virtualenv –unzip-setuptools –python=/usr/bin/python2.7 .
source binactivate
Pode ser que você não precise dizer o caminho do executável do python para a versão 2.7
E instalo o django-fagungis::
E copio o fabfile.py de exemplo para meu projeto:
Feito isso, podemos voltar ao projeto e editar o fabfile para as configurações do seu projeto. A configuração é bem simples e o arquivo é autoexplicativo.
Seu projeto deverá estar em um repositório, seja ele no bitbicket, github, ou qualquer lugar onde seu servidor possa acessá-lo (e com as devidas permissões). Nesse caso, vou supor que seu projeto está no github:
Mude
def example(): para def simpleproject():
E as variáveis env.
env.repository = ‘https://github.com/seu-username/simpleproject.git’
env.repository_type = ‘git’
env.hosts = [‘root@simpleproject.org’, ]
env.additional_packages = [‘git-core’,]
Agora, algumas configurações mais sensíveis:
O Django e o Nginx têm um tratamento particular para a url static, por isso a automatixação fica mais fácil se você não usar essa url no seu projeto.
Dê preferência para usar configurações como a seguir:
env.django_media_url = ‘/media/’
env.django_media_root = env.code_root
# django static url and root dir
env.django_static_url = ‘/assets/’
env.django_static_root = env.code_root
E, em seu settings.py
PROJECT_ROOT = Path(__file__).parent#…STATIC_URL = ‘/assets/’
STATIC_ROOT = PROJECT_ROOT.parent.child(‘assets’)
Se você escolheu usar Python3 no seu projeto, adicione o path para o python3 no virtenv_options
Estamos com tudo quase pronto. Você já pode tentar o deploy do seu projeto, mas para isso terá que ativar o virtualenv onde instalou o django-fagungis. Como esse processo é um pouco chato, criei um script para fazer isso e voltar para o seu projeto.
Crie um arquivo fagungis.sh e grave na pasta onde ele está instalado (~/dev/tools/django-fagungis-damianmoore em nosso caso)
SCRIPT_DIR=”$( dirname “$SCRIPT_NAME” )”source $SCRIPT_DIR/bin/activate
fab $1 $2PROJECT=”$(cd $(dirname $0) && pwd)”
source $PROJECT/bin/activate
E em seu .bashrc, adicione um alias para ele:
Agora é só ir até a raiz do seu projeto, onde está salvo o fabfile.py e digitar:
fagungis simpleproject deploy
lembre-se que para as mudanças no .bashrc terem efeito, você deverá recarregá-lo com source ~/.bashrc ou reabrir a janela do terminal
Se tudo correu certo, seu projeto já está rodando no servidor. Mas em alguns casos o Gunicorn tem um problema com a sintaxe antiga e você precisa ir no pacote do fagungis e mudar o último exec do script: ~/dev/tools/django-fagungis-damianmoore/lib/python2.7/site-packages/fagungis/scripts/rungunicorn.sh
A chamada do gunicorn deve ficar assim:
–user=%(django_user)s –group=%(django_user_group)s
–settings=%(django_project_settings)s
–bind=%(gunicorn_bind)s –log-level=%(gunicorn_loglevel)s
–log-file=%(gunicorn_logfile)s 2>>%(gunicorn_logfile)s
%(project)s.wsgi:application
Salve o arquivo e tente de novo.
fagungis simpleproject deploy
Se seu projeto Django tem a configuração simples, deve estar tudo funcionando. Não esqueça que se você usar pacotes como python_decouple, deverá enviar o settings.ini para a pasta do projeto no servidor.
O Django-Fagungis não cria automaticamente seu servidor de banco de dados, então ainda te resta esssa tarefa, caso ele fique no mesmo servidor do seu projeto. Mas isso fica para um próximo artigo do PythonClub.
Este artigo foi importado automaticamente por fazer parte do Planetário Dev. Quer fazer parte deste HUB de conteúdos? Faça parte do Planetário e veja as vantagens.
Não tem site ou blog? Seja um autor do site e ainda pode ser remunerado.
Leia também: