🚀 #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:
%20in%20Next.js%2013.%22%2C%22thumbnail%22%3A%22https%3A%2F%2Fimages.ctfassets.net%2Fe5382hct74si%2Fk9BYNIi5HwkHop568SjEI%2Fcfb7e8215a11667d32265b34c43b4b5b%2FCleanShot_2022-10-25_at_14.38.59_2x.png%22%7D%2C%7B%22name%22%3A%22ISR%20Blog%20with%20Next.js%20and%20WordPress%22%2C%22description%22%3A%22An%20Incremental%20Static%20Regeneration%20Blog%20Example%20Using%20Next.js%20and%20WordPress%22%2C%22thumbnail%22%3A%22https%3A%2F%2Fimages.ctfassets.net%2Fe5382hct74si%2F2QHjwNHn9NzlflFlEqcwJv%2F1f7b5363a4a4591c4a85d106c868da71%2FCleanShot_2022-08-08_at_15.58.48.png%22%7D%2C%7B%22name%22%3A%22Precedent%20%E2%80%93%C2%A0Next.js%20Starter%22%2C%22description%22%3A%22A%20collection%20of%20components%2C%20hooks%2C%20and%20utilities%20built%20on%20Next.js%2C%20Typescript%2C%20Tailwind%2C%20Radix%2C%20Framer%20Motion%2C%20Prisma%2C%20and%20PostgreSQL.%22%2C%22thumbnail%22%3A%22https%3A%2F%2Fimages.ctfassets.net%2Fe5382hct74si%2F39i2uzs0R3S85juW2MptGs%2Ff611abbe7b666f52bdd5f35f296fb354%2FCleanShot_2023-01-13_at_13.31.51.png%22%7D%2C%7B%22name%22%3A%22Novel%20%E2%80%93%20AI-powered%20Notion-style%20editor%20%22%2C%22description%22%3A%22A%20Notion-style%20WYSYWIG%20editor%20with%20AI-powered%20autocompletions%2C%20built%20with%20Tiptap%2C%20OpenAI%2C%20and%20Vercel%20AI%20SDK.%22%2C%22thumbnail%22%3A%22https%3A%2F%2Fimages.ctfassets.net%2Fe5382hct74si%2F3YXmOo0YQBrFMSYE4RjswC%2F0444303eff1ccab53a724f50ab9e9578%2Fopengraph-image.png%22%7D%2C%7B%22name%22%3A%22Next.js%20Contentlayer%20Blog%20Starter%22%2C%22description%22%3A%22A%20blog%20template%20with%20Next.js%2013%20App%20Router%2C%20Contentlayer%2C%20Tailwind%20CSS%20and%20dark%20mode.%22%2C%22thumbnail%22%3A%22https%3A%2F%2Fimages.ctfassets.net%2Fe5382hct74si%2F49hwD2hCn4Hs1FtkgH87o2%2F4af5e9d7fd40015bd39cf6bc6d58dbec%2FCleanShot_2023-05-15_at_13.54.49.png%22%7D%2C%7B%22name%22%3A%22AI%20Photo%20Restorer%22%2C%22description%22%3A%22An%20AI%20Face%20Photo%20Restorer%20built%20on%20Next.js%20and%20Replicate.%22%2C%22thumbnail%22%3A%22https%3A%2F%2Fimages.ctfassets.net%2Fe5382hct74si%2F6E5IttWZ4ttcpCGehAFQQJ%2F06b2d3a9c2f569a838c79f5badd73968%2FCleanShot_2023-01-09_at_11.42.47_2x.png%22%7D%5D)
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.