AppFog и Django. С чего начать?

в 8:56, , рубрики: django, python, метки: ,

Доброго времени суток, уважаемыее! Недавно я заинтересовался Python и, в частности, веб-фреймворком Django. После ознакомления с основными возможностями захотелось найти бесплатный хостинг с поддержкой Django. Каюсь, в тот момент напрочь забыл про GAE, но, почитав вчера про оный, понял, что выбор получился ничуть не хуже. Итак, встречайте, AppFog! (осторожно, под катом картинки!)

Что нам позволяет беслатный аккаунт?

  • Подключение до 8 сервисов
  • 100 мб. для базы данных MySQL или PostgreSQL
  • 10 мб. RAM и до 6 одновременным подключений для Redis, MongoDB и RabbitMQ
  • 5 гб. трафика в месяц
  • 100 запросов в секунду
  • Помощь в рамках сообщества
  • Приложения располагаются на доменах *.af.cm

К сожалению, за плюшки вроде SSH нужно платить. Сам прайс. Ну а мы регистрируем бесплатный аккаунт и получаем на мыло сообщение с ключом подтверждения (у меня уже второй день с данным этапом какая-то лажа). После этого нас должно перекинуть по адресу https://console.appfog.com/, где мы и будем создавать наше приложение.

http://console.appfog.com

AppFog и Django. С чего начать?

Создаем приложение

Нажимаем на кнопку New App и выбираем нужную нам платформу. В принципе, тут я испытал вау-эффект, ибо список впечатляет. Выбираем Django.

Выбираем платформу

AppFog и Django. С чего начать?

Далее нам нужно выбрать расположение сервера. Как вы видите, не все сервера поддерживают разные платформы. Я выбрал AWS Europe West. Далее вводим имя домена для нашего сайта.

Выбираем сервер и вводим имя домена

AppFog и Django. С чего начать?

Нажимаем Create App. Попадаем на страницу, где нам покажут «лог» создания приложения.

Создание приложения

AppFog и Django. С чего начать?

После создания нас автоматически перекинет на страницу приложения

Страница приложения

AppFog и Django. С чего начать?

Services — мы можем управлять сервисами нашего приложения.

Services

AppFog и Django. С чего начать?

Add-ons — можно установить дополнительные возможности. Страница большая, поэтому я просто дам их список:

Logentries, Redis Cloud, Xeround, Searchify, MongoHQ, MongoLab, Blitz, ClearDB, MemCachier, Cloudinary, IronMQ, Nexmo, IronWorker, CloudMailin, Mailgun

Update source code — немного ниже.
Domain names — позволяет добавлять собственные домены. Но… *барабанная дробь* Недоступно на бесплатном аккаунте.
Env variables — позволяет добавлять переменные окружения.
SSL — недоступно на бесплатном аккаунте.
Clone — клонирует приложение на другой сервер.
Settings — одна единственная кнопка — Delete App.

А теперь снова ложка дегтя (хотя, кому как) — для обновления кода приложения нам нужен Ruby и гем af. Так как у меня стоит винда, тянем установщик. Идем на страницу Ruby Installer и качаем инсталятор. В процессе установки он спросит, нужно ли добавлять путь к руби в переменную Path — ставим галку (для неискушенных пользователей, «профи» могут и не делать). И, да, ВНИМАНИЕ — гем AppFog не работает под Cygwin — зависает после ввода логина (их трабла).

Итак, после установки руби открываем консоль и вводим

gem update --system
gem install af

Далее, заходим на страницу Update source code и нажимаем на кнопку Download source code (внимательные люди уже заметили, что эта кнопка присутствует и в шапке косоли). Нам отдадут zip с кодом. Распаковываем его в какую-нибудь папку и заходим в нее через консоль. Теперь нам надо залогиниться в AppFog:

af login
[WARNING] DL is deprecated, please use Fiddle
Attempting login to [https://api.appfog.com]
Email: youremail@example.com
Password: **************
Successfully logged into [https://api.appfog.com]

Нижесказанное будет написанно для таких же раков, как и я :)

А теперь давайте изменим наш код. Для начала откроем setting.py и сделаем следующие изменения:

  • Поставим DEBUG в False
  • Найдем строку PROJECT_ROOT = os.path.abspath(os.path.dirname(__file__)) и переместим ее в начало, под строку MANAGERS = ADMINS
  • После предыдущей строки добавим список разрешенных хостов, в который добавим наш домен: ALLOWED_HOSTS = ['habratest.eu01.aws.af.cm/',]
  • Заменим STATIC_ROOT = '' на STATIC_ROOT = os.path.join(PROJECT_ROOT, 'static')

Далее создадим views.py и впишем в него:

views.py

from django.shortcuts import render_to_response

def index(request):
    return render_to_response('index.html')

Откроем urls.py и сделаем следующие изменения:

urls.py

from django.conf.urls.defaults import patterns, include, url
import settings
from views import *

urlpatterns = patterns('',
    url(r'^$', index),
    (r'^static/(?P<path>.*)$', 'django.views.static.serve', {'document_root': settings.STATIC_ROOT}), #это нужно для доступа к статическим файлам
)

Создадим файл base.html в папке templates, приведем его к виду

base.html

<!doctype html>
<html lang="ru">
<head>
    <meta charset="UTF-8">
    <title>{% block title %}{% endblock %}</title>
</head>
<body>
	{% block content %}{% endblock %}
</body>
</html>

Изменим файл index.html

index.html

{% extends "base.html" %}

{% block title %}Django page{% endblock %}

{% block content %}
    <h1>Welcome to habratest Django page!</h1>
{% endblock %}

И создадим файл 404.html

404.html

{% extends "base.html" %}

{% block title %}404{% endblock %}

{% block content %}
    <h1>404 ERROR</h1>
{% endblock %}

По аналогии можно создать шаблон для 500 ошибки.

Апдейтим приложение

После всех манипуляций нам надо загрузить приложение обратно в облако. Снова заходим в консоль и пишем

af update habratest

[WARNING] DL is deprecated, please use Fiddle
Uploading Application:
  Checking for available resources: OK
  Packing application: OK
  Uploading (5K): Push Status: OK
Stopping Application 'habratest': OK
Staging Application 'habratest': ...
                                                                                
Staging Application 'habratest': OK
Starting Application 'habratest': ..
                                                                                
Starting Application 'habratest': OK

После завершения переходим на наш хабратест и видим страницу. :) Поздравляю, вы только что захостили простейшее приложение в облаке!

Вместо послесловия

Я прошу прощения за отсутствие информации про подключение базы данных и работу с ней — я только начал изучать Django и пока еще не взялся за базу данных.
Если кто-то не хочет регать аккаунт — я могу дать данные от этой тестовой учетки, пишите в личку.
Большое спасибо за ваше внимание, надеюсь не утомил.

Автор: xxxTy3uKxxx

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js