Django на PythonAnywhere
Развёртывание django-сайта на хостинге PythonAnywhere — довольно простая, но комплексная задача. Для её решения обычно выполняется следующая последовательность действий.
Создание окружения VirtualEnv
Для этого нужно войти на https://www.pythonanywhere.com/ под своим именем, перейти в раздел Consoles и открыть консоль Bash.
Обратите внимание, что PythonAnywhere ограничивает число одновременно открытых консолей. Список уже открытых консолей показан в разделе Consoles под надписью Your Consoles. Вы можете выполнять действия в уже имеющейся консоли (для этого щёлкните по её названию), либо закрыть консоль, щёлкнув на Kill возле неё.
В консоли нужно выполнить следующие команды. Здесь и далее предполагается, что ваш проект называется my_project. Замените слово my_project на название вашего проекта.
cd ~ virtualenv -p /usr/bin/python3.5 my_project_env cd my_project_env source bin/activate
С этого момента вы находитесь в вашем рабочем окружении. Чтобы деактивировать его, выйдите из консоли командой exit , либо, чтобы продолжить работу в этой консоли, деактивируйте его командой deactivate . Этого сейчас делать не нужно! Не убивайте эту консоль, она нам ещё не раз понадобится. Однако выходить из неё (щелком по логотипу PythonAnywhere слева вверху) и возвращаться обратно можно сколько угодно раз — состояние консоли сохраняется.
Установка необходимых пакетов
Находясь в консоли с активным окружением, выполните следующие команды.
pip install Pillow pip install Django
Если вам требуется конкретная версия Django (например, 1.8, или 1.7), её можно установить следующей командой:
pip install Django==1.7
Вместо 1.7 укажите желаемую версию.
Аналогично установите другие желаемые пакеты (например, Requests, или BeautifulSoup4, или любые другие).
Подготовка проекта к развёртыванию
Если вы хотите перенести проект в том виде, в котором он содержится у вас, с базой данных и загруженными во время отладки файлами, то почти ничего делать не требуется. Однако часто нужно развернуть чистый проект.
Для этого скопируйте ваш проект целиком в отдельный каталог. Затем удалите из вашего MEDIA_ROOT загруженные файлы, если они есть, а так же удалите файл базы данных, если вы использовали SQLite (файл db.sqlite3).
Упакуйте каталог проекта в zip-архив любым способом. Допустим, файл архива будет называться my_project.zip.
Загрузка проекта на сервер
На странице PythonAnywhere перейдите в раздел Files (для этого, находясь в консоли, щёлкните по логотипу сайта слева вверху и щёлкните ссылку Files).
Не используйте команду exit — это закроет консоль, а она нам ещё понадобится.
Перейдите в каталог вашего виртуального окружения (my_project_env) и щёлкните ссылку Upload a file. Выберите архив проекта и дождитесь, пока он будет загружен.
Перейдите в раздел Consoles, активируйте вашу консоль, в ней выполните следующую команду.
unzip my_project.zip
Дождитесь завершения распаковки.
Перейдите в распакованный каталог проекта с помощью команды cd (в нём должен быть файл manage.py , проверить список файлов в каталоге можно командой ls ).
Создание базы данных
Перейдите в раздел Databases (щёлкните логотип PythonAnywhere, затем раздел Databases). Слева выберите MySQL. Найдите на странице секцию Create a database. В поле Database name введите название вашей новой базы данных. Например, my_project . Нажмите кнопку Create. Полное название вашей базы данных будет состоять из вашего логина на PythonAnywhere и указанного вами названия, разделённых символом $ . Например, если ваш логин — ivan , то созданная база данных будет называться ivan$my_project . Именно это название нужно будет указать в настройках вашего проекта.
Теперь нужно создать пароль для доступа к базе данных. В секции MySQL Password ниже введите пароль в поля New password и Confirm password, после чего щёлкните кнопку Set MySQL Password ниже. Желательно, чтобы пароль базы данных отличался от вашего пароля на PythonAnywhere. Запомните или запишите созданный пароль. Его так же надо будет указать в настройках проекта.
Удаление базы данных (если нужно)
Чтобы удалить базу данных (например, ошибочно созданную) со всеми данными, хранящимися в ней, откройте консоль MySQL и введите команду:
drop database user$dbname;
Здесь user — имя вашей учётной записи, а dbname — название базы данных, указанное при её создании. Точка с запятой в конце команды обязательна. Например, если ваш логин — ivan, а база данных, которую вы хотите удалить, назвается my_project, команда удаления будет выглядеть так:
drop database ivan$my_project;
Выйти из консоли MySQL можно командой exit .
Настройка проекта
На странице PythonAnywhere перейдите в раздел Files, и откройте там каталог my_project_env , в нём — каталог my_project , а в нём — снова каталог my_project . Вы увидите ваш файл settings.py . Щёлкните по нему. Откроется текстовый редактор с этим файлом.
Внесите в него следующие изменения.
DEBUG
Обязательно измените значение параметра DEBUG на False :
DEBUG = False
ALLOWED_HOSTS
В список ALLOWED_HOSTS добавьте полное доменное имя вашего сайта. Оно состоит из вашего логина на PythonAnywhere и строчки «pythonanywhere.com». Например, если ваш логин — ivan , то полное доменное имя вашего сайта — ivan.pythonanywhere.com . Если этого не сделать, Django не будет работать с флагом DEBUG = False . Вообще, этот список содержит список доменных имён, по которым должен быть доступен ваш сайт.
ALLOWED_HOSTS = ["ivan.pythonanywhere.com", ]
DATABASES
Укажите параметры подключения к созданной вами базе данных. Их можно посмотреть в разделе Databases сайта PythonAnywhere. Ниже — пример настроек для пользователя ivan , базы данных ivan$my_project и пароля seCrEt123 .
DATABASES = < 'default': < 'ENGINE': 'django.db.backends.mysql', 'NAME': 'ivan$my_project', 'USER': 'ivan', 'PASSWORD': 'seCrEt123', 'HOST': 'ivan.mysql.pythonanywhere-services.com', >>
Замените везде ivan на ваш логин, my_project — на имя вашей базы, а seCrEt123 — на пароль от неё. Остальные настройки можно оставить без изменений.
Подготовка базы данных
Откройте в разделе Consoles вашу консоль Bash. Если вы вышли из неё, активируйте ваше рабочее окружение следующими командами:
cd ~/my_project_env source bin/activate
Теперь перейдите в каталог проекта:
cd my_project
И примените миграции базы данных:
python manage.py makemigrations python manage.py migrate
Если появятся сообщения об ошибках, убедитесь, что в файле settings.py указаны правильные параметры подключения базы данных.
Настройка веб-сервера PythonAnywhere
На сайте PythonAnywhere перейдите в раздел Web.
Важный момент: на бесплатном тарифе PythonAnywhere не позволяет иметь более одного приложения одновременно. Если у вас уже есть развёрнутое приложение, удалите его. Для этого в самом низу страницы щёлкните кнопку «Delete ваш-логин.pythonanywhere.com» и подтвердите дейставие, нажав кнопку Yes.
Слева щёлкните кнопку Add a new web app. Появится мастер добавления нового веб-приложения. Смена доменного имени доступна только на платном тарифе, поэтому щёлкаем Next. В окне «Select a Python Web framework» выбираем Manual configuration, затем выбираем последнюю доступную версию Python (Python 3.5). Щёлкаем Next. Ждём, пока приложение будет создано.
На странице «Configuration for ваш-логин.pythonanywhere.com» заполняем поля конфигурации сайта.
В секции Code для параметра Source code указываем путь до нашего проекта: /home/ваш-логин/my_project_env/my_project . После ввода значения нужно щёлкнуть небольшую кнопку с галочкой для сохранения введённого значения. Для параметра Working directory указываем тот же путь.
Ниже в секции Virtualenv указываем путь до виртуального окружения нашего проекта: /home/ваш-логин/my_project_env .
Теперь в секции Code щёлкаем параметр WSGI configuration file.
Откроется текстовый редактор. Удаляем всё содержимое файла и копируем туда содержимое WSGI-файла нашего проекта. Его можно найти в каталоге проекта рядом с файлом settigs.py . Он называется wsgi.py . Обычно что-то вроде такого должно получиться:
import os from django.core.wsgi import get_wsgi_application os.environ.setdefault("DJANGO_SETTINGS_MODULE", "my_project.settings") application = get_wsgi_application()
Допишем туда путь к нашему проекту, чтобы Питон смог загрузить наши модули. Должно получиться вот так:
import os, sys path = '/home/ваш-логин/my_project_env/my_project' if path not in sys.path: sys.path.append(path) from django.core.wsgi import get_wsgi_application os.environ.setdefault("DJANGO_SETTINGS_MODULE", "my_project.settings") application = get_wsgi_application()
Конечно, везде заменяем my_project на название каталога с вашим проектом, а символы «ваш-логин» на ваш логин.
Сохраним файл (кнопка Save справа вверху) и выйдем из редактора (щёлкнем по логотипу сайта PythonAnywhere слева вверху).
Вернёмся к разделу Web, щёлкнув по нему.
Теперь на странице «Configuration for ваш-логин.pythonanywhere.com» нужно нажать зелёную кнопку «Reload ваш-логин.pythonanywhere.com» и дождаться завершения перезапуска. После этого откроем новую вкладку браузера и введём адрес http://ваш-логин.pythonanywhere.com.
Если возникли ошибки, проверьте, всё ли правильно заполнено. Убедитесь, что верно указаны пути к проекту в разделе Web, что содержимое WSGI-файла верно. Если источник ошибок непонятен, попробуйте открыть файл settings.py и изменить значение параметра DEBUG на True . Возможно, отладочный вывод Django поможет вам. Помните, что после каждого изменения нужно перезапускать приложение кнопкой Reload в секции Web. Не забудьте вернуть значение DEBUG = False после устранения всех проблем.
Настройка статических файлов
Чтобы указать, где находятся статические файлы вашего проекта, нужно перейти на сайте PythonAnywhere в раздел Web и найти там секцию Static files. Там находится таблица соответствий адресов статических файлов их реальному положению на диске сервера.
Например, если в нашем проекте статические файлы собраны в каталог my_project/static/ , и мы в шаблонах страниц обращаемся к ним по адресу /static/ , нужно добавить это соответствие.
Для этого нужно щёлкнуть ссылку Enter URL, ввести туда /static , щёлкнуть кнопку с галочкой, потом щёлкнуть Enter path, ввести туда /home/ваш-логин/my_project_env/my_project/static и вновь щёлкнуть кнопку с галочкой.
Обновление проекта
Удобнее всю разработку вести на своём компьютере с использованием встроенного сервера Django ( python manage.py runserver ).
После того, как вы внесли изменения и проверили всё, нужно загрузить изменённые файлы на сервер PythonAnywhere (используя раздел Files), заменяя старые файлы новыми. Это ещё называют «деплой на боевой сервер». Будьте осторожны! Не заменяйте файл settings.py , ведь параметры в нём отличаются от параметров на вашем компьютере. Изменения в него лучше вносить вручную, модифицируя его в разделе Files.
Чтобы применить миграции БД, следует открыть консоль Bash, перейти в каталог вашего проекта и выполнить обычные команды.
python manage.py makemigrations python manage.py migrate
После того, как заменены все старые файлы и применены миграции, нужно перезапустить приложение (раздел Web, кнопка Reload).
Если что-то не работает, попробуйте включить отладку (изменив в файле settings.py значение параметра DEBUG = True ). После устранения проблем не забудьте отключить её ( DEBUG = False ). После любого изменения settings.py (как и после любого изменения любого python- файла) нужно перезапускать приложение.
Использованы значки из шрифта Entypo с сервиса Fontello.
Как запустить Flask (python) сайт на PythonEveryWhere?
Как запустить Flask (python) сайт на Python Everywhere? Всё делал по этой документации https://help.pythonanywhere.com/pages/Flask/ И все вроде бы заработало, но когда я кликнул по ссылке, сайт был не доступен. Посоветуйте другие документации (желательно на русском, но не обязательно) или возможно кто то уже сталкивался с такой проблемой и знает как она решается. Кстати я запускал сайт без домена, возможно в этом проблемма
Отслеживать
задан 3 июн 2020 в 19:49
Ahmed Ayman 123 Ahmed Ayman 123
141 13 13 бронзовых знаков
1 ответ 1
Сортировка: Сброс на вариант по умолчанию
Рекомендую воспользоваться официальной документацией PythonAnyWhere: https://help.pythonanywhere.com/pages/
или поискать ответ на их личном форуме:
А так же такой вопрос был уже задан на Иностранном Stack-e:
Отслеживать
ответ дан 3 июн 2020 в 19:54
346 1 1 серебряный знак 11 11 бронзовых знаков
- python
- python-3.x
- flask
- веб-сервер
- хостинг
-
Важное на Мете
Похожие
Подписаться на ленту
Лента вопроса
Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.
Дизайн сайта / логотип © 2023 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2023.11.21.1314
Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.
PythonAnywhere как сделать его HTTPSным
Осваиваю Яндекс.Кассу и там для создания веб-хука (коллбека), который мне очень нужен для работы, требуется чтобы URL моего сайта начинался с HTTPS.
Использую python anywhere + django. Как его обшттпээсить? Это что, настройка хостинга, настройка самого сайта, или нужно регистрировать свой домен и в нем указывать его https-режим?
Ничего не понимаю в этом деле, нужно как-то сделать так, чтобы сайт работал через https и у него появился https URL и я мог на нем обрабатывать колбэки от платежной системы.
I-Love-Microsoft ★★★★★
10.11.19 17:34:47 MSK
Если у тебя адрес вида *.pythonanywhere.com , то ничего делать не надо, оно автоматически работает по https.
deadNightTiger ★★★★★
( 10.11.19 17:38:35 MSK )
Тебе нужен SSL-сертификат и правильно настроенный веб-сервер.
Во-первых, для сайта обязателен домен, доступ по простому IP не прокатит. Если у тебя ещё нет домена, придётся его приобрести и настроить на IP своего сервера (каких-то DNS настроек для HTTPS нет, точнее есть, но они тебе не нужны пока что, это уже продвинутые функции).
Во-вторых, тебе нужно раздобыть сертификат. Можно купить, но сейчас можно получить бесплатно сертификат от Let’s encrypt, который ничем не отличается от платного. Тут гугл в помощь.
В-третьих, нужно настроить веб-сервер на использование полученного домена и сертификата. Обычно голый Python/Java/etc не торчит в Интернет, а проксируется apache/nginx/lighttpd/etc. Для каждого из популярных веб-серверов есть инструкции по настройке HTTPS.
KivApple ★★★★★
( 10.11.19 17:39:25 MSK )
Ответ на: комментарий от deadNightTiger 10.11.19 17:38:35 MSK

