Подготовка | |
Домен | |
Docker | |
Python | |
Запуск проекта | |
Ошибки | |
Другие статьи о Python |
инструкция Beget
Желательно иметь представление о
Python 3
и
Bash
На хостинге нужно создать сайт и прикрепить к нему домен.
Не забудьте разрешить подключение по FTP и SSH
Сначала необходимо подключиться к серверу по SSH:
Для этого понадобится имя пользователя на хостинге - это может
быть как администратор, так и специально созданный ftp аккаунт.
ssh username@website_url.com
Вместо username введите имя аккаунта у которо есть доступ к хостингу
Вместо website_url.com - ваш домен либо IP адрес
После того, как вы зашли на хостинг - нужно активировать виртуальное
окружение
Для перехода в виртуальное окружение
Docker
нужно выполнить следующую команду:
ssh localhost -p222
После чего ещё раз ввести пароль для доступа к аккаунту.
username@localhost's password:
Welcome to Ubuntu 12.04.5 LTS (GNU/Linux 4.0.5-5-beget-acl x86_64)
* Documentation: https://help.ubuntu.com/
(docker) denia0d3@matrix:~ [0] $
Установка 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/a/andreyolegovichru/.local/bin//python3
Этот путь нам и нужно прописать в PATH. Отбросим только /python3
PATH=/home/a/andreyolegovichru/.local/bin/:$PATH
И перезапустить .bashrc
source ~/.bashrc
(docker) andreyolegovich.ru@server:~/HelloDjango [0] $ python3 -m django
Type 'python -m django help
python3 manage.py migrate
Переходим в директорию в которой нужно создать проект. Например в public_html.
Выполняем команду
django-admin startproject Project_Name
После удачного выполнения этой команды создаётся директория
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 вводим командую
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 в которой будут следующие файлы
admin.py
apps.py
__init__.py
migrations
models.py
tests.py
views.py
Переходим в директорию 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)
(docker) andreyolegovich@server:~/andreyolegovich.ru [0] $ touch tmp/restart.txt
Переходим в директорию с приложением Project_Name/first_app и
редактируем
views.py
, чтобы создать наш первый view.
Каждый view должен возвращать какойто HttpResponse объект.
Добавляем следущий код в файл Project_Name/first_app/views.py:
from django.http import HttpResponse
def index(request):
return HttpResponse("Hello World!")
Теперь нужно привязать этот view к какой-то url
Добавляем следующий код в файл urls.py
from first_app import views.index
urlpatterns = [
path('', views.index, name='index'),
]
Добавляем домен, на котором Вы разворачиваете сайт в ALLOWED_HOSTS файла (из проекта) settings.py
ALLOWED_HOSTS = ['http://www.andreyolegovich.ru','127.0.0.1','localhost','andreyolegovich.ru','www.andreyolegovich.ru']
Project_Name</th> | |||
---|---|---|---|
Project_Name | first_app | templates | |
__init.py__ __pycache__ settings.py connection to first_app by INSTALLED_APPS = ['first_app', ] connection to templates by TEMPLATES_DIR = os.path.join( BASE_DIR, "templates") urls.py wsgi.py |
admin.py apps.py __init.py__ migrations models.py __pycache__ test.py urls.py views.py | first_app | … |
Python не находит Django |
Disallowed host |
Не работает runserver |
Web application could not be started |
(docker) andreyolegovich.ru@server:~/HelloDjango [0] $ python3 manage.py runserver
Traceback (most recent call last):
File "manage.py", line 8, in <module>
from django.core.management import execute_from_command_line
ModuleNotFoundError: No module named 'django'
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "manage.py", line 14, in <module>
) from exc
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?
Причина в том, что в PATH не прописан путь до python. Вернитесь к шагу PATH
Вы можете запустить django с помощью
python3 manage.py runserver
И прописали в settings.py свои хосты, например так
ALLOWED_HOSTS = ['http://www.andreyolegovich.ru','127.0.0.1','localhost','andreyolegovich.ru','www.andreyolegovich.ru']
Но при обращении к домену в браузере появляется ошибка DisallowedHost
DisallowedHost at / Invalid HTTP_HOST header: 'www.andreyolegovich.ru'. You may need to add 'www.andreyolegovich.ru' to ALLOWED_HOSTS. Request Method: GET Request URL: http://www.andreyolegovich.ru/ Django Version: 2.1.5 Exception Type: DisallowedHost Exception Value: Invalid HTTP_HOST header: 'www.andreyolegovich.ru'. You may need to add 'www.andreyolegovich.ru' to ALLOWED_HOSTS. Exception Location: /home/a/andreyolegovichru/.local/lib/python3.7/site-packages/django/http/request.py in get_host, line 106 Python Executable: /home/a/andreyolegovichru/.local/bin/python3.7 Python Version: 3.7.0 Python Path: ['/home/a/andreyolegovichru/andreyolegovich.ru/public_html/HelloDjango', '/home/a/andreyolegovichru/.local/lib/python3.7/site-packages', '/home/a/andreyolegovichru/andreyolegovich.ru', '/opt/passenger40/helper-scripts', '/home/a/andreyolegovichru/.local/lib/python37.zip', '/home/a/andreyolegovichru/.local/lib/python3.7', '/home/a/andreyolegovichru/.local/lib/python3.7/lib-dynload', '/home/a/andreyolegovichru/.local/lib/python3.7/site-packages'] Server time: Sun, 3 Feb 2019 20:07:57 +0000
Проверьте, всё ли правильно прописали в settings.py ALLOWED_HOSTS.
Выключите Django, закройте все консоли подключенные к хостингу или все консоли на локальной машине.
Очистите кэш браузера или откройте url другим браузером.
Если Вы выполняете команду
python3 manage.py runserver
И ничего не происходит, или например, у Вас работал самый первый проект, а запустить
второй не получается - скорее всего дело в хостинге. На нём может быть закрыта
возможность слушать порты и выбор рабочего проекта происходит с помощью
какого-то скрипта.
Если Вы, как и я, пользуетесь
хостингом beget
, тот этот скипт будет называться passenger_wsgi.py и лежать будет
на одном уровне с директорией public_html.
Пропишите в нём
os.environ['DJANGO_SETTINGS_MODULE'] = 'Название_нового_прокта.settings'
Если Вы хотите переключиться между проектами и уже обновили скрипе passenger_wsgi.py но получили ошибку
Web application could not be started
Скорее всего Вы забыли пересоздать файл tmp/restart.txt
(docker) andreyolegovich@server:~/andreyolegovich.ru [0] $ touch tmp/restart.txt
Также советую перепроверить не забыли ли Вы поменть системный путь на нужный Вам проект.
При смене проекта обычно нужно делать два изменения в файле passenger_wsgi.py
# -*- coding: utf-8 -*-
import os, sys
sys.path.insert(0, '/home/a/andreyolegovich/andreyolegovich.ru/public_html/Project_1')
#sys.path.insert(0, '/home/a/andreyolegovich/andreyolegovich.ru/public_html/Project_2')
sys.path.insert(1, '/home/a/andreyolegovich/.local/lib/python3.7/site-packages')
os.environ['DJANGO_SETTINGS_MODULE'] = 'Project_1.settings'
#os.environ['DJANGO_SETTINGS_MODULE'] = 'Project_2.settings'
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()
Ещё одна возможная причина - незаданные переменные в файле manage.py
Рекомендую наш хостинг beget.ru |
Пишите на info@urn.su если Вы: |
1. Хотите написать статью для нашего сайта или перевести статью на свой родной язык. |
2. Хотите разместить на сайте рекламу, подходящуюю по тематике. |
3. Реклама на моём сайте имеет максимальный уровень цензуры. Если Вы увидели рекламный блок недопустимый для просмотра детьми школьного возраста, вызывающий шок или вводящий в заблуждение - пожалуйста свяжитесь с нами по электронной почте |
4. Нашли на сайте ошибку, неточности, баг и т.д. ... ....... |
5. Статьи можно расшарить в соцсетях, нажав на иконку сети:
|