29 apr 2019

Hur du installerar RavenDB på en virtuell maskin i Azure (steg för steg - del 2)

RavenDB-del2-sv.jpg

Det här en guide i tre delar för dig som, likt rubriken säger, vill installera RavenDB på en virtuell maskin i Azure. Låter det klurigt? Då kanske du har missat ta dig igenom första delen av guiden.

RavenDB Setup Wizard

Efter att du accepterat EULA:n kommer du få gå igenom RavenDB Setup Wizard som kommer guida dig genom processen att konfigurera RavenDB.

prinscreen-5.jpg

RavenDB använder sig av HTTPS (TLS/SSL) för att säkra kommunikationen till databasen och hantera både authentication och authorization.

För att stödja HTTPS behöver RavenDB ett certifikat på server-sidan och här kan du antingen tillhandahålla att eget eller låta RavenDB generera ett åt dig med hjälp av Let’s Encrypt. Let’s Encrypt är en certificate authority (CA) som kan ge ut gratis certifikat. Med Let’s Encrypt är enda haken att det genererade certifikatet endast är giltigt i 90 dagar. Men å andra sidan är detta en bra sak. Du kan läsa mer om det här. 

Det trevliga med RavenDB och användandet av Let’s Encrypt är att det automatiskt kommer förnya certifikat åt dig. När du bara förnyar ditt certifikat en gång var 1-3 år blir varje tillfälle skrämmande, för du är inte hundra procent säker på hur du gjorde det förra gången. Gör sakerna som skrämmer dig oftare! (som certifikat, distribution, ombyggning av servrar, deployment...)

Genom att göra det oftare, tenderar vi att automatisera och kommer förhoppningsvis undvika otrevlig downtime på grund av att certifikat gått ut. Till och med Azure har haft problem med utgångna certifikat, vilket du kan läsa mer om här: Microsoft secure Azure Storage goes down WORLDWIDE. 

I vår konfiguration använder vi Let’s Encrypt, så vi väljer detta i wizarden.

2 - RavenDB licensnyckel 

För att köra RavenDB behöver du en licensnyckel och för att komma igång använder vi deras Community license som är gratis. Om du inte har någon licens kan du enkelt skapa en här. 

prinscreen-6.jpg

Skriv in licenses och klicka sedan på Next.

3 - Välj domän

I nästa steg behöver du välja en subdomän som kommer registreras under ravendb.community-domänen. Det är under denna domän Let’s Encrypt-certifikatet kommer skapas för oss. Vi väljer edumenttestserver som vår domän och det betyder att vår databas blir nådd på adressen: edumenttestserver.ravendb.community

prinscreen-7.jpg

Klicka på Next för att fortsätta.

4 - Node Addresser

I detta steg ska vi konfigurera TCP/IP-portar och skriva in en del IP-adresser för att färdigställa konfigureringen.

I vår setup skriver vi in följande information:

prinscreen-8.jpg

Här ska vi bland annat fylla i:

  • Node Tag
    Det är namnet på RavenDB-noden och vi skriver bara dit ett A. Om du kör RavenDB i ett kluster ska du ge varje nod ett unikt namn här. Detta innebär att domännamnet i sin helhet till vår server blir: a.edumenttestserver.ravendb.community.
  • HTTPS port
    Det är porten vi kommer använda för all HTTPS-kommunikation och i vårt fall använder vi 50000.
  • TCP Port
    Denna port används för kommunikation mellan noder och klienter, här väljer vi 50001.
  • IP-Address
    Vi skriver 0.0.0.0 här. Från början var det här ett av mina stora problem eftersom jag först använde mig utav 127.0.0.1 och det gjorde (åtminstone för mig) att RavenDB inte kunde ta emot trafik utifrån.

    Att använda 0.0.0.0 kan innebära en säkerhetsrisk eftersom det ger RavenDB möjligheten att acceptera trafik från alla nätverksgränssnitt. För att ytterligare förstärka er säkerhet kan det vara klokt att bara acceptera trafik från specifika nätverk (IP-adresser) i Azure’s inställningar. Det kräver dock att du ställer in statiska IP-adresser i din virtuella maskin. Om ni vill veta mer om skillnaden mellan 127.0.0.1 och 0.0.0.0, läs mer här.
  • Extern IP Address
    Som det står, vi skriver in vår publika statiska IP till vår maskin, vi kan hitta adressen i Azure Portal.
  • External ports
    Vi skriver bara in 50000 och 50001, samma som local ports.

På slutet av detta steg måste vi också acceptera en EULA från Let’s Encrypt.

image27.png

Klicka på Next så kommer processen att skapa DNS-record och ett certifikat av Let’s encrypt kommer genereras.

Eftersom det kommer ta en liten stund för den nya DNS-registreringen att bli igenkänd av Azure kommer du antagligen få detta felmeddelande:

Setting up RavenDB in Let's Encrypt security mode failed.

System.InvalidOperationException: Setting up RavenDB in Let's Encrypt security mode failed. --->

System.InvalidOperationException: Validation failed. --->
 System.InvalidOperationException: Failed to simulate running the server with the supplied settings using:
 https://a.edumenttestserver.ravendb.community:50000 --->
 System.InvalidOperationException:

Cannot resolve 'a.edumenttestserver.ravendb.community' locally but succeeded resolving the address using Google's api (https://dns.google.com).

Try to clear your local/network DNS cache or wait a few minutes and try again.

