Instalacja apache2, PHP, MariaDB (MySQL), phpMyAdmin oraz SSL na Ubuntu i Debianie

Tagi: #<Tag:0x00007f8a32feb2a8> #<Tag:0x00007f8a32feb190> #<Tag:0x00007f8a32feaf38> #<Tag:0x00007f8a32feaa38> #<Tag:0x00007f8a32fea920>

Witam, w tym poradniku opiszę jak zainstalować apache2, PHP, MariaDB (MySQL) i phpMyAdmin oraz jak skonfigurować wiele stron na jednym serwerze (wirtualne hosty) i zainstalować dla nich darmowy certyfikat SSL od Let’s Encrypt :smile:

Wiem że na forum znajduje się już kilka takich poradników, jednak nie są one zbyt świeże i nie ma takiego, gdzie wszystko jest w jednym miejscu, więc postanowiłem napisać własny :slight_smile:

Całość została dokładnie przetestowana i jest kompatybilna z następującymi systemami:

  • Ubuntu 20.04
  • Ubuntu 18.04
  • Debian 10
  • Debian 9

Zalecam instalację na czystym systemie, gdzie wcześniej nie był instalowany serwer www.

Aktualizacja repozytoriów:

apt update

Uwaga! W przypadku pracy na koncie użytkownika innym niż root, należy przed komendą dopisać sudo.

Aktualizacja pakietów:

apt upgrade

Uwaga! W przypadku pracy na koncie użytkownika innym niż root, należy przed komendą dopisać sudo.

Instalacja pakietów pomocniczych:

# dla Ubuntu: (jedna komenda)
apt install zip sudo nano wget software-properties-common

# dla Debiana: (jedna komenda)
apt install zip sudo nano wget lsb-release apt-transport-https ca-certificates

Uwaga! W przypadku pracy na koncie użytkownika innym niż root, należy przed komendą dopisać sudo. To była ostania komenda różniąca się w zależności od użytkownika, kolejne można wykonywać zawsze z przedrostkiem sudo.

Dodawanie repozytoriów PHP

# dla Ubuntu: (jedna komenda)
LC_ALL=C.UTF-8 sudo add-apt-repository ppa:ondrej/php

# dla Debiana: (dwie komendy)
sudo wget -O /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg
echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" | sudo tee /etc/apt/sources.list.d/php.list

Ponowna aktualizacja repozytoriów:

sudo apt update

Instalacja apache2 i PHP wraz z podstawowymi rozszerzeniami

Jeżeli potrzebujesz innej wersji php, możesz ją podmienić w każdej komendzie :wink:

sudo apt install apache2 php8.0 libapache2-mod-php8.0 php8.0-mysql php8.0-mbstring php8.0-curl

Jeżeli potrzebujesz dodatkowe rozszerzenia, możesz zainstalować je teraz używając komendy sudo apt install php8.0-nazwa_rozszerzenia

Przeładowanie serwera apache2

sudo systemctl restart apache2

Instalacja serwera WWW wraz z obsługą PHP została zakończona, kolejne kroki możesz wykonać opcjonalnie jeżeli potrzebujesz na przykład bazy danych MySQL.

Instalacja serwera bazy danych MariaDB (MySQL)

MariaDB to nowsza wersja MySQL, która posiada wyższą wydajność i więcej funkcji zachowując przy tym pełną kompatybilność.

sudo apt install mariadb-server mariadb-client

Konfiguracja bazy danych MariaDB

Najpierw uruchomimy skrypt, który zabezpieczy bazę danych (zmieni kilka domyślnych opcji na bardziej bezpieczne)

sudo mysql_secure_installation

Zostaniesz zapytany o obecne hasło do konta root bazy danych - domyślnie jest ono puste więc wystarczy wcisnąć tutaj enter.
image
Następnie zostaniesz zapytany, czy chcesz ustawić hasło dla konta root. Zalecam wyrazić zgodę i ustawić hasło.
image
W kolenym kroku zostaniesz zapytany czy usunąć anonimowych użytkowników, zalecam zrobić to.


Kolejny krok to pytanie o zablokowanie logowania zdalnego do bazy danych, zalecam zgodzić się na to nawet, jeżeli chcesz z niego korzystać, wróćę do tego w dalszej części poradnika.
image
Przedostatni krok to pytanie o usunięcie testowej bazy danych, zalecam zgodzić się na to.
image
Ostatni już krok to pytanie o przeładowanie uprawnień. Oczywiście należy zgodzić się.
image

Tworzenie nowego użytkownika bazy danych

Korzystanie z konta root nie jest zbyt dobrym pomysłem, a niektóre aplikacje, np. phpMyAdmin nie pozwalają nawet na korzystanie z niego. Warto utworzyć więc dodatkowego użytkownika.

