Uruchomienie aplikacji Python na usłudze hostingowej

Artykuł dla panelu:
direct_Admin
cyber_Admin

Uwaga! Na wstępie chcielibyśmy podkreślić, że nie świadczymy wsparcia w zakresie administracji i debugowania aplikacji Python. Poniższa instrukcja przedstawia jedynie opis uruchomienia aplikacji za pomocą narzędzia dostępnego w panelu administracyjnym hostingu.


Dla usług WebAs jest możliwość skorzystania z Pythona w trybie CGI lub WSGI ale funkcjonalność jest dostępna tylko dla serwerów wirtualnych oraz serwerów dedykowanych.

Dla usług hostingowych jest możliwe uruchomienie aplikacji Python z poziomu modułu Aplikacje Python w panelu Direct_Admin.

Zalecane jest posiadanie pakietu z dostępem do SSH.

Aby uruchomić aplikację Python wykonaj następujące kroki:

1. Dodanie aplikacji
Nową aplikację można dodać z poziomu panelu hostingu w „Pozostałe ustawienia” -> „Aplikacje Python”

Następnie wybieramy opcję „Create Aplication”

2. Konfiguracja aplikacji
Po stworzeniu aplikacji przechodzimy do okna edycji, gdzie możemy zarządzać wersją Pythona, katalogiem głównym aplikacji czy plikami konfiguracyjnymi.

Python version
Wybieramy jedną z dostępnych wersji Python.

Application root
W tym miejscu podajemy ścieżkę do katalogu z naszą aplikacją. Katalog domowy aplikacji nie musi
znajdować się w katalogu domowym domeny, może być to dowolny katalog użytkownika.
Przykład ścieżki dla katalogu domyślnego public_html.
/home/user/domains/domain-name/public_html

Ścieżkami do katalogu domowego można zarządzać z poziomu panelu administracyjnego hostingu w „Serwer www i domeny” -> „Przypisz katalog domeny”.
Z uwagi na to, że zostanie utworzony specjalny wpis do pliku .htaccess przekierowujący z katalogu domeny głównej do katalogu naszej aplikacji, zalecamy tworzyć aplikacje na osobnych domenach z odseparowanymi katalogami.

Application URL
Tutaj należy podać nazwę domeny, pod jaką będzie odpowiadać aplikacja

Application startup file
Należy podać ścieżkę do pliku startowego – może to być plik zdefiniowany przez osobę, która tworzyła aplikację, jednak najczęściej jest to plik wsgi.py (sugerujemy podawać ścieżkę bezpośrednią)
/home/user/domains/domain-name/public_html/wsgi.py
Plik musi znajdować się w katalogu aplikacji lub poniżej. Ścieżkę można potem edytować.

  • wsgi.py – plik startowy aplikacji, tworzony automatycznie podczas uruchomienia polecenia
    Create application.
    Uwaga! W przypadku konfiguracji istniejącej aplikacji i podawania ścieżki do pliku wsgi.py
    zostanie on zastąpiony właśnie templatką utworzoną przez selector. Należy wykonać kopię pliku wsgi.py, który jest obecnie wgrany.
  • passenger_wsgi.py
    Plik odpowiadający za aktwyną pracę aplikacji.W tym pliku nie dokonujemy modyfikacji!
  • stderr.log
    Lista błędów dla samej aplikacji.

Application Entry point
Może być zdefiniowany przez osobę, która tworzyła aplikację, najczęściej jednak jest to słowo „application”
Entry point również uzupełnia się automatycznie jako słowo „application”.
Uwaga ! Entry point jako „application” należy dodać w przypadku Django, jednak dla równie
popularnego Flaska należy zdefiniować entry point jako „app” (również trochę inaczej będzie
wyglądać plik wsgi.py).

Zatwierdzenie Ustawień – Create
Po ustaleniu wstępnej konfiguracji generujemy aplikację przyciskiem „Create”. Zostanie
utworzone wirtualne środowisko. W katalogu głównym domeny tworzony jest też plik
.htaccess odpowiedzialny za ustawienia przekierowania na katalog aplikacji i działanie
Passenger’a. Z tego powodu zalecamy tworzenie aplikacji w wydzielonych domenach,
katalogach, aby nie kolidowały z innymi aplikacjami/stronami, zwłaszcza jeżeli chodzi o
ustawienia w pliku .htaccess


3. Sprawdzenie działania aplikacji
Na tym etapie należy sprawdzić, czy aplikacja Python poprawnie odpowiada. Pod zadeklarowaną nazwą domeny powinna zostać wyświetlona informacja o działającej wersji Pythona.
It works!
Python v3.10.4

Dopiero teraz można rozpocząć zgrywanie plików właściwej aplikacji.

4. Logowanie do wirtualnego środowiska
Aby korzystać z aplikacji Python, wymagane jest zalogowanie do wirtualnego środowiska poprzez SSH poleceniem dostępny u góry aplikacji w sekcji „Enter to the virtual environment.To enter to virtual environment, run the command.”
Po poprawnym zalogowaniu możemy odpytać dostępną wersję Python oraz wersję managera pip następującymi poleceniami:
python --version
pip --version

