Рубрики
Без рубрики

Устал от развертываний, построил свой собственный Heroku

TLDR: Я устал от развертывания моих проектов Django, поехал в Героку, и сгорел свои счета-фактуры, б … Теги с DevOps, Python, Django, Docker.

TLDR: Я устал от развертывания моих проектов Django, поехал в Героку и получил счета, построил свои собственные SaaS для развертывания приложений к существующим облакам.

История начинается с пользовательского агентства по разработке программного обеспечения

6 лет назад я начал еще одно агентство, где мы создали пользовательские решения для бизнеса, которые нуждались в автоматизации трудоемких задач:

  • Полуавтоматизированное распределение задач для большой сервисной компании,
  • Большие предприятия электронной коммерции,
  • Генерация строительной документации
  • Многие меньшие проекты.

Это было интересное путешествие.

Я любил то, что мы построили. Деньги, которые мы сохранили. Ручной труд Мы избавились от (ну, не все были рады последней частью, конечно).

Это длилось 5 лет, и я любил большую часть того, что нам пришлось сделать.

Но одна вещь раздражала каждый раз.

Каждый случай, и тогда мне нужно было раскрутить новый проект и настроить тестовую среду, а затем производство одну.

Развертывание было болью каждый раз

За это время я экспериментировал с различными подходами и инструментами развертывания:

  • Использовал Fabfile,
  • Добавлен CI/CD – Первый Атласский бамбук, затем GitLab
  • Использовал руководителя, затем докер,
  • Голые металлические серверы, цифровой океан, линоус.

В какой-то момент я придумал ряд сценариев, которые использовали docker-compose и gitlab ci для начать развертывание на новых коммитах, толкаемых в репозиторий.

Но для каждого нового проекта было сделано много ручной работы, это была проницаемая ошибка человека и заняла полный день, чтобы все настроить:

  • .gitlab-ci.yml.
  • Docker-Compose.yml.yml.yml
  • Настройте nginx и давайте шифрование
  • базы данных
  • Список маленьких вещей продолжается

Мне понравилось, когда появился новый клиентский проект, но я боялся перейти на этот процесс снова и снова.

Я думал, что должно быть лучше.

Давайте дадим Heroku попробуй

В то время мы придумали пару наших собственных боковых проектов, где мы используем Heroku.

Это был такой приятный опыт.

Я был «вау» на каждом шагу.

Я буквально проводил ноль времени на что-нибудь.

Там я переместил еще пару проектов, это было легко. Ни один из этих проектов ни один из этих проектов не создавал никаких доходов, поскольку он был участками хобби.

Тогда пришло время, и я получил SMS из банка о Heroku заряжать мою карту. В этот момент все волнения ушли.

Вот наступает счет Heroku

Через 2 месяца по расходам Heroku поднялся с 15 долларов США в размере до $ 80/мес. Для хобби проектов.

Я немедленно отключил эти сайты. Один я ушел, как единственный, кто нас интересует.

Это совпало с резкими изменениями в моем личном финансовом положении. Я был полностью сломан в течение нескольких месяцев.

Возвращение на трек, ищу идею

Когда я решил свои финансовые вопросы, у меня было время думать о том, что делать дальше.

Мы закончили с помощью пользовательских программ разработки.

То, что осталось после того, как это дело ясно, была боль от развертываний и боли от платы за Heroku.

Я хотел вернуться к некоторым нашим проектам хобби.

У меня было время, чтобы сделать это правильным путем и наслаждаться этим.

Я хотел что-то как приятное, как Героку, но я не хотел так много платить за это.

Лампочка

Мне стало ясно: мне нужно построить свой собственный Heroku.

В то время в ходных машинах я наткнулся на хэтчбокси. Для Ruby и услышал о Larave Forge для PHP.

Я относился к этому как проверку для аналогичного инструмента, но для Python/Django.

Я придумал имя для этого через месяц: Appliku.

Я начал с сценариев Bash для построения докера, повернул Django, чтобы управлять им и итерацией на это в течение 17 месяцев до этого момента (солнце, 16 августа 2020 года).

Что у меня сейчас?

  • Автоматическое обеспечение серверов как на AWS и Digitalocean
  • Настройка сервера (Docker, Nginx, давайте шифрование)
  • Строительные приложения из исходного кода на Github Repo
  • Почти как хороший интерфейс, как Heroku
  • Heroku Config Vars Sync Sync для тех, кто пытается отойти от Heroku Step за шагом.

Что под капотом?

Приложение Django – это ядро продукта.

Frestend построен с угловой на основе угловой упаковки MDBootstrap.com.

Тонны фоновых задач управляют сельдереем.

Когда пользователь запрашивает создание нового сервера – Appliku переговаривает через API для цифрового океана или AWS для его предоставления.

Когда сервер будет предоставлен, с помощью Module Module Appliku подключается к серверу Over SSH и запускает скрипт настройки.