Uruchom klienta MySQL wykonując poniższe polecenie:

sudo mysql

Twoim oczom powninien ukazać się taki oto ekran:


(dzięki użyciu sudo nie musimy podawać żadnego hasła, po prostu zostajemy wpuszczeni od razu i mamy dostęp do wszystkiego :nosacz:)

Teraz wykonujemy poniższe polecenia, podmieniając w nich nazwę użytkownika, hasło i adres IP

# jeżeli chcemy aby z użytkownika można było korzystać tylko lokalnie
CREATE USER 'nazwa_użytkownika'@'localhost' IDENTIFIED BY 'hasło';
GRANT ALL PRIVILEGES ON * . * TO 'nazwa_użytkownika'@'localhost';
FLUSH PRIVILEGES;

# jeżeli chcemy aby z użytkownika można było korzystać lokalnie oraz zdalnie z każdego adresu IP
CREATE USER 'nazwa_użytkownika'@'%' IDENTIFIED BY 'hasło';
GRANT ALL PRIVILEGES ON * . * TO 'nazwa_użytkownika'@'%';
FLUSH PRIVILEGES;

# jeżeli chcemy aby z użytkownika można było korzystać lokalnie oraz zdalnie tylko z wybranego adresu IP
CREATE USER 'nazwa_użytkownika'@'123.123.123.123' IDENTIFIED BY 'hasło';
GRANT ALL PRIVILEGES ON * . * TO 'nazwa_użytkownika'@'123.123.123.123';
FLUSH PRIVILEGES;

… i wychodzimy z klienta bazy danych poleceniem quit :wink:
image

Zezwalanie na zdalny dostęp do bazy danych (opcjonalnie)

Edytujemy plik przy pomocy edytora nano:

sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf

Wstawiamy znak # przed linijką zaczynającą się od bind-address:


Zapisujemy plik i wychodzimy z edytora nano wciskając kolejno Ctrl O, Enter, Ctrl X.
Następnie uruchamiamy ponownie serwer MariaDB:

sudo systemctl restart mariadb

Wirtualne hosty (kilka stron na jednym serwerze, opcjonalnie)

Edytuj plik przy pomocy edytora nano:

sudo nano /etc/apache2/sites-available/000-default.conf

Następnie usuń całą jego zawartość i wklej tam poniższy tekst o jeden raz więcej (będzie to konfiguracja używana w przypadku gdy adres przez który użytkownik próbuje wejść na stronę nie będzie pasował do żadnej ze zdefiniowanych stron) niż ilość stron którą chcesz mieć wpisując uprzednio twój adres e-mail w odpowiednie miejsce.

<VirtualHost *:80>
ServerAdmin twoj@adres.email
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

Teraz w każdym takim wklejonym bloku z wyjątkiem tego jednego dodatkowego pierwszego (koniecznie pierwszego!) dodaj linijkę ServerName nad linijką ServerAdmin i wpisz tam domenę lub subdomenę z domeną pod którą dostępna ma być strona. Możesz dodać też więcej takich adresów do jednej strony poprzez linijki ServerAlias. Zmień też DocumentRoot /var/www/html na np. DocumentRoot /var/www/mojadomena.pl, i stwórz taki katalog przy pomocy komendy sudo mkdir /var/www/mojadomena.pl (ważne aby utworzyć ten podfolder w katalogu /var/www, w innym przypadku będą występowały problemy z uprawnieniami).

Przykładowa prawidłowa konfiguracja może wyglądać w taki sposób:

<VirtualHost *:80>
ServerAdmin twoj@adres.email
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

<VirtualHost *:80>
ServerName pma.mojadomena.pl
ServerAdmin twoj@adres.email
DocumentRoot /var/www/pma.mojadomena.pl
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

Po wejściu na stronę pma.mojadomena.pl zostanie wyświetlona strona z katalogu /var/www/pma.mojadomena.pl, w przypadku użycia innego adresu zostanie wyświetlona strona z katalogu /var/www/html :slightly_smiling_face:

Zapisujemy plik i wychodzimy z edytora nano wciskając kolejno Ctrl O, Enter, Ctrl X.
Następnie uruchamiamy ponownie serwer apache2:

sudo systemctl restart apache2

Zezwalanie na pliki .htaccess (opcjonalnie)

Edytuj plik przy pomocy edytora nano:

sudo nano /etc/apache2/apache2.conf

Przy pomocy kombinacji klawiszy Ctrl W wyszukaj w pliku tekst AllowOverride None i zmień None na All w bloku gdzie jest <Directory /var/www/>.

Zapisujemy plik i wychodzimy z edytora nano wciskając kolejno Ctrl O, Enter, Ctrl X.
Następnie uruchamiamy ponownie serwer apache2:

