Witam was 🙂
Dziś poniekąd “odgrzewany kotlet”, ponieważ o Wordpresie i konfiguracji na serwerze VPS/dedykowanym, wpis już był – ale z okazji premiery systemu Ubuntu 16.04 który natywnie wspiera PHP 7, oraz z racji dostępności darmowych certyfikatów SSL z Let’s Encrypta postanowiłem o tym napisać.
WordPress już od jakiegoś czasu obsługuje PHP 7 więc instalacja tego CMS’a nie wymaga żadnych dodatkowych zmian w kodzie.
Dostosowany poradnik działa na Ubuntu 16.04 LTS, przy współpracy z ostatnim stabilnym wydaniem (w dniu publikacji wpisu) serwera www – nginx/1.10.0, bazy danych MariaDB 10.0.x która natywnie już jest wspierana przez system Ubuntu.
Dodatkiem i jest dopisek odnośnie instalacji certyfikatu SSL, co pomaga na pewno w pozycjonowaniu witryny jak i zabezpiecza was, o swoje hasło do zaplecza WWW dzięki szyfrowanemu połączeniu.
Certyfikat SSL odnawiać się będzie co 2 miesiące, wielkie podziękowania należą się twórcą projektu Let’s Encrypt, o tej rewolucji już pisałem jakiś czas temu.
Sposób przygotowany na instancji PublicCloud w OVH, oczywiście można użyć również na serwerze VPS SSD/Cloud czy serwerach dedykowanych.
Na początek przygotowanie serwera:
1. Połączenie do serwera/VPS/instancji:
w przypadku serwera PublicCloud, łącze się do systemu za pomocą klucza SSH,
ssh ubuntu@149.202.184.47 -i .ssh/id_rsa2
2. Przygotowanie systemu i instalacja niezbędnych pakietów:
sudo -i apt-get update apt-get upgrade -y [code lang=shell]apt install curl wget nano \ apt-transport-https software-properties-common dpkg-dev \ build-essential zlib1g-dev libpcre3 libpcre3-dev unzip \ curl libcurl4-openssl-dev libossp-uuid-dev git autotools-dev \ debhelper dh-systemd libexpat-dev libgd-dev libgeoip-dev \ libluajit-5.1-dev liblua5.1-0-dev libmhash-dev libpam0g-dev \ libperl-dev libxslt1-dev po-debconf libssl-dev \ libpython-stdlib libpython2.7-minimal libpython2.7-stdlib \ python python-minimal python2.7 python2.7-minimal -y
Konfiguracja użytkownika www (ustatwienie hasła będzie jednoznaczne z ustawieniem hasła do FTP!)
adduser www
3. Serwer www – nginx/1.10.0
curl http://repo.linuxiarz.pl/NGINX-1.10.0-custom.tar.gz | tar xz cd nginx*; dpkg-buildpackage -b cd .. dpkg -i nginx-common_1.*.deb nginx_1.*.deb nginx-extras_1.*.deb nginx-doc_1.*.deb rm /etc/nginx/conf.d/*
Serwer www jest gotowy, przejdźmy zatem do instalacji PHP, skonfigurowanie serwera nginx wykonamy później.
4. Instalacja PHP 7
apt -y install php7.0-fpm php7.0-mysql php7.0-curl \ php-pear php-imagick php7.0-imap php7.0-mcrypt php-memcache php7.0-pspell \ php7.0-recode php7.0-sqlite3 php7.0-tidy php7.0-xmlrpc php7.0-xsl \ php7.0-gd php7.0-intl php7.0-mbstring php-gettext \ php-apcu php-soap imagemagick postfix
4.1 Konfiguracja
rm /etc/nginx/php.conf wget http://pliki.linuxiarz.pl/05-2016/php.conf -O /etc/nginx/php.conf rm /etc/php/7.0/fpm/php.ini wget http://pliki.linuxiarz.pl/05-2016/php.ini -O /etc/php/7.0/fpm/php.ini wget http://pliki.linuxiarz.pl/05-2016/php7pool-wp.conf -O /etc/php/7.0/fpm/pool.d/php7pool-wp.conf systemctl restart php7.0-fpm
5. Instalacja serwera FTP – vsftpd oraz jego konfiguracja:
apt-get install vsftpd -y rm /etc/vsftpd.conf wget http://pliki.linuxiarz.pl/08-2015/ftp/vsftpd.conf -O /etc/vsftpd.conf; touch /etc/vsftpd.chroot_list wget http://pliki.linuxiarz.pl/08-2015/ftp/private.zip; unzip private.zip; mv private/* /etc/ssl/private; rm private.zip
Domyslnie włączona jest opcja FTP przez TLS, aby to wyłączyć – w pliku /etc/vsftpd.conf zmień na ssl_enable=NO
6. Instalacja bazy MariaDB i jej konfiguracja
apt install -y mariadb-server mariadb-client
6.1 Definicja zabezpieczeń MySQL’a/MariaDB (ustawienie hasła dla użytkownika “root”)
mysql_secure_installation
Po zdefiniowaniu hasła “root” – zapamiętaj/zanotuj je!
Do poprawnego działania PHP z bazą MariaDB musisz jeszcze włączyć połączenia TCP do bazy MariaDB:
echo "update user set plugin='' where User='root'; flush privileges;" | mysql --defaults-file=/etc/mysql/debian.cnf mysql
Gotowa konfiguracja i start serwera:
rm /etc/mysql/my.cnf wget http://pliki.linuxiarz.pl/08-2015/my.cnf -O /etc/mysql/my.cnf service mysql restart
7. Instalacja PHPMyAdmin’a
cd /opt/; wget https://github.com/phpmyadmin/phpmyadmin/archive/STABLE.zip unzip STABLE*.zip mv phpmy* pma mkdir -p /var/lib/php/session; chmod 4777 /var/lib/php/session rm STABLE* wget http://pliki.linuxiarz.pl/05-2016/pma-ubuntu16.conf -O /etc/nginx/conf.d/pma.conf ## Użytkownik phpMyAdmin w bazie - zaloguj sie swoim hasłem root i uwórz bazę mysql -u root -p CREATE DATABASE phpmyadmin; CREATE USER 'phpmyadmin'@'localhost' IDENTIFIED BY 'K.XNe1-.M!e-3e1G'; GRANT ALL PRIVILEGES ON phpmyadmin.* TO phpmyadmin@localhost IDENTIFIED BY 'K.XNe1-.M!e-3e1G'; quit mysql -u phpmyadmin -p'K.XNe1-.M!e-3e1G' phpmyadmin < /opt/pma/sql/create_tables.sql wget http://pliki.linuxiarz.pl/05-2016/pma.txt -O /opt/pma/config.inc.php
Dostęp do PHPMyAdmin: http://TWOJ-IP:9977, lub http://domena.pl:9977
8. Serwer Memcache
apt install memcached -y rm /etc/memcached.conf wget http://pliki.linuxiarz.pl/11-2015/memcached.conf -O /etc/memcached.conf
9. Uruchamianie oprogramowania przy starcie systemu:
update-rc.d nginx defaults update-rc.d mysql defaults update-rc.d vsftpd defaults update-rc.d memcached defaults update-rc.d php7.0-fpm defaults
Restart usług
systemctl restart nginx systemctl restart mysql systemctl restart vsftpd systemctl restart memcached systemctl restart php7.0-fpm
Instalacja WORDPRESS:
1. Tworzenie katalogów i pobieranie najnowszej wersji CMS
mkdir /home/www/public_html wget https://pl.wordpress.org/wordpress-4.5.2-pl_PL.tar.gz -O /home/www/public_html/wp.tar.gz cd /home/www/public_html/ tar xfz wp.tar.gz; rm wp.tar.gz
Konfiguracja uprawnień do plików i katalogów Wordpresa
wget http://pliki.linuxiarz.pl/05-2016/wp-perm.sh -O /root/wp-perm.sh chmod +x /root/wp-perm.sh cd /root/ ./wp-perm.sh
Dodawanie użytkownika www do grupy www-data
usermod -g www-data www
2. Tworzenie bazy danych (tutaj przyda się hasło do bazy danych)
mysql -u root -p
Po wydaniu tego polecenia, system poprosi o hasło, jest to hasło wcześniej ustawione przy instalacji serwera MariaDB
Po podaniu prawidłowego hasła, będziesz w konsoli bazy MySQL, tutaj tworzysz bazę.
CREATE DATABASE wordpress; ### PAMIETAJ ZMENIC HASLO DLA UŻYTKONIKA BAZY !! - wewnątrz znaków '' ### CREATE USER 'wordpress'@'localhost' IDENTIFIED BY 'G3u!vJQ4__v6L_5U'; GRANT ALL PRIVILEGES ON wordpress.* TO wordpress@localhost IDENTIFIED BY 'G3u!vJQ4__v6L_5U'; quit
Lub alternatywny sposób, tworzenie bazy za pomocą interfejsu PHPMyAdmin:
3. Konfiguracja serwera www (bez SSL)
wget http://pliki.linuxiarz.pl/05-2016/wordpress-ubuntu16.conf -O /etc/nginx/conf.d/wordpress.conf service nginx restart
4. Czas przejść do przeglądarki, warto skierować już do twojego serwera jakąś domenę.
W jej strefie DNS (rejestrator np.) wpisz adres IPv4 jako wartośc rekordu A i analogicznie dla subdomeny “www”.
Wywołaj IP lub adres twojej wcześnie skonfigurowanej domeny w przeglądarce, lub przejdź do kolejnego punktu.
Pomiń ten krok, jeśli nie jesteś zainteresowany SSL’em.
Na czas pisania poradnika dodałem subdomenę tests.linuxiarz.pl aby pokazać wam jak dodać certyfikat SSL od Let’s Encrypt
5. Jeśli zależy Ci na tym, aby połączenie z twoją witryną było bezpieczne i chcesz zainstalować darmowy certyfikat Let’s Encrypt to pozostań tutaj i wykonaj polecenia:
cd /root/ git clone https://github.com/letsencrypt/letsencrypt
sh /root/letsencrypt/letsencrypt-auto certonly --webroot --webroot-path /home/www/public_html/wordpress --domains tests.linuxiarz.pl,www.tests.linuxiarz.pl --agree-tos --email admin@strona.pl
W powyższym poleceniu pamiętaj o edycji:
–domains tests.linuxiarz.pl,www.tests.linuxiarz.pl
oraz: –email admin@strona.pl
Odnowienie certyfikatu co 2 miesiące:
(sudo crontab -u root -l; echo "0 0 1 * * sh /root/letsencrypt/letsencrypt-auto renew >> /dev/null && service nginx restart >> /dev/null") | crontab -u root -
Gotowa konfiguracja NGINX z obsługą SSL’a
rm /etc/nging/conf.d/wordpress.conf wget http://pliki.linuxiarz.pl/05-2016/wordpress-ubuntu16_ssl.conf -O /etc/nginx/conf.d/wordpress.conf
UWAGA!! Po wygenerowaniu certyfikatu SSL dla twojej domeny utworzone zostaną katalogi, odpowiednie dla twojej domeny! Musisz zmenić scieżkę w pliku konfiguracyjnym serwera nginx!
/etc/nginx/conf.d/wordpress.conf
ssl_certificate /etc/letsencrypt/live/strona.pl/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/strona.pl/privkey.pem;
ssl_trusted_certificate /etc/letsencrypt/live/strona.pl/chain.pem;
Po poprawnej edycji, przeładuj nginx’a
service nginx restart
Efekt w przeglądarce:
Jeżeli wszystko przebiegło pomyślnie, to po wpisaniu w przeglądarce twojej domeny powinien ukazać się instalator WordPress z bezpiecznym połączeniem jak na obrazku powyżej, lub jeśli pominałeś/aś ten etap – bez:
Kwestie konfiguracyjne dotyczące ustawień samej witryny pozostają dla Ciebie.
Jeśli instalacja się powiodła efektem instalacji powinien być widok na domyślny salon Wordpresa:
Serwer WWW wkompilowane ma moduły opisane tu: http://linuxiarz.pl/1911/nginx-1-9-11-z-modulami-na-debian-ubuntu-centos-i-innych/
Ustawione reguły dla GooglePageSpeed: http://pliki.linuxiarz.pl/02-2016/pagespeed.txt
Możliwe konfiguracje moduły GooglePageSpeed: https://developers.google.com/speed/pagespeed/module/configuration
Nie testowane z wtyczką dla Worpdresa: W3 Total Cache, może być konieczne wyłącznie modułu GooglePageSpeed.
Wyłączenie PageSpeed’a:
sed -i s'/pagespeed on;/pagespeed off;/' /etc/nginx/conf.d/wordpress.conf /etc/init.d/nginx restart
Włączenie PageSpeed’a
sed -i s'/pagespeed off;/pagespeed on;/' /etc/nginx/conf.d/wordpress.conf /etc/init.d/nginx restart
5. Instalacja i konfiguracja zapory (Firewall)
apt-get install ufw -y
Ustawienie regułek zapory
ufw allow ssh ufw enable ufw allow ftp ufw allow http ufw allow https ufw allow 9977/tcp ufw allow 12000:12100/tcp
Na końcu można uruchomić ponownie serwer i zweryfikować czy wszystko się uruchomi przy starcie.
reboot
Wydajnosć serwera przy 2500 jednoczesnych połączeniach przez 1 minute (serwer to HG 7 SSD z oferty PublicCloud w OVH):