Skapa en egen billig molnlösning PaaS (Platform as a Service) med CapRover

artikelbild

Jeton Mustini
Senast uppdaterad 4 maj 2022

CapRover är en extremt lättanvänd app/databas- och webbserverhanterare för dina appar, som t.ex. NodeJS, Python, PHP, ASP.NET, Ruby, MySQL, MongoDB, Postgres, WordPress (och etc ...)!

Introduktion

Plattform som en tjänst (PaaS) är molnbaserade tjänster som hjälper dig att eliminera kostnaden och komplexiteten för att utveckla applikationer. Tjänster som AWS, Heroku eller Google App Engine tillåter dig att bygga, köra och driva applikationer helt i molnet.

Men med bekväm användbarhet kommer också en högre prislapp. När du väl lämnar gratisnivån (till exempel på AWS) börjar det bli dyrt. Vill du lägga till en databas till din tjänst måste du gräva ännu djupare i fickan.

Vi har länge letat efter ett alternativ där du kan implementera ditt egna PaaS på vilken infrastruktur som helst, men med drastiskt minskade kostnader och som fortfarande har fördelarna av en typisk PaaS-tjänst. Svaret har vi funnit i CapRover!.

CapRover hjälper dig att öka din produktivitet genom att fokusera på dina appar istället för den underliggande infrastrukturen. Caprover är open-source och helt gratis att använda. Utöver det är CapRover snabbt och väldigt robust eftersom den använder Docker, Nginx, LetsEncrypt och NetData under huven bakom det enkla användargränssnittet.

Fördelar med CapRover:

✔ CLI för automatisering och skript

✔ Webb-GUI för enkel åtkomst och bekvämlighet

✔ Ingen inlåsning! Ta bort CapRover och dina appar fortsätter att fungera!

✔ Docker Swarm under huven för containerisering och klustring

✔ Nginx (helt anpassningsbar) under huven för lastbalansering

✔ LetsEncrypt under huven för gratis SSL (HTTPS)

Hur vi byggde Lagjobb.se med CapRover

I den här artikeln går vi igenom hur man sätter upp CapRover och skapar appar/databaser med det.

Som exempel använder vi appen Lagjobb.se som är en tjänst som hjälper lag, klasser och föreningar att hitta uppdrag som de kan utföra för att dryga ut lagkassan.

Lagjobb.se arkitektur består av en klient-app byggd med Vue.js och Quasar Framework. Klient-appen kommunicerar med en webbtjänst som är byggd i Asp.Net Core Web API, webbtjänsten använder i sin tur Entity Framework för att kommunicera med en PostgreSQL databas.

PWA fördelar
Lagjobb.se tekniker & arkitektur.

Förutsättningar för att använda CapRover

  • Du har köpt en virtuell privat server (VPS)
  • Du har köpt en domän
  • Node.js och npm installerade på din lokala dator

Köpa en VPS

CapRover föreslår att din VPS har minst 1 GB RAM för att undvika byggprocessproblem. Det finns många molntjänsteleverantörer som Digital Ocean, Vultr, Hetzner eller Linode där du kan köpa en VPS från bara $3-5USD per månad.

Enklaste sättet som vi föreslår är Digital Ocean och deras One-Click app för Caprover.

Gå till Digital Ocean genom att klicka på den här länken HÄR (detta är en hänvisningslänk som ger dig $100USD för två månader)

Efter att du har registrerat dig, eller om du redan är inloggad, bör du se gröna meny knappen "Create".

Klicka på knappen och välj "Droplets".

På nästa sida väljer du fliken "Marketplace", sök efter CapRover och välj CapRover.

PWA fördelar
Alternativen att välja i Digital Ocean.

Sedan är det bara att välja en prisplan och region som är närmaste dig. För inloggning till din VPS är SSH att föredra och säkrare, men det finns även möjlighet att använda ett lösenord. Om du vill sätta upp SSH kan du göra detta genom att följa den här guiden . PWA fördelar
Den billigaste prisplanen går bra att använda.

Och klicka på "Create Droplet". Ge det cirka två minuter för din Droplet att bygga. Du har nu en egen server med CapRover.

PWA fördelar
Din nya server finns nu på IP-adressen 134.209.208.179.

Konfigurera domänen

Därefter vill vi peka vår domän till vår VPS. Om domänen används till något annat så spelar det ingen roll. Låt oss säga att du äger www.exempel.com.
Du ska ställa in *.server.exempel.com (server delen i url:en kan vara vad som helst) som en A-post i dina DNS-inställningar för att peka på IP-adressen till servern där du installerade CapRover. Observera att det kan ta flera timmar innan denna ändring träder i kraft. Från CapRover (länk):

  • TYPE: A-record
  • HOST: *.server
  • POINTS TO: (IP-adress till din server)
  • TTL: (spelar egentligen ingen roll)

För att bekräfta, gå till https://mxtoolbox.com/DNSLookup.aspx och skriv in randomthing123.server.exempel.com och kontrollera om IP-adressen resulterar till den IP du anger i din DNS. Observera att randomthing123 behövs eftersom du ställer in en wildcard i din DNS genom att ställa in *.server som din värd.

Initiera CapRover lokalt

På din lokala dator installera CapRover CLI via npm och sedan konfigurera så den pekar mot servern.

Installera CapRover CLI från terminal:

> npm i -g caprover

Nu kan vi köra setup-kommandot. Baserat på viss input kommer CapRover att låta oss konfigurera ett nytt säkert lösenord samt ett SSL-certifikat så att vi kan aktivera HTTPS:

> caprover serversetup

Här är ett exempel på utdata:

Setup CapRover machine on your server...

> have you already started CapRover container on your server? Yes
> IP address of your server: [yourIPAddress]
> CapRover server root domain: server.exempel.com
> new CapRover password (min 8 characters): [hidden]
> enter new CapRover password again: [hidden]
> "valid" email address to get certificate and enable HTTPS: [your@email.com]
> CapRover machine name, with whom the login credentials are stored locally: [yourCustomCapRoverMachineName]

CapRover server setup completed: it is available as [yourCustomCapRoverMachineName] at https://captain.server.exempel.com

For more details and docs see CapRover.com

Du kan nu logga in till din CapRover via https://captain.server.exempel.com och lösenordet du givit i konfigureringen.

PWA fördelar
Inloggningsskärmen för CapRover

PWA fördelar
CapRover-skärmen 'Create new app'. Grattis! Din CapRover PaaS är nu igång.

Hosta applikationer på CapRover

Skapa en Postgres-databas med CapRovers One-Click Apps

Välj One Click Apps och välj PostgreSQL. PWA fördelar

CapRover One Click Apps-skärm med PostgresSQL vald.

Ange sedan informationen för din databas (som databasnamn, användarnamn och lösenord): PWA fördelar

CapRover PostgreSQL-skärm med appdetaljer ifyllda..

Efter installationen kommer databasen att vara tillgänglig som srv-captain--YOUR_CONTAINER_NAME på port 5432 för andra CapRover-appar. I vårt fall är det srv-captain--lagjobb-db.

Migrera databas med databas-schema

Lagjobb.se använder sig at Asp.Net Web API och Entity Framework som ORM. En Object Relational Mapper (ORM) är en ett ramverk som förenklar kommunikation och mappning mellan objekt i ditt API till tabeller och kolumner i en relationsdatabas.

Börja med att exponera en port till din databas så att databas migreringen och schema överföring kan göras. Här exponerar vi porten 1234 till PosgreSQL's default 5432 port. PWA fördelar

CapRover One Click Apps-skärm med PostgresSQL vald.

Peka sedan Web API:t till databasen från konfigurationen i appsettings.json.

"ConnectionStrings": {
  "DefaultConnection": "host=captain.server.exempel.com;port=1234;database=lagjobb;username=admin;password=admin"
}

Kör sedan migreringskommandona i Package Manager Console i Visual Studio.

> add-migration inital
> update-database

Ta sedan bort porten som du exponerade i CapRover 1234 eftersom vi bara vill att vårt API ska ha åtkomst till det från servern. Uppdatera nu konfigurationen i appsettings.json igen.

"ConnectionStrings": {
  "DefaultConnection": "host=srv-captain--lagjobb-db;database=lagjobb;username=admin;password=admin"
}

Ladda upp Asp.Net Web API till CapRover

På CapRover finns ingen One-Click App för Asp.Net, men CapRover stödjer många sätt att publicera appar. Vi använder en Dockerfil för att skapa vår webbtjänst.

// Dockerfile
# Get base SDK Image from Microsoft
FROM mcr.microsoft.com/dotnet/core/sdk:3.1-bionic AS build-env
WORKDIR /app


# Copy the CSPROJ file and restore any dependecies (via NUGET)
COPY lagjobb/Lagjobb.Api.csproj lagjobb/
COPY Lagjobb.BL/Lagjobb.BL.csproj Lagjobb.BL/
COPY Lagjobb.Core/Lagjobb.Core.csproj Lagjobb.Core/
COPY Lagjobb.DAL/Lagjobb.DAL.csproj Lagjobb.DAL/
COPY Lagjobb.Dtos/Lagjobb.Dtos.csproj Lagjobb.Dtos/
COPY Lagjobb.Repositories/Lagjobb.Repositories.csproj Lagjobb.Repositories/
COPY Lagjobb.Services/Lagjobb.Services.csproj Lagjobb.Services/
RUN dotnet restore ./lagjobb/Lagjobb.Api.csproj

# Copy the project files and build our release
COPY . ./

RUN dotnet publish ./lagjobb -c Release -o out

# Generate runtime image
FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-bionic
WORKDIR /app
#ENV ASPNETCORE_URLS http://*:5000
#EXPOSE 5000
COPY --from=build-env /app/out .
ENTRYPOINT ["dotnet", "Lagjobb.Api.dll"]

Utöver dockerfilen behöver vi också definera en captain-definition fil som ligger i roten av projektet. Den filen talar om för CapRover vad som faktiskt ska göras.

I vårt fall vill vi säga åt den att köra dockerfilen som också sitter i roten av vårt projekt. Skapa filen och lägg till:

// captain-definition
{
  "schemaVersion": 2,
  "dockerfilePath": "./Dockerfile"
}

Enligt den officiella CapRover-webbplatsen är "schemaVersion" alltid 2.

Skapa en ny app i CapRover för Asp.Net

Därefter måste vi skapa en ny app med CapRovers gränssnitt som inte är en One-Click app. Ge bara din app ett namn och klicka på knappen "Create new app". I vårt fall behöver vår Web API-applikation ingen beständig data eftersom den kommunicerar med en Postgres-databas. Därför behöver vi inte markera kryssrutan "Has persistent data".

PWA fördelar
CapRover One Click Apps-skärm med PostgresSQL vald.

CapRover Skapa en ny app-skärm På fliken HTTP-inställningar kommer vi att aktivera HTTPS samt tvinga fram HTTPS genom att omdirigera all HTTP-trafik till HTTPS för att säkerställa maximal säkerhet.

PWA fördelar
CapRover One Click Apps-skärm med PostgresSQL vald.

Nu kan du från ett kommandofönster lokalt på din dator i projektets mapp som captain-definition filen finns köra:

> caprover deploy

Preparing deployment to CapRover...

**** Protip ****
You seem to have deployed lagjobb-app from this directory in the past, use --default flag to avoid having to re-enter the information.

? select the CapRover machine name you want to deploy to: captain-01
Ensuring authentication...
? select the app name you want to deploy to: (Use arrow keys)
> -- CANCEL --
  lagjobb-db
  lagjobb-app

Vad gäller Vue.js appen så behöver vi inte en dedikerad app i CapRover för den eftersom Asp.Net Web API kan serva statiska filer. I vårt fall bygger vi Vue appen lokalt och droppar innehållet i en mapp som heter wwwroot i Asp.Net appen och den servas automatiskt.

Om fallet inte var sådant så beskriver den här länken hur du kan skapa statiska webbappar som Vue, React och Angular med CapRover. (LÄNK)

Avslutningsvis kan det vara bra att lägga till domänen för appen i Digital Ocean också. PWA fördelar

Lagt till domänen för Lagjobb.se i Digital Ocean också.

Slutsats

I den här artikeln lärde vi oss om vad CapRover är, hur du kan sätta upp din alldeles egna plattform som en tjänst på mindre än en timme, och hur du kan distribuera produktionsklara appar genom att visa hur vi publicerade en relativt komplex app i form av Lagjobb.se. Vi visade dels hur man skapade en One-Click App med PostgreSQL, men också hur man skapa appar som det kanske inte finns One-Clicks för, t.ex. Asp.Net Web API där vi använde en dockerfil och en captain-definition fil.

På samma server kan du publicera hur många appar du vill så länge server utrymmet räcker och med flera domäner. CapRover hanterar det automagiskt!

Vi skrapar här bara på ytan av vad du kan göra med CapRover. Vi rekommenderar starkt att du kollar in deras officiella dokumentation för att lära dig mer.

© 2023 Mustini Innovation AB