sudo systemctl restart apache2

Wyłączanie listowania plików i katalogów (opcjonalnie)

Edytuj plik przy pomocy edytora nano:

sudo nano /etc/apache2/apache2.conf

Przy pomocy kombinacji klawiszy Ctrl W wyszukaj w pliku tekst Options Indexes i usuń Indexes w bloku gdzie jest <Directory /var/www/>.

Zapisujemy plik i wychodzimy z edytora nano wciskając kolejno Ctrl O, Enter, Ctrl X.
Następnie uruchamiamy ponownie serwer apache2:

sudo systemctl restart apache2

Instalacja i konfiguracja phpMyAdmin (opcjonalnie)

Przejdź do katalogu z plikami strony w której chcesz zainstalować phpMyAdmin, ja użyję do tego utworzonego wcześniej wirtualnego hosta.

cd /var/www/pma.mojadomena.pl

Pobierz najnowszą wersję phpMyAdmin

sudo wget https://www.phpmyadmin.net/downloads/phpMyAdmin-latest-all-languages.zip

Rozpakuj pobrane pliki

sudo unzip phpMyAdmin-latest-all-languages.zip

Usuń zbędne już pobrane wcześniej archiwum

sudo rm phpMyAdmin-latest-all-languages.zip

Zmień nazwę wypakowanego folderu dla łatwiejszego dostępu

sudo mv phpMyAdmin-* phpMyAdmin

Przejdź do wypakowanego katalogu

cd phpMyAdmin

Skopiuj przykładowy plik konfiguracyjny

sudo cp config.sample.inc.php config.inc.php

Edytuj skopiowany plik konfiguracyjny przy pomocy edytora nano

sudo nano config.inc.php

Wpisz losowe 32 znaki w miejscu pokazanym poniżej


Do wygenerowania takiego ciągu znaków możesz użyc na przykład tego generatora haseł: https://generator.blulink.pl/
Zapisujemy plik i wychodzimy z edytora nano wciskając kolejno Ctrl O, Enter, Ctrl X.

Teraz utwórz katalog dla plików tymczasowych phpMyAdmina i nadaj mu odpowiednie uprawnienia:

sudo mkdir tmp
sudo chmod 777 tmp

phpMyAdmin powinien już działać i powinieneś mieć możliwość zalogowania się.
Jeżeli nie działa, upewnij się że wielkość liter w adresie jest prawidłowa, ma to bardzo duże znaczenie!
Po zalogowaniu na dole strony zobaczysz taki komunikat:


Kliknij w link tutaj który się tam znajduje, a następnie utwórz:

Powinna zostać utworzona baza danych dla phpMyAdmina i powinieneś zobaczyć taki oto ekran:

Instalacja oraz konfiguracja phpMyAdmin została ukończona :slight_smile:

Instalacja darmowego certyfikatu SSL od Let’s Encrypt (opcjonalnie, zalecane)

Obecnie połączenie ze stroną nie jest bezpieczne, warto więc zainstalować SSL.
image

Ten krok wymaga przeprowadzenia konfiguracji związanej z wirtualnymi hostami.

Dodawanie repozytoriów

# dla Ubuntu: (jedna komenda)
sudo add-apt-repository ppa:certbot/certbot

# dla Debiana: (jedna komenda)
echo "deb http://ftp.debian.org/debian $(lsb_release -sc)-backports main" | sudo tee -a /etc/apt/sources.list.d/sources.list

Uwaga! Jeżeli twój system to Ubuntu 20.04, wykonaj dodatkowo tą komendę:

sudo sed -i 's/focal/bionic/g' /etc/apt/sources.list.d/certbot-ubuntu-certbot-focal.list

Aktualizacja repozytoriów:

sudo apt update

Instalacja pakietu

# dla Ubuntu: (jedna komenda)
sudo apt install python-certbot-apache

# dla Debiana: (jedna komenda)
sudo apt install python-certbot-apache -t $(lsb_release -sc)-backports

Generowanie certyfikatu
Możesz podać tutaj dowolną ilość domen oraz subdomen, ważne jest jedynie aby przed każdą podać -d oraz aby każda była w pliku z wirtualnymi hostami, bez znaczenia czy w ServerName czy w ServerAlias, po prostu gdzieś musi być :smile:

sudo certbot --apache -d mojadomena.pl -d www.mojadomena.pl -d pma.mojadomena.pl

Zostaniesz zapytany o adres e-mail do powiadomień o odnowieniu certyfikatu, wpisz go i wciśnij enter aby przejść dalej.


Następnie musisz zaakceptować warunki, wpisz A i wciśnij enter aby przejść dalej.

