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 😄
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 22.04
- Ubuntu 20.04
- Ubuntu 18.04
- Debian 11
- 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 😉
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. Następnie zostaniesz zapytany, czy chcesz ustawić hasło dla konta root. Zalecam wyrazić zgodę i ustawić hasło. 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. Przedostatni krok to pytanie o usunięcie testowej bazy danych, zalecam zgodzić się na to. Ostatni już krok to pytanie o przeładowanie uprawnień. Oczywiście należy zgodzić się.
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
😉
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.
ServerAdmin twoj@adres.email
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
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:
ServerAdmin twoj@adres.email
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
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
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
🙂
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 ``.
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 ``.
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.
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ć 😄
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 🙂
Dzięki za przeczytanie do końca, w razie problemów lub pytań pisz poniżej, a postaram się pomóc 😄