Uwaga #1 ! pip jest wbudowany dla Python dlatego będzie dostępny dopiero po zalogowaniu do
wirtualnego środowiska z uruchomionym serwerem Python.
Uwaga #2 ! Aplikacje Python mogą działać bez dostępu do SSH, aczkolwiek jest wskazane posiadanie dostępów SSH do pracy na wirtualnym środowisku i tam wykonywaniu dalszych skryptów.

Dodatkowe informacje

Run Pip Install & Configuration files
Żeby uruchomić run pip install należy ponownie podać ścieżkę do requirements.txt (również
bezwzględną):
/home/user/domains/domain-name/public_html/requirements.txt

Zalecamy jednak korzystać z konsoli SSH i wirtualnego środowiska.
Instalacja ze wskazaniem na plik:
pip install -r /home/user/path/requirements.txt

Upgrade managera pip
Aktualizację managera pip dokonujemy z poziomu SSH poleceniem:
pip install --upgrade pip
Następnie można dokonywać instalacji bibliotek, przez menadżer pip.

Zmienne środowiskowe
Zalecamy korzystanie z pliku .env jako miejsca do deklarowania zmiennych
środowiskowych.

Wskazanie na port
Domyślnie aplikacja uruchamiana jest na porcie http. Jeżeli chcemy skierować aplikację na konkretny port, można to zrobić z poziomu pliku .htaccess dla domeny w następujący sposób:
DirectoryIndex disabled
RewriteEngine On
RewriteRule ^$ http://127.0.0.1:NR_PORTU/ [P,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ http://127.0.0.1:NR_PORTU/$1 [P,L]

gdzie NR_PORTU – numer portu – najlepiej podać z zakresu: 35100:35599

FAQ – Najczęściej zadawane pytania/błędy

Aplikacja Python są dostępne na wszystkich serwerach współdzielonych. Dla Serwerów VPS i Dedykowanych Python jest dostępny z poziomu CLI.

Manager pip jest domyślnie dostępny wraz z serwerem Python. Upewnij się, czy jesteś poprawnie zalogowany do środowiska wirtualnego i czy serwer jest aktywny

Przykłady takich technologii to: Django, Flask, Tornado, Pyramid. Nie świadczymy wsparcia technicznego w zakresie administracji i instalacji dla tych technologii.

Hostingi współdzielone nie mają wsparcia dla baz danych typu PostgreSQL.

Jeżeli pojawia się problem z zatrzymaniem/usunięciem, należy najpierw zatrzymać dla niej procesy. Procesy można sprawdzić komendą ps aux lub htop z poziomu SSH. Można je zatrzymać komendą kill lub przy pomocy monitora procesów htop i wybrania opcji F9. Ważne: Przed usunięciem aplikacji nie należy usuwać plików Phyton oraz pliku .htaccess. Jeżeli dojdzie do takiej operacji, należy użyć opcji Destroy z poziomu Edycji aplikacji.

Jeżeli pojawia się komunikat o błędnej ścieżce, należy zatrzymać aplikację i dokonać edycji. Kiedy błąd dalej się pojawia a aplikacji nie można zatrzymać, konieczne będzie zatrzymanie procesu z poziomu SSH.

Uwaga! Na wstępie chcielibyśmy podkreślić, że nie świadczymy wsparcia w zakresie administracji i debugowania aplikacji Python. Poniższa instrukcja przedstawia jedynie opis uruchomienia aplikacji za pomocą narzędzia dostępnego w panelu administracyjnym hostingu.

Uruchomienie aplikacji Python na serwerze wymaga kilku kroków – od przygotowania środowiska wirtualnego, przez instalację zależności, aż po skonfigurowanie reverse proxy. Poniższy poradnik przeprowadzi Cię przez cały proces krok po kroku, korzystając z przykładu aplikacji opartej na frameworku Flask i serwerze Gunicorn.

Wymagania wstępne

Przed rozpoczęciem upewnij się, że:

  • Masz dostęp do serwera przez SSH.
  • W panelu cyber_Admin masz utworzoną domenę, która będzie obsługiwać aplikację.
  • Znasz podstawy obsługi terminala Linux.

Przygotowanie środowiska

1. Utwórz katalog dla aplikacji
Stwórz dedykowany katalog dla swojego projektu, np. w katalogu domowym:

mkdir -p ~/python_app

WAŻNE! Flaga -p tworzy całą ścieżkę katalogów, jeżeli jeszcze nie istnieje, dzięki temu polecenie nie zwróci błędu, gdy katalog nadrzędny jest już obecny.

2. Zainicjalizuj wirtualne środowisko Python
Przejdź do utworzonego katalogu i zainicjalizuj wirtualne środowisko:

cd ~/python_app
/usr/bin/python3 -m venv venv --copies

WAŻNE! Zalecamy użycie flagi --copies, która kopiuje pliki wykonywalne Pythona do katalogu venv zamiast tworzyć dowiązania symboliczne (symlinki). Dzięki temu unikniesz błędów związanych z brakiem możliwości utworzenia symlinka w niektórych środowiskach serwerowych.

