Развертывание Django-сервера на хостинге Timeweb


📑 Методическое руководство: Развертывание Django-сервера на хостинге Timeweb

Цель: Создать бэкенд для мобильного путеводителя, настроить базу данных MySQL, подключить SSL-сертификат и запустить проект в интернет через независимый CGI-скрипт.

🛠️ Часть 1. Подготовка базы данных MySQL на хостинге

Перед запуском кода нам нужна база данных. На виртуальном хостинге Timeweb стандартная база SQLite3 не поддерживается из-за отсутствия системных библиотек, поэтому мы используем мощную и бесплатную MySQL.
  1. Зайдите в панель управления Timeweb ➡️ раздел «Базы данных» ➡️ кнопка «Создать базу данных».
  2. Задайте параметры:
    • Имя базы данных: Например, guide (Хостинг автоматически добавит префикс вашего аккаунта, получится что-то вроде itvekonru_guide).
    • Пользователь: Сделайте таким же — guide (полное имя будет itvekonru_guide).
    • Пароль: Придумайте надежный пароль и запишите его.
  3. Нажмите «Создать».

💻 Часть 2. Создание структуры проекта на компьютере (Локально)

На компьютере в терминале PyCharm (или VS Code) создается каркас нашего сервера galich_server.
# 1. Устанавливаем фреймворк Django стабильной ветки 4.2 (LTS)
pip install "Django>=4.2,<5.0"

# 2. Создаем главный проект сервера
django-admin startproject site1

# 3. Переходим в папку проекта и создаем приложение путеводителя
cd site1
python manage.py startapp guide

📝 Часть 3. Настройка конфигурации проекта (site1/settings.py)

Откройте файл site1/settings.py и внесите три критически важные правки для работы в интернете:

1. Боевой режим и доступы (В начале файла)

# Выключаем режим отладки для безопасности в сети
DEBUG = False

# Разрешаем серверу отвечать по вашему домену
ALLOWED_HOSTS = ['media.infostarting.ru', 'localhost', '127.0.0.1']

2. Подключение созданной базы данных MySQL (Замените блок DATABASES)

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'itvekonru_guide',       # Полное имя базы из панели Timeweb
        'USER': 'itvekonru_guide',       # Полное имя пользователя базы
        'PASSWORD': 'ваш_пароль_от_базы', # Пароль, который вы придумали
        'HOST': 'localhost',             # Для Timeweb всегда localhost
        'PORT': '3306',
    }
}

3. Защита форм, HTTPS и папки хранения картинок (В самый конец файла)

import os

# Пути для картинок и дизайна админки
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static')

MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')

# Доверенные адреса для безопасной авторизации (Защита CSRF)
CSRF_TRUSTED_ORIGINS = [
    'https://infostarting.ru',
    'http://infostarting.ru'
]

# Системные правила для работы через SSL-сертификат HTTPS на хостинге
SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')
CSRF_COOKIE_SECURE = True
SESSION_COOKIE_SECURE = True

⚙️ Часть 4. Системный обход ограничений хостинга (site1/__init__.py)

Поскольку на общем хостинге установлена старая версия базы данных MySQL 5.7, современный Django будет ругаться при запуске. Чтобы отключить эту внутреннюю проверку версий, откройте файл site1/__init__.py (он изначально пустой) и вставьте туда этот код-хитрость:
from django.db.backends.mysql import base

# Принудительно отключаем внутреннюю проверку версии MySQL в Django
base.DatabaseWrapper.check_database_version_supported = lambda self: None

🚀 Часть 5. Перенос файлов на хостинг и настройка Python 3.10

  1. Через «Файловый менеджер» Timeweb загрузите всю вашу папку проекта (например, упаковав её в ZIP-архив и распаковав на сервере) в корень вашего аккаунта. Структура папок должна выглядеть так:
    • /home/i/itvekonru/django_xap3f/public_html/ — здесь лежат ваши файлы проекта (manage.py, папка site1, папка guide).
  2. Зайдите в SSH-консоль Timeweb. Нам нужно активировать изолированное окружение с Python 3.10 и доустановить коннектор базы данных:
# Переходим в папку сайта
cd ~/django_xap3f/public_html

# Активируем наше виртуальное окружение Python 3.10
source ../django/bin/activate

# Устанавливаем драйвер для общения Python с MySQL
pip install mysqlclient

🗄️ Часть 6. Развертывание таблиц и создание Администратора

Прямо там же в SSH-консоли (убедитесь, что слева горят круглые скобки (django)) выполняем финальные команды базы данных [image_XTVYJc.png]:
# 1. Создаем структуру таблиц путеводителя в MySQL
python manage.py migrate

# 2. Собираем все файлы дизайна админки в одну общую папку
python manage.py collectstatic --noinput

# 3. Создаем профиль главного администратора (одной командой без вопросов кодировок Windows!)
DJANGO_SUPERUSER_PASSWORD="ВашПароль123!" python manage.py createsuperuser --noinput --username="galich_admin" --email="admin@media.infostarting.ru"

🌐 Часть 7. Запуск сайта через CGI-скрипт (Финальная склейка)

Чтобы обойти ограничения встроенного серверного модуля mod_wsgi, который на Timeweb намертво привязан к старому Python 3.4, мы настроим независимый запуск через CGI.

1. Настройка диспетчера путей (.htaccess)

В файловом менеджере в папке public_html откройте файл .htaccess, полностью сотрите всё и вставьте этот код:
Options +ExecCGI
AddHandler cgi-script .py

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
# Перенаправляем все запросы на наш скрипт запуска run.py
RewriteRule ^(.*)$ site1/run.py/$1 [QSA,L]

2. Создание скрипта запуска (site1/run.py)

Внутри папки site1 создайте новый файл, назовите его run.py и вставьте этот код:
#!/home/i/itvekonru/django_xap3f/django/bin/python3
import os
import sys

# Подключаем пути к библиотекам нашего окружения Python 3.10
sys.path.insert(0, '/home/i/itvekonru/django_xap3f/django/lib/python3.10/site-packages')
sys.path.insert(1, '/home/i/itvekonru/django_xap3f/public_html')

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'site1.settings')

from django.core.servers.basehttp import get_internal_wsgi_application
from wsgiref.handlers import CGIHandler

# Запускаем Django в режиме CGI-обработчика
CGIHandler().run(get_internal_wsgi_application())

3. Выдача прав и чистка символов Windows (Критично!)

Вернитесь в SSH-консоль и введите две команды, чтобы сервер Linux разрешил запуск этого файла и удалил невидимые скрытые символы переноса строк Windows:
# Удаляем скрытые символы Windows (\r) из файла
sed -i 's/\r$//' ~/django_xap3f/public_html/site1/run.py

# Выдаем права 755 на запуск файла скрипта
chmod +x ~/django_xap3f/public_html/site1/run.py

🏁 Часть 8. Финальный перезапуск и проверка

  1. В панели управления Timeweb перейдите в раздел «Сайты».
  2. Напротив вашего поддомена media.infostarting.ru нажмите кнопку «Приостановить», подождите 10 секунд и нажмите «Запустить» (это принудительно очистит кэш сервера).
  3. Перейдите в браузере в режиме Инкогнито по адресу:
    👉 https://infostarting.ru
Перед вами откроется готовое, красивое окно авторизации Django! Проект полностью запущен и работает в мировой сети.
Эта инструкция полностью готова для проведения занятий. На каком этапе проекта вы хотите сосредоточиться дальше:
  • Разобрать, как правильно писать код в файлах models.py и views.py для создания структуры таблиц «Маршруты» и выдачи чистого JSON-текста для мобильных телефонов?
  • Или мы составим такой же пошаговый план по сборке приложения во Flet и генерации личного Keystore-ключа, чтобы ребята могли унести готовые путеводители на своих смартфонах?

Последнее изменение: Воскресенье, 27 сентября 2026, 12:32