Как загрузить django сайт на beget
Перейти к содержимому

Как загрузить django сайт на beget

  • автор:

Как задеплоить Django-проект на beget.com?

fc0928feab9c4015bb9afdd66405e35e.png

Недавно деплоил Django-приложение на хостинге beget.com. Все сделал в соответствии с инструкцией: https://beget.com/ru/articles/webapp_python. Но при попытке загрузить через сайт изображение падает ошибка Internal Server Error. Подскажите, пожалуйста, как исправить. Локально все работает. Возможно, необходимо поменять настройки в файлах .htaccess и pasenger-wsgi.py, но не смог найти как.
DEBUG = True включен, но при попытке загрузки изображения видно только то, что показано на скрине.
Заранее благодарю!

  • Вопрос задан более трёх лет назад
  • 2150 просмотров

2 комментария

Оценить 2 комментария

Скорее всего, Вам необходимо обратиться в техническую поддержку хостинг-провайдера Beget

flygrounder

Артём Белоусов @flygrounder
Попробуйте выключить DEBUG=True
Решения вопроса 0
Ответы на вопрос 1

Данная ошибка возникает на уровне веб-сервера, поэтому debug самого джанго здесь ничего не покажет. Чаще всего она возникает из-за ошибок в файле .htaccess. Если это так, то в разделе https://cp.beget.com/log вы можете включить лог ошибок веб сервера, который будет писаться в папку вашего сайта.

P.S. Знаю, что для вас наверное это уже не актуально, но может помочь людям которые столкнулись с схожей проблемой.

Ответ написан более трёх лет назад
Комментировать
Нравится 1 Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

django

  • Django
  • +2 ещё

В чем разница между gunicorn и uvicorn?

  • 1 подписчик
  • 38 минут назад
  • 19 просмотров

Установка Django на виртуальном хостинге

На хостинге нужно создать сайт и прикрепить к нему домен. Если у вас нет хостинга или домена — рекомендую Beget сам им пользуюсь больше десяти лет.

Не забудьте разрешить подключение по FTP и SSH

Docker

Сначала необходимо подключиться к серверу по SSH ( инструкция от Beget )

Для этого понадобится имя пользователя на хостинге — это может быть как администратор, так и специально созданный ftp аккаунт.

Вместо username введите имя аккаунта у которого есть доступ к хостингу

Вместо website_url.com — ваш домен либо IP адрес

После того, как вы зашли на хостинг — нужно активировать виртуальное окружение

Для перехода в виртуальное окружение Docker нужно выполнить следующую команду:

ssh localhost -p222

После чего возможно придётся ещё раз ввести пароль для доступа к аккаунту.

Welcome to Ubuntu 18.04 LTS (GNU/Linux 4.9.132-0-beget-acl x86_64) * Documentation: https://help.ubuntu.com * Management: https://landscape.canonical.com * Support: https://ubuntu.com/advantage

Python

Проверить, установлены ли python3 и pip можно командами

python3 -V
pip3 -V

Python 3.7.0
pip 20.1 from /home/u/user/.local/lib/python3.7/site-packages/pip (python 3.7)

Проверить где находится python3 можно командой

Установка новой версии Python

Если Python не установлен или вам нужна более свежая версия — можно выполнить установку вручную

Установка Python

Подробнее про установку программ в Linux с помощью configure_make_make-install читайте здесь

(docker) login@server:~ [0] $ mkdir -p .beget/tmp && cd .beget/tmp && wget ftp://sourceware.org/pub/libffi/libffi-3.2.1.tar.gz && tar -xf libffi-3.2.1.tar.gz && cd libffi-3.2.1 && ./configure —prefix=$HOME/.local && make -j $(($(nproc)/3)) && make install && mkdir ~/.local/include && cp x86_64-unknown-linux-gnu/include/ffi.h ~/.local/include/ && cp x86_64-unknown-linux-gnu/include/ffitarget.h ~/.local/include/ (docker) login@server:~ [0] $ cd ~/.beget/tmp && wget https://www.python.org/ftp/python/3.9.1/Python-3.9.1.tgz && tar -xf Python-3.9.1.tgz && cd Python-3.9.1 && ./configure —prefix=$HOME/.local && make -j $(($(nproc)/3)) && make install

