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

Содержание
Подготовка
Домен
Docker
Python
Виртуальное окружение
Установка Django
startproject: Запуск проекта
passenger_wsgi.py
startapp: Запуск приложения
settings.py
tmp/restart.txt или runserver: Запуск / Перезапуск сервера

Подготовка

инструкция Beget , инструкция Reg.ru

Желательно иметь представление о Python 3 и Bash

Домен

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

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

Docker

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

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

ssh username@website_url.com

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

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

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

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

ssh localhost -p222

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

username@localhost's password:

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 можно командой

which pyhton3

/home/u/user/.local/bin/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

/home/u/user/.local/bin/python3

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

PATH=/home/a/andreyolegovichru/.local/bin/:$PATH

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

source ~/.bashrc

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

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

Например

python3 -m venv venv_django
source venv_django/bin/activate

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

Например

(venv) andrey@eth1.ru:~/user/

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

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

which python3

/home/u/user/venv_django/bin/python3

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

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

python3

>>>
>>> import sys

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

>>> sys.prefix

и

>>> sys.base_prefix

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

Установка Django

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

python3 -m pip install --upgrade pip

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

python3 -m pip install django

Проверить установку

python3 -m django --version

3.2.4

или

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.

ls /home/u/user/site.ru/public_html/Project_Name

manage.py Project_Name

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

ls /home/u/user/site.ru/public_html/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__)"

3.2.4
/home/u/user/site.ru/venv_django/lib/python3.7/site-packages/django/__init__.py

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

/home/u/user/site.ru/venv_django/lib/python3.7/site-packages

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

pwd

/home/u/user/site.ru/public_html/Project_Name

Пример файла 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 в которой будут следующие файлы

admin.py

apps.py

__init__.py

migrations

models.py

tests.py

views.py

settings.py

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

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

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

ALLOWED_HOSTS = ['http://www.eth1.ru','127.0.0.1','localhost','eth1.ru','www.eth1.ru']

Нужно добавить в список установленных приложений наше новое приложение 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/

Похожие статьи
DJANGO
Установка на хостинг
Как выбрать хостинг
Ошибки
Видеоуроки
Python
Flask
HTML
CSS
Bash
Docker

Поиск по сайту

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

Перейти на канал

@aofeed

Задать вопрос в Телеграм-группе

@aofeedchat

Контакты и сотрудничество:
Рекомендую наш хостинг beget.ru
Пишите на info@urn.su если Вы:
1. Хотите написать статью для нашего сайта или перевести статью на свой родной язык.
2. Хотите разместить на сайте рекламу, подходящую по тематике.
3. Реклама на моём сайте имеет максимальный уровень цензуры. Если Вы увидели рекламный блок недопустимый для просмотра детьми школьного возраста, вызывающий шок или вводящий в заблуждение - пожалуйста свяжитесь с нами по электронной почте
4. Нашли на сайте ошибку, неточности, баг и т.д. ... .......
5. Статьи можно расшарить в соцсетях, нажав на иконку сети: