Instalacja LEMP na Ubuntu 18.04

vps
www
Tagi: #<Tag:0x00007f3438e38a28> #<Tag:0x00007f3438e38820>

#1

LEMP na Ubuntu 18.04

Ten poradnik pokaże Ci, jak zainstalować:

  • serwer WWW z obsługą PHP 7.2
  • serwer MySQL
  • phpMyAdmin

Takie tam informacje…

Jeżeli instalujesz LEMP na koncie root to nie musisz wpisywać sudo przed każdą komendą.
Ten poradnik może działać na Ubuntu 16.04 (problem z kompatybilnością pakietów).

Krok 1

Przydałoby się zaktualizować system i pakiety, więc…

sudo apt update
sudo apt upgrade

Krok 2

Przydałyby się pewne komendy, które ułatwią nam pracę.
Wpisz komendę sudo add-apt-repository.
Jeżeli otrzymasz ten wynik: sudo: add-apt-repository: command not found przejdź do kroku 2.1.
Jeżeli otrzymasz ten wynik: Error: need a repository as argument przejdź do kroku 3.

Krok 2.1

Nie posiadasz komend, które ułatwią Ci pracę oraz umożliwią instalację wymaganych paczek.
Aby zainstalować to ułatwienie, wpisz:

sudo apt install software-properties-common python-software-properties

Po instalacji wróć do kroku 2.

Krok 3

Posiadasz ułatwienie, które nam pomoże pracować.
Możemy przejść do instalacji.
Najpierw zainstalujemy nginx’a, czyli serwer WWW. Obecnie, PHP jeszcze nie będzie działać, musisz kontynuować instalację.

Najpierw dodajemy nieoficjalne, ale aktualizowane repozytoria nginx przy pomocy:

sudo add-apt-repository ppa:ondrej/nginx

W trakcie akceptacji klucza GPG będziemy musieli kliknąć ENTER.

Po zaakceptowaniu i dodaniu repozytorium należy zaktualizować repozytoria przy pomocy:

sudo apt update

A następnie zainstalujemy nginx’a przy pomocy:

sudo apt install nginx

Potwierdzamy instalację i cierpliwie czekamy.
Po instalacji przechodzimy dalej.

Krok 4

Nginx zainstalowany, teraz go początkowo skonfigurujemy.
Do edycji plików będę używał edytora vi/vim. Możesz użyć swojego ulubionego.
Najpierw edytujemy główną konfigurację nginx’a, czyli plik /etc/nginx/nginx.conf.
Wpisujemy sudo vim /etc/nginx/nginx.conf i przechodzimy do okna edytora.
Edytujemy podane linijki niżej:

# server_tokens off;
# server_name_in_redirect off;

Na te:

server_tokens off;
server_name_in_redirect off;

W skrócie - wystarczy odkomentować te linijki.
Jest to najmniejsze zabezpieczenie nginx’a, ale zawsze jest. O tym w innym artykule, który może za pewien czas się pojawi.

Zapisujemy zmiany, klikamy ESC i wpisujemy :wq.
Robimy restart serwera WWW przy pomocy sudo service nginx restart.
Idziemy dalej.

Krok 5

Serwer WWW z podstawową obsługą HTML już mamy, teraz przydałby się PHP.
PHP będzie w najnowszej wersji - 7.2. Możesz zainstalować inną zmieniając wersję w komendach, np. php7.2-cgi na php7.0-cgi.

Najpierw dodajemy nieoficjalne, ale aktualizowane repozytoria PHP przy pomocy:

sudo add-apt-repository ppa:ondrej/php

W trakcie akceptacji klucza GPG będziemy musieli kliknąć ENTER.
Po zaakceptowaniu i dodaniu repozytorium należy zaktualizować repozytoria przy pomocy:

sudo apt update

A następnie zainstalujemy PHP przy pomocy:

sudo apt install php7.2 php7.2-mysql php7.2-fpm php7.2-mbstring php7.2-xml php7.2-curl