3. Aktywuj środowisko wirtualne
Aktywuj utworzone środowisko poleceniem:

source venv/bin/activate

Po aktywacji na początku wiersza poleceń pojawi się prefiks (venv), który informuje, że środowisko wirtualne jest aktywne.

4. Zainstaluj zależności projektu
Zainstaluj wymagane biblioteki za pomocą pip. W tym przykładzie instalujemy Flask (framework webowy) oraz Gunicorn (serwer WSGI wymagany do skonfigurowania reverse proxy):

pip install Flask gunicorn

Jeśli Twój projekt posiada plik requirements.txt, możesz zainstalować wszystkie zależności jednym poleceniem: pip install -r requirements.txt

Tworzenie przykładowej aplikacji

1. Utwórz plik aplikacji
Utwórz plik app.py z przykładową aplikacją Flask:

nano app.py

Wklej następujący kod:

from flask import Flask
app = Flask(__name__)

@app.route('/')
def hello():
    return "Aplikacja Python (Flask) na serwerze działa poprawnie!"

if __name__ == '__main__':
    app.run()

Zapisz plik skrótem Ctrl+O, a następnie wyjdź z edytora skrótem Ctrl+X.

Uruchomienie aplikacji

1. Uruchom Gunicorn w tle
Uruchom serwer Gunicorn za pomocą nohup, dzięki czemu proces będzie działał w tle nawet po zakończeniu sesji SSH:

nohup gunicorn --bind 127.0.0.1:54322 app:app > app.log 2>&1 &

Jak działa to polecenie:

  • --bind 127.0.0.1:54322 – aplikacja nasłuchuje lokalnie na porcie 54322 (możesz wybrać inny wolny port).
  • app:app – pierwsza część to nazwa pliku (app.py), druga to nazwa obiektu Flask w tym pliku.
  • > app.log 2>&1 – logi aplikacji są zapisywane do pliku app.log.
  • & – uruchamia proces w tle.

2. Sprawdź, czy aplikacja działa
Upewnij się, że Gunicorn poprawnie wystartował, wysyłając testowe żądanie HTTP:

curl -si http://127.0.0.1:54322

Jeśli aplikacja działa poprawnie, w odpowiedzi zobaczysz kod HTTP 200 oraz treść zwróconą przez aplikację.

Konfiguracja reverse proxy przez .htaccess

1. Dezaktywuj środowisko wirtualne
Przed edycją pliku .htaccess dezaktywuj środowisko wirtualne — nie jest już potrzebne do dalszej konfiguracji:

deactivate

Po wykonaniu polecenia prefiks (venv) zniknie z wiersza poleceń, co potwierdza dezaktywację środowiska.

2. Edytuj plik .htaccess
Gdy aplikacja działa poprawnie, skonfiguruj przekierowanie ruchu z domeny do aplikacji. Otwórz plik .htaccess w katalogu public_html swojej domeny:

nano /home/UŻYTKOWNIK/sites/TWOJA_DOMENA/public_html/.htaccess

WAŻNE! Dokładną ścieżkę do katalogu domeny (Document Root) znajdziesz w panelu cyber_Admin – w ustawieniach swojej domeny. Skopiuj ją stamtąd, aby uniknąć literówek.

Wklej następujące reguły:

RewriteEngine On
RewriteRule ^(.*)$ http://127.0.0.1:54322/$1 [P,L]

Jak działa to polecenie:

  • RewriteEngine On – włącza moduł przepisywania URL.
  • RewriteRule ^(.*)$ http://127.0.0.1:54322/$1 [P,L] – wszystkie żądania do domeny są przekazywane (proxy) do lokalnego serwera Gunicorn na porcie 54322.

Zapisz plik skrótem Ctrl+O i wyjdź skrótem Ctrl+X.

Rozwiązywanie problemów

ProblemRozwiązanie
curl zwraca błąd połączeniaSprawdź, czy Gunicorn działa: ps aux | grep gunicorn. Jeśli nie — uruchom go ponownie poleceniem z Kroku 7.
Błąd przy tworzeniu venv (symlink)Upewnij się, że używasz flagi --copies przy poleceniu python3 -m venv.
Strona wyświetla błąd 502Zweryfikuj, czy port w .htaccess zgadza się z portem podanym w poleceniu Gunicorn (--bind).
Aplikacja zatrzymuje się po wylogowaniu SSHUpewnij się, że uruchamiasz Gunicorn z nohup i & na końcu polecenia.
Brak modułu Flask lub GunicornSprawdź, czy środowisko wirtualne jest aktywne (source venv/bin/activate), a następnie ponów instalację: pip install Flask gunicorn.

Podsumowanie

Po wykonaniu powyższych kroków Twoja aplikacja Python (Flask) jest uruchomiona na serwerze za pośrednictwem Gunicorn i dostępna publicznie przez domenę skonfigurowaną w cyber_Admin dzięki regułom reverse proxy w pliku .htaccess.