Когда установка завершена – вы можете развернуть ваше приложение.

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

Единственное требование к приложению имеет промеренность.

Я подумал, что, поскольку я двигался из Героку, должны быть другие, которые делают то же самое. И мне понравилась эта идея иметь процессы в самой коде, а не указав их в интерфейсе UI.

ProCFile – это текстовый файл, в котором вы указываете, какие процессы необходимы для работы для вашего приложения.

web: python gunicorn wsgi:app
release: python manage.py migrate
celery: celery worker -Q default

«Web» говорит нам, что этот процесс должен принимать HTTP-соединения.

«Выпуск» – это то, что выполняется на каждом выпуске.

Другие процессы не имеют особого значения.

Appliku спрашивает, какой язык программирования вы используете для запуска приложения. Прямо сейчас поддерживаемые языки являются Python, Pypy, PHP и узел.

Для сложных сборки мы разрешаем написать свой собственный DockerFile.

Heroku Sync – это функция, которая вытягивает конфигурацию Vars приложения из API Heroku каждую минуту и обновляет Config vars для соответствующего приложения в Appliku и восстановит его.

Это доказало, что это полезно для тех, кто передвигал часть Heroku Dynos для цифрового океана с целью сокращения расходов. Обычно это делается с голодными памятью рабочих рабочих.

Когда вы попали в развертывание.

Appliku делает ваш сервер:

  • Перейти к своему репо Github
  • клонировать код
  • Создать Docker-Compose файл (на основе Procfile и процессов, которые вы включили для запуска)
  • построить изображение
  • Начни это

Кроме того, IT-запросы позволяют шифровать SSL-сертификат для appname.applikuapp.com домена или любой другой пользовательский домен, который вы добавили.

Создав свой сервер сделать то, что мы гарантируем, что весь ваш код хранится только на вашем сервере. Единственная часть информации из вашего Code We Mating – это содержимое Proffile.

После развертывания приложения он работает без особого взаимодействия с нашим приложением.

Если вы нажимаете новые коммиты – мы запускаем процесс сборки/развертывания.

Каждый день мы запускаем CERTBOT, чтобы проверить, истекает ли какие-либо сертификаты.

Пара слов о конфигурации nginx.

NGINX VHOST является настройкой таким образом, чтобы она уважала заголовки кэша из вашего приложения.

proxy_cache_path /home/app/_cache/sitename.com levels=1:2 keys_zone=sitename.com:10m max_size=1g inactive=60m use_temp_path=off;
location / {
        proxy_cache sitename.com;
        proxy_cache_revalidate on;
        proxy_cache_min_uses 1;
        proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504;
        proxy_cache_background_update on;
        proxy_cache_lock on;
        proxy_cache_bypass $cookie_nocache ;
        add_header X-Cache-Status $upstream_cache_status;

        proxy_pass http://127.0.0.1:8003;
        proxy_read_timeout 600;
        proxy_send_timeout 600;
        proxy_set_header Host $http_host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Forwarded-Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }

Таким образом, вы можете использовать фиктивную кэширование на стороне приложений (например, Bummy Cache Backend в Django), чтобы генерировать правильные заголовки кэша, и фактическое кеширование произойдет до того, как запрос достигнет ошибки.

Закрытие мыслей.

Я построил все это в одиночку с помощью моей жены, которая взяла владение большинством неинтезовских задач.

Это забавная вещь для работы. Я многому научился о Docker, Nginx, Paramiko, Django сам.

Я думаю, что это приложение может помочь многим людям кроме меня:

  • отправить свою идею быстрее
  • Избегайте делать DevOps
  • Решите разочарование для начинающих “Я построил приложение, как мне это опубликовать?”

Бизнес-модель проста – вы платите Appliku фиксированную плату за обслуживание и платите непосредственно к облачным поставщикам для своих услуг.

Есть бесплатный план на Appliku, и AWS дает 1 год для новых пользователей.

Если вы изучаете код или поиск (в основном) свободного и приятного способа запуска вашего приложения – я действительно надеюсь, в эти 17 месяцев я построил решение, которое может дать вам это.

Слияние

Я действительно надеюсь, что вы слушаете о своем путешествии, и что я построил, было интересно и не похоже на рекламную вещь.

Это было действительно интересное путешествие, полное волнения, разочарования (Hello, AWS Docs!), И идея сделать чью-то легче.

Я поделился всем здесь, чтобы сказать, что даже большие и сложные вещи можно сделать, если вы верите в это, и если вы появляетесь каждый день (даже в течение 30 минут) и настойчиво работают над этим.

Если приложение поможет кому-то или сама статью мотивирует кого-то встать и что-то создать – я буду очень счастлив.

Спасибо за то время, чтобы прочитать это.

P.P.S.

Почти забыл об ссылке на приложение: https://appliku.com/

Оригинал: “https://dev.to/kostjapalovic/tired-of-deployments-built-my-own-heroku-47ed”