Ostatnio zainteresowałem się językiem programowania Ruby, a w szczególności frameworkiem Ruby on Rails i to w wersji 3.0[rc2].
Próbowałem w sieci odnaleźć prosty tutorial opisujący krok po kroku instalację samego Ruby 1.9.2, RoR w wersji 3.0 jak i serwera Mongrel/Thin w połączeniu z Apache2.
Nic ciekawego nie znalazłem, więc postawiłem napisać samemu.
Poniższy opis dotyczy świeżej instalacji Ubuntu Server 10.4, ale pod Debianem powinno również zadziałać.
Wszystkie komendy wykonujemy z prawami administratora systemu (root), tak więc albo od razu się na niego zalogujmy, albo z konta użytkownika, który posiada uprawnienia do sudo, wykonujemy polecenie:
1 | sudo su - |
Rozpocząć należy od aktualizacji listy pakietów w systemie:
1 2 | apt-get update apt-get upgrade |
Instalujemy całą listę pakietów:
1 | apt-get install build-essential libreadline-dev libncurses-dev zlib1g-dev libssl-dev libsqlite3-dev apache2 |
Pobieramy i rozpakowujemy najnowszą wersję Ruby (w chwili pisania tego tesktu jest to 1.9.2-p0 oraz 1.8.7-p302):
1 2 3 4 | wget ftp : //ftp .ruby-lang.org /pub/ruby/1 .9 /ruby-1 .9.2-p0. tar .gz wget ftp : //ftp .ruby-lang.org /pub/ruby/1 .8 /ruby-1 .8.7-p302. tar .gz tar zxvf ruby-1.9.2-p0. tar .gz tar zxvf ruby-1.8.7-p302. tar .gz |
Przechodzimy do katalogu ruby-1.8.7-p302 i kompilujemy Ruby 1.8.7 (jest wymagane przed przejściem do 1.9.2):
1 2 3 4 | cd ~ /ruby-1 .8.7-p302 . /configure make make install |
Teraz czas na najnowszą wersję Ruby:
1 2 3 4 | cd ~ /ruby-1 .9.2-p0 . /configure make make install |
Aktualizujemy RubyGems i zainstalowane gemy (dodatkowo instalujemy gem do sqlite3):
1 2 3 | gem update --system gem update gem install sqlite3-ruby |
Instalacja Railsów:
1 | gem install rails --pre |
Teraz potrzebujemy jeszcze serwer Thin (Mongrel to zło i nie działa poprawnie z pakietem Rails3+Ruby1.9.2):
1 2 3 | gem install thin thin install sudo /usr/sbin/update-rc .d -f thin defaults |
Przyszedł czas na stworzenie pierwszej strony (oczywiście wszystkie wystąpienia mysite.pl zmieniamy na odpowiednią domenę) i ustawienie odpowiednich praw:
1 2 3 | cd /var/www rails new mysite.pl chown -R www-data: mysite.pl |
Przechodzimy do konfiguracji. Najpierw ustawiamy Thin:
1 | thin -a 127.0.0.1 -p 4000 -c /var/www/mysite .pl -e production -d -u www-data -g www-data -s 5 -C /var/www/mysite .pl /config/thin .yml -O config |
To polecenie wygeneruje nam plik /var/www/mysite.pl/config/thin.yml z taką oto zawartością (komentarzy tam jednakże nie będzie):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | --- # katalog z naszą aplikacją chdir: /var/www/mysite.pl # środowisko uruchomieniowe environment: production # adres na którym będzie działał Thin # (potrzebny podczas ustawiania Apache'a) address: 127.0.0.1 # pierwszy port port: 4000 timeout: 30 log: log/thin.log pid: tmp/pids/thin.pid max_conns: 1024 max_persistent_conns: 512 require: [] wait: 30 daemonize: true user: www-data group: www-data # ilość instancji serwerów Thin # porty, na których Thin się uruchomi to (wcześniej podany) # 4000 i kolejne (w tym przypadku: 4000, 4001, 4002, 4003, 4004) servers: 5 # przy tej opcji ustawionej na true podczas restartu Thin # nie wyłączy od razu wszystkich serwerów tylko będzie się restartował jeden po drugim onebyone: true |
Jeszcze tylko podlinkowanie pliku konfiguracyjnego do katalogu Thina, aby ten mógł automatycznie uruchomić serwery:
1 | ln -s /var/www/mysite .pl /config/thin .yml /etc/thin/mysite .pl.yml |
Teraz przechodzimy do konfiguracji Apache’a.
Uaktywniamy wymagane moduły:
1 2 3 4 | a2enmod rewrite a2enmod proxy a2enmod proxy_http a2enmod proxy_balancer |
i tworzymy plik z konfiguracją naszego hosta /etc/apache2/sites-available/mysite.pl z taką oto zawartością:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | <VirtualHost *:80> ServerName mysite.pl # ścieżka do katalogu "public" w naszym projekcie DocumentRoot /var/www/mysite.pl/public LogLevel warn ErrorLog /var/log/apache2/mysite.pl-error.log CustomLog /var/log/apache2/mysite.pl-access.log combined # zgodnie z konfiguracją Thina podajemy tutaj lokalne serwery <Proxy balancer://thin_mysite> BalancerMember http://127.0.0.1:4000 BalancerMember http://127.0.0.1:4001 BalancerMember http://127.0.0.1:4002 BalancerMember http://127.0.0.1:4003 BalancerMember http://127.0.0.1:4004 </Proxy> <Proxy *> Order deny,allow Allow from all </Proxy> <Directory "/var/www/mysite.pl/public"> Options FollowSymLinks AllowOverride None Order allow,deny Allow from all </Directory> RewriteEngine On RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-f RewriteRule ^/(.*)$ balancer://thin_mysite%{REQUEST_URI} [P,QSA,L] </VirtualHost> |
Teraz już tylko należy uaktywnić naszą stronę, uruchomić Thina i zrestartować Apache’a:
1 2 3 | a2ensite mysite.pl /etc/init .d /thin start /etc/init .d /apache2 restart |
To już koniec. Pod adresem http://mysite.pl (czyli pod Twoją domeną) powinna pojawić się taka witryna:
czyli czas zabrać się do pracy!
Powodzenia!
Ładnie. Take tutoriale zawsze są przydatne.
Skąd wziąłeś komendę „install” dla Thina skoro obsługuje tylko: start, stop, restart, config? Z Mongrelem to nie tyle problem Rails co Ruby w wersji 1.9.2 (przynajmniej u mnie na Mac OS-X nie chce się skompilować).
Thin ma konkurenta: Unicorn (http://unicorn.bogomips.org). Poza tym, nie prościej zainstalować Passengera? (http://www.modrails.com)
A co do Ruby to też polecam RVM (http://rvm.beginrescueend.com/)
W temacie Thin’a: http://code.macournoyer.com/thin/usage
Ogólnie dopiero startuję w temacie RoR, więc dzięki za wskazanie innych ścieżek.
Hej,
dzięki za super post. Bardzo mi pomógł!
Dodałbym tylko jeszcze jedną komendę aby wyłączyć default’ową stronę startową apache:
a2dissite default
Pozdrawiam
Dzięki, twój opis instalacji i konfiguracji bardzo się przydał.
Cieszy mnie to.
Już za rogiem czeka druga część opisująca apache/nginx + passenger.
Ja tam wolę unicorn, jakoś czuję że szybciej działa. Oczywiście bezpośrednio na porcie 80