Да, в самом деле, он работает и по https в том числе! Ничего настраивать не пришлось…
I-Love-Microsoft ★★★★★
( 10.11.19 17:44:20 MSK ) автор топика
Ответ на: комментарий от KivApple 10.11.19 17:39:25 MSK

Ох, прошу прощения. Да, эта информация пригодится когда будет полноценный сайт, не тестовый. Пока же Python Anywhere предоставляет HTTPS вариант работы пользовательских сайтов.
I-Love-Microsoft ★★★★★
( 10.11.19 17:45:10 MSK ) автор топика

Позови системного администратора, это труба.
Если есть начальник, то скажи, чтобы больше тебе не давал таким заниматься, пока полимеры остались. Если нет начальника, то иди в Job, нанимай кого спасать ситуацию.
t184256 ★★★★★
( 10.11.19 17:45:57 MSK )
Ответ на: комментарий от t184256 10.11.19 17:45:57 MSK

Всё хорошо, не переживай. У меня тестовый сайт, осваиваю на перспективу. Если надо будет более полноценный сайт, обязательно найму специалиста. Пока что всё решилось добавлением буквы S в URL тестового сайта.
I-Love-Microsoft ★★★★★
( 10.11.19 17:49:02 MSK ) автор топика
Ответ на: комментарий от I-Love-Microsoft 10.11.19 17:49:02 MSK

