Wydajny i szybki sklep – PrestaShop

linux-ubuntu-nginx-mariadb-php-presta

Witam!

Masz sklep internetowy na współdzielonym hostingu który nie spełnia twoich oczekiwań lub działą powoli i ospale ?

Idelnie trafiłeś / aś, przedstawiam poradnik w którym zainstalujesz bardzo szybki i wydajny sklep od podstaw opierający się o CMS PrestaShop.

Całość opiera się na systemie Ubuntu 14.04 oraz Debian 8 wraz z serwerem www NGINX, bazą danych MariaDB serwerem FTPvsftpd i oczywście PHP-FPM 5.6 (zalecana wersja dla PrestaShop).

 

Dla sklepu zalecany jest certyfikat SSL dla bezpieczeństwa zakupów użytkwoników, jak go uzyskać ?

Certyfikat SSL z Let’s Encrypt i autoodnawianie!

Całośc jest kontunuacją serii rozpoczętej tu:
http://linuxiarz.pl/1921/wydajny-wordpress-na-wlasnym-serwerze/

Sposób przygotowany na instancji PublicCloud w OVH, oczywiście można użyć również na serwerze VPS SSD/Cloud czy nawet serwerze dedykowanym.

Na początek przygotowanie serwera:

serwer

spawn

1. Połączenie do maszyny:

w przypadku serwera PublicCloud, łącze się do systemu za pomocą klucza SSH,

ssh admin@167.114.240.207 -i .ssh/id_rsa2

2. Przygotowanie:

sudo -i
apt-get update
apt-get upgrade -y

Konfiguracja użytkownika www (usatwienie hasła będzie jednoznaczne z ustawieniem hasła do FTP!)

adduser www

3. Serwer www (nginx 1.10.0)

apt-get 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 nano curl \
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 -y

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/* ; rm  /etc/nginx/sit*/*

Serwer www jest, przejdźmy do instalacji PHP, skonfigurowanie serwera WWW wykonamy później.

4. Instalacja PHP 5.6

4.1 UBUNTU 14.04

add-apt-repository ppa:ondrej/php5-5.6 
# ENTER
apt-get update
apt-get install php5-fpm php5 php5-mysql php5-curl php5-gd php5-intl \
php-pear php5-imagick php5-imap php5-mcrypt php5-memcache php5-ps \
php5-pspell php5-recode php5-snmp php5-tidy php5-xmlrpc php5-xsl \
php5-xcache php-soap postfix -y --force-yes

rm /etc/php5/fpm/php.ini; wget http://pliki.linuxiarz.pl/02-2016/php.ini -O /etc/php5/fpm/php.ini
wget http://pliki.linuxiarz.pl/08-2015/php5/ioncube_loader_lin_5.6.so -O /etc/php5/ioncube_loader_lin_5.6.so

4.2 DEBIAN 8

apt-get install php5-fpm php5-mysql php5-curl php5-gd php5-intl \
php5-imagick php5-imap php5-mcrypt php5-memcache php5-pspell php5-recode \
php5-tidy php5-xmlrpc php5-xsl php5-xcache php-soap php-pear \
imagemagick postfix -y --force-yes

rm /etc/php5/fpm/php.ini
wget http://pliki.linuxiarz.pl/02-2016/php.ini -O /etc/php5/fpm/php.ini
wget http://pliki.linuxiarz.pl/08-2015/php5/ioncube_loader_lin_5.6.so -O /etc/php5/ioncube_loader_lin_5.6.so
wget http://pliki.linuxiarz.pl/05-2016/www-prestashop.conf -O /etc/php5/fpm/pool.d/www-prestashop.conf

Włączenie PHP5-FPM

service php5-fpm restart

5. Instalacja serwera FTP oraz jesgo 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
Podczas instalacji serwera bazodanowego – system po prosi o wprowadzenie hasła do użytkownika “root” – zapamiętaj go.

6.1 UBUNTU 14.04

apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0xcbcb082a1bb943db
add-apt-repository 'deb [arch=amd64,i386] http://mariadb.kisiek.net/repo/10.1/ubuntu trusty main'

apt-get update
apt-get install mariadb-server mariadb-client -y

6.2 DEBIAN 8

apt-get install software-properties-common
apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 0xcbcb082a1bb943db
add-apt-repository 'deb [arch=amd64,i386] http://mirror6.layerjet.com/mariadb/repo/10.1/debian jessie main'

apt-get update
apt-get install mariadb-server mariadb-client -y

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. Serwer Memcache

apt-get install memcached -y
rm /etc/memcached.conf
wget http://pliki.linuxiarz.pl/11-2015/memcached.conf -O /etc/memcached.conf

8. Uruchamianie orpogramowania 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 php5-fpm defaults

