2.7.4. Проксування трафіку у веб-застосунки
Тільки для бізнес-хостингу
Можливість запускати веб-застосунки доступна тільки на бізнес-хостингу і входить у вартість тарифу. При зміні тарифу на віртуальний хостинг веб-застосунки перестануть працювати.На хостингу доступна можливість проксувати HTTP-трафік на локальну IP-адресу, завдяки чому можна запускати застосунки на PHP, Python і Go.
Схема роботи
Ми видаємо вам унікальну локальну IP-адресу виду 127.*.*.*.*, де * — будь-яке число від 0 до 255, і порт за замовчуванням — 3000. Ви використовуєте ці значення у своєму застосунку — вказуєте їх у команді запуску або безпосередньо в коді.
Порядок обробки запиту:
- Запит надходить на загальний сервер через порт
80або443. - На основі імені хоста перенаправляється застосунку на локальну IP-адресу.
- Застосунок отримує дані, обробляє їх і повертає відповідь.
Реальна IP-адреса відвідувача передається в заголовку X-REAL-IP.
Додаткові порти на виділеному IP
За наявності виділеного IP на нього можна додатково приймати запити на будь-який порт у діапазоні3000-3100. Це дає змогу одному застосунку приймати трафік на сайт і одночасно приймати інший тип трафіку на порт виділеного IP. Також можна запускати застосунок і без проксування запитів на сайт — зайняти порт на виділеному IP і обробляти різні з'єднання тільки на ньому.
Запуск застосунку
- Відкрийте розділ «Налаштування сайту».
- Переключіть «Веб-сервер» на «Проксування трафіку» і збережіть зміни:

- Розмістіть файли вашого застосунку на хостингу в потрібному каталозі.
- Відкрийте розділ «Налаштування веб-застосунку».
- Вкажіть каталог і команду для запуску вашого застосунку:

- Каталог запуску — шлях до каталогу, з якого має запускатися ваш застосунок. Якщо залишити порожнім, буде використовуватися кореневий каталог сайту.
- Команда запуску — команда для запуску вашого застосунку. Можна використовувати стандартні оператори керування Bash (
&&,;,||) для об'єднання кількох послідовних команд. У команді запуску або в коді самого застосунку використовуйте локальну IP-адресу та порт із блоку «Проксування HTTP-трафіку в застосунок»:
- Збережіть зміни та перевірте роботу застосунку:

У блоці «Логи застосунку» можна в реальному часі стежити за логами в процесі запуску і роботи застосунку.
Приклади запуску застосунків
Увага!
У всіх командах замістьexample.com використовуйте адресу вашого домену, замість sub — назву вашого піддомену.
PHP
- У розділі «Налаштування хостинг-акаунта» (або «Хостинг → Налаштування хостинг-акаунта») встановіть для PHP версію 8.0 або вище та збережіть зміни.
- Підключіться до хостингу по SSH.
- Перейдіть у каталог піддомену, в якому будуть розташовані файли вашого проєкту:
cd example.com/sub - Встановіть Workerman:
composer require workerman/workerman - Створіть файл
index.phpз таким вмістом (приклад «An http server» з репозиторію Workerman):<?php use Workerman\Worker; require_once __DIR__ . '/vendor/autoload.php'; // #### http worker #### $http_worker = new Worker('http://0.0.0.0:2345'); // 4 processes $http_worker->count = 4; // Emitted when data received $http_worker->onMessage = function ($connection, $request) { //$request->get(); //$request->post(); //$request->header(); //$request->cookie(); //$request->session(); //$request->uri(); //$request->path(); //$request->method(); // Send data to client $connection->send("Hello World"); }; // Run all workers Worker::runAll();У рядку
$http_worker = new Worker('http://0.0.0.0:2345');замість0.0.0.0і2345використовуйте IP-адресу і порт зі сторінки налаштувань веб-застосунку. - На сторінці з налаштуваннями веб-застосунку вкажіть команду запуску (у команді використовуйте свої дані):
/usr/local/php84/bin/php -c /home/example/.system/php/sub.example.com.ini /home/example/example.com/sub/index.php start - Збережіть зміни, запустіть застосунок і перевірте роботу сайту.
У разі успіху на сайті має відображатися текст «Hello World».
- У розділі «Налаштування хостинг-акаунта» (або «Хостинг → Налаштування хостинг-акаунта») встановіть для PHP версію 8.0 або вище та збережіть зміни.
- Підключіться до хостингу по SSH.
- Перейдіть у каталог піддомену, в якому будуть розташовані файли вашого проєкту:
cd example.com/sub - Встановіть Workerman:
composer require workerman/workerman - Створіть файл
index.phpз таким вмістом (приклад «A websocket server» з репозиторію Workerman):<?php use Workerman\Worker; require_once __DIR__ . '/vendor/autoload.php'; // Create a Websocket server $ws_worker = new Worker('websocket://0.0.0.0:2346'); // Emitted when new connection come $ws_worker->onConnect = function ($connection) { echo "New connection\n"; }; // Emitted when data received $ws_worker->onMessage = function ($connection, $data) { // Send hello $data $connection->send('Hello ' . $data); }; // Emitted when connection closed $ws_worker->onClose = function ($connection) { echo "Connection closed\n"; }; // Run worker Worker::runAll();У рядку
$ws_worker = new Worker('websocket://0.0.0.0:2346');замість0.0.0.0і2345використовуйте IP-адресу і порт зі сторінки налаштувань веб-застосунку. - На сторінці з налаштуваннями веб-застосунку вкажіть команду запуску (у команді використовуйте свої дані):
/usr/local/php84/bin/php -c /home/example/.system/php/sub.example.com.ini /home/example/example.com/sub/index.php start - Збережіть зміни та запустіть застосунок.
- Перевірте роботу WebSocket:
- Відкрийте в браузері консоль розробника.
- По черзі виконайте команди (у першій команді використовуйте адресу вашого сайту):
const ws = new WebSocket('wss://example.com') ws.onmessage = m => console.log(m.data) ws.send('lorem ipsum') - У разі успіху в консолі має відображатися текст «Hello lorem ipsum».
Django
Запуск Django 4.2 на Python 3.10:
- У розділі «Налаштування хостинг-акаунта» (або «Хостинг → Налаштування хостинг-акаунта») встановіть для Python версію 3.10 або вище та збережіть зміни.
- Підключіться до хостингу по SSH.
- Встановіть Django:
pip install --user Django - Перейдіть у каталог піддомену, в якому будуть розташовані файли вашого проєкту:
cd example.com/sub - Створіть новий проєкт з назвою
project:django-admin startproject project . - Застосуйте міграції:
python manage.py migrate - Відредагуйте файл налаштувань вашого проєкту
project/settings.pyі в рядкуALLOWED_HOSTS = []у квадратних дужках вкажіть в одинарних лапках адресу вашого сайту'sub.example.com'. - На сторінці з налаштуваннями веб-застосунку вкажіть команду запуску:
python3.10 manage.py runserver 127.*.*.*:3000У команді замість
127.*.*.*і3000використовуйте IP-адресу і порт зі сторінки налаштувань веб-застосунку. - Збережіть зміни, запустіть застосунок і перевірте роботу сайту.
У разі успіху на сайті має відобразитися сторінка з текстом «The install worked successfully! Congratulations!».
Вирішення проблеми зі стилями в адмін-панелі Django:
- Відредагуйте файл налаштувань вашого проєкту
project/settings.pyі після рядкаSTATIC_URL = 'static/' додайте такі:import os STATIC_ROOT = os.path.join(BASE_DIR, 'static') - У каталозі проєкту виконайте команду:
python manage.py collectstatic
Flask
Запуск Flask 2.3 на Python 3.10:
- У розділі «Налаштування хостинг-акаунта» (або «Хостинг → Налаштування хостинг-акаунта») встановіть для Python версію 3.10 або вище та збережіть зміни.
- Підключіться до хостингу по SSH.
- Перейдіть у каталог піддомену, в якому будуть розташовані файли вашого проєкту:
cd example.com/sub - Створіть віртуальне середовище Python:
python -m venv .venv - Активуйте створене віртуальне середовище:
source .venv/bin/activate - Встановіть Flask:
pip install --user Flask - Деактивуйте віртуальне середовище:
deactivate - Створіть файл
hello.pyз таким вмістом (приклад «A Minimal Application» з офіційної документації):from flask import Flask app = Flask(__name__) @app.route("/") def hello_world(): return "<p>Hello, World!</p>" - На сторінці з налаштуваннями веб-застосунку вкажіть команду запуску:
source .venv/bin/activate && python3.10 -m flask --app hello.py run --host 127.*.*.* --port 3000У команді замість
127.*.*.*і3000використовуйте IP-адресу і порт зі сторінки налаштувань веб-застосунку. - Збережіть зміни, запустіть застосунок і перевірте роботу сайту.
У разі успіху на сайті відобразиться текст «Hello, World!».
Go
Запуск простого застосунку на Go 1.20:
- У розділі «Налаштування хостинг-акаунта» (або «Хостинг → Налаштування хостинг-акаунта») встановіть для Go версію 1.20 або вище та збережіть зміни.
- Підключіться до хостингу по SSH.
- Перейдіть у каталог піддомену, в якому будуть розташовані файли вашого проєкту:
cd example.com/sub - Створіть файл
simple.goз таким вмістом (приклад «Introducing the net/http package (an interlude)» з офіційної документації):package main import ( "fmt" "log" "net/http" ) func handler(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "Hi there, I love %s!", r.URL.Path[1:]) } func main() { http.HandleFunc("/", handler) log.Fatal(http.ListenAndServe("127.*.*.*:3000", nil)) }У рядку
log.Fatal(http.ListenAndServe("127.*.*.*:3000", nil))замість127.*.*.*і3000використовуйте IP-адресу і порт зі сторінки налаштувань веб-застосунку. - Скомпілюйте створений файл:
go build simple.go - Встановіть для скомпільованого файлу права
750:chmod 750 simple - На сторінці з налаштуваннями веб-застосунку вкажіть команду запуску:
./simple - Збережіть зміни, запустіть застосунок і перевірте роботу сайту.
У разі успіху на сайті має відображатися текст «Hi there, I love!» з назвою сторінки, до якої ви звернулися.
Коментарі
1. треба створити базу даних на в розділі "Бази даних"
2. і просто вписати її в settings.py
DATABASES = {
'default': {
'ENGINE': 'mysql.connector.django',
'NAME': 'назва бази даних - вказана в панелі керування базами даними',
'HOST': 'localhost',
'USER': 'юзернейм - вказаний в панелі керування базами даними',
'PASSWORD': 'пароль - вказаний в панелі керування базами даними',
'PORT': '3306'
}
}
Чи є якісь заготовлені команди в linux щоб зробити рестарт додатку через SSH? Чи прийдеться все таки через HTTP запит на API хостингу робити перезапуск додатку?