Перейти к содержимому

Гайд по деплою · Django

Разверните Django за считанные минуты.

Подключите репозиторий, Railpack соберёт его, сервис получит домен с TLS. Базы данных из шаблонов, потребление списывается поминутно с предоплаченного баланса, всё на нодах в ЕС.

terminal
$ npm i -g skiffly && skiffly login
$ cd mysite && skiffly init
$ skiffly deploy --template postgres
$ skiffly variables set 'DATABASE_URL=${{Postgres.DATABASE_URL}}'
$ skiffly up

Что распознаёт Railpack

Railpack изучает репозиторий и подбирает сборку для Django; большинству проектов настройка не нужна. Dockerfile в репозитории всегда имеет приоритет.

  • requirements.txt / pyproject.toml / Pipfile
  • manage.py
  • .python-version / runtime.txt
Сборщик
Railpack (по умолчанию)
Команда запуска
python manage.py migrate && python manage.py collectstatic --noinput && gunicorn mysite.wsgi --bind 0.0.0.0:$PORT

Определяется Railpack; переопределите её в Настройки → Деплой → Команда запуска.

Порт и $PORT

Skiffly прокидывает PORT в каждый сервис и направляет на него публичный домен. Укажите порт в настройках сервиса, если приложение слушает фиксированный; по умолчанию для Django это 8000, а если ничего не задано — 8080.

Слушать $PORT
gunicorn mysite.wsgi --bind 0.0.0.0:$PORT
PORT
8000
SKIFFLY_PUBLIC_DOMAIN
<service>.skiffly.cloud

Из терминала

Установите CLI, привяжите директорию, разверните. skiffly up собирает запушенный HEAD текущей ветки и стримит логи сборки; skiffly domain выдаёт сервису адрес *.skiffly.cloud.

Или опишите один раз

.skiffly/skiffly.ts объявляет сервис, его базы данных и ссылки между ними. skiffly config plan показывает diff, skiffly config apply применяет его. API повторяет railway/iac.

Config as code
.skiffly/skiffly.ts
// .skiffly/skiffly.ts
import { defineSkiffly, generate, github, postgres, project, service } from "@skiffly/config";

export default defineSkiffly(() => {
  const db = postgres("db");

  const web = service("web", {
    source: github("acme/web"),
    start: "python manage.py migrate && gunicorn mysite.wsgi --bind 0.0.0.0:$PORT",
    port: 8000,
    healthcheck: "/",
    env: {
      DATABASE_URL: db.env.DATABASE_URL,
      SECRET_KEY: generate("hex64"),
    },
  });

  return project("web", { resources: [web, db] });
});

Django на Skiffly: частые вопросы

Как задать переменные окружения для Django?
На вкладке «Переменные» сервиса, командой skiffly variables set KEY=value или в .skiffly/skiffly.ts. Ссылайтесь на другие сервисы через ${{Postgres.DATABASE_URL}}, а на общие значения окружения — через ${{shared.NAME}}. Секреты шифруются при хранении.
Можно ли изменить команду сборки или запуска?
Да. Настройки → Сборка → Команда сборки переопределяет шаг сборки Railpack; Настройки → Деплой → Команда запуска заменяет команду запуска. Для монорепозитория задаётся корневая директория, чтобы сборка шла внутри неё.
Как добавить Postgres или Redis?
Разверните шаблон в то же окружение. Он появится с томом, сгенерированными учётными данными и URL подключения, на который вы ссылаетесь из сервиса Django. Подключайтесь с ноутбука через skiffly connect postgres.
Будут ли preview-окружения для каждого pull request?
Включите PR-превью в проекте: каждый pull request получит собственную копию окружения на своём домене, которая удаляется, когда PR слит или закрыт. Форки игнорируются.
Сколько стоит небольшое приложение на Django?
Сервис 512 МБ / 0.25 vCPU обходится примерно в $7.75 в месяц, списание поминутно с баланса. Добавьте Postgres с 512 МБ / 0.25 vCPU и томом 10 ГБ примерно за $9 сверху. Бесплатный тариф запускает один сервис 512 МБ с App Sleeping без оплаты.
Может ли сервис Django засыпать при простое?
Включите App Sleeping: примерно через 10 минут без запросов сервис масштабируется до нуля и просыпается на следующем запросе (2–10 с). CPU и память во сне не тарифицируются; том — тарифицируется.

Разверните своё приложение на Django сегодня

Бесплатный тариф без карты. Hobby от $5, из них $5 потребления включено.