Another temporary solution is to configure your local network connection to use Google's DNS server (8.8.8.8). ---> System.Net.Sockets.SocketException: No such host is known

(Formaterad för läslighet)

Ingen panik! Det betyder bara att vi behöver vänta en liten stund (kanske 10-15 min) och sedan försöka igen. Anledningen är att det tar tid för ändringarna i RavenDB’s DNS-server att fullt ut propagera över internet och bli synlig för Azure. Det är naturligt och sker för att cachning sker i diverse olika DNS-servrar mellan Azure och RavenDB’s name server. Det finns lite olika verktyg som låter dig kolla dina DNS-uppgifter från olika platser, exempelvis Whatsmydns.net.

Det vi vill uppnå här är att domänen a.edumenttestserver.ravendb.community är fullt nåbar på internet.

Innan du försöker igen kan du försöka pinga domänen från den virtuella maskinen för att se om domänen är kopplad till vår statiska IP-adress:

C:\Users\Edument>ping a.edumenttestserver.ravendb.community

Ping request could not find host a.edumenttestserver.ravendb.community. Please check the name and try again.

C:\Users\Edument>

När DNS:en är klar bör det se ut såhär när du pingar din domän:

C:\RavenDB>ping a.edumenttestserver.ravendb.community

Pinging a.edumenttestserver.ravendb.community [123.123.123.123] with 32 bytes of data: Request timed out.

(där 123.123.123.123 är den publika IP-adressen till din maskin)

Vi kan inte fortsätta förrän det här med domänen är löst, så vi får helt enkelt vänta och försöka igen. Du kan alltid prova att rensa din lokala DNS genom att köra:

C:\RavenDB>ipconfig /flushdns

Windows IP Configuration

Successfully flushed the DNS Resolver Cache.

C:\RavenDB>

Men oftast uppstår DNS fördröjningar någonstans utanför Azure.

Medan vi väntar på att DNS propagerar kan du alltid besöka Google Public DNS och ställa frågor mot DNS-systemet med antingen en IP-adress eller ett domännamn för att se vilket IP det borde lösa åt dig.

När allt är färdigt borde vi till slut se följande resultat:

prinscreen-9.jpg

Utöver att presentera skärmen ovan så laddas även det mycket viktiga administrator certifikatet ner i din webbläsare och det skapade en del förvirring för mig första gången jag installerade RavenDB då jag inte märkte att det skedde. Du kan hitta certifikatet i din webbläsares downloads-mapp:

image25.png

Klicka på Restart server-knappen för att fortsätta.

Administratör-certifikatet

Certifikatet som laddades ner av din webbläsare är nyckeln för att kunna logga in till databasen som en administratör. Kopiera filen till en trygg plats för utan detta certifikat kan du inte logga in. Om du skulle råka förlora den är det möjligt att generera en ny via RavenDB CLI.

Normalt lägger installationsprogrammet till certifikatet i Windows certificate store och när du navigerar till RavenDB presenteras denna dialog för dig, där du kan välja vilket certifikat som skall användas:

prinscreen-10.jpg

Om du använder Firefox behöver du manuellt importera certifikatet till din browser, Besök Security : Common Errors & FAQ för mer information. 

Om du ser detta felmeddelande:

image7.png

Då har inte administratör-certifikatet blivit installerat korrekt. För att installera det behöver du packa upp edumenttestserver.Cluster.Settings.zip filen:

image1.png

Dubbelklicka sedan på Personal Information Exchange (.pfx) filen och välj “Next” på alla steg genom installationen. Starta därefter om din webbläsare och försök åter navigera till databasen, i vårt fall: https://a.edumenttestserver.ravendb.community:50000

Efter det kommer du se certifikat-dialogen igen som ovan och du kommer kunna logga in till databasen som administratör.

Mer detaljerad information om hur du importerar ett certifikat beskrivs i del 3 av guiden.

Relaterade kurser

  • C# Master Class

    Denna kursen lär dig att bemästra och ger dig en djupare förståelse i C# och .NET. Fokus ligger på moderna mönster och tekniker, ren funktionell kod och fokus på verkliga situationer. Du får praktiska färdigheter som låter dig mer effektivt skapa bättre program.

    Kursområde: .Net
    Omfattning: 3 dagar
    Kostnad: 25 900 SEK
  • Mjukvaruarkitektur

    Kursen ger grunden till hur du kan utforma dina system så att de kan hantera nya utmaningar och förändringar; hur du får en systemarkitektur som är testbar, skalbar, och säker, och hur du kan undvika att systemet blir en enda stor röra.

    Kursområde: Systemarkitektur
    Omfattning: 2 dagar
    Kostnad: 21 500 SEK
  • Webbsäkerhet för utvecklare

    Utmaningarna att göra en säker webbplats är väldigt stora idag. Dagens utvecklare känner inte alltid till säkerhetsaspekterna för säker utveckling. Problemet är också att hänga med i den snabba utvecklingen. Fler säkerhetshål uppstår också i och med trenden att vi lägger alltmer funktionalitet i webbläsarna. 

    Kursområde: Webbutveckling
    Omfattning: 2 dagar
    Kostnad: 21 500 SEK
  • Beginning ASP.NET Core

    Denna kurs ger din ASP.NET Core utveckling en god start i rätt riktning!

    Kursområde: .Net
    Omfattning: 3 dagar
    Kostnad: 25 900 SEK