Migracja na VPS i problemy z nią związane

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 VPSa będzie takie samo.

Aktualizacja systemu i zmiana strefy czasowej

[info]Nie ulega wątpliwości iż są to bardzo błahe problemy i dość oczywiste. Ja osobiście chciałem wiedzieć o której godzinie co się dzieje, ale wg mojego lokalnego czasu, a nie obliczać jeszcze, która to godzina na serwerze była.[/info]

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

[warn]Bez dodania odpowiednich repozytoriów nie będziemy w stanie zainstalować choćby takich programów jak IRSSI z którego do niedawna jeszcze korzystałem, czy choćby PHP w wersji 5.2<.[/warn]

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

[info]Do panelu logujemy się poprzez http://<ip serwera>:10000 korzystając z danych użytkownika root. Później istnieje możliwość utworzenia certyfikatu serwera by logować się szyfrowanym połączeniem.[/info]

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. 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ó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ó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’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 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 ;).


Komentarze

5 odpowiedzi na „Migracja na VPS i problemy z nią związane”

  1. Awatar ruppon

    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.

    1. 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.

      1. Awatar ruppon

        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.

        1. 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)

          AddHandler x-httpd-php5.3 .php

          A dla subdomen

          AddHandler x-httpd-php5.2 .php

          Aczkolwiek nie wiem na ile to zadziała – w życiu nie miałem potrzeby sprawdzania tego. Jedyny handler z jakiego korzystam to suphp.

          1. Awatar ruppon

            Zeby uzywac tych handlerow, to najpierw wlasnie trzeba odpowiednio zainstalowac i ustawic PHP jako serwery CGI :)

            I wlasnie tutaj wracamy do podstawy problemu :)

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *