VPS to serwer wirtualny, który działa jak osobny serwer fizyczny, ale jest częścią większego serwera fizycznego podzielonego na kilka mniejszych, niezależnych jednostek. VPS daje użytkownikowi zasoby serwera i pełną kontrolę nad systemem, co oznacza, że można na nim instalować oprogramowanie, konfigurować system operacyjny, a nawet zarządzać zasobami, jakby to był dedykowany serwer. Serwer VPS jest świetnym rozwiązaniem w przypadku gdy zależy nam na dużych możliwościach konfiguracyjnych i elastyczności w instalacji oprogramowania na nim, ale z drugiej strony nie potrzebujemy na tyle dużej wydajności, aby inwestować w serwer dedykowany.

Dzisiaj większość operatorów hostingowych posiada w swojej ofercie serwery VPS lub tzw. instancje w chmurze, które oferują dodatkowe możliwości jak wykonywanie zrzutów całego serwera (snapshoty) oraz wygodniejsze, szybsze skalowanie serwerów w zależności od aktualnych potrzeb czy rozliczenia minutowe za wykorzystane zasoby.

Zakładam, że posiadasz już serwer VPS oraz że masz do niego dostęp root przez SSH. Jeżeli go nie posiadasz, polecam Ci chmurę Vultr.com gdzie stworzenie gotowego do pracy serwera zajmuje dosłownie 2–3 minuty. Dzięki rozliczaniu minutowemu, zapłacisz tylko za czas w którym korzystałeś z serwera - nie musisz płacić z góry za cały miesiąc.

Aktualizacja oprogramowania serwera

Na samym początku warto, abyś zaktualizował aktualnie posiadane oprogramowanie na serwerze. W tym celu uruchom z poziomu użytkownika root polecenia:

apt-get update
apt-get upgrade

Staraj się wykonywać tę operację regularnie, na przykład raz w tygodniu. Aktualizowanie oprogramowania na serwerze jest kluczowe dla jego bezpieczeństwa, ponieważ atakujący często wykorzystują luki w oprogramowaniu, aby przeprowadzać nieautoryzowane działania lub nawet przejąć kontrolę nad serwerem.

Instalacja i konfiguracja Apache

Apache jest bardzo popularnym, open-source’owym serwerem HTTP. Umożliwia postawienie zarówno prostej, statycznej strony internetowej jak i rozbudowanego serwisu. Obsługuje wiele języków programowania poprzez moduły, które można doinstalowywać w zależności od potrzeb.

Instalacja Apache

Bardzo możliwe, że posiadasz już Apache na swoim serwerze - jest on często dostępny w startowym zestawie oprogramowania wielu systemów, w tym Ubuntu. Aby to zweryfikować, wykonaj polecenie:

service apache2 status

Jeżeli nie zobaczysz informacji, która wskazywałaby na to, że Apache jest zainstalowany i uruchomiony, zainstaluj go poleceniem:

apt-get install apache2

Dodanie nowej strony do Apache

Aby dodać nową stronę do Apache, najlepiej utworzyć nowy plik wirtualnego hosta (virtual host), co pozwala na hostowanie wielu stron internetowych na jednym serwerze Apache. Dzięki temu rozwiązaniu możesz skierować wiele różnych domen na ten sam serwer i utrzymywać na nim różne, niezależne od siebie strony.

Zakładam, że posiadasz już domenę z ustawionym rekordem A, wskazującym na adres IP serwera. Jeśli nie, zaloguj się do panelu klienta firmy, w której kupiłeś domenę, i znajdź opcje takie jak ustawienia DNS lub strefy nazw. Następnie dodaj rekord typu A z wartością odpowiadającą adresowi IP serwera.

Utworzenia użytkownika z plikami strony

Utwórz nowego użytkownika w systemie do zarządzania plikami strony. Ze względów bezpieczeństwa pliki strony nigdy nie powinny należeć do użytkownika root. Zamiast tego powinny należeć do użytkownika stworzonego specjalnie w tym celu. Nowego użytkownika wraz z jego katalogiem domowym utworzysz za pomocą poniższej komendy (w tym przykładzie przyjęliśmy nazwę użytkownika www, ale możesz wybrać dowolną inną):

