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:
sudo su -
Rozpocząć należy od aktualizacji listy pakietów w systemie:
apt-get update apt-get upgrade
Instalujemy całą listę pakietów:
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):
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):
cd ~/ruby-1.8.7-p302 ./configure make make install
Teraz czas na najnowszą wersję Ruby:
cd ~/ruby-1.9.2-p0 ./configure make make install
Aktualizujemy RubyGems i zainstalowane gemy (dodatkowo instalujemy gem do sqlite3):
gem update --system gem update gem install sqlite3-ruby
Instalacja Railsów:
gem install rails --pre
Teraz potrzebujemy jeszcze serwer Thin (Mongrel to zło i nie działa poprawnie z pakietem Rails3+Ruby1.9.2):
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:
cd /var/www rails new mysite.pl chown -R www-data: mysite.pl
Przechodzimy do konfiguracji. Najpierw ustawiamy Thin:
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):
--- # 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:
ln -s /var/www/mysite.pl/config/thin.yml /etc/thin/mysite.pl.yml
Teraz przechodzimy do konfiguracji Apache’a.
Uaktywniamy wymagane moduły:
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ą:
<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:
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 🙂