Затем нужно в .bashrc данного аккаунта прописать $PATH до директории ~/.local/bin/ или алиас для python3,

(docker) eth1.ru@server:~ [0] $ vi .bashrc

Проверим путь до python3

eth1.ru@server:~ [0] $ which python3

Этот путь нам и нужно прописать в PATH. Отбросим только /python3

И перезапустить .bashrc

Виртуальное окружение

Часто полезно пользоваться виртуальным окружением. Создавать их можно разными способами, например с помощью:

python3 -m venv venv_django
source venv_django/bin/activate

Обычно при активации виртуального окружения в терминале перед именем пользователя появляется называние окружения в круглых скобках.

Внутри контейнера вы скорее всего уже видите (docker) а название окружения может и не появиться.

Чтобы проверить перешли вы в окружение или нет выполнитеi

Как вы можете проверить здесь — до входа в окружение использовался другой Python

Либо перейдите в интерактивный режим

Выполните две команды

Они должны показать разный результат

Установка Django

Первым делом советую обновить pip

python3 -m pip install —upgrade pip

Затем непосредственно установить Django

python3 -m pip install django

python3 -m django —version

python3 -m pip list

Package Version —————— ——— asgiref 3.3.4 Django 3.2.4 pip 21.1.2 pytz 2021.1 setuptools 39.0.1 sqlparse 0.4.1 typing-extensions 3.10.0.0

Структура директорий для Django изображение с сайта www.eth1.ru

Запуск первого проекта в Django

Переходим в директорию в которой нужно создать проект. Например в public_html.

django-admin startproject Project_Name

После удачного выполнения этой команды создаётся директория Project_Name

NB: Если вы пишите код в PyCharm эту директорию нужно кликнуть правой кнопкой мыши и выбрать Mark Directory as → Sources Root

Внутри Project_Name будет находится файл manage.py и ещё одна директория с таким же именем — Project_Name.

Внутри вложенной директории Project_Name находятся файлы

__init__.py
settings.py
urls.py
wsgi.py

WSGI расшифровывается как Web Server Gateway Interface.

Это стандарт взаимодействия между Python-программой, выполняющейся на стороне сервера, и самим веб-сервером, например Apache

Пример файла manage.py

#!/usr/bin/env python «»»Django’s command-line utility for administrative tasks.»»» import os import sys def main (): «»»Run administrative tasks.»»» os.environ.setdefault(‘DJANGO_SETTINGS_MODULE’, ‘Project_Name.settings’) try : from django.core.management import execute_from_command_line except ImportError as exc: raise ImportError( «Couldn’t import Django. Are you sure it’s installed and » «available on your PYTHONPATH environment variable? Did you » «forget to activate a virtual environment?» ) from exc execute_from_command_line(sys.argv) if __name__ == ‘__main__’: main()

passenger_wsgi.py

Нужно создать в корне сайта файл passenger_wsgi.py

cd /home/u/user/site.ru
touch passenger_wsgi.py

Для настройки passenger_wsgi.py понадобятся путь до Django и путь до проекта.

Путь до Django можно получить выполнив

python3 -c «import django; print(django.get_version()); print(django.__file__)»

Из этого пути нужно оставить

Посмотреть путь до проекта можно перейдя в родительскую директорию Project_Name (директорий Project_Name две нужна более высокого уровня) и выполнив pwd

Пример файла passenger_wsgi.py

# -*- coding: utf-8 -*- import os import sys from django.core.wsgi import get_wsgi_application sys.path.insert( 0 , ‘/home/u/user/site.ru/public_html/Project_Name’ ) sys.path.insert( 1 , ‘/home/u/user/site.ru/venv_django/lib/python3.7/site-packages’ ) os.environ[ ‘DJANGO_SETTINGS_MODULE’ ] = ‘Project_Name.settings’ application = get_wsgi_application()

Запуск приложения

В каждом проекте (project) обычно используется одно или несколько приложений (application)

Когда все приложения и конфигурации объединены они составляют веб-приложение.

applications + configurations = web application

Создаём первое приложение

python3 manage.py startapp first_app

Появится директория first_app в которой будут следующие файлы

settings.py