useradd -m -d /home/www www

Następnie zmodyfikujemy konfigurację Apache, aby jego usługa była uruchamiana właśnie jako użytkownik www. Dzięki temu Apache będzie miał dostęp tylko do plików strony, do których uprawnienia posiada ten użytkownik. W pliku /etc/apache2/envvars wprowadź poniższe ustawienia:

export APACHE_RUN_USER=www
export APACHE_RUN_GROUP=www

Utworzenie katalogu ze stroną

W kolejnym kroku utworzymy katalog, w którym będą przechowywane pliki strony. Wykonaj poniższe polecenie z poziomu użytkownika www (jeśli jesteś zalogowany jako root, możesz przełączyć się na użytkownika www za pomocą komendy su www), aby utworzone pliki miały odpowiednie uprawnienia:

cd /home/www
mkdir demo.ping.pl

Pliki strony możesz przesłać ręcznie (np. przez SFTP) lub, jeśli masz je w repozytorium GIT, wygodniejszą opcją będzie sklonowanie repozytorium bezpośrednio na serwerze. Dzięki temu, gdy będziesz chciał zaktualizować pliki strony, wystarczy jedno polecenie, aby pobrać najnowsze zmiany z repozytorium, bez potrzeby ręcznego przesyłania plików na serwer. Daje to również pewność, że pliki na serwerze są identyczne jak w Twoim lokalnym środowisku.

Repozytorium GIT do wcześniej utworzonego katalogu sklonujesz w następujący sposób (zwróć uwagę na kropkę na końcu polecenia git clone):

cd /home/www/demo.ping.pl
git clone git@github.com:username/reponame.git .

Zainstaluj potrzebne paczki i zbuduj kod strony, jeżeli Twoja strona tego wymaga.

Utworzenie strony w Apache

Posiadając już pliki strony na serwerze, możesz dodać stronę do konfiguracji Apache. W tym celu stwórz nowy plik w lokalizacji /etc/apache2/sites-available z rozszerzeniem .conf:

nano /etc/apache2/sites-available/demo.ping.pl.conf

i wprowadź następującą treść do utworzonego pliku:

<VirtualHost *:80>
        ServerName demo.ping.pl
        DocumentRoot /home/www/demo.ping.pl/public
</VirtualHost>
  • ServerName - tutaj wpisz domenę pod jaką strona będzie dostępna
  • DocumentRoot - to ścieżka do katalogu publicznego strony, czyli takiego w którym znajduje się plik index

Konfiguracja lokalizacji strony w Apache

Ze względów bezpieczeństwa Apache umożliwia dostęp tylko do ściśle określonych lokalizacji na serwerze. Dlatego musimy dodać lokalizację naszej strony do jego konfiguracji. W tym celu otwórz plik /etc/apache2/apache2.conf, znajdź sekcję, w której zdefiniowane są dozwolone lokalizacje i dodaj konfigurację odpowiadającą wybranej przez Ciebie ścieżce:

<Directory /home/www/demo.ping.pl/public>
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
</Directory>

AllowOverride All oznacza, że umożliwimy stronie nadpisanie ustawień Apache za pośrednictwem specjalnego pliku .htaccess, który jest bardzo często wykorzystywany przez strony napisane w PHP. Aby skorzystać z tej funkcji musimy dodatkowo włączyć ją w Apache poleceniem:

a2enmod rewrite

Aktywacja strony w Apache

Aktywuj utworzoną konfigurację dla nowego wirtualnego hosta i uruchom ponownie serwer Apache:

a2ensite demo.ping.pl.conf
service apache2 restart

Polecenie to utworzy link symboliczny do pliku strony utworzonego w poprzednim kroku w lokalizacji /etc/apache2/sites-enabled. Więc w razie problemów z tą komendą możesz spróbować utworzyć link ręcznie. Jeżeli zajdzie potrzeba wyłączenia strony, możesz to zrobić poleceniem a2dissite demo.ping.pl.conf lub po prostu usuwając link symobliczny z katalogu /etc/apache2/sites-enabled.

