publicerad av Oliver den 06.09.202106.09.2021
Självhosting viktig programvara och data på din egen hemserver har många fördelar men kan vara en skrämmande uppgift att komma igång med. Jag har kört min egen server i ett par år nu och kommer att beskriva valen i hårdvara och mjukvara här. Detta kommer att vara en fullständig guide om hur du ställer in din egen lilla server.
varför ska du bygga din egen server?
i vissa fall bör du inte. Vissa mycket kostsamma, specialiserade eller svåra att konfigurera (som e-post) tjänster kan faktiskt vara bättre med en extern leverantör. Om du bara använder dina tjänster mycket sällan eller inte alls är villig att dyka in i en del av den kunskap som behövs för att vara värd kan det inte vara rätt plats för dig.
var dock inte rädd, värdprogramvara på egen hand har aldrig varit så enkelt som det är idag och det kommer med många fördelar. Kanske viktigast gör det dig lite mer självständig. Tekniska jättar har inte så lätt att få dina data och vissa problem i molnet eller med din Internetleverantör hindrar dig inte från att komma åt dina data och tjänster (lokalt).
i en tid där tjänster kontrollerar allt viktigare delar av ditt liv (som ett smart hemsystem) kan denna kontroll och oberoende vara ovärderlig. På lång sikt kan det till och med vara mer kostnadseffektivt på lång sikt. Visst att köpa hårdvara är en investering men värd terabyte data i molnet kommer att kosta dig mycket också – för alltid.
sist men inte minst kan det vara ett mycket roligt projekt som hjälper dig att lära dig mycket om teknik och du är alltid fri att prova ny programvara. Det finns så mycket öppen källkod & fri programvara där ute!
Vad vill du med din server?
innan du bygger något är det viktigt att fråga dig själv: vad planerar jag att göra med den här servern? Om du bara vill vara värd för ett par små tjänster lokalt utan mycket data kommer resultatet att se väldigt annorlunda ut än en full lagringsserver.
om du bara behöver lokala tjänster rekommenderar jag i de flesta fall att få en nyare Raspberry Pi och eventuellt en extern SSD för data. De är billiga, energieffektiva och enkla att installera. Jag har beskrivit min lilla smarta hemserver och nav baserat på Raspberry Pi 4 i djupet i den här artikeln. Att lägga till en SSD för liten datalagring är också ganska lätt.
om du letar efter en mer kraftfull lösning eller behöver lagra mycket data rekommenderar jag att du använder en annan plattform. Vissa människor använder en NAS eller gammal serverhårdvara (som kan fungera mycket bra) men jag rekommenderar normal kundhårdvara med fokus på några speciella egenskaper.
- se till att ha en bra nätverksanslutning (1Gbit/s eller kanske till och med 10)
- använd energieffektiva komponenter och beroende på var du vill placera servern tysta
- få en CPU som är tillräckligt kraftfull medan du inte slösar energi i tomgång
- vanligtvis behöver du inte ett grafikkort
- få tillräckligt med RAM, detta kan vara ganska viktigt för din server
- få ett moderkort och fodral som kan hålla tillräckligt med hårddiskar & SSD: er för lagring och har bra kylning
- få kvalitetslagringsmedia. Jag har använt WD red-serien mycket (var bara försiktig med SMR-versionerna) och har hört bra saker om Seagate Ironwolf-serien också
- se till att dina komponenter kyls ordentligt och allt är anslutet tillräckligt bra. Du vill att detta ska byggas & glöm
- få en kvalitetsadapter!
- jag skulle personligen undvika hårdvaru RAID controllers
om du funderar på att bygga ett hem server överväga att köpa via dessa affiliate länkar för att stödja bloggen
Western Digital Red Plus series
Seagate IronWolf Series
Raspberry Pi 4 8GB för en mindre server
den tyska utgivaren Heise har några bra artiklar om att bygga din egen server. Du kan också hitta många internationella artiklar om detta. Mitt personliga lärande efter att ha byggt flera versioner av servern är att alltid planera för vad du behöver just nu och den närmaste framtiden. Bygg inte för något du kan behöva om 10 år. Då kommer det att finnas bättre hårdvara tillgänglig. Det enda undantaget från detta kan vara Lagring. Det är alltid bra att ha ett par SATA-portar kvar så att du kan lägga till mer lagring senare.
programvarustacken
det finns mycket programvara där ute för servrar och alla val beror på dina preferenser och användningsfall. Följande är min personliga åsikt efter ett par år som arbetar med detta problem på min fritid.
först och främst kan vi börja med vad jag inte skulle använda på en server: Windows. Uppgraderingar är svåra, mycket programvara stöds inte ordentligt och det är dyrt. Istället gå med en Unix / Linux-lösning. Det finns fullständiga lösningar för detta som FreeNAS, OpenMediaVault eller Unraid men Unraid kostar pengar och de andra lösningarna begränsar också vad du kan göra. De kan vara ett bra val för dig men jag bestämde mig för att gå DIY-vägen och bygga min egen lösning baserad på beprövad teknik.
min hemserver körs på ett minimalt Ubuntu server OS (en LTS-version) med SSH-åtkomst för administration. Jag använder ZFS-filsystemet för att samla enheterna i en stor DataPool samtidigt som jag tillhandahåller funktionalitet som cachar, ögonblicksbilder, RAID och enkla säkerhetskopior. I denna pool skapade jag flera filsystem för olika användningsfall med några av dem tillgängliga via nätverket för andra klienter att använda. På servern körs en Docker-demon och jag använder flera docker-compose-filer för att vara värd för en uppsättning tjänster som OpenHab, Grafana, Bitwarden/Vaultwarden och Nextcloud. En omvänd proxy (Traefik för tillfället) gör det möjligt att nå utvalda tjänster var som helst på webben.
externa säkerhetskopior görs via ytterligare enheter anslutna via USB och roteras regelbundet. Ett par skript och en upptidsmonitor kontrollerar regelbundet om allt fortfarande körs ordentligt och skickar larm annars. Installationen är oftast automatiserad och kan göras om på ny hårdvara snabbt (om data fortfarande är tillgängliga förstås).
hur man ställer in servern – Automatiserad installation
innan jag faktiskt installerade servern bestämde jag mig för att automatisera denna process. Detta gör det enklare, snabbare, mindre felbenägen och fungerar också som en slags dokumentation. Att ha en basplattform som på ett tillförlitligt sätt kan ställas in snabbt och enkelt är en stor fördel. På så sätt kan allt annat, data och de faktiska tjänsterna konfigureras oberoende av detta system. Om jag alla vill byta till något annat borde det vara relativt enkelt.
för automatiseringen valde jag Ansible. Ansible är en programvara som låter dig skriva så kallade spelböcker: korta skript som definierar vilka steg som ska göras för att ställa in din server. Dessa spelböcker kan sedan åberopas med ett enkelt kommando och automatiserar alla manuella steg som behövs för installationsprocessen. Jag har lärt mig Ansible själv när du ställer in servern så jag är säker på att spelböckerna kunde vara bättre men jag kommer att dela dem, liksom allt annat som behövs för serverns inställning, via GitHub i följande delar av denna serie.
jag körde dessa skript i en VM ett par gånger före den faktiska installationen för att se till att allt fungerar som avsett. Sedan dess har jag lagt till ett par nya funktioner men och omarbetade delar av de befintliga. Den faktiska installationen på servern var ganska enkel.
först måste du installera ditt favorit Linux OS. Jag valde Ubuntu Server LTS och installerade den via ett USB-minne. Systemet är installerat på en SSD för snabbare starttider. Efter installationen konfigurerade jag bara nätverket (Jag rekommenderar en statisk IP), aktiverade SSH och flyttade servern till sin slutliga fysiska position. Från och med nu behövs ingen skärm/tangentbord/mus, den kan hanteras via nätverket (om inte något går fel).
nästa steg är också enkla: ladda ner de skript du behöver, installera Ansible och kör spelböckerna.
sudo apt install git ansiblegit clone https://github.com/OliverHi/zfs-homeserver.gitcd zfs-homeserver/ansibleansible-playbook setup_playbook.yml -K
detta kommer att köra en playbook som heter setup_playbook.yml som kommer att ställa in servern. Naturligtvis kan du använda någon Ansible playbook här men min är ganska enkel och ser ut så här.
--- - name: "Setting up the home server" hosts: localhost connection: local # become root user, which is needed for most tasks become: yes become_user: root vars_files: - vars/main_vars.yml tasks: - name: Install the needed packages apt: name: - samba - software-properties-common #- linux-headers - dkms - zfsutils-linux - samba-vfs-modules - zfs-auto-snapshot state: latest cache_valid_time: 3600 - import_tasks: tasks/setupZFStask.yml - import_tasks: tasks/setupUsersTask.yml - import_tasks: tasks/setupFoldersTask.yml - import_tasks: tasks/setupSambaTask.yml - import_tasks: tasks/setupDocker.yml # and more tasks if needed
i grund och botten fungerar det på den lokala servern, körs som root och använder variabler som jag har definierat i en separat main_vars.yml-fil. Det börjar med att installera ett par paket som jag behöver för min installation och sedan springa igenom en uppsättning uppgifter som jag skrev för de olika delarna av programstacken. Det kommer att ställa in ZFS-filsystemet, skapa användare och mappar, ställa in Docker och lite mer. Du kan alltid anpassa dem efter dina önskemål.
i följande inlägg i denna serie kommer jag att förklara hur jag ställer in filsystemet, användare, samba-aktier samt Docker och traefik reverse proxy. I varje del lägger jag också till de nödvändiga Ansible-filerna för att automatiskt installera dem. All kod kommer att finnas tillgänglig på mitt GitHub-konto.
nästa inlägg om att ställa in ZFS och ett backupsystem finns här.