Pylons, DreamHost i Virtual Python
Wiem, że zacznam może od końca ale myślę, że wielu osobom przyda się instrukcja jak uruchomic Pylons na DreamHoście.
Przewodnik ten jest w dużej części oparty na tym wpisie: “A tale of Pylons, Python and FastCGI on DreamHost”.
Jeżeli chcesz założyć konto na DreamHoście możesz przed płatnością podać kod: PYPLANET, który da Ci zniżkę w wysokości 60USD a jednocześnie DreamHost przekaże nam 37 USD na hosting pod różne projekty (między innymi tego bloga i django.pl). Kończymy z reklamami i zaczynamy.
Po pierwsze w panelu administracyjnym w zakładce “domains -> manage domains” musisz ustawić domenę (lub subdomenę), która będzie obsługiwała FCGI. W naszym przypadku będzie to sandbox.pypla.net
Ważne: jeden użytkownik systemowy, którym ma uruchamiać procesy FCGI powinien mieć tylko jedną domenę/subdomenę.
Przykład: użytkownik pyplanet, który obsługuje domenę pypla.net (na której działa aplikacja FCGI, czyli procesy o nazwie dispatch.fcgi - tylko tej nazwy DreamHost nie zabija gdy długo chodzą) nie powinien obsługiwać również subdomeny np sandbox.pypla.net, pod którą ma działać inna aplikacja FCGI. Jeżeli w tej kwestii jednak się mylę proszę poprawcie mnie.
Mamy już użytkownika i domenę. Logujemy się na niego używając SSH (na Windowsie możemy użyć puTTY)
-
ssh username@host
W moim przypadku:
-
ssh sandbox_pyplanet@sandbox.pypla.net
W katalogu głównym tworzymy katalog bin. sciągamy skrypt, który zainstaluje nam niezależną wersję Pythona:
-
mkdir ~/bin
-
wget -P ~/bin http://peak.telecommunity.com/dist/virtual-python.py
-
python2.4 ~/bin/virtual-python.py
-
rm ~/bin/virtual-python.py
Teraz sprawmy by nasz lokalny Python stał się na tym koncie domyślny:
-
echo "export PATH=~/bin:$PATH" >> .bash_profile
-
source .bash_profile
Teraz potrzebujemy setuptools:
-
wget -P ~/bin http://peak.telecommunity.com/dist/ez_setup.py
-
python ~/bin/ez_setup.py
-
rm ~/bin/ez_setup.py
Jeżeli powyższe przeszło bez problemów w konsoli mamy dostępne polecenie easy_install.
Instalujemy Pylons:
-
easy_install Pylons
Teraz moglibyśmy stworzyć nowy projekt Pylons ale zamiast tego uruchomimy QuickWiki:
-
easy_install QuickWiki
Generujemy plik konfiguracyjny naszego Wiki:
-
cd ~
-
paster make-config QuickWiki wiki.ini
Edytujemy wiki.ini i zmieniamy:
-
[server:main]
-
use = egg:Paste#http
-
host = 0.0.0.0
-
port = 5000
na:
-
[server:main]
-
use = egg:PasteScript#flup_fcgi_thread
-
host = 0.0.0.0
-
port = 5000
Teraz powinniśmy stworzyć bazę danych i wyedytować ten wiersz:
-
sqlalchemy.dburi = postgres://username:password@localhost/quickwiki_test
Uwaga: Miałem problemy z używaniem SQLite’a więc radzę użyć MySQLa.
Wpis powinien wyglądać mniej więcej tak:
-
sqlalchemy.dburi = mysql://uzytkownik:haslo@twoj_host/nazwa_bazy_danych
Synchronizujemy aplikację (automatycznie zostaną stworzone odpowiednie tabele w bazie):
-
paster setup-app wiki.ini
Wszystko jest prawie gotowe.
Jesteśmy w momencie gdie mogą powstać pewne problemy.
Rozpoczniemy od zalecanej konfiguracji z użyciem Flupa, z która niestety mogą być problemy na DreamHoście. Poniżej opiszę konfigurację alternatywną.
Flup:
-
easy_install Flup
-
vim ~/sandbox.pypla.net/dispatch.fcgi
Plik dispatch.fcgi powinien wyglądać mniej więcej tak. Pierwszy wiersz tego pliku powinien zawierać bezwzględną scieżkę instalacji Virtual Pythona #!/home/username/bin/python. Podobnie wygląda kwestia pliku wiki.ini;
-
#!/home/sandbox_pyplanet/bin/python
-
from paste.deploy import loadapp
-
from flup.server.fcgi import WSGIServer
-
app = loadapp("config:/home/sandbox_pyplanet/wiki.ini")
-
server = WSGIServer(app)
-
server.run()
Upewniamy się, że prawa dostępu są prawidłowe:
-
chmod 755 ~/sandbox.pypla.net/dispatch.fcgi
Sprawmy by Apache przekierowywał automatycznie wszystkie odwołania do dispatch.fcgi
-
AddHandler fastcgi-script .fcgi
-
RewriteEngine On
-
RewriteBase /
-
RewriteRule ^(dispatch.fcgi/.*)$ - [L]
-
RewriteRule ^(.*)$ dispatch.fcgi/$1 [L]
Jeżeli mamy szczęście :) wchodząc na http://sandbox.pypla.net/dispatch.fcgi powinniśmy zobaczyć stronę główną naszej aplikacji.
Routes nadal będą robić odwołania do dispatch.fcgi. Możemy to naprawić w ten sposób
Jeżeli jednak opcja z Flupem nie działa alternatywnie ściągamy skrypt fcgi.py:
-
wget -P ~/lib/python2.4/site-packages http://svn.saddi.com/py-lib/trunk/fcgi.py
Sprawiamy by nasz plik dispatch.fcgi wyglądał tak:
-
#!/home/sandbox_pyplanet/bin/python
-
from paste.deploy import loadapp
-
from fcgi import WSGIServer
-
app = loadapp("config:/home/sandbox_pyplanet/wiki.ini")
-
server = WSGIServer(app)
-
server.run()
Jeżeli macie pomysł jak ulepszyć ten poradnik, komentujcie.



5. June, 2007 at 23:30
Przy zakładaniu konta w Dreamhost polecam kod PROMOCODE4POLAND - jego użycie przy zakupei konta powoduje spadek ceny konta do magicznych 7 złotych!!!
Kto z polskich hosterów jest w stanie to pobić?
Pozdrawiam