Установка и настрока Django проекта на хостинге Beget
Мой сайт работает на хостинге Beget и написан с ипользованием Python и фреймворка Django. Бегет хорошо подходит для размещения небольших проектов как этот. В этой статье раскажу как хостить Django-проект на Бегете.
Для начала создадим сайт в панели администратора
- Создадим домен и прекрепим для него новую папку с каким-нибудь именем
- В разделе CMS, главного меню хостинга, выберем Django и установим каркас приложения
После установки фреймворка в конреновой директории можно найти файл README.txt следующего содержания
Django установленный системой автоматической установки cms LTD BEGET
Действия описанные ниже необходимо выполнять в docker-окружении выполнив команду ниже ssh localhost -p222
для установки дополнительных модулей используйте pip
сам Django располагается в папке
/home/u/username/site-directory/public_html/venv/ для начала надо переключиться на текущий virtualenv
заходим в папку с проектом
cd /home/u/username/site-directory/public_html
source venv/bin/activate
проверяем правильно ли определился путь до pip:
which pip
/home/u/username/site-directory/public_html/venv/bin/pip
теперь мы можем пользоваться pip’ом для установки модулей не указывая полного пути до исполняемого файла:
pip install
где имя модуля который мы хотим установить
Для перезапуска passenger в папке проекта достаточно выполнить команду touch на пустом файле restart.txt
pwd
/home/u/username/site-directory/public_html/HelloDjango/HelloDjango/tmp
touch restart.txt
Создание репозитория
Создайте репозиторий на любом из сервесов: Github, Bitbucket или Gitlab. Не рекомендуется хранить данные для подключения к базе данных в репозитории. Но если вы решили так сделать, не забудьте создать приватный репозиторий.
В личного кабинета в сайдбаре нужно включить SSH-доступ.
Подключимся к хостингу по ssh:
Пароль для доступа такой же как и от личного кабинета
Зайдем в docker-контейнер:
ssh localhost -p 222
Пароль для доступа такой же как и от личного кабинета
Инициализируем репозиторий в директории /public_html:
git commit -m «Initial commit»
Добавим ссылку на внешний репозиторий:
git add remotename url
Проверим, что репозиторий добавлен:
origin https://github.com/username/repository (fetch)
origin https://github.com/username/repository (push)
Привяжем ветку master к внешней ветке и отправим файлы в репозиторий:
git branch —set-upstream-to=origin/master
Теперь можно разрабатывать сайт на локальной машине. Когда нужно будет перенести сайт на сервер нужно выполнить одну команду и поправить конфигурационные файлы, если потребуется
Django
На хостинге нужно создать сайт и прикрепить к нему домен.
Не забудьте разрешить подключение по FTP и SSH
Docker
Сначала необходимо подключиться к серверу по SSH:
Для этого понадобится имя пользователя на хостинге — это может быть как администратор, так и специально созданный ftp аккаунт.
Вместо username введите имя аккаунта у которо есть доступ к хостингу
Вместо website_url.com — ваш домен либо IP address
После того, как вы зашли на хостинг — нужно активировать виртуальное окружение
Для перехода в виртуальное окружение 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
Подробнее про установку программ в Linux с помощью configure_make_make-install читайте здесь
/.local/include/ (docker) login@server:
Затем нужно в .bashrc данного аккаунта прописать $PATH до директории
/.local/bin/ или алиас для python3,
Проверим путь до python3
[0] $ which python3
Этот путь нам и нужно прописать в PATH. Отбросим только /python3
И перезапустить .bashrc
Виртуальное окружение
Часто полезно пользоваться виртуальным окружением. Создавать их можно разными способами, например с помощью:
- venv
- virtualenv
- anaconda
python3 -m venv venv_django
source venv_django/bin/activate
Обычно при активации виртуального окружения в терминале перед именем пользователя появляется называние окружения в круглых скобках.
Внутри containerа вы скорее всего уже видите (docker) а название окружения может и не появиться.
To проверить перешли вы в окружение или нет executei
Как вы можете проверить здесь — до входа в окружение использовался другой 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
/HelloDjango [0] $ python3 -m django Type 'python -m django help ' for help on a specific subcommand. Available subcommands: [django] check compilemessages createcachetable dbshell diffsettings dumpdata flush inspectdb loaddata makemessages makemigrations migrate runserver sendtestemail shell showmigrations sqlflush sqlmigrate sqlsequencereset squashmigrations startapp startproject test testserver Note that only Django core commands are listed as settings are not properly configured (error: Requested setting INSTALLED_APPS, but settings are not configured. You must either define the environment variable DJANGO_SETTINGS_MODULE or call settings.configure() before accessing settings.). (docker) aredel.com@server:
/HelloDjango [0] $ ls HelloDjango manage.py (docker) aredel.com@server:
/HelloDjango [0] $ python3 manage.py runserver Performing system checks. System check identified no issues (0 silenced). You have 15 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions. Run 'python manage.py migrate' to apply them. February 03, 2019 — 18:50:29 Django version 2.1.5, using settings 'HelloDjango.settings' Starting development server at http://127.0.0.1:8000/ Quit the server with CONTROL-C.
python3 manage.py migrate
Запуск первого проекта в Django
Запуск Django
Переходим в директорию в которой нужно создать проект. Например в public_html.
django-admin startproject Project_Name
После удачного выполнения этой команды создаётся директория Project_Name , внутри которой будет находится файл manage.py и ещё одна директория с таким же именем — Project_Name.
Внутри вложенной директории Project_Name находятся файлы
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()
wsgi.py
Для настройки wsgi.py понадобятся путь до Django и путь до проекта.
Путь до Django можно получить выполнив
python3 -c «import django; print(django.get_version()); print(django.__file__)»
Внутри вложенной директории Project_Name находятся файлы
Запуск сервера
Из той же директории в которой находится скрипт 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/
В каждом проекте (project) обычно используется одно или несколько приложений (application)
Когда все приложения и конфигурации объединены они составляют веб-приложение.
applications + configurations = web application
Создаём первое приложение
python3 manage.py startapp first_app
Появится директория first_app в которой будут следующие файлы
Создаём view и связываем с url
Переходим в директорию Project_Name/Project_Name
Редактируем файл Project_Name/Project_Name/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', ]
python3 manage.py runserver
Если перезапуск осуществляется с помощью скрипта выполняем (насколько я знаю, это актуально для хостингов beget и dreamhost)
Работа с Django на хостинге Beget
Итак первым делом нужно в паели веб-сервера включить доступ по ssh для вашего аккаунта.
Далее подключаемся к нашему хостингу из терминала
попав на сервер переходим в docker — окружение
Прежде чем идти дальше, предполагается, что у вас уже установлен Python на хостинге. Как устанавливать цитировать руководство не буду, просто оставлю ссылку на него, где все подробно расписано. В моем случае, нужно было установить Python 3, что я и сделал.
На сервере уже по умолчанию установлен git, поэтому переходим в папку Django приложения, обновляем проект командой, разумеется предварительно нужно инициировать репозиторий git
А также копируем статику:
/.local/bin/python3.5 ./manage.py collectstatic
После завершения настройки окружения необходимо создать каталог tmp, где будет хранится файл restart.txt:
Пересоздание tmp/restart.txt применяет новые изменения в проекте.
На этом пожалуй все, Очень качественный и недорогой хостинг, всем советую!
Как загрузить django сайт на beget
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 -V
pip3 -V
Python 3.7.0
pip 20.1 from /home/u/user/.local/lib/python3.7/site-packages/pip (python 3.7)
Установка новой версии Python
Установка Python
/.local/include/ (docker) login@server:
[0] $ which python3
- venv
- virtualenv
- anaconda
python3 -m venv venv_django
source venv_django/bin/activate
Установка Django
python3 -m pip install —upgrade pip
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
django-admin startproject Project_Name
__init__.py
settings.py
urls.py
wsgi.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
cd /home/u/user/site.ru
touch passenger_wsgi.py
python3 -c «import django; print(django.get_version()); print(django.__file__)»
# -*- 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()
applications + configurations = web application
python3 manage.py startapp first_app
settings.py
INSTALLED_APPS = [ ‘django.contrib.admin’, ‘django.contrib.auth’, ‘django.contrib.contenttypes’, ‘django.contrib.sessions’, ‘django.contrib.messages’, ‘django.contrib.staticfiles’, ‘first_app’, ]
/site.ru [0] $ touch tmp/restart.txt
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/
Начинаем развертывание Django-сайта на хостинге


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