Надеюсь, платежная система у тебя тоже тестовая =)
Setting up Flask applications on PythonAnywhere
There are two main ways to set up a Flask application on PythonAnywhere:
- Starting from scratch using our default versions of Flask
- Importing a pre-existing app using Manual configuration, and using a virtualenv
The first option works well if you’re just playing around and want to throw something together from scratch. Go to the Web Tab and hit Add a new Web App, and choose Flask and the Python version you want.
The second option is described in more detail below
Getting your code onto PythonAnywhere¶
This guide assumes you’ve already managed to get your code onto PythonAnywhere. Check out the uploading and downloading files guide if you need to.
For the purposes of these examples, we’ll assume your code lives at /home/yourusername/mysite
Check your config¶
If you’re importing existing code, review all of your Flask configuration settings to ensure that they match their new home. For instance, if you’ve specified a SERVER_NAME in your config, make sure that it matches the web app name.
Setting up your virtualenv¶
Open up a new Bash console from your Dashboard and run
mkvirtualenv --python=/usr/bin/python3.6 my-virtualenv # use whichever python version you prefer pip install flask
You’ll see the prompt changes from a $ to saying (my-virtualenv)$ — that’s how you can tell your virtualenv is active. Whenever you want to work on your project in the console, you need to make sure the virtualenv is active. You can reactivate it at a later date with
$ workon my-virtualenv (my-virtualenv)$
You can also install any other dependencies you may have at this point, like Sqlalchemy, using pip install flask-sqlalchemy , or pip install -r requirements.txt , if you have a requirements.txt
Setting up the Web app using Manual configuration¶
Go to the Web Tab and hit Add a new web app. Choose Manual Configuration, and then choose the Python version — make sure it’s the same version as the one you used in your virtualenv
Now go to the Virtualenv section, and enter your virtualenv name: my-virtualenv. When you hit enter, you’ll see it updates to the full path to your virtualenv (/home/yourusername/.virtualenvs/my-virtualenv).
Finally, go edit the wsgi configuration file. You’ll find a link to it near the top of the Web tab.
Configuring the WSGI file¶
To configure this file, you need to know which file your flask app lives in. The flask app usually looks something like this:
app = Flask(__name__)
Make a note of the path to that file, and the name of the app variable (is it «app»? Or «application»?) — in this example, let’s say it’s /home/yourusername/mysite/flask_app.py , and the variable is «app».
In your WSGI file, skip down to the flask section, uncomment it, and make it looks something like this:
import sys path = '/home/yourusername/mysite' if path not in sys.path: sys.path.insert(0, path) from flask_app import app as application
Do not use app.run() ¶
When you’re using Flask on your own PC, you’ll often «run» flask using a line that looks something like this:
app.run(host='127.0.0.1',port=8000,debug=True)
That won’t work on PythonAnywhere — the only way your app will appear on the public internet is if it’s configured via the web tab, with a wsgi file.
More importantly, if app.run() gets called when we import your code, it will crash your app, and you’ll see a 504 or a 502 error on your site, as detailed in this help page.
Thankfully, most Flask tutorials out there suggest you put the app.run() inside an if __name__ == ‘__main__’: clause, which will be OK, because that won’t get run when we import it.
app = Flask(__name__) @app.route('/') def home(): # etc etc, flask app code if __name__ == '__main__': app.run()
app = Flask(__name__) @app.route('/') def home(): # etc etc, flask app code app.run()
What about my database config?¶
Many guides on the Internet also suggest you put your database setup inside the __main__ clause, like this:
if __name__ == '__main__': db.create_all() app.run()
That will work fine on your machine, but, again, we don’t want to use app.run() on PythonAnywere. But you’ll still want to be able to run db.create_all() every so often on PythonAnywhere, to update your database tables or whatever it may be.
Two solutions — either just run it from a Bash console (remembering to activate your virtualenv first) and then Ctrl+C the flask server when it runs
$ workon my-virtualenv (my-virtualenv)$ python flask_app.py * Running on http://127.0.0.1:5000/ ^C (my-virtualenv)$
Or make a clever little if in your main that checks if it’s running on PythonAnywhere, eg:
from socket import gethostname [. ] if __name__ == '__main__': db.create_all() if 'liveconsole' not in gethostname(): app.run()
Want to improve this page? Submit a pull request!
Copyright © 2011-2023 PythonAnywhere LLP — Terms — Privacy & Cookies
«Python» is a registered trademark of the Python Software Foundation.
