Развертывание Django-сервера на хостинге Timeweb
📑 Методическое руководство: Развертывание Django-сервера на хостинге Timeweb
Цель: Создать бэкенд для мобильного путеводителя, настроить базу данных MySQL, подключить SSL-сертификат и запустить проект в интернет через независимый CGI-скрипт.
🛠️ Часть 1. Подготовка базы данных MySQL на хостинге
Перед запуском кода нам нужна база данных. На виртуальном хостинге Timeweb стандартная база SQLite3 не поддерживается из-за отсутствия системных библиотек, поэтому мы используем мощную и бесплатную MySQL.
- Зайдите в панель управления Timeweb ➡️ раздел «Базы данных» ➡️ кнопка «Создать базу данных».
- Задайте параметры:
- Имя базы данных: Например,
guide(Хостинг автоматически добавит префикс вашего аккаунта, получится что-то вродеitvekonru_guide). - Пользователь: Сделайте таким же —
guide(полное имя будетitvekonru_guide). - Пароль: Придумайте надежный пароль и запишите его.
- Имя базы данных: Например,
- Нажмите «Создать».
💻 Часть 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
- Через «Файловый менеджер» Timeweb загрузите всю вашу папку проекта (например, упаковав её в ZIP-архив и распаковав на сервере) в корень вашего аккаунта. Структура папок должна выглядеть так:
/home/i/itvekonru/django_xap3f/public_html/— здесь лежат ваши файлы проекта (manage.py, папкаsite1, папкаguide).
- Зайдите в 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. Финальный перезапуск и проверка
- В панели управления Timeweb перейдите в раздел «Сайты».
- Напротив вашего поддомена
media.infostarting.ruнажмите кнопку «Приостановить», подождите 10 секунд и нажмите «Запустить» (это принудительно очистит кэш сервера). - Перейдите в браузере в режиме Инкогнито по адресу:
👉https://infostarting.ru
Перед вами откроется готовое, красивое окно авторизации Django! Проект полностью запущен и работает в мировой сети.
Эта инструкция полностью готова для проведения занятий. На каком этапе проекта вы хотите сосредоточиться дальше:
- Разобрать, как правильно писать код в файлах
models.pyиviews.pyдля создания структуры таблиц «Маршруты» и выдачи чистого JSON-текста для мобильных телефонов? - Или мы составим такой же пошаговый план по сборке приложения во Flet и генерации личного Keystore-ключа, чтобы ребята могли унести готовые путеводители на своих смартфонах?
Последнее изменение: Воскресенье, 27 сентября 2026, 12:32