Modyfikacja ustawień zapory firewall

Istnieje dużo prawdopodobieństwo, że w Twoim systemie jest zainstalowany i uruchomiony firewall. Aby umożliwić dostęp do serwera przez protokoły http i https, wymagane jest otwarcie portów 80 i 443:

ufw allow 80
ufw allow 443

Instalacja darmowego certyfikatu SSL

Let’s Encrypt to urząd certyfikacji, który oferuje bezpłatne certyfikaty SSL. Warto z niego skorzystać, ponieważ obecnie strona internetowa niedostępna pod bezpiecznym protokołem HTTPS jest nie tylko mniej bezpieczna, ale również mniej widoczna w wynikach wyszukiwania. Zarówno przeglądarki, jak i wyszukiwarki promują strony korzystające z HTTPS, co oznacza, że strony bez certyfikatu SSL mogą być trudniej dostępne dla użytkowników.

Instalacja certbot

Będziemy potrzebować dwóch programów: certbot oraz python3-certbot-apache. Zainstalujemy je poleceniem:

apt-get install certbot python3-certbot-apache

Uzyskiwanie certyfikatu SSL

Certbot oferuje różne sposoby uzyskania certyfikatów SSL za pomocą wtyczek. Wtyczka Apache automatycznie przeprowadza konfigurację i w razie potrzeby przeładowuje ustawienia Apache. Aby z niej skorzystać, uruchom komendę:

certbot --apache

Uruchomiony zostanie proces uzyskiwania nowego certyfikata, który składa się z kilku kroków:

  • prośba o email - adres email wykorzystany ma być tylko do powiadomień związanych z certyfikatem
  • akceptacja regulaminu - po zapoznaniu się z treścią regulaminu wpisujemy A (agree) i potwierdzamy enterem
  • pytanie o udostępnienie adresu email fundacji non-profit - jeśli się nie zgadasz, wpisz N (no) i zatwierdź enterem
  • wybór stron dla których powinny zostać wygenerowane certyfikaty - najważniejszy krok. Powinna tutaj zostać wyświetlona lista stron dodanych do aktualnej konfiguracji Apache. Wybierz swoją stronę wpisując jej numer i zatwierdź enterem
  • pytanie o przekierowanie - czy chcesz, aby po wejściu na adres przez http:// nastąpiło automatyczne przekierowanie na https://? Przekierowanie jest zalecane

Jeżeli wszystko przebiegnie poprawnie, powinieneś zobaczyć potwierdzenie wygenerowania certyfikatu. Konfiguracja strony Apache została automatycznie zmodyfikowana.

Rekord błędu w Sentry

Po zrestartowaniu Apache poleceniem service apache2 restart, strona powinna być dostępna już pod protokołem https://.

Instalacja PHP i dodatkowych rozszerzeń

Tak naprawdę większość pracy mam już za sobą, bowiem instalacja PHP i MySQL jest już szybsza i mniej pracochłonna. PHP zainstalujemy poleceniem:

apt-get install php

Automatycznie zostanie zainstalowany również pakiet odpowiedzialny za integracje PHP z Apache. Jeżeli potrzebujemy dodatkowych rozszerzeń, możemy je doinstalować poleceniem:

apt-get install php-curl php-mbstring php-intl

Listę dostępnych rozszerzeń wyszukasz w repozytorium pakietów w następujący sposób:

apt-cache search php

Po zrestartowaniu Apache poleceniem service apache2 restart, PHP powinno być już dostępne dla Twojej strony. Jeśli potrzebujesz zmienić konfigurację PHP, znajdziesz ją w lokalizacji /etc/php/8.3/apache2/php.ini lub w podobnym katalogu, zależnie od wersji PHP zainstalowanej na Twoim systemie. Zwróć uwagę, że PHP posiada dwie niezależne konfiguracje – jedna dotyczy skryptów uruchamianych przez Apache, a druga jest przeznaczona dla skryptów uruchamianych bezpośrednio z poziomu konsoli (CLI). Plik konfiguracyjny dla CLI znajdziesz w /etc/php/8.3/cli/php.ini.

