Від ідеї до продакшну: що насправді чекає розробника після деплою пет-проекту в хмару

💡 Усі статті, обговорення, новини про DevOps — в одному місці. Приєднуйтесь до DevOps спільноти!

Здавалося б, що може бути простішим після завершення розробки: купити домен, підняти віртуалку у хмарі — і проєкт готовий підкорювати світ. Багато ІТ-компаній розглядають наявність власних проєктів як вагомий «плюс» на співбесіді, що підштовхує розробників створювати щось своє заради портфоліо. Але про те, з якими реаліями та викликами стикається новачок ДО і ПІСЛЯ запуску, пишуть напрочуд мало.

У цій статті хочу поділитися власним досвідом: від вибору хмарного середовища до перших атак ботів на живий сервіс.

Пошук хмари: де розгорнути проєкт і не збанкрутувати

Звісно, великі компанії мають штат DevOps-інженерів, які вирішують інфраструктурні завдання без проблем. Але як бути розробнику-одинаку, коли твій проєкт написаний на Java та MySQL?

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

1. AWS: досвід із кредитними 300$

Першим я вирішив «обкатати» AWS, скориставшись стартовим кредитом. Функціонал платформи вражає, все продумано до мікродеталей, та й запуск пройшов відносно легко. Але виявилися нюанси:

  • Віртуальна машина (EC2) та база даних (RDS) оплачуються окремо.
  • Налаштування вимагає досвіду, адже ціна залежить від кожної дрібниці.
  • Найголовніший біль — найдешевші інстанси регулярно «злітали» під навантаженням.

Після кількох годин пошуку стабільності «чарівною пігулкою» став перехід на дорожчі версії ВМ та потужнішу БД із загальним цінником приблизно у 30$ на місяць. Про використання балансувальників навантаження чи складних оптимізаторів тоді й мова не йшла. Як наслідок — мої 300$ кредиту випарувалися за 3 місяці. Висновок: за все «класне» в AWS треба платити чималі гроші, що зовсім не практично для пет-проєкту.

2. Heroku: мій непідходящий стек

Наступною спробою стала міграція на Heroku. Результат теж виявився невдалим: платформа працює виключно з PostgreSQL. Переписувати й переналаштовувати проєкт із MySQL заради цього виявилося абсолютно невиправдано з погляду витрачених ресурсів та сил.

3. DigitalOcean: компроміс знайдено

Зрозумівши, що «халяви» немає, для фінального тесту життєздатності проєкту я обрав DigitalOcean.

Вивчивши варіанти економії, знайшов чудове рішення: взяти одну віртуальну машину і розгорнути все необхідне (Java-сервер, Nginx та MySQL) на одному диску всього за 4$ (без податків).

Звісно, найдешевше залізо виявилося занадто слабким для масивної бази даних. Виходом став перехід на трохи потужнішу ВМ за 6$ на місяць (замість того, щоб платити окремі 15$ за керовану базу даних). Цього бюджету виявилося цілком достатньо для повноцінної роботи проєкту.

Етап «ПІСЛЯ»: коли починається найцікавіше

Щойно ваш сервер запрацює у відкритій мережі, будьте готові до зустрічі з реальністю — атаками ботів 24/7. Ось із якими факапами та викликами довелося зіткнутися мені:

1. Безпека SSH та відкритий порт 22

Мій перший гіркий досвід — налаштування доступу до бази даних із програми dbForge Studio через SSH із входом за звичайним паролем. Це непомітно залишило відкритим 22-й порт.

Головне застереження: ніколи не давайте прямий дозвіл на вхід під суперкористувачем (PermitRootLogin yes), адже це полегшує завдання зловмисникам на 50%. Єдине надійне рішення для продакшну — суворе використання SSH-ключів.

2. Ботоферми на реєстраціях та захист форм

Коли сайт запрацював, за кілька днів я побачив сотні псевдореєстрацій. Звісно, я одразу спробував стандартне рішення через Nginx — обмеження кількості запитів:

limit_req_zone $binary_remote_addr zone=demo_limit:10m rate=1r/s;

Але у моєму випадку це не зупинило ботів повністю. Повноцінну капчу ставити не хотілося, щоб не псувати UX для реальних користувачів.

Що допомогло? Елегантний та простий прийом — honeypot (приховані поля) у формах входу.

  • У форму додається приховане поле: <input name="website_url_check">
  • У CSS воно маскується через position: absolute; left: −9999px; (люди його не бачать, а боти заповнюють за звичкою).
  • У Java-контролері спрацьовує перевірка: @RequestParam(value = «website_url_check», required = false).