Kolejny krok to pytanie o otrzymywanie informacji dotyczących bezpieczeństwa na podany wcześniej adres e-mail, wybierz według uznania i wciśnij enter aby przejść dalej.

Ostatni krok to pytanie czy zapytania http mają być automatycznie przekierowywane na https, wybierz według uznania i wciśnij enter.

Certyfikat został pomyślnie zainstalowany, każda z podanych domen/subdomen powinna być już zabezpieczona :slightly_smiling_face:
image

Dzięki za przeczytanie do końca, w razie problemów lub pytań pisz poniżej, a postaram się pomóc :smile:

Poradnik miesiąca: lipiec 2020

19 polubień

Super, poradnik niestety mam problem przy ostatniej praktycznie rzeczy… Po instalacji phpmyadmin, gdy wchodzę w przez MOJEIP/phpmyadmin - to pokazuje mi że taka strona nie istnieje :frowning:

Zainstalowałem to w folderze html, nie wiem czy zrobiłem dobrze… Nie chce miec phpmyadmin na domenie ale chce miec zainstalowane zeby moc korzystac z tego panelu, i baz danych. Czy jednak musze miec domene podpieta?

1 polubienie

Nie potrzebujesz domeny. Czy na pewno wpisujesz prawidłowe wielkości znaków? W poradniku jest phpMyAdmin, a ty napisałeś phpmyadmin :thinking:

3 polubienia

O kurcze, nie wiedziałem że ilość znaków ma znaczenie. Dzięki Panie nosaczu, ale mam jeszcze pytanie bo chyba zrobiłem sobie znowu burdel w plikach jak odinstalować phpmyadmin? Bo tamten recznie usunalem i zainstalowalem w innym katalogu znowu, nie zrobilem czegos źle?

1 polubienie

wystarczy usunąć katalog z nim, można zrobić to przez jakiegoś klienta sftp, lub wykonując polecenie

rm -rf phpmyadmin

jeżeli użyłeś jednego z powyższych sposobów to zrobiłeś wszystko jak najbardziej prawidłowo :wink:

3 polubienia

Panie nosaczu a czy jak podpialbym domene kiedys, i zrobilbym ten SSL, i wczesniej .htaccess to wszystko bedzie mi dzialac tak samo prawidlowo jak na gotowym hostingu?

1 polubienie

tak :slightly_smiling_face:

3 polubienia

Super! Udało mi się to zrobić, natomiast taki błąd się pojawił, uprawnień brakuje jakiś, nie wiem czy to uprawnienia konta, czy jak?

1 polubienie

czy na pewno nie pominąłeś żadnej z tych komend?

3 polubienia

Nie, wpisywałem je osobno linijka po linijce, dobrze? A jak coś źle zrobiłem to musze usunąć swój nick i jeszcze raz zrobić? Jak to sie usuwa?

1 polubienie

spróbuj jeszcze raz wykonać komendę zaczynającą się od GRANT pamiętając o podmianie nazwy użytkownika i przeładuj uprawnienia komendą FLUSH PRIVILEGES;

3 polubienia

Zrobiłem i nie działa :confused:

CREATE USER 'Keendi'@'%' IDENTIFIED BY 'UKRYŁEM_HASŁO';
GRANT ALL PRIVILEGES ON * . * TO 'Keendi'@'%';
FLUSH PRIVILEGES;

Może muszę usunąć konto moje i dodac jeszcze raz??

1 polubienie

wykonaj komendę
GRANT ALL PRIVILEGES ON *.* TO 'Keendi'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;

1 polubienie

Nadal nie mam uprawnień :frowning: Moze naprawdę trzeba usunąć moje konto i dodać ponownie? Tylko zielonego pojęcia nie mam jak to zrobić

1 polubienie

Spróbuj utworzyć bazę
obraz

1 polubienie

Klikam w to, i nic się nie dzieje :frowning:, innych czystych baz danych też nie mogę tworzyć

EDIT: Może podaj mi komendę na usunięcie mnie z mariaDB, może dzięki temu stworzę jeszcze raz konto i zadziała?

1 polubienie

spróbuj utworzyć użytkownika bez dużych liter w jego nazwie, lub zaloguj się do PMA bez użycia dużych liter.

3 polubienia

Utwórz użytkownika lokalnego

Wywal tego starego

DROP USER 'Keendi'@'%';
2 polubienia

Teraz to już na pewno coś zepsułem są 2 te same Nicki :frowning:
Komenda na usuwanie nie działa mi albo ją źle wpisuję… :confused:

1 polubienie

Dobra jakimś cudem usunąłem te 2 konta, ale była na to inna trochę komenda.

Nie mam jednej bazy tutaj stworzonej, mimo to wszystko jest już dobrze?image

1 polubienie