Переходим в директорию Project_Name/Project_Name

Редактируем файл settings.py

Добавляем домен, на котором Вы разворачиваете сайт в ALLOWED_HOSTS файла (из проекта) settings.py

Нужно добавить в список установленных приложений наше новое приложение first_app

INSTALLED_APPS = [ ‘django.contrib.admin’, ‘django.contrib.auth’, ‘django.contrib.contenttypes’, ‘django.contrib.sessions’, ‘django.contrib.messages’, ‘django.contrib.staticfiles’, ‘first_app’, ]

Запускаем/Перезапускаем сервер. О том как это сделать — читайте в следующей главе.

Запуск/Перезапуск сервера

Если перезапуск осуществляется с помощью скрипта выполняем (насколько я знаю, это актуально для хостингов Beget и dreamhost)

(docker) site@server:~/site.ru [0] $ touch tmp/restart.txt

Возможно, на вашем хостинге запуск будет осуществляться с помощью runserver

Из той же директории в которой находится скрипт manage.py вводим команду

python3 manage.py runserver

Performing system checks.

System check identified no issues (0 silenced).
February 06, 2019 — 20:54:38
Django version 2.1.5, using settings ‘Project_Name.settings’
Starting development server at http://127.0.0.1:8000/

РЕКЛАМА от Яндекса. Контент сгенерирован Яндексом. Может быть недоступен в вашем регионе

Конец рекламы от Яндекса. Если в блоке пусто считайте это рекламой моей телеги

Подпишитесь на Telegram канал @aofeed чтобы следить за выходом новых статей и обновлением старых

Как выложить сайт на beget Python Django?

Другу нужно выложить сайт на Python Django.. Выложил, но он не работает.
Может beget его не поддерживает ?
я мог бы написать поддержу, но они оочень долго отвечают, а вы ребята быстрые)
да и вопрос не сложный))

  • Вопрос задан более трёх лет назад
  • 3248 просмотров

6 комментариев

Простой 6 комментариев

gscraft

Выложил, но не работает? А что именно не работает? Проблема конфигурации, не запускается, сайт не виден в сети? Если Вы по инструкции https://beget.com/ru/articles/webapp_python — то я бы посоветовал не мучиться, перейти на VPS с полным контролем и развернуть по инструкциям Django.

dimonchik2013

Dimonchik @dimonchik2013
maxim @m1rvi Автор вопроса

Gennady S, друг програет на пайтоне, хост просто мой) выложи коммент в ответы, отмечу, что верный, а то просто так отвечаешь) Спасибо!

maxim @m1rvi Автор вопроса

gscraft

m1 rvi, да необязательно, это и не прямой ответ, а совет. Всего доброго!
m1 rvi напишите мне в телеграмм помогу с деплоем @pyhammer
Решения вопроса 1
aimsavagejk @aimsavagejk

Зависит от того, какими услугами beget вы пользуетесь
Если это хостинг, то вот полное руководство для django от beget тык
Если это vps, то для тестов можно запустить через python3 manage.py runserver host:8080
Где host это IP адрес вашего VPS, при этом не забудьте добавить его в ALLOWED_HOSTS

Ответ написан более трёх лет назад
Комментировать
Нравится 1 Комментировать
Ответы на вопрос 0
Ваш ответ на вопрос

Войдите, чтобы написать ответ

django

  • Django
  • +2 ещё

В чем разница между gunicorn и uvicorn?

  • 1 подписчик
  • 38 минут назад
  • 19 просмотров

Начинаем развертывание Django-сайта на хостинге

Предположим, что мы завершили начальную разработку сайта на тестовом веб-сервере и решили предъявить его миру, то есть, выложить на боевом веб-сервере. Часто для этого арендуется хостинг или сервер целиком (иногда его части – технология VPN) где и планируется расположить проект с файлами и БД. У каждого хостинг-провайдера используется свое оборудование и программное обеспечение, поэтому конкретные шаги по установке проекта на разных хостингах будут отличаться. Но общий принцип похож и его я буду демонстрировать на примере довольно популярного хостера – Beget (это не реклама, мои сайты расположены на других хостингах, так сложилось исторически).