Potwierdzamy instalację i cierpliwie czekamy.

Po instalacji przechodzimy dalej.

Krok 6

Mamy PHP, teraz musimy skonfigurować nginx’a, aby mógł obsługiwać skrypty PHP.
Wpisujemy sudo vim /etc/nginx/sites-available/default i przechodzimy do okna edytora.
Edytujemy podane linijki niżej:

index index.html index.htm index.nginx-debian.html;

Na te:

index index.php index.html index.htm;

Musimy jeszcze dodać integrację z interpreterem PHP, dodając to:

location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php7.2-fpm.sock;
    }

Musimy to dodać w sekcji server, nie możemy tego dać gdzie chcemy.
Plik powinien wyglądać tak (wersja bez komentarzy + blokuje dostęp do .htaccess, które i tak nie działa):

server {
    listen 80 default_server;
    listen [::]:80 default_server;

    root /var/www/html;
    index index.php index.html index.htm;

    server_name _;

    location / {
        try_files $uri $uri/ =404;
    }

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php7.2-fpm.sock;
    }

    location ~ /\.ht {
        deny all;
    }
}

Zapisujemy zmiany, klikamy ESC i wpisujemy :wq.
Robimy restart serwera WWW przy pomocy sudo service nginx restart.
Idziemy dalej.

Krok 7

Mamy nginx’a z obsługą PHP, teraz instalujemy serwer MySQL, a dokładniej MariaDB.
Najpierw dodajemy oficjalne repozytoria MariaDB przy pomocy:

sudo apt-get install software-properties-common 
sudo apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0xF1656F24C74CD1D8
sudo add-apt-repository 'deb [arch=amd64,arm64,ppc64el] http://mariadb.mirrors.ovh.net/MariaDB/repo/10.3/ubuntu bionic main'

W trakcie akceptacji klucza GPG będziemy musieli kliknąć ENTER.

Po zaakceptowaniu i dodaniu repozytorium należy zaktualizować repozytoria przy pomocy:

sudo apt update

A następnie instalujemy serwer MySQL przy pomocy:

sudo apt install mariadb-server

Potwierdzamy instalację i cierpliwie czekamy do momentu, kiedy pokaże nam się to:
zdjęcie

Wpisujemy tam swoje hasło i musimy je jeszcze później powtórzyć.
Po zainstalowaniu idziemy dalej.

Krok 8

MySQL zainstalowany, teraz możemy go skonfigurować przy pomocy:

sudo mysql_secure_installation

Wpisujemy hasło i idziemy dalej.
Następnymi krokami będzie odpowiadanie na pytania.
Możesz sam odpowiedzieć, tutaj podam zalecane wartości.

Change the root password? [Y/n]

Pisząc Y żądasz zmiany hasła.
Pisząc N pomijasz ten krok.

Remove anonymous users? [Y/n]

Zalecam opcję Y - usuwa anonimowych użytkowników.

Disallow root login remotely? [Y/n]

Tutaj zalecam Y, aczkolwiek jeżeli jesteś osobą pracującą na roocie prawie wszędzie to możesz wpisać N.

Remove test database and access to it? [Y/n]

Tutaj będzie usuwać testową bazę danych o nazwie test, zalecam Y.

Reload privilege tables now? [Y/n]

Zalecam Y, wtedy przeładuje wszystkie tabele.

Koniec konfiguracji, przejdź do następnego kroku.

Krok 9

Mamy serwer WWW z obsługą PHP, mamy serwer MySQL, teraz przydałaby się aplikacja usprawniająca zarządzanie serwerem MySQL. Wybierzemy phpMyAdmin.
Pobieramy najnowszą wersję phpMyAdmin (w chwili pisania tego poradnika to 4.8.2) przy pomocy:

sudo wget -O phpmyadmin.zip https://files.phpmyadmin.net/phpMyAdmin/4.8.2/phpMyAdmin-4.8.2-all-languages.zip

