Sådan hostes flere domænenavne og projekter på en server

NGINX er et magisk værktøj

Jeg ejer flere domænenavne, og hver er vært for et andet sideprojekt. I den længste tid var alt, der krævede 'hosting', vært på Heroku. Men deres gratis niveau kan være ret begrænset, det kan også blive dyrt hurtigt, hvis du betaler for hvert enkelt projekt. Så i stedet besluttede jeg at undersøge at sætte dem alle sammen ved hjælp af NGINX (anbefalet af Jane Manchun Wong til mig).

Nødvendige ressourcer

Virtuel privat server (VPS)

Du skal bruge en virtuel server som DigitalOcean eller EC2 af AWS. Personligt bruger jeg Vultr (her er linket til ikke-henvisning), som koster mig omkring $ 2,50 / måned.

Domænenavne

Du bliver nødt til at registrere et par domænenavne. Forudsat at du sandsynligvis allerede har dem, skal du sørge for, at dine domænenavne peger på navneserverne på din VPS. Der skal være en DNS-sektion i dit domænenavnets dashboard, hvor du kan vælge "brugerdefineret DNS" eller noget lignende. Hvis du ikke er sikker på, hvad navneserverne på din VPS er, skal du være i stand til at finde den information let ved en simpel søgning på "nameserver" + VPS-servicenavn.

Opsætning af NGINX

Installation og grundlæggende opsætning

Reference fra Sådan installeres Nginx på Ubuntu 16.04

Kør følgende kommandoer gennem SSH-ing i VPS. Det installerer NGINX, indstiller firewallregler, der tillader det, og indstiller NGINX til automatisk start ved opstart.

Konfigurationsopsætning

Reference fra flere host-domæner på en server / IP med Apache eller nginx

Standard virtual.conf-placeringen skal være på /etc/nginx/conf.d/virtual.conf. Jeg anbefaler, at du tager sikkerhedskopi af standardfilen, før du foretager ændringer. (Hvis den ikke findes, kan du bare oprette den.) Rediger filen for at se sådan ud som følgende:

Her er et par ting at se på:

  • server blok - Hver af disse skal repræsentere hver andet domæne eller underdomæne i brug.
  • root - Dette er det sted, hvor (HTML) filerne indlæses fra.
  • servernavn - (under) domænenavn, der skal indlæse disse specifikke filer.
  • proxy_redirect - i tilfælde hvor du omdirigerer et specifikt underdomæne til en aktiv server, skal du tilføje dette og placere IP-placeringen efter det. (For lokale servere skal enten //127.0.0.1:port eller // localhost: port fungere som beregnet.)
sudo systemctl restart nginx

Når du er færdig, skal du genstarte serveren, så de nye konfigurationer indlæses og anvendes.

Kloning og sammenkædning

Husk nu, da din mappe peger på / opt / htdocs / websiteName , kan din oprindelige tanke være at klone dine projekter i disse mapper. Dette kan fungere, men det er ikke ideelt, da mange operationer i disse mapper kræver rodadgang for virkelig at gøre noget.

I stedet kan du klone dem i din brugermappe eller andre steder, som du normalt ville, og derefter oprette et softlink til at forbinde stien til din arkivmappe. Noget som dette:

git clone [email protected]:binhonglee/binhonglee.github.io ~/websitesudo ln -s ~/website /opt/htdocs/binhong

Når du kloner en statisk mappen Node.js (ReactJS, Angular eller Vue.js), vil du naturligvis gerne installere ( npm install) og bygge ( npm run-script build) dem. Forbind derefter ./build-mappen i stedet for basisniveauet i det klonede lager. (På samme måde for Jekyll-steder, men brug mappen ./_output i stedet.) Som for aktive servere skal du bare sørge for, at din server kører på den samme port, som den er angivet i konfigurationsfilen.

Konfigurer HTTPS med certbot

Takket være Let's Encrypt kan du nu få gratis og nemme HTTPS-certifikater. Med introduktionen af ​​certbot blev alt lige endnu lettere!

Reference fra Sådan sikres Nginx med Let's Encrypt på Ubuntu 16.04

Kør bare ovenstående for alle dine domæne- og underdomænenavne, og certbot tager sig af alt. Hvis du skulle forny certifikaterne, kan du køre følgende, så certbot hjælper dig med at forny dit SSL-certifikat.

sudo certbot renew --dry-run

Opdaterer alt

Nu hvor du har alt oppe og køre, tænker du måske, det ser godt ud til at være forfærdeligt meget at huske, hvis / når jeg har brug for at opdatere noget. Desværre er det ret sandt, men vi kan altid gøre det lettere ved at tilføje et script, der gør det for os.

Sådan ser man ud:

Tak for læsningen! Fortæl mig, hvis du har spørgsmål i kommentarerne nedenfor.

Om mig

I skrivende stund arbejder jeg hos Apple Inc. i rollen som Siri Language Engineer som uafhængig entreprenør gennem AdvantisGlobal. Jeg bruger meget af min fritid på at eksperimentere og opbygge nye ting med teknologier, som jeg synes er sjove og interessante. Følg min udforskningsrejse her eller på GitHub.

Andre referencer

  • nginx proxy pass omdirigeringer ignorerer port på serverfejl
  • Fortsæt SSH-baggrundsopgave / job, når du lukker SSH på superbruger