
Na samym końcu wpisu Migracja z hostingu na VPS poinformowałem iż w kolejnym, bądź kolejnych wpisach postaram się opisać problemy wynikłe z migracji na własny hosting. A konkretnie rzecz ujmując: na {{VPS}}. Ciężko było mi właściwie nazwać to, z czym miałem problem, bo w niektórych przypadkach są to tak podstawowe problemy, że każdy powinien się z nimi uporać. Mimo wszystko jakoś trzeba to zrobić.
By uprościć życie sobie i innym, postanowiłem stworzyć ten (bądź te) wpis/y. Całość opisuję na przykładzie systemu CentOS 5.x wersja 32 bitowa. Nie gwarantuję zatem iż na innych systemach rozwiązanie problemów i uruchomienie {{VPS|VPSa}} będzie takie samo.
Aktualizacja systemu i zmiana strefy czasowej
Aktualizacja jest zawsze pierwszą rzeczą, jakiej dokonuję po czystej instalacji systemu. Nie grzebiemy póki co w repozytoriach i korzystamy z oficjalnych repozytoriów systemu.
yum clean all yum update
Po aktualizacji systemu do najnowszej wersji (w dniu pisania tego wpisu była to wersja 5.6) bierzemy się za zmianę strefy czasowej. W moim przypadku była to strefa czasowa USA.
cp /usr/share/zoneinfo/Europe/Warsaw /etc/localtime
Powyższe polecenie kopiuje ustawienia strefy czasowej Warszawy i nadpisuje aktualne systemowe ustawienia. Po operacji tej pasuje uruchomić ponownie system.
Dodanie i modyfikacja repozytoriów
Ja obecnie korzystam z repozytoriów RPMForge, podstawowych, testowych, dostarczonych przez community, oraz repozytoriów EPEL (głównie ze względu na nowsze wersje programów).
Zainstalowanymi repozytoriami można w prosty sposób zarządzać z poziomu katalogu: /etc/yum.repos.d/
Ok, przejdźmy do modyfikacji istniejących repozytoriów.
nano /etc/yum.repos.d/CentOS-Base.repo
W sekcji [centosplus] oraz [contrib] zamieniamy enabled=0 na enabled=1. Zapisujemy. Następnym krokiem jest dodanie repozytoriów RPMForge oraz Testowych CentOSa. Pozostając w katalogu wykonujemy kolejno polecenia:
wget http://dev.centos.org/centos/5/CentOS-Testing.repo wget http://packages.sw.be/rpmforge-release/rpmforge-release-0.5.2-2.el5.rf.i386.rpm rpm --import http://apt.sw.be/RPM-GPG-KEY.dag.txt rpm -i rpmforge-release-0.5.2-2.el5.rf.*.rpm rm -f rpmforge-release-0.5.2-2.el5.rf.*.rpm nano CentOS-Testing.repo //zamieniając wartość enabled=0 na enabled=1 yum clean all yum update
Instalacja Webmina
Z racji na fakt iż lubię sobie upraszczać życie, zdecydowałem się na wykorzystanie Webmina do zarządzania swoim serwerem. Nie chcę kłamać iż sam go znalazłem. Polecił mi go administrator Hostineuro z czego jestem bardzo zadowolony. Panel wprawdzie nie jest zbyt intuicyjny, ale większość rzeczy, które musiałbym robić spod palca, wyklikam.
By zainstalować Webmina dodajemy jego repozytoria, oraz importujemy klucz. Następnie instalujemy jak zwykły program.
Przechodząc do katalogu /etc/yum.repos.d/ tworzymy plik webmin.repo (touch webmin.repo, lub nano webmin.repo). Edytując plik dodajemy poniższą zawartość:
[Webmin] name=Webmin Distribution Neutral #baseurl=http://download.webmin.com/download/yum mirrorlist=http://download.webmin.com/download/yum/mirrorlist enabled=1
Kolejnym etapem jest zaimportowanie i dodania klucza do repozytoriów, oraz instalacja Webmina.
wget http://www.webmin.com/jcameron-key.asc rpm --import jcameron-key.asc rm -f jcameron-key.asc yum clean all yum update yum install webmin
Instalujemy niezbędne programy
Niezbędne – do uruchomienia WordPressa, bowiem to na nim w głównej mierze się skupiam. Do tego celu potrzebować na pewno będziemy {{PHP}}, bazę {{MySQL}}, oraz serwer {{Apache_(serwer)|Apache}}. Dodatkowo chcemy by nasz blog miał możliwość przesyłania plików na serwer za pomocą {{PHP}}, a nie chcemy dawać mu uprawnień roota, bądź {{chmod|chmodów}} 777 na katalogi. Zainstalować więc należy również odpowiedni moduł do tego.
yum install php php-cli mysql-server php-mysql httpd mod_suphp php-gd php-mcrypt
Konfiguracja suPHP
Moduł suPHP dostarcza interesującą funkcjonalność. Dzięki niemu skrypty {{PHP}} mogą być wykonywane z uprawnieniami danego użytkownika. I tym sposobem, jeśli nasza strona www jest w katalogu /home/strona, a właścicielem jest użytkownik strona, to z jego uprawnieniami (po prawidłowym skonfigurowaniu) będą wykonywane skrypty. Dzięki temu nie musimy zmieniać {{chmod|CHMODów}} katalogów na 777 – wystarczy 755.
Potrzebujemy zmodyfikować zawartość dwóch plików. Najpierw zajmiemy się komentowaniem wszystkiego w pliku /etc/httpd/conf.d/suphp.conf. Komentujemy (poprzez dodanie hasha „#” na początku linii) tam wszystko prócz dwóch linii:
LoadModule suphp_module modules/mod_suphp.so
suPHP_Engine off
Przechodzimy następnie do edycji pliku /etc/suphp.conf. Tam musimy zmodyfikować również dwie linie i to de facto ostatnie. Końcówka pliku powinna wyglądać tak:
[handlers] ;Handler for php-scripts x-httpd-php="php:/usr/bin/php-cgi" ;Handler for CGI-scripts x-suphp-cgi="execute:!self"
Jak widzicie, dodane zostały cudzysłowie, oraz ścieżka do /usr/bin/php-cgi, zamiast samego php.
service restart httpd
Teraz jeśli będziemy tworzyć stronę, a będziemy chcieć by korzystała ona z modułu suPHP, to w konfiguracji virtualhosta musimy dodać poniższą informację:
suPHP_Engine on suPHP_UserGroup uzytkownik grupa AddHandler x-httpd-php .php .php3 .php4 .php5 suPHP_AddHandler x-httpd-php
Przykładowy virtualhost wyglądać powinien tak:
<VirtualHost *:*> DocumentRoot /home/katalog/ ServerName example.com suPHP_Engine on suPHP_UserGroup katalog katalog AddHandler x-httpd-php .php .php3 .php4 .php5 suPHP_AddHandler x-httpd-php <Directory "/home/katalog/"> allow from all Options +Indexes </Directory> </VirtualHost>
Konfiguracja Apache i iptables
Pozostały nam do zrobienia dwie rzeczy. Konfiguracja {{Apache_(serwer)|Apache’a}}, by obsługiwał poprawnie .htaccess i akceptował wprowadzane tam zmienne, oraz zabezpieczenie serwera firewallem.
Pierwszą rzecz zrobimy poprzez modyfikację /etc/httpd/conf/httpd.conf. Interesuje nas linia 293, w której wpisujemy: AllowOverride All
Jeśli jednak chodzi o iptables, wykonujemy kolejno polecenia z {{shell|shella}} z uprawnieniami roota:
iptables -A INPUT -s 127.0.0.1 -j ACCEPT iptables -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT iptables -A INPUT -p tcp -m tcp --dport 443 -j ACCEPT iptables -A INPUT -p tcp -m tcp --dport 10000 -j ACCEPT iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT iptables -P INPUT DROP iptables -P FORWARD DROP iptables -P OUTPUT ACCEPT service iptables save service iptables restart
Dzięki temu odblokowujemy z zewnątrz tylko porty dla http, https, ssh, oraz dla webmina. Dodatkowo odrzucamy wszelkie inne połączenia, na inne porty, jak i również zezwalamy na akceptację połączeń, które my zainicjowaliśmy.
To powinno być wszystko :). Krótko, zwięźle i na temat. Nie chciałem się rozdrabniać nad tym ;).
dzieki za cenne wskazowki – szczegolnie jak zainstalowac webmina :)
mialbym ogromna prosbe: czy jest opcja abys umiescil na blogu poradnik jak posiadac na VPS rownoczesnie dwie (lub wiecej) dzialajace rozne wersje PHP?
obecnie pracuje na VPS CentOS 5.3 z domyslnie zainstalowanym PHP 5.2.17 jako Apache Handler. Nie moge rozgryz jak doinstalowac wersje PHP 5.3 i to mimu masy poradnikow w Google :)
Niestety czesc moich aplikacji wymaga 5.2.17 a inne juz 5.3.
Bede wdzieczny za pomoc.
A nie możesz po prostu zainstalować PHP5.3? Po co Ci dwie wersje PHP to nie bardzo rozumiem. Może spróbuj samo PHP5.3 zainstalować i sprawdzić czy aplikacje będą działać – powinny imo.
Tak jak wspomnialem: czesc moich aplikacji wymaga 5.2.x a inne juz 5.3.x. Obie te wersje nie sa ze soba kompatybilne.
Udalo mi sie juz zainstalowac 5.3.10 jako FastCGI + php-fpm, ale na VirtualHost. Jak odpalam strone z poziomu konsoli „lynx…”, to phpinfo() pokazuje ladnie 5.3.10, teraz tylko nie wiem jak wymusic ta wersje na podpietej domenie – najlepiej, zeby bylo to sterowane poprzez .htaccess.
Aha. Nie sprawdzałem nigdy, bo nie miałem takiej potrzeby. Z tego co teraz wyszukałem to w .htaccess dla plików php musisz odpowiednio handlera ustawić (tak jak pisałeś).
Np. dla głównej domeny (htaccess dla niej)
A dla subdomen
Aczkolwiek nie wiem na ile to zadziała – w życiu nie miałem potrzeby sprawdzania tego. Jedyny handler z jakiego korzystam to suphp.
Zeby uzywac tych handlerow, to najpierw wlasnie trzeba odpowiednio zainstalowac i ustawic PHP jako serwery CGI :)
I wlasnie tutaj wracamy do podstawy problemu :)