Возможно, некоторые из вас уже связаны с этим хостингом, учитывая его популярность. Это была главная причина выбора Beget в качестве примера. Далее, я буду показывать все так, как выглядит на момент записи этого видео. Возможно, со временем интерфейс и даже некоторые шаги изменятся, но, думаю, общий принцип сохранится. Поэтому будьте внимательны и не повторяйте просто так, бездумно, все, что я показываю в этом и последующих видео.

Итак, после простой регистрации в сервисе, с которым, я думаю, вы разберетесь самостоятельно, мы выбираем один из тарифных планов (я выбрал Blog с месячным тестовым периодом, вполне достаточным, чтобы развернуть сайт и записать эти занятия). Админ-панель выглядит следующим образом:

Здесь нужно открыть вкладку FTP и активировать SSH-доступ, так как он нам в дальнейшем пригодится:

Затем, перейдем на вкладку «Управление сайтами» и здесь у нас уже должен быть тестовый домен 3-го уровня от Beget:

Обратите внимание, с этим доменом связан конкретный каталог, где предполагается хранить файлы сайта. В частности, именно в нем мы будем располагать виртуальное окружение, и устанавливать нужную версию Python и Django, а также другие необходимые зависимости (библиотеки).

Конечно, некоторые из вас могут внимательно изучить админку от Beget и увидеть раздел CMS, где, в частности, имеется и Django:

Но я не рекомендую его устанавливать в автоматическом режиме, так как здесь используется далеко не последняя версия, да и версия языка Python также оставляет желать лучшего. Поэтому, мы будем делать все вручную и с использованием виртуального окружения. Благо, хостеры заботятся об этом и выкладывают подробную документацию об этапах установки того или иного фреймворка. В частности, на странице:

подробно описываются шаги по развертыванию фреймворка Django. Возможно, вас несколько удивит объем приведенной информации и множества шагов, которые необходимо выполнить для установки Django. Но я для того и записываю видео, чтобы постараться все «разложить по полочкам». Конечно, так, насколько я сам понимаю этот процесс.

Для взаимодействия с хостингом на уровне команд нам потребуется специальная программа SSH-клиент PuTTy. Подробно о ней написано здесь:

и используется для ОС Windows (полагаю, что большинство из вас работают именно под этой системой). Скачиваем файл с этой программой (если ее еще нет у вас, или версия устарела) и запускаем. У нас появится следующее окно:

В поле «Host Name (or IP address)» вводим SSH-адрес хостинга и нажимаем на кнопку «Open». Появится консольное окно, где нужно ввести логин и пароль, полученный при регистрации:

  • установить версию языка Python 3.8.3 (такую же, что и в тестовом проекте);
  • настроить виртуальное окружение с именем djangoenv;
  • установить в виртуальное окружение фреймворк Django 3.1.5 (тот же, что и в тестовом проекте);
  • выполнить настройку зависимостей для активации Django для сайта sbalak.beget.tech;
  • создать БД MySQL, связать ее с приложением и перенести все таблицы из нашего проекта.
ssh localhost -p222

и еще раз введем пароль. (Список всех команд будет приведен в отдельном файле со ссылкой на github). Далее, нам понадобится раздел «Локальная установка Python», где подробно приведена установка интерпретатора выбранной версии. Мне нужна версия 3.8.3. Здесь в описании используется каталог .beget/tmp, которого у меня нет. Создать можно командой:

mkdir -p ~/.beget/tmp

а, затем, перейти в него:

cd ~/.beget/tmp/

Далее, по документации, для сборки интерпретатора Python потребуется библиотека ffi, которую нужно сначала скачать командой:

wget ftp://sourceware.org/pub/libffi/libffi-3.2.1.tar.gz

Распаковать:

tar -xf libffi-3.2.1.tar.gz && cd libffi-3.2.1

Сконфигурировать:

./configure --prefix $HOME/.local LDFLAGS="-L/usr/local/lib"
make -j33 && make install

После этого, в директории с кодом libffi-3.2.1/x86_64-unknown-linux-gnu/include появятся два файла: ffi.h и ffitarget.h. Их нужно скопировать в каталог ~/.local/include. Переходим в корневой каталог

создаем нужные каталоги:

mkdir -p ~/.local/include