Instalacja PrestaShop:

1. Tworzenie katalogów i pobieranie najnowszej wersji CMS

mkdir /home/www/public_html -p
mkdir /home/www/logs/ -p 
wget https://www.prestashop.com/download/old/prestashop_1.6.1.4.zip -O /home/www/public_html/prestashop.zip
cd /home/www/public_html/
unzip prestashop.zip ; rm prestashop.zip

Konfiguracja uprawnień do plików i katalogów PrestaShop

wget http://pliki.linuxiarz.pl/02-2016/ps-perm.sh -O /root/ps-perm.sh
chmod +x /root/ps-perm.sh
cd /root/
./ps-perm.sh

Dodawanie użytkownika www do grupy www-data

usermod -aG www-data www

2. Tworzenie 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 prestashop;
### PAMIETAJ ZMENIC HASLO DLA UŻYTKONIKA BAZY -> Linia poniżej - wewnątrz '' ###
CREATE USER 'prestashop'@'localhost' IDENTIFIED BY 'G3u!vJQ4__v6L_5U'; 
GRANT ALL PRIVILEGES ON prestashop.* TO prestashop@localhost IDENTIFIED BY 'G3u!vJQ4__v6L_5U';
quit

3. Konfiguracja serwera www

wget http://pliki.linuxiarz.pl/02-2016/prestashop.conf -O /etc/nginx/conf.d/prestashop.conf
sed -i '9d' /etc/nginx/php.conf
rm /etc/nginx/conf.d/default.conf
touch /home/www/logs/access.log
touch /home/www/logs/error.log
service nginx restart

4. Czas przzejść do przeglądrki, warto skierować już do twojego serwera jakąś domenę.

W jej strefie DNS (operator np.) wpisz adres IPv4 jako wartość rekordu A oraz wartość a dla sub domeny “www”.

IP-strefa

Wywołaj IP lub adres twojej wcześnie skonfigurowanej domeny w przeglądarce.

Kwestie konfiguracyjne – To pozostawiam dla Ciebie. W zrzutach uzupełniłem instalator o przykładowe dane.

Pamiętaj, po zakończonej instalacji – musisz usunąć katalog /install:

rm -rf /home/www/public_html/prestashop/install

Po instalacji – konieczna będze jeszcze zmian nazwy katalogu /admin na inny wylosowany przez instalator – wykonasz to przez klienta FTP lub konsole poleceniem:

mv /home/www/public_html/prestashop/admin /home/www/public_html/prestashop/admin345aljfj1/

Pamiętaj zamienić z wylosowaną dla Ciebie wartością admin345aljfj1

Wyłączenie PageSpeed’a:

sed -i s'/pagespeed on;/pagespeed off;/' /etc/nginx/conf.d/prestashop.conf
/etc/init.d/nginx restart

Włączenie PageSpeed’a (domyśłnie włączone)

sed -i s'/pagespeed off;/pagespeed on;/' /etc/nginx/conf.d/prestashop.conf
/etc/init.d/nginx restart

5. Instalacja i konfiguracja zapory (firewall) opartej o UFW

apt-get install ufw -y 

Ustawienie regułek zapory

ufw default allow outgoing
ufw allow 22/tcp
ufw allow 80/tcp
ufw allow 21/tcp
ufw allow 12000:12100/tcp
: > /etc/ufw/ufw.conf
echo "ENABLED=no" >> /etc/ufw/ufw.conf
echo "LOGLEVEL=low" >> /etc/ufw/ufw.conf
ufw enable

Na końcu można uruchomić ponownie serwer i zweryfikować czy wszystko się uruchomi przy starcie.

reboot

Generator dla nginx
Aby zmodyfikować i ustawić własne hasło do modułu VTS (/vhost_status) i statystyk nginx PageSpeed – domyślne to admin:admin

Moduł VTS jest domyślnie dołączony zgodnie z poradnikiem: http://linuxiarz.pl/1385/nginx-1-9-4-z-modulem-vts-czyli-statystyki-vhosta/

wget http://pliki.linuxiarz.pl/11-2015/generator -O /usr/bin/generator
chmod +x /usr/bin/generator
: > /etc/nginx/htpasswd

->> UZYCIE: generator nazwapliku uzytkownik haslo np.

np:

generator /etc/nginx/htpasswd admin admin

Instalacja PHPMyAdmin:

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/12-2015/c7-apache/pma.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

ufw allow 9977/tcp
service nginx restart

