JD's Blog: no, Scrubs non c'entra proprio niente.

Hosting gratuito Django (e non solo) con DB PostgreSQL e accesso SSH

alwaysdata.comNei mesi scorsi mi son trovato a dover realizzare un sito in Django, un framework open source per lo sviluppo di applicazioni web, scritto in linguaggio Python, seguendo il pattern Model-View-Controller. Devo dire di essere rimasto favorevolmente stupito da questo framework, veramente semplice e potente.

Uno dei più grandi inconvenienti è però la carenza quasi totale di hosting gratuiti (e il prezzo generalmente elevato di quelli a pagamento).
Dopo svariate ricerche su google sono incappato in quello che credo essere l’unico hosting gratuito di Django per ora esistente: www.alwaysdata.com.

Essendo l’unico servizio ad offrire free hosting non mi aspettavo grandi cose. Mi sono però dovuto ricredere alla grande. L’azienda francese offre infatti il supporto a tutte le principali versioni di Django  (1.0.2 e SVN compresa), oltre ad accesso SSH 😯, database PosgreSQL e dominio di terzo livello!

Ma ecco in dettaglio cosa offre il pacchetto gratuito:

  • Spazio su disco: 10 MB (non è tanto ma meglio di niente… Comunque basta hostare i file di grandi dimensioni altrove ;))
  • Traffico mensile: 1 GB
  • Memoria: 40 MB
  • PHP 5 con  php.ini personalizzabile
  • Python 2.4 e 2.5
  • Ruby 1.8.6
  • Perl 5.8.8
  • Supporto a Django (0.90, 0.91.3, 0.95.4, 0.96.3, 1.0, 1.0.1, 1.0.2, SVN)
  • Supporto a Ruby on Rails
  • MySQL 5.0
  • PostgreSQL 8.3 et PostGIS
  • Numero di database illimitato
  • phpMyAdmin e phpPgAdmin
  • Supporto IMAP(S), POP3(S), SMTP(S)
  • Dominio di terzo livello su alwaysdata.net
  • Completo accesso SSH (vim, emacs, gcc, mutt, lynx, etc)
  • Uptime > 99,9 %
  • Accesso FTP, SFTP, WebDAV
  • Supporto tramite ticket 7 giorni su 7

Portare il mio progetto sviluppato interamente in locale su alwaysdata.com è stato semplicissimo. Mi sono limitato ad eseguire una rapida ricerca nel wiki dell’azienda dove ho trovato le istruzioni passo passo in francese. Mi sono preso la briga di tradurre la sezione del wiki relativa a Django per chi non masticasse bene la lingua dei cugini d’oltralpe:

Importare una applicazione Django

Primo passo

Innanzi tutto è necessario creare una directory public nella radice del vostro progetto. All’interno va creato il file django.fcgi contenente il seguente codice python:

#!/usr/bin/python
import os, sys

_PROJECT_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.insert(0, _PROJECT_DIR)
sys.path.insert(0, os.path.dirname(_PROJECT_DIR))

_PROJECT_NAME = _PROJECT_DIR.split('/')[-1]
os.environ['DJANGO_SETTINGS_MODULE'] = "%s.settings" % _PROJECT_NAME

from django.core.servers.fastcgi import runfastcgi
runfastcgi(method="threaded", daemonize="false")

Vanno poi dati i diritti di esecuzione al file (tramite SSH : chmod +x django.fcgi).

Secondo passo

Sempre all’interno della directory public, creare un file .htaccess contenente:

AddHandler fcgid-script .fcgi
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ django.fcgi/$1 [QSA,L]

Terzo passo

Questo passo è necessario solo se si utilizza l’interfaccia di amministrazione di Django.

Sempre all’interno della directory public, creare un link simbolico che punta ai file media dell’admin Django:

ln -s /var/lib/python/django/1.0.2/django/contrib/admin/media/ media

Rimpiazzate eventualmente 1.0.2 con la versione di Django che utilizzate.

Quarto passo

Per garantire la sicurezza dei vostri file e permettere all’amministrazione Django di funzionare, questo passo è obbligatorio.

Dall’interfaccia d’amministrazione alwaysdata, fate puntare il vostro sottodominio verso la directory public del vostro progetto.

Ad esempio, se il vostro progetto è in /home/myaccount/www/myproject dovete impostare la directory di destinazione del vostro dominio myaccount.alwaysdata.net in modo che punti verso /myproject/public.

Alla fine

L’albero delle directory dovrà assomigliare a questo:

myproject/
    __init__.py
    manage.py
    public/
        django.fcgi
        .htaccess
        media/
    settings.py
    urls.py
    myapp/
        views.py
        models.py

Connettersi tramite SSH

Per prima cosa dovete abilitare il vostro account SSH (per questioni di sicurezza è disattivato di default):
Nell’interfaccia di amministrazione selezionare Accès distant > SSH. Cliccate sull’icona « Modifier » e selezionate « Activer », per finire cliccate su « Modifier ».

Per effettuare una connessione da terminale è sufficiente digitare il comando sottostante (sostituite myaccount con il nome del vostro account):

ssh myaccount@ssh.alwaysdata.com

Se necessario è possibile accedere tramite SSH anche da interfaccia web.

I programmi disponibi sono parecchi:

  • editors : emacs, vim, nano…
  • development: gcc, autoconf, automake, binutils, bison, flex, doxygen, make, cvs, subversion, bazaar, git, mercurial, darcs…
  • internet : mutt, fetchmail, slrn, lynx, curl…

Connettersi tramite FTP

I dati per accedere tramite FTP sono i seguenti:

  • Server Host: ftp.alwaysdata.com
  • Porta: 21
  • User: Il nome dell’utente FTP, di defaut è il nome del vostro account
  • Password: la password associata all’utente FTP, di défaut è la password utilizzata durante l’isctrizione.