Instalacja i konfiguracja bazy danych MySQL

Jeżeli Twoja strona internetowa potrzebuje bazy danych MySQL, możesz ją zainstalować poleceniem:

apt-get install mysql-server

Utworzenie nowej bazy danych

Z poziomu konsoli root możesz zarządzać zainstalowaną bazą danych. Polecenie mysql spowoduje połączenie się z bazą danych jako bazodanowy użytkownik root. Zacznijmy od dodania nowej bazy, którą wykorzystamy do przechowywania danych dla strony internetowej:

CREATE DATABASE demopingpl;

Listę baz danych na serwerze sprawdzisz poleceniem:

SHOW DATABASES;

Utworzenie nowego użytkownika

Ze względów bezpieczeństwa, nie jest zalecane, aby klient (np. strona internetowa) bazy danych łączył się z nią wykorzystując użytkownika root. Do tego celu powinien zostać stworzony nowy użytkownik posiadający potrzebne uprawnienia (ale nie większe) tylko do wybranej bazy danych.

Nowego użytkownika utworzysz poleceniem:

CREATE USER 'www'@'localhost' IDENTIFIED WITH mysql_native_password BY 'TutajWpiszHaslo123!';

Następnie, nadaj dodanemu użytkownikowi wybrane uprawnienia do danej bazy danych:

GRANT CREATE, ALTER, DROP, INSERT, UPDATE, DELETE, SELECT ON demopingpl.* TO 'www'@'localhost';

Po każdej zmianie na poziomie uprawnień i użytkownikach bazy danych, przeładuj zmiany poleceniem:

FLUSH PRIVILEGES;

Baza danych powinna być już dostępna dla strony internetowej. Pozostało teraz utworzyć jej strukturę i wypełnić danymi. Polecam Ci do tego program HeidiSQL, który bardzo ułatwia pracę z bazą. Pamiętaj jednak, że przy domyślnych ustawieniach bazy, nie połączysz się z nią z innego hosta niż ten na którym jest zainstalowana. Nie jest też zalecane “otwieranie” bazy danych na cały internet. Zamiast tego, wypróbuj opcję połączenia się z serwerem MySQL za pośrednictwem tunelu SSH (HeidiSQL ma taką opcję).

FAQ

Na stronie wyświetla się błąd “Not Found”

  • upewnij się, że utworzyłeś stronę w Apache i ją włączyłeś (sprawdź katalog /etc/apache2/sites-enabled). Zweryfikuj wprowadzone ścieżki w pliku konfiguracyjnym strony

Na stronie wyświetla się błąd “Forbidden”

  • upewnij się, że w pliku /etc/apache2/apache2.conf wprowadziłeś poprawną lokalizację strony i zrestartowałeś Apache po zapisaniu zmian
  • sprawdź w pliku /etc/apache/envvars czy usługa Apache jest uruchomiona jako ten sam użytkownik co pliki strony

Strona nie wczytuje się

  • sprawdź odpowiedzi na dwa poprzednie problemy
  • sprawdź czy firewall (jeżeli go posiadasz) ma otwarte porty 80 i 443

Na stronie wyświetla się kod PHP

  • sprawdź czy zainstalowałeś PHP
  • włącz opcję short_open_tag w konfiguracji PHP, która umożliwi działanie skryptom osadzonym w skróconych znacznikach PHP (<? ?>). Pliku konfiguracyjnego PHP szukaj w lokalizacji podobnej do /etc/php/8.3/apache2/php.ini

Nie udaje się uzyskać certyfikatu

  • sprawdź czy domena na którą próbujesz uzyskać certyfikat kieruje ruch na adres IP danego serwera
  • sprawdź czy firewall (jeżeli go posiadasz) ma otwarte porty 80 i 443