Dostęp dp PHPMyAdmin: http://TWOJ-IP:9977, lub http://domena.pl:9977

  • tjamrozik

    Zmieniłem
    innodb-buffer-pool-size = 256M
    Teraz użycie tam na poziomie 1,5GB – zobaczymy jak będzie z wydajnością

  • tjamrozik

    A czy jest szansa uruchomienia tej konfiguracji na VPS 2gb RAM? Niestety brakuje mi pamięci na uruchomienie serwera bazodanowego. Po ustawieniu domyślnych limitów pamięci odpala nie chciałbym tylko stracić zbytnio wydajności.
    Pozdrawiam!

  • Patryk Makowski

    Cześć.
    Nie umiałem znaleźć kontaktu do ciebie. Czy podjąłbyś się przeniesienia sklepu na preście na inną maszynę razem z przygotowaniem całego configu? Napisz na patrykm[at]lectus.com.pl po szczegóły 😉

  • sionx

    rozwaliło treść wiec podaje jeszcze raz sionx {na] op ; pl

  • sionx

    Witam
    Potrzebuję kontakt do Ciebie priv, nie chcę pisać na forum – generalnie chodzi o optymalizacji ustawień serwera. Mozna prosic o email na adres sionx <na] op , pl ? Bede wdzieczny. Oczywiście nie chcę niczego za free zeby była jasność. Ale potrzebuję fachowej pomocy. Pozdrawiam

  • W czym mogę Ci pomóc ?

  • sionx

    przepraszam za offtopic ale czy mogę prosić o jakis PRIV kontakt Mateusza Gruszczyńskiego ?

  • tjamrozik

    Faktycznie z phpMyAdmin’em 4.4.15.6 poszło bez problemu. Dzięki za pomoc!

  • tjamrozik

    No to mam nadzieję ostatni raz rebuild VPSa 😉

  • Hej, Sprawdziłem wszystko dokładnie – masz rację, coś zepsuli autorzy PHPMyAdmina, wszystko sie sypie po błędnym logowaniu, odkryłeś sprawę którą już ktoś zgłosił.

    https://github.com/phpmyadmin/phpmyadmin/issues/12279

    Osobiscie zrobiłem test tez na wersji: phpMyAdmin 4.4.15.6 – żadnego kłopotu nie mam.

    Zaktualizowałem lekko poradnik o nową wersję nginx’a (stable) i o dodatkowa konfiguracje dla PHPMyAdmina więc możesz przelecieć jeszcze raz VPS’a i wszystko będzie git!

  • Hej, sprawdzam dokłądnie i mam to samo – odkryłeś BUGA w najnowszej wersji PHPMyAdmina:

    https://github.com/phpmyadmin/phpmyadmin/issues/12279

    Zaktualizowałem poradnik o nowszą wersję nginxa i resztę konfiguracji PHPMyAdmina.

  • Jutro od rana będę dostępny. Sprawdzę to.

    Możesz włączyć przyjazne URL jeśli używasz mojej konfiguracji dla NGINX tam są przepisane rewrite specjalnie aby nie używać Apache.

    Bez .htaccess jest szybciej, bezpieczniej, wydajniej… itd:)

    Przykładem tak pracującym jest sklep.lem-on.pl – cała konfiguracja mojego autorstwa 🙂

  • tjamrozik

    Dane wyczyszczone, później spróbowałem nawet PageSpeeda wyłączyć i dalej nic. Boje się, że to będzie problem z moim vps’em. W razie czego moge udostępnić czystego do testów.

    Przy okazji pytanie – bez Apache da się w preście uruchomić przyjazne URLe?

  • Spróbuj wyczyścić dane Pagespeeda. On jakieś babole złapał . Ścieżkę masz widoczna w pliku /etc/nginx/pagespeed.conf

    I ścieżkę /var/cache/nginx

    Ja jutro spróbuję na Debianie (chociaż sam poradnik był pisany z Debianem).

  • tjamrozik

    Nie pomaga. Spróbuj się zalogować (nawet błędnym hasłem) i później wróć na stronę logowania.

  • Wyczyść wszystkie cache w przeglądarce i zrób reboot vpsa 🙂

  • tjamrozik

    To u mnie strona logowania (po pierwszym nieudanym) wygląda tak. Błędów jest jeszcze więcej. Postawione na Debianie 8. Tylko VPS w Serveradmin.

  • Z przed chwili na Ubuntu 14.04 ;]

    Robiłem typowe COPY – PASTE.

  • tjamrozik

    Witam,
    Wszystko poszło gładko, ale poległem na instalacji phpmyadmin, który sypie tyloma błedami, że nie wiadomo za co się złapać. Na początku przy próbie logowania wypluwa takie coś:

    Error

    Static analysis:

    2 errors were found during analysis.

    Unrecognized keyword. (near “CHARACTER SET” at position 4)

    Unexpected token. (near “‘utf8′” at position 18)

    SQL query: Edit Edit

    SET CHARACTER SET ‘utf8’;

    Później jest tylko gorzej.