segunda-feira, 22 de agosto de 2011

Servidor Django de baixo custo na kinghost

Há alguns meses contratei os serviços de hospedagem do kinghost pois precisava de um servidor somente para apresentar os resultados dos meus projetos (sem muitos acessos) e não queria me preocupar com todos os detalhes que evolvem as configurações de um servidor de produção no Linode por exemplo.

Os serviços do kinghost custam em torno de R$15 / mês e me atendem sem problema. (Essa também é uma boa opção para quem quer um servidor localizado fisicamente no Brasil.) Lembrando que escolhi esse plano e servidor pois quase não preciso de suporte (apenas para instalar alguns pacotes) fiz todas estas configurações estudando sozinho e não encontrei muito material a respeiro no kinghost.

No servidor:
  • CentOS
  • Python 2.4.3
    • Não precisei modificar
  • Django 1.0.4 final
  • Apache/2.2.3
  • mod_WSGI DAEMON MODE
  • SVN
    • Uso Mercurial (ou GIT)
  • Arquivos estáticos (poste abaixo)

    A versão python utilizada me atende sem problemas (creio que seja possível modificar via chamado).
      Para deploy e controle de versão eficientes deixei de lado o SVN e criei uma conta no Bitbucket que usa o Mercurial (O mesmo é possível usando Github e Git). Assim criei duas contas uma para mim e outra para o servidor quando finalizo uma versão local envio para o Bitbucket e depois atualizo (hg pull) no servidor realizando assim o deploy e o controle de versão.

      Boa sorte a todos!

      quinta-feira, 18 de agosto de 2011

      Django Pinax static css js corrigir links quebrados kinghost

      Continuando as configurações do kinghost se tudo o que está no poste anterior deu certo ainda há o problema dos arquivos estáticos para resolver.

      .../settings.py
       STATIC_URL = "/site_media/static/"  
       ...  
       ADMIN_MEDIA_PREFIX = posixpath.join(STATIC_URL, "admin/")  
      

      Nos aquivos dos templates
      .../base.html
       <link href="{{ STATIC_URL }}pinax/css/base.css" rel="stylesheet">  
      
      que aponta para:
       <link href="/site_media/static/pinax/css/base.css" rel="stylesheet">  
      

      Na pasta "home" no servidor há um arquivo chamado "www" que seria o "/" dos aquivos estáticos, logo se eu preciso de "/site_media/static/pinax/css/base.css" na aplicação crio um link simbólico "site_media -> /home/<seu_nome>/apps_wsgi/<nome_do_projeto>/site_media" (link site_media apontando para site_media dentro do meu projeto) dentro de "www".

      Exemplo:
       ~/www  
          /site_media -> /home/<você>/apps_wsgi/dev/site_media  
                    /static -> /home/<você>/pinax/pinax-dev/lib/python2.4/site-packages/pinax/media/default  
      

      No Admin.
      .../Base.html
       <link rel="stylesheet" type="text/css" href="{% block stylesheet %}{% load adminmedia %}{% admin_media_prefix %}css/base.css{% endblock %}" />  
      
      que aponta para:
       <link href="/site_media/static/admin/css/base.css" type="text/css" rel="stylesheet">  
      

      Logo dentro da pasta "~/www/site_media/static/" tenho que criar a pasta admin/ e apontar para os arquivos estáticos. Entre outras que também serão necessárias.

      Exemplo:
       ~/www/site_media/static  
                   /admin -> /home/<você>/pinax/pinax-dev/lib/python2.4/site-packages/django/contrib/admin/media/  
                   /css -> /home/<você>/pinax/pinax-dev/lib/python2.4/site-packages/pinax/projects/basic_project/media/css  
                   /js -> /home/<você>/apps_wsgi/dev/media/js  
                   /uni_form -> /home/<você>/pinax/pinax-dev/lib/python2.4/site-packages/uni_form/media/uni_form  
       ...  
      

      E assim por diante até que o console do Chrome ou o firebug não tenha mais erros 404.

      Fontes:
      Django static files - https://docs.djangoproject.com/en/dev/howto/static-files/

      domingo, 7 de agosto de 2011

      Como instalar Pinax 0.9 e Django 1.2.3 com virtualenv no kinghost

      Servidor Kinghost:
      • CentOS - Linux imia.kinghost.net Kernel 2.6.31
      • Python 2.4.3
      • Django 1.0.4 final
      • Apache/2.2.3 - Jan 15 2008 20:33:30
        • mod_WSGI DAEMON MODE

      Preciso modificar o Django para versão 1.2.3 para instalar o Pinax 0.9a (última versão).

      Instalando virtualenv:
       $ easy_install virtualenv  
      
      Criando um ambiente de desenvolvimento no virtualenv:
       $ python /home/<seu-nome>/apps_wsgi/.site-packages/virtualenv <seu-ambient> 

      Instalando PIL - Python Image Library
       $ easy_install PIL  
      

      Instalando Pinax 0.9 (versão de desenvolvimento):
       $ pip install Pinax  
      

      Entre no ambiente criado
       $ source <seu-ambient>/bin/activate  
      

      Escolha um dos projetos Pinax
       $ pinax-admin setup_project -l  
      

      Clone o projeto (clonando "social" no exemplo abaixo)
       $ pinax-admin setup_project -b social dev 

      Para esse exemplo chamei meu projeto de "dev" e logo depois o renomei para "_dev":
       $ mv dev _dev 

      Assim eu posso ir até o painel de controle e criar um projeto Django com o nome "dev" e após finalizado o processo de criação copiar o conteúdo da pasta "_dev" para "dev" aproveitando assim todas as configurações no servidor e do meu projeto Pinax.

      Para finalizar é preciso modificar o arquivo dev.wsgi:
       import os, sys  
       activate_this = '/home/<seu-nome>/pinax/pinax-dev/bin/activate_this.py'  
       execfile(activate_this, dict(__file__=activate_this))  
       paths=['/home/<seu-nome>/apps_wsgi',  
           '/home/<seu-nome>/apps_wsgi/dev/apps']  
       for path in paths:  
         if path not in sys.path:  
           sys.path.append(path)  
       os.environ['PYTHON_EGG_CACHE'] = '/home/<seu-nome>/apps_wsgi/.python-eggs'  
       os.environ['DJANGO_SETTINGS_MODULE']='dev.settings'  
       from django.core.handlers.wsgi import WSGIHandler  
       application=WSGIHandler()  
      

      Fontes:
      Pinax - http://pinaxproject.com/docs/dev/gettingstarted/
      Pinax Docs - http://pinaxproject.com/docs/dev/
      VirtualEnv - http://www.arthurkoziel.com/2008/10/22/working-virtualenv/
      WSGI - http://code.google.com/p/modwsgi/wiki/VirtualEnvironments