Do rozpakowania plików .zip zalecam zainstalować zip przy pomocy:

sudo apt install zip

Aby rozpakować archiwum wpisz:

sudo unzip phpmyadmin.zip

Po rozpakowaniu, w obecnym folderze będziesz miał nowy folder o nazwie phpMyAdmin-4.8.2-all-languages.
Możemy zmienić nazwę tego folderu na np. pma. Zrobimy to za pomocą:

sudo mv phpMyAdmin-4.8.2-all-languages/ pma/

Następnie, po zmianie nazwy, przenosimy folder pma do /var/www/html/. Jest to domyślna ścieżka naszych plików, które będą odczytywane przez serwer WWW. Przenosimy przy pomocy:

sudo mv pma/ /var/www/html/

Po przeniesieniu idziemy dalej.

Krok 10

Prawie wszystko gotowe, teraz tylko konfiguracja phpMyAdmin.
Wchodzimy do folderu /var/www/html/pma i tworzymy nowy plik przy użyciu:

sudo vim /var/www/html/pma/config.inc.php

Przykładowa treść konfiguracji:

<?php
$i = 0;
$i++;
//$cfg['Servers'][$i]['host'] = 'domena.pl'; --> tutaj uzupełniamy, jeżeli serwer MySQL stoi poza serwerem WWW/VPS
//$cfg['Servers'][$i]['port'] = 3306; --> tutaj uzupełniamy, jeżeli serwer MySQL stoi poza serwerem WWW/VPS (domyślnie 3306)
$cfg['Servers'][$i]['socket'] = '/var/run/mysqld/mysqld.sock'; //to musimy zakomentować, jeżeli uzupełnimy konfigurację dla ZEWNĘTRZENGO serwera (te dwie wyżej)
$cfg['Servers'][$i]['compress'] = true;
$cfg['Servers'][$i]['auth_type'] = 'cookie';
$cfg['Servers'][$i]['user'] = 'root';
$cfg['Servers'][$i]['password'] = 'HASLO_DO_ROOTA';
$cfg['ZipDump'] = false;
$cfg['GZipDump'] = false;
$cfg['BZipDump'] = false;
$cfg['CompressOnFly'] = false;
$cfg['blowfish_secret'] = 'NM68ta213@!A#@!S#A@3rd43r'; //zalecam zmianę tego, walnij kilka razy w klawiaturę =P
$cfg['VersionCheck'] = false;
$cfg['OBGzip'] = 0;
$cfg['ShowStats'] = true;
$cfg['ShowServerInfo'] = true;
$cfg['ShowPhpInfo'] = true;
$cfg['DefaultTransformations']['Substring'] = array (
  0 => '0',
  1 => 'all',
  2 => '…',
);
$cfg['DefaultTransformations']['External'] = array (
  0 => '0',
  1 => '-f /dev/null -i -wrap -q',
  2 => '1',
  3 => '1',
);
$cfg['DefaultTransformations']['PreApPend'] = array (
);
$cfg['DefaultTransformations']['DateFormat'] = array (
  0 => '0',
  1 => 'local',
);
$cfg['DefaultTransformations']['Inline'] = array (
  0 => '100',
  1 => '100',
);
$cfg['DefaultTransformations']['TextImageLink'] = array (
  0 => '100',
  1 => '50',
);
$cfg['DefaultTransformations']['TextLink'] = array (
);
$cfg['DefaultLang'] = 'pl';
$cfg['ServerDefault'] = 1;
?>

Zapisujemy zmiany, klikamy ESC i wpisujemy :wq.

Teraz ważne, bez tego może nie działać.

Musimy przyznać wszystkie uprawnienia dla www-data, czyli użytkownika, który będzie miał dostęp do tych plików. Z tego konta będzie korzystał serwer WWW. Zrobimy to przy pomocy:

sudo chown -R www-data:www-data /var/www/html/

Gotowe!
Właśnie zainstalowałeś serwer WWW z obsługą PHP, serwer MySQL i phpMyAdmin :wink:

Pytania, uwagi, komentarze proszę pisać poniżej.


Nginx
Rozważam serwer MC na VPS, budżet
LEMP | nginx + php + mysql + phpmyadmin | ubuntu / debian
Rozważam serwer MC na VPS, budżet
Rozważam serwer MC na VPS, budżet
#2

poradnik fajny, ale jak kiedyś instalowałem ( LAMP ) to wszystko instalowało się jednym skryptem :wink:
a tutaj przy ( LEMP ) wszystko instaluje się oddzielnie więc trochę to dziwne ale nie o to chodzi, ważne że działa jak mniemam :wink:


#3

Jestem w tym kroku, ale w całym pliku nie ma ciągu “index”, a co dopiero całego wiersza z takimi słowami. Nie ma tam też “htm”.


#4

Mógłbyś pokazać dokładnie całą konfigurację?


#5

Jeżeli chodzi o plik nginx.conf, to on wygląda tak:

user www-data;
worker_processes auto;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;

events {
        worker_connections 768;
        # multi_accept on;
}

http {

        ##
        # Basic Settings
        ##

        sendfile on;
        tcp_nopush on;
        tcp_nodelay on;
        keepalive_timeout 65;
        types_hash_max_size 2048;
        server_tokens off;
        # server_names_hash_bucket_size 64;
        server_name_in_redirect off;

        include /etc/nginx/mime.types;
        default_type application/octet-stream;

        ##
        # SSL Settings
        ##

        ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE
        ssl_prefer_server_ciphers on;

        ##
        # Logging Settings
        ##

        access_log /var/log/nginx/access.log;
        error_log /var/log/nginx/error.log;

        ##
        # Gzip Settings
        ##
        gzip on;

        # gzip_vary on;
        # gzip_proxied any;
        # gzip_comp_level 6;
        # gzip_buffers 16 8k;
        # gzip_http_version 1.1;
        # gzip_types text/plain text/css application/json application/javascript

        ##
        # Virtual Host Configs
        ##

        include /etc/nginx/conf.d/*.conf;
        include /etc/nginx/sites-enabled/*;
}


#mail {
#       # See sample authentication script at:
#       # http://wiki.nginx.org/ImapAuthenticateWithApachePhpScript
#
#       # auth_http localhost/auth.php;

I tak wygląda katalog:

total 76
drwxr-xr-x   8 root root 4096 Oct 26 16:09 .
drwxr-xr-x 100 root root 4096 Oct 26 16:28 ..
drwxr-xr-x   2 root root 4096 Aug  5 05:05 conf.d
-rw-r--r--   1 root root 1077 Aug  5 04:59 fastcgi.conf
-rw-r--r--   1 root root 1007 Aug  5 04:59 fastcgi_params
-rw-r--r--   1 root root 2837 Aug  5 04:59 koi-utf
-rw-r--r--   1 root root 2223 Aug  5 04:59 koi-win
-rw-r--r--   1 root root 3957 Aug  5 04:59 mime.types
drwxr-xr-x   2 root root 4096 Aug  5 05:05 modules-available
drwxr-xr-x   2 root root 4096 Oct 26 16:07 modules-enabled
-rw-r--r--   1 root root 1478 Oct 26 16:09 nginx.conf
-rw-r--r--   1 root root 1482 Aug  5 04:59 nginx.conf~
-rw-r--r--   1 root root  180 Aug  5 04:59 proxy_params
-rw-r--r--   1 root root  636 Aug  5 04:59 scgi_params
drwxr-xr-x   2 root root 4096 Oct 26 16:07 sites-available
drwxr-xr-x   2 root root 4096 Oct 26 16:07 sites-enabled
drwxr-xr-x   2 root root 4096 Oct 26 16:07 snippets
-rw-r--r--   1 root root  664 Aug  5 04:59 uwsgi_params
-rw-r--r--   1 root root 3071 Aug  5 04:59 win-utf

#6

@Lempik przepraszam za błąd, nie ten plik edytujesz (tak było w poradniku) -> zrobiłem poprawkę :slight_smile:


#7

Czyli jestem pierwszy, kto instaluje według tego poradnika… :slight_smile:
Na końcu tego wiersza jeszcze był znak “;”, więc do tam zostawiłem.


#8

Tym razem mi się udało dojść do kroku 7. W tym kroku nie było żadnego potwierdzania klucza GPG.

Po apt-update otrzymałem na końcu komunikat
4 packages can be upgraded. Run 'apt list --upgradable' to see them.

Ale zignorowałem go i wpisałem zgodnie z instrukcją apt install mariadb-server.

Otrzymałem takie coś:
Reading package lists… Done
Building dependency tree
Reading state information… Done
Some packages could not be installed. This may mean that you have
requested an impossible situation or if you are using the unstable
distribution that some required packages have not yet been created
or been moved out of Incoming.
The following information may help to resolve the situation:

The following packages have unmet dependencies:
 mariadb-server : Depends: mariadb-server-10.3 (>= 1:10.3.10+maria~bionic) but it is not going to be installed
E: Unable to correct problems, you have held broken packages.

Spróbowałem więc zrobić apt upgrade i ponownie apt install mariadb-server.

Ale niestety, otrzymałem ten sam error.


Rozważam serwer MC na VPS, budżet
#9

Mam nadzieję, że instalujesz to wszystko na Ubuntu 18.04.

Jeżeli dalej to nie działa, to usuń wpis repozytoriów i zainstaluj domyślną wersję z repo Ubuntu.


#10

Instaluję to wszystko na standardowym VPSie, który otrzymuję tu w LVL UP. Tam jest domyślna wersja 16.04.


#11

A poradnik jest do wersji 18.04, wiec nie do konca dla ciebie :wink:


#12

A więc trzeba albo upgradować do ubuntu 18, albo zainstalować wszystko dla wersji 16. Bez poradników nie dam rady.


#13

Zawsze mozesz zainstalowac ubuntu 18 przez proxmoxa po prostu.


#14

Do upgrade Ubuntu 16 do 18 opracowałem poradnik, wystarczy zernkąć :wink:


#15

Zalogowałem się do panelu proxmox i w ogóle nie wiem, o co tam chodzi i co tam mam robić. Nie potrafię w proxmoksie upgradować ubuntu do wersji 18.
Moim głównym problemem jest to, że tu mam hosting MC. Tylko że hosting MC wycofano, nie da się go nawet przedłużyć. Hosting mam opłacony do początku grudnia. W wątku “Rozważam serwer MC na VPS…” mi podaliście poradniki, które podobno mi pozwolą na tutejszym VPSie zainstalować potrzebne rzeczy, żeby mieć serwer MC, stronę www i panel zarządzania serwerem MC. Wcale nie pragnąłem bawić się VPSem.
Okazuje się jednak, że nie dam rady zainstalować potrzebne rzeczy na VPSie, bo (niektóre) poradniki są dla ubuntu 18, a system na tutejszym VPSie to ubuntu 16.


#16

Możesz to robić poprzez SSH, tutaj nie ma problemu (aczkolwiek zalecenie jest, aby robić to przez VNC).


#17

Problem polega na tym, że ja w ogóle nie wiem, co mam robić.


#18

No możesz przepisać wszystkie komendy z tego poradnika w konsoli SSH. W tym wyjątku serwer będzie Cie prosił o utworzenie drugiego serwera SSH na innym porcie.


#19

Gdzie jest używany ten plik konfiguracyjny? Bo jak patrzę do index.php, to tam go nikt nie wczytuje.

Tak w ogóle to mam problem, że jak próbuję z przeglądarki pracować z phpMyAdminem, to mam komunikat: “mysqli_real_connect(): (HY000/1698): Access denied for user ‘root’@‘localhost’”


#20

Bo index.php z PMA go nie czyta, a inne pliki.