Якщо це поле заповнене — сервер тихо ігнорує запит і робить редирект, навіть не викликаючи сервіс реєстрації та не засмічуючи базу даних. Геніально і просто.

Замість висновків

Підсумовуючи весь цей шлях, можу сказати одне: на практиці все складніше, ніж здається на перший погляд. Звісно, зараз завдяки AI багато рутинних речей вирішуються швидше, але до подібних інфраструктурних викликів краще бути готовим завчасно.

Поділіться в коментарях своїм досвідом: з якими несподіванками ви стикалися під час першого деплою власних пет-проєктів? Чи варто взагалі морочитися з хмарами, чи простіше весь код залишити на GitHub?

👍ПодобаєтьсяСподобалось2
До обраногоВ обраному0
LinkedIn
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

Вітаю!

dbForge Studio під час підключення через SSH працює як звичайний SSH-клієнт. Він не відкриває порт 22 і не вмикає вхід за паролем — і те, і інше задається на сервері: у налаштуваннях sshd, firewall або правилах хмарного провайдера. Наприклад, AWS EC2 за замовчуванням відкриває SSH для всіх IP-адрес.

Щодо root і ключів, ми з вами згодні. Для продакшну рекомендуємо:

  • у sshd_config вимкнути вхід за паролем і під root: PasswordAuthentication no, PermitRootLogin no;
  • підключатися за SSH-ключем — у dbForge Studio це опція Public key authentication на вкладці Security у Connection Manager;
  • дозволити доступ до SSH лише з довірених IP-адрес або через VPN;
  • не відкривати назовні порт MySQL 3306 — SSH-тунель якраз дозволяє тримати його закритим.
Інструкція з налаштування SSH-підключення: docs.devart.com/...​ating-ssh-connection.html

Якщо ви стикнулися з конкретною проблемою саме в dbForge, опишіть її, будь ласка, та відправте на [email protected] і ми допоможемо.

Дякую за інфу. А далі реєстрації щось цікаве було?

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

Це повноцінний VPS у вас за $6? а які у нього характеристики?
А де реєструєте домени, і за якою ціною? Бо мені пишуть мій власний .com подовжити — $18 на рік, щось задорого.

Дякую за коментар. Домен реєстрував на сайт nic.ua. Якщо не є суттєвим розширення домену, можна знайти за символічних 1$ на рік. Для домену com.ua вартість в січні становила 559 грн на рік (для продовження на наступний рік — 667 грн).
Стосовно DigitalOcean, я пробував запропонований найдешевший варіант за 4$, але то реально слабеньке залізо. Зупинився на варіанті 6$ без податку (оплачую приблизно 7,33$ на місяць): 1 GB / 25 GB / LON1 — Ubuntu 24.04 (LTS) x64. На самому сервері задіяв файлову підкачку (Swap) на 2 ГБ, що забезпечило запас віртуальної пам’яті для пікових навантажень. БД окремо не купував, а просто встановив на ВМ — MySQL 8.0. У моєму випадку цього виявилось достатньо для нормально роботи.
Отже, загальний цінник робочого проекту становить: домен — 559 грн/рік та 7.33 $ на місяць вартість ВМ. Більше жодних витрат.

1. AWS: досвід із кредитними 300$

Зараз там наче 200$ безкоштовних кредитів (початково 100$ + 5 завдань по 20$ кожен).

А в сторону AWS Lambda дивилися?

Дякую за коментар! Щодо кредитів — згоден, умови там періодично міняються. А от щодо Лямбд — я навіть не став туди лізти на першому пет-проекті. Головна задача була розібратись у базових налаштуваннях та спробувати підняти перший проект своїми руками. Я був впевнений, що розробник, який не тільки зміг написати код для портфоліо, але і спробував його запустити, має більше шансів знайти першу роботу.

Помітив, що в статті немає нічого про бекапи.

Ви ще запитайте про реліз менеджмент

Дякую за коментар. Дуже слушне зауваження щодо роботи із БД. Це дійсно обов’язково потрібно реалізовувати на етапі налаштування. У випадку із моїм першим ПЕТ проектом, я обмежився лише сліпком бази «про всяк випадок», так як проект містив лише ознайомчий характер для портфоліо. Дійсно, ця тема дуже важлива і не потрібно про це забувати. У AWS сподобалось, що відразу можна налаштувати резервне зберігання у декількох різних data-центрах, що є реально зручним.

Я пішов трохи іншим шляхом- одразу. ’ ні ’всякім вендорлок клауд провайдерам — запитав у чажпт. — як зробити це правильно та який самий оптимальний хостинг для старту . Зупинився на hetzner. Стек : nodejs, pg, redis. Через деякий час зробив ревю на codex astra- префіксів деякі речі.