Wersja PHP od 5.6 do 8.5 osobno dla każdej domeny, cron, baza MariaDB i Redis - dla Laravela, Symfony i własnych aplikacji PHP.
Hosting PHP to serwer, który wykonuje skrypty PHP i udostępnia im bazę danych. Przy aplikacjach we frameworkach, takich jak Laravel czy Symfony, liczy się więcej niż sama obsługa PHP: wybór wersji interpretera, obsługa reguł przepisywania adresów w .htaccess, zadania cron, dostęp do bazy danych i możliwość zmiany limitów, na przykład pamięci czy czasu wykonania skryptu.
Nasz hosting działa na serwerze OpenLiteSpeed z dyskami NVMe. Wersję PHP wybierasz osobno dla każdej domeny - od 5.6 do 8.5, domyślnie 8.3. Baza MariaDB jest dostępna przez localhost, zadania cron ustawisz w panelu DirectAdmin we wszystkich pakietach, a Redis jako cache działa dla PHP do 8.4. Limity z php.ini zmieniasz samodzielnie w panelu.
Uczciwie o granicach: hosting współdzielony dobrze obsługuje aplikacje, które odpowiadają na żądania HTTP i wykonują zadania z crona. Jeśli Twoja aplikacja potrzebuje stale działających procesów w tle, własnych usług albo niestandardowej konfiguracji serwera, lepszym wyborem będzie serwer VPS - piszemy o tym niżej.
Hosting 20GB (20 GB, 99 zł netto za 1. rok, odnowienie 119 zł netto) - Aplikacja we frameworku potrzebuje więcej niż prosta strona: katalog vendor z tysiącami plików, cache, logi, bazę danych, a przy większym ruchu więcej jednoczesnych procesów PHP. Pakiet 20 GB ma wyższy limit plików, więcej procesów PHP i więcej mocy procesora niż pakiety do 10 GB, a kopie zapasowe plików i baz danych powstają w nim co 12 godzin z 45-dniową historią. Cena za pierwszy rok obowiązuje przy pierwszym hostingu na koncie. Mniejszy projekt, na przykład prosty panel dla kilku osób albo aplikacja w fazie testów, zmieści się w pakiecie Hosting 10 GB (36 zł netto za 1. rok, odnowienie 79 zł netto). Przy kilku aplikacjach albo większym ruchu wybierz Hosting 50 GB (199 zł netto za 1. rok, odnowienie 239 zł netto). Jeśli aplikacja potrzebuje własnych usług, stale działających workerów kolejek albo pełnej kontroli nad konfiguracją, wybierz serwer VPS.
Ceny netto za rok, do których doliczamy 23% VAT. Promocyjna cena pierwszego roku obowiązuje przy pierwszym hostingu na koncie. Dla aplikacji PHP poza miejscem na dysku warto porównać liczbę procesów PHP, pamięć dla procesu, limit plików i liczbę baz danych - te parametry decydują, czy framework działa płynnie.
| Pakiet | Hosting 10 GB | Hosting 20 GB | Hosting 50 GB | Hosting 100 GB |
|---|---|---|---|---|
| Cena za 1. rok (netto) | 36 zł | 99 zł | 199 zł | 299 zł |
| Odnowienie za rok (netto) | 79 zł | 119 zł | 239 zł | 399 zł |
| Wersje PHP | 5.6 - 8.5 | 5.6 - 8.5 | 5.6 - 8.5 | 5.6 - 8.5 |
| Redis Cache (PHP do 8.4) | tak | tak | tak | tak |
| Miejsce na dysku | 10 GB NVMe | 20 GB NVMe | 50 GB NVMe | 100 GB NVMe |
| Bazy danych MySQL | 10 | 20 | 50 | bez limitu |
| Liczba domen | 20 | 50 | bez limitu | bez limitu |
| Liczba rdzeni procesora | 1 | 2 | 3 | 4 |
| Liczba jednoczesnych procesów PHP/CRON | 20 | 50 | 100 | 150 |
| Maksymalne użycie pamięci przez proces PHP | 1 GB | 1 GB | 1 GB | 1 GB |
| Limit ilości plików na koncie | 500 000 | 1 000 000 | 1 000 000 | 2 000 000 |
| Odczyt z dysku I/O | 100 MB/s | 100 MB/s | 150 MB/s | 150 MB/s |
| Ilość odczytów z dysku IOPS | 2048/s | 2048/s | 5120/s | 5120/s |
| Maksymalny czas wykonywania zapytania SQL | 120s | 120s | 120s | 120s |
| Kopie zapasowe | co 24h | co 12h | co 12h | co 6h |
| Przechowywanie kopii zapasowych | 30 dni | 45 dni | 45 dni | 60 dni |
Redis działa dla PHP od 5.6 do 8.4 - w PHP 8.5 rozszerzenie Redis jeszcze się nie ładuje.
Na hostingu dostępne są wersje PHP 5.6, 7.2, 7.3, 7.4, 8.1, 8.2, 8.3, 8.4 i 8.5, a domyślnie ustawiona jest 8.3. Wersję wybierasz osobno dla każdej domeny w panelu DirectAdmin, w zaawansowanych funkcjach, w opcji „Wersja PHP (per domena)”. Dzięki temu nowa aplikacja może działać na PHP 8.4, a stary system na tym samym koncie - na wersji, której wymaga. Pamiętaj, że wersje do 8.1 włącznie nie otrzymują już poprawek bezpieczeństwa od twórców PHP, dlatego zostawiaj je tylko dla aplikacji, których nie da się szybko zaktualizować.
Laravel oczekuje, że katalogiem głównym strony będzie jego folder public, a na hostingu katalogiem głównym domeny jest domains/twojadomena.pl/public_html. Standardowe i bezpieczne rozwiązanie wygląda tak: cały projekt wgrywasz do osobnego katalogu obok public_html, na przykład domains/twojadomena.pl/laravel, a do public_html kopiujesz tylko zawartość folderu public (index.php, .htaccess, pliki CSS, JS i obrazy). Następnie w public_html/index.php poprawiasz ścieżki zaczynające się od __DIR__.'/../' tak, żeby wskazywały katalog projektu, na przykład __DIR__.'/../laravel/vendor/autoload.php' i __DIR__.'/../laravel/bootstrap/app.php'. Dzięki temu plik .env, kod aplikacji i katalog storage nie są dostępne z przeglądarki.
Symfony i większość nowoczesnych frameworków PHP działa według tego samego wzorca: wszystkie żądania trafiają do jednego pliku index.php w katalogu public, czyli tak zwanego front controllera. W Symfony postępujesz jak w Laravelu - zawartość public trafia do public_html, a w index.php poprawiasz ścieżkę do pliku vendor/autoload_runtime.php w katalogu projektu. Przekierowanie wszystkich adresów do index.php realizują reguły .htaccess: RewriteEngine On, warunki RewriteCond %{REQUEST_FILENAME} !-f oraz !-d i reguła RewriteRule ^ index.php [L]. Serwer OpenLiteSpeed wykonuje reguły RewriteEngine, RewriteCond, RewriteRule i Redirect z pliku .htaccess, więc standardowe pliki .htaccess dostarczane z frameworkami działają.
OpenLiteSpeed nie wykonuje dyrektyw Require, Deny from i Allow from ani zabezpieczenia hasłem z pliku .htaccess. To ważne przy aplikacjach PHP: nie chroń plików konfiguracyjnych, logów ani kopii bazy regułą Deny w .htaccess, bo taka reguła nie zadziała. Wrażliwe pliki trzymaj poza public_html - dokładnie tak, jak opisaliśmy przy Laravelu. Przekierowanie na HTTPS i wybór adresu z www lub bez www ustawisz w ustawieniach domeny w DirectAdmin. Listowanie zawartości katalogów jest na serwerze wyłączone.
Bazę danych tworzysz w DirectAdmin w sekcji „MySQL Management” przyciskiem „Create new Database”. Panel dodaje do nazwy bazy przedrostek z nazwą konta, na przykład konto_aplikacja, i od razu tworzy użytkownika z uprawnieniami. Serwerem baz danych jest MariaDB, zgodna z MySQL, więc w Laravelu ustawiasz w pliku .env DB_CONNECTION=mysql i DB_HOST=localhost, a w Symfony adres DATABASE_URL z hostem localhost. Zdalne połączenia z bazą z zewnątrz są domyślnie zamknięte ze względów bezpieczeństwa. Do przeglądania tabel i importu danych służy phpMyAdmin, który otworzysz z panelu przyciskiem przy bazie.
Zadania cykliczne ustawiasz w DirectAdmin w zaawansowanych funkcjach, w sekcji „Cron Jobs” - cron jest dostępny we wszystkich pakietach. Harmonogram Laravela wymaga jednego zadania uruchamianego co minutę, które wywołuje polecenie php z plikiem artisan i argumentem schedule:run, na przykład php /home/nazwakonta/domains/twojadomena.pl/laravel/artisan schedule:run. Pamiętaj, że cron uruchamia PHP z wiersza poleceń, którego wersja nie musi być taka sama jak wersja ustawiona dla domeny - jeśli aplikacja wymaga konkretnej wersji, zapytaj nas o właściwą ścieżkę do PHP. Zadania cron wliczają się do limitu jednoczesnych procesów PHP i CRON w pakiecie.
Najczęściej zmieniane ustawienia z php.ini, czyli limit pamięci (memory_limit), maksymalny rozmiar wgrywanego pliku (upload_max_filesize i post_max_size) oraz czas wykonania skryptu (max_execution_time), zmienisz samodzielnie w panelu, bez kontaktu z nami. Górne granice wynikają z limitów pakietu, które znajdziesz w tabeli na stronie hostingu WWW. Redis jako cache i magazyn sesji jest dostępny we wszystkich pakietach dla PHP do 8.4 - w PHP 8.5 rozszerzenie Redis jeszcze się nie ładuje. Listę załadowanych rozszerzeń PHP sprawdzisz funkcją phpinfo(); jeśli czegoś brakuje albo chcesz włączyć Redis, napisz do nas.
Serwer VPS jest lepszy, gdy aplikacja potrzebuje procesów działających bez przerwy, na przykład workerów kolejek uruchamianych przez supervisora, serwera WebSocket, własnej wersji bazy danych, niestandardowych rozszerzeń PHP albo pełnego dostępu administratora. Na hostingu kolejki Laravela obsłużysz z crona poleceniem queue:work z opcją --stop-when-empty, co wystarcza przy umiarkowanej liczbie zadań. Przy większej skali sprawdź serwery VPS - serwer możemy też administrować za Ciebie. Jeśli Twoim projektem jest WordPress, zobacz hosting WordPress.
Ustaw wersję wymaganą przez wydanie frameworka, którego używasz - minimalną wersję PHP podaje dokumentacja Laravela i Symfony dla każdego wydania. Nowsze wydania frameworków wymagają PHP z gałęzi 8.x, dlatego w praktyce wybierasz 8.3 (domyślną na naszym hostingu) albo 8.4. Wersję zmieniasz samodzielnie w DirectAdmin, osobno dla każdej domeny.
Tak. Wersję PHP ustawiasz osobno dla każdej domeny w panelu DirectAdmin, w opcji „Wersja PHP (per domena)”. Na jednym koncie możesz więc uruchomić nową aplikację na PHP 8.4 i starszy system na PHP 7.4.
Katalogiem głównym domeny na hostingu jest public_html. Projekt wgraj do osobnego katalogu obok public_html, a do public_html skopiuj zawartość folderu public i popraw w index.php ścieżki do katalogu projektu. Pliki aplikacji, w tym .env, pozostają wtedy niedostępne z przeglądarki.
Przygotuj aplikację z zależnościami na swoim komputerze, spakuj ją do archiwum ZIP i wgraj przez menedżer plików w DirectAdmin albo przez FTP z szyfrowaniem TLS, a potem rozpakuj na serwerze. Katalog vendor zawiera wiele plików, dlatego przy dużych projektach sprawdź limit liczby plików pakietu w tabeli na stronie hostingu WWW. Jeśli przenosisz działającą aplikację od innego dostawcy, możesz skorzystać z bezpłatnej migracji.
Tak, w zakresie przepisywania adresów - serwer wykonuje reguły RewriteEngine, RewriteCond, RewriteRule i Redirect. Nie działają natomiast dyrektywy Require, Deny from, Allow from ani hasła z .htaccess, dlatego pliki, których nie chcesz udostępniać, trzymaj poza public_html.
Zdalne połączenia z bazą danych są domyślnie zamknięte ze względów bezpieczeństwa. Aplikacja na hostingu łączy się z bazą przez localhost, a dane przeglądasz i importujesz w phpMyAdmin, który otworzysz z panelu DirectAdmin.
Tak, ale nie jako proces działający bez przerwy. Ustaw zadanie cron, które co minutę uruchamia queue:work z opcją --stop-when-empty - worker przetworzy oczekujące zadania i zakończy działanie. Jeśli kolejka musi działać stale albo zadań jest bardzo dużo, wybierz serwer VPS.
Jeszcze nie - rozszerzenie Redis ładuje się w PHP od 5.6 do 8.4, a w PHP 8.5 jeszcze nie działa. Jeśli aplikacja korzysta z Redisa jako cache albo magazynu sesji, ustaw dla domeny PHP 8.4 lub 8.3.