Установка Django на виртуальном хостинге
Подготовка
инструкция 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) andreyolegovich.ru@server:~ [0] $ vi .bashrc
Проверим путь до python3
andreyolegovich.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@urn.su:~/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
Переходим в директорию в которой нужно создать проект. Например в 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.andreyolegovich.ru','127.0.0.1','localhost','andreyolegovich.ru','www.andreyolegovich.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 |