делаем для этой папки общий доступ и выполняем копирование:

cp x86_64-unknown-linux-gnu/include/ffi.h ~/.local/include/ cp x86_64-unknown-linux-gnu/include/ffitarget.h ~/.local/include/

Далее, нам нужно скачать и собрать Python 3.8.3. Снова переходим в каталог:

cd ~/.beget/tmp

и скачиваем архив с версией 3.8.3:

wget https://www.python.org/ftp/python/3.8.3/Python-3.8.3.tgz

Распаковываем архив и переходим в созданный каталог:

tar -xf Python-3.8.3.tgz && cd Python-3.8.3

Настраиваем все необходимые зависимости:

./configure --prefix=$HOME/.local LDFLAGS="-L/usr/local/lib"

и запускаем процесс компиляции:

make -j33 && make install

Проверить корректность установки можно командой:

~/.local/bin/python3.8 –V

Настройка окружения virtualenv

Все, язык Python нужной версии 3.8.3 установлен и следующим шагом нам нужно создать виртуальное окружение. Это окружение будем создавать в каталоге sbalak.beget.tech, поэтому вначале выполним команду:

cd ~/sbalak.beget.tech

Затем, для локально созданного интерпретатора языка, вызовем команду создания виртуального окружения, следующим образом:

~/.local/bin/pip3.8 install virtualenv ~/.local/bin/python3.8 -m virtualenv djangoenv

У нас появится папка djangoenv в каталоге sbalak.beget.tech. Виртуальное окружение с именем djangoenv создано. Активируем его командой:

source djangoenv/bin/activate

А командой

which python

можно проверить текущую работающую версию языка Python. Далее, мы установим пакет Django в это виртуальное окружение:

pip install django==3.1.5

(Здесь дополнительно указана версия пакета 3.1.5, так как я этого хочу, если вы устанавливаете последнюю версию, то просто напишите django). В принципе, фреймворк Django установлен и должен быть готов к работе. Создадим с его помощью проект coolsite и проверим как он будет работать. Вначале выполним знакомую нам команду:

django-admin.py startproject coolsite

Далее, в каталог sbalak.beget.tech нужно скопировать файл с именем passenger_wsgi.py и следующим содержимым:

# -*- coding: utf-8 -*- import os, sys sys.path.insert(0, '/home/s/sbalak/sbalak.beget.tech/coolsite') sys.path.insert(1, '/home/s/sbalak/sbalak.beget.tech/ djangoenv/lib/python3.8/site-packages') os.environ['DJANGO_SETTINGS_MODULE'] = 'coolsite.settings' from django.core.wsgi import get_wsgi_application application = get_wsgi_application()

Здесь первый путь – путь к проекту, а второй – к виртуальному окружению. И создать файл .htaccess с содержимым:

PassengerEnabled On PassengerPython /home/s/sbalak/.local/bin/python3.8 #PassengerPython /home/s/sbalak/sbalak.beget.tech/venv/bin/python3.8

Кроме того, в пакете конфигурации в файле settings.py нужно указать разрешенный хост для работы фреймворка Django:

ALLOWED_HOSTS = ['sbalak.beget.tech', 'www.sbalak.beget.tech']

Не забываем сделать общий доступ к папке ~/.local, иначе сайт работать не будет! И в заключении в каталоге сайта sbalak.beget.tech создать подкаталог tmp и разместить в нем пустой файл restart.txt:

mkdir tmp; touch tmp/restart.txt

Все, теперь, обращаясь к странице http://sbalak.beget.tech должно появляться окно с тестовой страницей фреймворка Django: Вот, эта несколько запутанная и длинная последовательность шагов по установке интерпретатора языка Python, Django и связывания всего этого с конкретным сайтом. Опять же, запоминать все это не нужно. Можно сказать, что это справочная информация, которая обычно приведена в документации по каждому хостингу. Мы лишь последовательно следовали указанным шагам и получили ожидаемый результат. Но это был лишь первый этап по развертыванию нашего проекта. На следующем занятии мы перенесем наш сайт, создадим связи с БД и окончательно завершим процесс переноса проекта с тестового веб-сервера на реальный, боевой. Курс по Django: https://stepik.org/a/183363

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *