🚀 #19 Gdzie wydać swoją aplikację?
Dzisiaj będzie monotematycznie, bo tylko o wydawaniu aplikacji. Nie będzie tutoriali, ale wskazówki czego możesz użyć. Tylko kilka opcji, bo jest ich za dużo i sam ograniczam się do 3 opisanych opcji.
Jednak zanim zaczniesz czytać, chciałbym Cię prosić o odpowiedź w krótkie ankiecie.
Heroku 💲
Heroku pozwala na szybki deploy aplikacji - zakres technologii jest spory, poza oficjalnie wspieranymi językami, możesz uruchomić cokolwiek co zadziała na Linuxie z Heroku.
Jeśli to czytasz to pewnie interesują Cię aplikacje frontowe. Tutaj Heroku wymaga "trochę" więcej konfiguracji - musisz stworzyć bardzo prosty serwer express
.
Konfiguracja automatycznego wydawania aplikacji na Heroku sprowadza się do połączenia repozytorium git, dodania prostej konfiguracji dla nginx i aplikacji node.js.
const express = require('express');
const path = require('path');
const app = express();
app.use(express.static(__dirname + '/dist/APP_NAME'));
app.get('/*', function(req,res) {
res.sendFile(path.join(__dirname+'/dist/APP_NAME/index.html'));
});
app.listen(process.env.PORT || 8080);
I to wszystko. Jeśli chodzi o koszta to musisz sprawdzić. Ostatni raz korzystałem z Heroku gdy posiadało jeszcze darmowy plan.
Vercel
Kolejna chmurowa usługa, tym razem darmowa. Jeśli nie masz chęci na jakąkolwiek zabawę z konfiguracją to Vercel udostępnia gotowe szablony - znajdziesz każdy popularny framework frontowy i nie tylko:
Jeśli masz już aplikację to wystarczy zainstalować CLI i Vercel sam wykryje framework i skonfiguruje deploy. Tak można żyć :D
Dodatkowymi plusami są:
- redis
- Postgres
- (wkrótce) storage.
Vercel, podobnie jak Heroku, umożliwia nie tylko deploy frontowych aplikacji, ale również Node.js. W przypadku Node.js wymaga od nas trochę więcej konfiguracji, np. dla apki Nest.js potrzeba stworzyć plik vercel.json
z konfiguracją:
{
"version": 2,
"builds": [
{
"src": "src/main.ts",
"use": "@vercel/node"
}
],
"routes": [
{
"src": "/(.*)",
"dest": "src/main.ts",
"methods": ["GET", "POST", "PUT", "DELETE"]
}
],
"buildCommand": "npm run build",
"outputDirectory": "dist"
}
Współdzielony serwer 💲
Kiedyś najprostsze rozwiązanie. Logujesz się po FTP, wrzucasz pliki i gotowe. Dodatkowo masz do dyspozycji DirectAdmin/CPanel lub jakiś inny panel i 99% rzeczy sobie wyklikasz - od skonfigurowania domeny po maila. Oczywiście nie musisz tego robić ręcznie (ale kto tego nie robił?), bardzo łatwo skonfigurować automatyczne budowanie aplikacji i wrzucanie plików na serwer przez narzędzia CI/CD - Github Actions, Gitlab CI, Jenkins i pewnie masę innych.
Jeszcze do niedawna sam korzystałem z tego rozwiązania - aplikacja była budowana przez jedno z zadań w CI i następne wrzucana na serwer. Działało, było bezobsługowe, ale... są lepsze metody.
VPS 💲
Opcja dla najbardziej wytrwałych. Dostajesz serwer z systemem operacyjnym i hulaj dusza. Sam musisz zainstalować wymagane oprogramowanie - serwer http (nginx/apache), bazę danych, mail itp. Jednak nie taki diabeł straszny i po kilku nieudanych próbach (na pewno takie będą), później będzie łatwiej.
W sieci znajdziesz wiele poradników (sam też na nich bazuję, nie posiadam dużej wiedzy w tym temacie), dla różnych aplikacji (PHP, Node.js, statyczny html).
IMO każdy deweloper powinien choć raz spróbować postawić aplikację na VPS.
Z tanich rozwiązań (i dobrych) polecam https://mikr.us/.
Poza tym na VPS możesz postawić cokolwiek tylko chcesz np. prywatna instancja Gitlaba, Sentry, n8n - wszystko jest tylko kwestią konfiguracji. I dla zastosować hobbystycznych jest to jedno z najtańszych rozwiązań (poza poświęconym czasem) - w moim przypadku Ghost na VPS kosztuje 75 zł rocznie, a w chmurze - 108$.
GCP/AWS 💲
Opcje, o której najmniej mogę napisać, ale muszę o nich wspomnieć.
Chociaż obecnie korzystam(y) z cloudrun przy deployu aplikacji frontowych. Dla aplikacji frontowych (Angular i React) schemat jest bardzo prosty - buduję obraz dockerowy (nie ja, sam się robi po uruchomieniu odpowiedniego joba w Gitlabie), który następnie jest uruchamiany w GCP.