Tak to jest z tymi hostingami www że jak trzeba wybrać jakiś dla siebie to nie wiadomo co. Najlepiej jak był by tani i wydajny miał opcje backupu i żeby było wszystko zrobione z automatu. Sam ostatnio migrowałem się z jednego na drugi z powodu opłat a potem wybrałem jeszcze inny z powodu kłopotów technicznych a teraz testuje VPS który polecił mi użytkownik forum webhostingtalk.pl. Dokładnie chodzi o wirtualny serwer prywatny w DigitalOcean za 5$ miesięcznie.
Mi miesięczne rozliczenia bardziej pasują niż płacenie na raz ale okazuje się że w DO opłaty wynoszą 0.007$ za godzinę używania serwera. Co oznacza że np. mogę sobie kupić na godzinę serwerek potestować go i skasować. Ktoś może powiedzieć że, ale po co, testy można robić lokalnie na kompie. Tak można ale testową maszynę w DigitalOcean można postawić w 60 sekund z backupu lub obrazu serwera produkcyjnego. Co już jest dużą wygodą i oszczędnością czasu, nawet nie opłaca się zapisywać na kartce pomysłów bo maszyna już jest gotowa.
Ja zakupiłem sobie serwerek VPS w najniższej opcji 512MB ramu, 1 CPU, 20G HDD i 1TB transferu miesięcznie. Do wyboru miałem region w którym chcę go zainstalować (czyli maja ileś tam serwerowni do dyspozycji) i opcje automatycznego backupu za dodatkowego dolara. Obrazy/image serwera można robić tylko gdy jest wyłączony ale to i tak zajmuje tylko do 2 min a po zrobieniu maszyna automatycznie wstaje sama. A w opcji za 1$ backupy robią się co dwa dni bez restartu. System jaki można wybrać to albo czysty ubuntu, debian, centos, coreos, fedora albo już z zainstalowanymi aplikacjami np. wordpress, LAMP, LEMP, Magentoo, Ruby. Można wybrać maszynę z obrazu lub wcześniej wykonanego backupu. I robisz tak w kółko stawiasz, kasujesz, stawiasz, kasujesz. Co ciekawe jeśli robimy to w obrębie jednego datacenter to kasując produkcyjną starą, maszynę i stawiając inna przetestowaną n.p z innego obrazu dostaniemy ten sam IP. Co ogólnie mogło by być ryzykowne ale przy takiej akcji nie trzeba nawet DNS zmieniać. Taki sam schemat jest przy przenoszeniu się na wyższy plan np 2GB ramu i 2CPU. 5 min i maszyna jest szybsza bez modyfikacji danych. I to jest właśnie wirtualizacja. Trzeba wspomnieć o ważnej funkcji którą jest VNC/KVM dzięki której w przypadku zablokowania dostępu do serwera zawsze z panelu mogę to odkręcić bo mam dostęp do konsoli.
DigitalOcean ma program poleceń w którym polecający dostaje 25$ a kupujący 10$ na start. Więc zachęcam do rejestrowania z mojego linku digitalocean.com będę mógł utrzymać techfreak na 5 mc za free lub więcej ;)
Testy
Dobra jak coś polecam to wypada jakieś testy wykonać czy coś :) Na pierwszy test poszły dyski, DO chwali się że ma tylko SSD. No i mają, wynik 440MB/sec.
root@srv0:~# hdparm -tT /dev/disk/by-label/DOROOT /dev/disk/by-label/DOROOT: Timing cached reads: 14590 MB in 2.00 seconds = 7302.70 MB/sec Timing buffered disk reads: 1322 MB in 3.00 seconds = 440.12 MB/sec
Co mnie zaskoczyło to transfery z domu do serwera na poziomie 80Mbps, od razu zainstalowałem iperf.
root@dell:~# iperf -c 178.62.177.47 ------------------------------------------------------------ Client connecting to 178.62.177.47, TCP port 5001 TCP window size: 43.8 KByte (default) ------------------------------------------------------------ [ 3] local 172.18.10.105 port 60975 connected with 178.62.177.47 port 5001 [ ID] Interval Transfer Bandwidth [ 3] 0.0-10.0 sec 95.8 MBytes 80.2 Mbits/sec
Restart serwera w 10 sekund, nawet pinga nie przerwało.
64 bytes from 178.62.177.47: icmp_seq=762 ttl=50 time=50.3 ms 64 bytes from 178.62.177.47: icmp_seq=763 ttl=50 time=73.2 ms 64 bytes from 178.62.177.47: icmp_seq=764 ttl=50 time=176 ms 64 bytes from 178.62.177.47: icmp_seq=765 ttl=50 time=36.2 ms 64 bytes from 178.62.177.47: icmp_seq=766 ttl=50 time=35.3 ms 64 bytes from 178.62.177.47: icmp_seq=767 ttl=50 time=41.5 ms 64 bytes from 178.62.177.47: icmp_seq=768 ttl=50 time=33.8 ms
Czas na wydajność samego serwera www. Ja postanowiłem postawić NGINX + PHP-FPM + WP Super Cache. To własnie Super Cache robi największą robotę bo tworzy statyczne pliki serwowanych stron. Przez co oszczędza CPU i MEM nie zaglądając do bazy i nie wykonując kodu PHP. Szczerze przetestowałem wiele opcji NGINX + memcache, memcached, fastcgi cache, ngx_pagespeed i jeszcze ileś innych opcji i przy takim małym serwerku opłaca się tylko zrobić NGINX +FPM + WP Super Cache lub W3 Total Cache na wordpressie. Wyniki jakie uzyskiwałem to ok nawet 190 obsłużonych zapytań na sekundę. Do testów użyłem Apache Bench poniżej jeden z wyników 201 req/ps.
root@dell:~# ab -k -c 200 -n 500 http://techfreak.pl/wyciagnie-wifi-ac-test-routera-archer-c7/ This is ApacheBench, Version 2.3 <$Revision: 1604373 $> Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ Licensed to The Apache Software Foundation, http://www.apache.org/ Benchmarking techfreak.pl (be patient) Completed 100 requests Completed 200 requests Completed 300 requests Completed 400 requests Completed 500 requests Finished 500 requests Server Software: nginx Server Hostname: techfreak.pl Server Port: 80 Document Path: /wyciagnie-wifi-ac-test-routera-archer-c7/ Document Length: 166 bytes Concurrency Level: 200 Time taken for tests: 2.477 seconds Complete requests: 500 Failed requests: 133 (Connect: 0, Receive: 0, Length: 133, Exceptions: 0) Non-2xx responses: 367 Keep-Alive requests: 367 Total transferred: 6059158 bytes HTML transferred: 5965590 bytes Requests per second: 201.84 [#/sec] (mean) Time per request: 990.876 [ms] (mean) Time per request: 4.954 [ms] (mean, across all concurrent requests) Transfer rate: 2388.65 [Kbytes/sec] received Connection Times (ms) min mean[+/-sd] median max Connect: 0 23 30.0 0 82 Processing: 36 678 912.3 172 2435 Waiting: 36 545 691.2 172 1850 Total: 36 701 930.1 172 2476 Percentage of the requests served within a certain time (ms) 50% 172 66% 298 75% 2084 80% 2149 90% 2341 95% 2370 98% 2380 99% 2444 100% 2476 (longest request)
Co dalej
Szczerze, strona teraz chodzi fajnie ale nie jestem przekonany do testowania tylko jednym narzędziem może za jakiś czas będzie nowy raport. Przede wszystkim techfreak.pl chodzi teraz płynniej, szybciej i nie jestem przycięty w żaden sposób na zasoby chociaż nie jest ich wiele. Jestem przygotowany na większy ruch który wystąpił np. dzięki temu wpisowi http://techfreak.pl/ukryta-karta-micro-sd-intenso-karcie-sd-platinet/. Przez cały dzień na stronie było ok 130 osób, 35 tyś wyświetleń na samym wykopie. Oczywiście serwer wyświetlał Resources Limited is Reached i lecieli z gogle cache. Po zainstalowaniu WP Super Cache było trochę lepiej. Dostawca hostingu odpisał że VPS’a mogę sobie kupić jak by co ;)
W sumie zauważyłem same plusy po przejściu na nowy serwer zwiększyła się liczba odwiedzin. Na PageSpeed strona dostaje 85 punktów na 100 i tym samym zielony kolorek gdzie wcześniej zawsze był czerwony.
Migracja wordpressa na VPS
Jeśli Ty tak samo jak ja chcesz przejść na VPS zgraj swój katalog WP i zrób eksport bazy. Poniżej pokażę jak skonfigurować NGINX i PHP-FPM i prę innych rzeczy na serwerze aby twoja strona mogła śmigać. System jaki wybrałem to Debian 7 Wheezy.
repo dotdeb.org
Przydało by się na serwerze aby mieć w miarę aktualne paczki php i serwera www. Aby to uzyskać trzeba dodać nieoficjalne repo dotdeb.org.
wget http://www.dotdeb.org/dotdeb.gpg sudo apt-key add dotdeb.gpg echo "deb http://packages.dotdeb.org wheezy all" >> /etc/apt/sources.list echo "deb-src http://packages.dotdeb.org wheezy all" >> /etc/apt/sources.list echo "deb http://packages.dotdeb.org wheezy-php55 all" >> /etc/apt/sources.list echo "deb-src http://packages.dotdeb.org wheezy-php55 all" >> /etc/apt/sources.list cat /etc/apt/sources.list aptitude update aptitude upgrade
Instalacja potrzebnych pakietów
aptitude install nginx mysql-server-5.5 php5-fpm php5-mysql
Mysql
Na początek można zająć się bazą i nie będzie potrzeby aby do niej wracać później. Według kolejności:
- logowanie
- tworzę bazę
- usera tech z hasłem freak
- nadaje uprawniania do bazy
- resetuje uprawniania
- wychodzę
mysql -u root -p CREATE DATABASE techfreak; CREATE USER 'tech'@'localhost' IDENTIFIED BY 'freak'; GRANT ALL PRIVILEGES ON techfreak . * TO 'tech'@'localhost'; FLUSH PRIVILEGES; quit;
Kończenie instalacji mysql
/usr/bin/mysql_secure_installation
Odpowiadamy na wszystko tak chyba że nie chcemy zmieniać hasła
Dump restore
W tym kroku przywracam bazę z kopi zapasowej starego serwera i podaje hasło.
mysql -h localhost -u tech -p techfreak < backup_db.sql.gz
DIR
Tworzę katalog którym będą leżały pliki html/wordpressa
mkdir /var/www/techfreak.pl
Kopiuje pliki wp do /var/www/techfreak.pl i nadaje uprawnienia
cd /var/www/ chown www-data:www-data -R * find . -type d -exec chmod 755 {} \; find . -type f -exec chmod 644 {} \;
WP-config
Zmień hasło, login i hosta do mysql w wp-config.php na te których użyłeś wcześniej.
nano /var/www/techfreak.pl/wp-config.php
GIT
Jak wiadomo cała konfiguracja składa się z plików i będę zmieniał je aby wszystko uruchomić. Najlepiej zrobić kopie ale zamiast tego można użyć wersjonowania. Czyli w przypadku problemów lub niepoprawnej konfiguracji zawsze można się cofnąć do wersji działającej. Jeśli nie chcesz tego robić możesz pominąć.
Wchodzę do katalogu etc i poleceniem init git zaczynam pracę w tym katalogu a następnie dodaje dwa katalogi z konfiguracjami: php5 i nginx, git status pokazuje jakie pliki zostały zmienione albo jakich brakuje. Git commit to zapisanie danej wersji z komentarzem.
cd /etc git init git add php5 nginx git status git commit -am "przed konfiguracja"
OPcache
Zalecane ustawienia można zobaczyć pod linkiem https://github.com/zendtech/ZendOptimizerPlus
sed -i ‚s/;opcache.enable=0/opcache.enable=1/g’ /etc/php5/fpm/php.ini
sed -i ‚s/;opcache.memory_consumption=64/opcache.memory_consumption=64/g’ /etc/php5/fpm/php.ini
sed -i ‚s/;opcache.max_accelerated_files=2000/opcache.max_accelerated_files=2000/g’ /etc/php5/fpm/php.ini
sed -i ‚s/;opcache.revalidate_freq=2/opcache.revalidate_freq=60/g’ /etc/php5/fpm/php.ini
sed -i ‚s/;opcache.fast_shutdown=0/opcache.fast_shutdown=1/g’ /etc/php5/fpm/php.ini
BONUS
Dodatkowo można sobie zaciągnąć pliczek opcache.php i wgrać go do katalogu głównego aby na stronie http://mojastrona.ołje/opcache.php zobaczyć statystyki i zużycie.
git
Przy okazji można zobaczyć jak działa wersjonowanie w git po wydaniu polecenia git diff w /etc
@@ -1837,7 +1837,7 @@ opcache.revalidate_freq=60 ;opcache.load_comments=1 ; If enabled, a fast shutdown sequence is used for the accelerated code -;opcache.fast_shutdown=0 +opcache.fast_shutdown=1 ; Allow file existence override (file_exists, etc.) performance feature. ;opcache.enable_file_override=0
Aby podejrzeć listę commit’ów wydaj polecenie git log
git log commit f4d4695b19accc8e373da6a082fbf3ffdb91c574 Author: root <root@d1stkfactory> Date: Wed Nov 26 21:12:17 2014 +0000 przed konfiguracja
Aby cofnąć się do jakiejś pożądanej konfiguracji wystarczy wydać polecenie git reset z numerem commitu.
git reset --hard f4d4695b19accc8e373da6a082fbf3ffdb91c574
Konfiguracja NGINX
Tworzę nowego vhosta na podstawie domyślnego:
cp /etc/nginx/sites-available/default /etc/nginx/sites-available/techfreak.pl
Wyłączam domyślną stronę:
rm /etc/nginx/sites-enabled/default
W pliku /etc/nginx/sites-available/techfreak.pl trzeba wykonać parę zmian.
Wskazać gdzie leżą pliki strony, zamień
root /usr/share/nginx/html; na root /var/www/techfreak.pl;
Dodaj do index index.php, zamień
index index.html index.htm; na index index.php index.html index.htm;
Dodaj nazwy serwera i zamień
server_name localhost; na server_name techfreak.pl www.techfreak.pl;
Wyłącz sekcje locations, zamineń:
location / { # First attempt to serve request as file, then # as directory, then fall back to displaying a 404. try_files $uri $uri/ =404; # Uncomment to enable naxsi on this location # include /etc/nginx/naxsi.rules; } na #location / { # First attempt to serve request as file, then # as directory, then fall back to displaying a 404. # try_files $uri $uri/ =404; # Uncomment to enable naxsi on this location # include /etc/nginx/naxsi.rules; # }
Dodaj na końcu:
include common/wpsc.conf; include common/wpcommon.conf; include common/locations.conf;
Ja też musiałem zacząć do jakiegoś przykładu i wsparłem się konfiguracją z programu easyengine który już w ogóle z automatu stawia za Ciebie wszystko i wspiera konfigurację pod WP Super Cache. Potrzebna jest ona z tego powodu że WPSC działa na module rewrite który kieruje od razu zapytania do statycznych plików.
Te trzy includy które własnie dodałeś to po kolei konfiguracja dla WP Super Cache, dostępy do katalogów wordpressa i innych. Trzeba je zaciągnąć wgetem.
cd /etc/enginx mkdir common
wget https://raw.githubusercontent.com/rtCamp/easyengine/master/config/nginx/common/locations.conf wget https://raw.githubusercontent.com/rtCamp/easyengine/master/config/nginx/common/wpsc.conf wget https://raw.githubusercontent.com/rtCamp/easyengine/master/config/nginx/common/wpcommon.conf
I wykonać parę zmian:
PHP-FPM domyślnie nasłuchuje na /var/run/php5-fpm.sock więc zmień z php.
sed -i 's/fastcgi_pass php;/fastcgi_pass unix:\/var\/run\/php5-fpm.sock;/g' /etc/nginx/common/wpsc.conf
w pliku /etc/nginx/common/locations.conf skasuj wszystko poniżej razem z Status pages
# Status pages #location /nginx_status { # stub_status on; # access_log off; # include common/acl.conf; #} ....
SSL
do pliku common/ssl.conf dodaj:
ssl_certificate /etc/nginx/ssl/certyfikat.crt; ssl_certificate_key /etc/nginx/ssl/certyfikat.key; ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
Ważne aby do certyfikat.crt dodać wszystkie root crt które dostało się wraz z certyfikatem dla domeny.
a w sites-available/techfreak.pl pod listen 80; dodaj:
listen 80; ## listen for ipv4; this line is default and implied listen 443 ssl; include common/ssl.conf;
Włączenie strony
ln -s /etc/nginx/sites-available/techfreak.pl /etc/nginx/sites-enabled/techfreak.pl
test Nginx’a
Odpal komendę nginx -t która sprawdza poprawność konfiguracji, jeśli wszystko jest ok to można go zrestartować.
service nginx restart
WP-start
Teraz można wejść na stronę zainstalować WP Super Cache i go włączyć. Na pewno będzie krzyczał że nie ma zainstalowanego mod_rewrite nie przejmuj się :)
Podstawy
Zainstaluj iptables i program do zapisywania i automatycznego przywracania przy starcie
apt-get install iptables-persistent
Wklej podstawowe reguły:
iptables -I INPUT 1 -i lo -j ACCEPT iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT iptables -A INPUT -p tcp --dport 22 -j ACCEPT iptables -A INPUT -p tcp --dport 80 -j ACCEPT iptables -A INPUT -p tcp --dport 443 -j ACCEPT iptables -P INPUT DROP iptables -P FORWARD DROP
Wyświetlanie reguł:
iptables -L iptables -L --line-numbers iptables -S
Kasowanie po numerach reguł:
iptables -D INPUT 4
Zapisywanie reguł:
iptables-save > /etc/iptables/rules.v4
Przydatny alias ipts do zapisywania reguł, zapisz go do .bashrc:
alias ipts="iptables-save > /etc/iptables/rules.v4" ipts
SSH
Wymień klucz prywatny z serwerem aby logować się bez hasła:
http://techfreak.pl/ssh-jak-logowac-sie-bez-hasla/
Wyłącz logowanie na hasło, masz przecież klucz:
W pliku /etc/ssh/sshd_config zmień PasswordAuthentication no
service ssh restart
Inne przydatne
Zainstaluj dodatek do wordpressa, EWWW Image Optimizer świetnie optymalizuje obrazy.
Przeczytaj
https://rtcamp.com/easyengine/
https://www.digitalocean.com/community/tutorials/an-introduction-to-securing-your-linux-vps
https://ewan.im/900/10-million-hits-a-day-with-wordpress-using-a-15-server
http://www.narga.net/recommended-nginx-configuration-high-traffic-wordpress/
https://www.digitalocean.com/community/tutorials/how-to-use-top-netstat-du-other-tools-to-monitor-server-resources#netstat
https://www.digitalocean.com/community/tutorials/how-to-install-linux-apache-mysql-php-lamp-stack-on-debian
Backup
Jak nie chcesz dawać dolca za backupy to rób je ręcznie. Nie no żartowałem kup to :)
Znalazłem ten skrypcik gdzieś w necie, robi backup plików, bazy i etc.
#!/bin/bash NOW=$(date +"%Y-%m-%d-%H%M") FILE="techfreak.$NOW.tar" BACKUP_DIR="/home/backup" WWW_DIR="/var/www/techfreak.pl/" DB_USER="twojuser" DB_PASS="twojehaslo" DB_NAME="twoja_nazwa_bazy" DB_FILE="techfreak.$NOW.sql" WWW_TRANSFORM='s,^var/www/techfreak.pl,www,' DB_TRANSFORM='s,^home/backup,database,' tar -cvf $BACKUP_DIR/$FILE --transform /etc/nginx/ /etc/php5/ tar -cvf $BACKUP_DIR/$FILE --transform $WWW_TRANSFORM $WWW_DIR mysqldump -u$DB_USER -p$DB_PASS $DB_NAME > $BACKUP_DIR/$DB_FILE tar --append --file=$BACKUP_DIR/$FILE --transform $DB_TRANSFORM $BACKUP_DIR/$DB_FILE rm $BACKUP_DIR/$DB_FILE gzip -9 $BACKUP_DIR/$FILE
FTP
Nie używaj ftp, wystarczy że masz ssh włączone które też obsługuje kopiowanie plików ale poprzez sftp.
No i zgraj ten backup ;)
scp twojlogin@twojadimena:/home/backup/backup.tar ~
DNS
Przy przechodzeniu na inny dns lub sprawdzaniu czy domena ma nowy IP użyj narzędzi.
Zobacz na jaki IP rozwiązuje nazwę twoje domena:
host -t a techfreak.pl
Sprawdź jaki masz ustawiony ttl i ile jeszcze czasu tobie zostało na zobaczenie nowego adresu:
dig +nocmd +noall +answer techfreak.pl
Sprawdź czy inne DNS na świecie widzą twoja domenę pod nowym adresem:
http://dnschecker.org/#A/techfreak.pl
Zawsze w /etc/hosts możesz wpisać IP aby szybciej nie czekając na DNS wejść na swoja nową stronę:
178.62.177.47 techfreak.pl 178.62.177.47 www.techfreak.pl
Koniec
Powyżej przedstawiłem podstawowa konfiguracje dzięki której szybko uruchomisz swoja stronę. Mam nadzieje że na początek się przyda. Jeśli masz jakieś propozycję lub porady to czekam na info w komentarzach. No i pamiętaj aby skorzystać z tego linku. Powodzenia!