Chiar dacă nu a fost conceput pentru Debian, micuțul Dell Wyse 3040 devine polivalent datorită acestuia, transformându-se cu ajutorul său, dintr-un dispozitiv care inițial doar îți permitea să te conectezi la alt PC, într-un PC ca oricare altul. E drept, unul destul de limitat, însă nu pentru asta mai puțin util.
Luat la bani mărunți, înțelegi că nu poți avea mari așteptări de la el din cauza SSD-ului și a memoriei RAM, de 8 și respectiv 2GB, ambele sudate pe placa de bază, așadar imposibil de îmbunătățit fără a dispune de aparatura adecvată, dar asta nu înseamnă că nu te poți baza pe el pentru a-ți curăța site-urile de reclame cu AdGuard Home ori Pi-hole, printre multe altele.
În ceea ce mă privește, am nevoie de un server VPN pe care să mă pot baza și cu care să am acces la o serie de servicii disponibile doar într-o rețea anume. Pe lângă asta, de dragul redundanței, mi-ar prinde bine un al doilea blocant de reclame, precum și un instrument de monitorizare a serverului pe care găzduiesc blogul.
Leneș din fire, am ales varianta cea mai simplă: executarea acestora în Docker. În opinia mea, cea mai simplă modalitate de a le implementa, configura, actualiza și elimina cu ușurință atunci când nu vor mai fi necesare.
Resursele disponibile
După partiționarea SSD-ului și instalarea sistemului de operare Debian, acesta arată astfel:
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS mmcblk0 179:0 0 7.3G 0 disk ├─mmcblk0p1 179:1 0 512M 0 part /boot/efi ├─mmcblk0p2 179:2 0 5.8G 0 part / └─mmcblk0p3 179:3 0 976M 0 part [SWAP] mmcblk0boot0 179:256 0 4M 1 disk mmcblk0boot1 179:512 0 4M 1 disk
Iar dacă sunteți curioși de cât spațiu disponibil a mai rămas pentru altele:
Filesystem Size Used Avail Use% Mounted on udev 978M 0 978M 0% /dev tmpfs 198M 914k 197M 1% /run /dev/mmcblk0p2 6.1G 2.1G 3.8G 36% / tmpfs 986M 0 986M 0% /dev/shm tmpfs 5.3M 0 5.3M 0% /run/lock /dev/mmcblk0p1 536M 13M 524M 3% /boot/efi tmpfs 198M 0 198M 0% /run/user/1000
Aproape jumătate, ceea ce nu e deloc rău, dar nici de memoria RAM disponibilă nu mă pot plânge:
total used free shared buff/cache available Mem: 1879 356 1359 1 304 1523 Swap:
Cineva mai chibzuit n-ar instala Docker Engine, cu atât mai puțin cu cât inclusiv pe site-ul oficial se recomandă un sistem cu cel puțin 4GB de memorie RAM, însă nu memoria RAM ar trebui să mă îngrijoreze, ci cei 3,8GB de spațiul liber pe SSD. Merită „sacrificați” cei 500MB de care are nevoie Docker? Eu consider că da…
The following additional packages will be installed: docker-ce-rootless-extras git git-man iptables liberror-perl libip6tc2 libnetfilter-conntrack3 libnfnetlink0 libslirp0 patch pigz slirp4netns Suggested packages: aufs-tools cgroupfs-mount | cgroup-lite git-daemon-run | git-daemon-sysvinit git-doc git-email git-gui gitk gitweb git-cvs git-mediawiki git-svn firewalld ed diffutils-doc The following NEW packages will be installed: containerd.io docker-buildx-plugin docker-ce docker-ce-cli docker-ce-rootless-extras docker-compose-plugin git git-man iptables liberror-perl libip6tc2 libnetfilter-conntrack3 libnfnetlink0 libslirp0 patch pigz slirp4netns 0 upgraded, 17 newly installed, 0 to remove and 4 not upgraded. Need to get 133 MB of archives. After this operation, 493 MB of additional disk space will be used. Do you want to continue? [Y/n]
Instalate ca atare, aplicațiile ar ocupa mai puțin spațiu pe unitatea de stocare, e drept, însă nu o singură dată am avut de-a face cu conflicte între dependențele fiecăreia, una necesitând o versiune mai nouă al unei biblioteci, alta una mai veche, ceea ce ducea automat la renunțarea la cea mai puțin necesară. Cu containerele Docker sau LXC scăpăm de problema asta, iar cele din primul tip menționat fiind cele mai răspândite la momentul de față. Cu alte cuvinte, Docker merită fără îndoială chiar și 1GB.
Instalare Docker
N-am făcut nimic special în acest scop, ci doar am urmat instrucțiunile oficiale și recomandările post-instalare, în special partea cu înregistrarea utilizatorului curent în grupul celor care pot invoca docker, evitând astfel necesitatea de a recurge la sudo în acest scop.
Actualizăm și adăugăm cheia GPG a depozitului oficial:
sudo apt-get update sudo apt-get install ca-certificates curl sudo install -m 0755 -d /etc/apt/keyrings sudo curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc sudo chmod a+r /etc/apt/keyrings/docker.asc
Adăugăm depozitul în lista surselor Apt:
echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/debian \ $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \ sudo tee /etc/apt/sources.list.d/docker.list > /dev/null sudo apt-get update
Instalăm Docker și instrumentele necesare utilizării sale:
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
Toată operația asta durează câteva secunde pe Wyse 3040, dovadă că cele patru nuclee ale procesorului Intel Atom x5-Z8350-ului nu-s acolo doar de formă. Pentru a ne asigura că totul a decurs conform planului, verificăm dacă serviciul Docker e activ:
$ sudo systemctl status docker [sudo] password for cls: ● docker.service - Docker Application Container Engine Loaded: loaded (/lib/systemd/system/docker.service; enabled; preset: enabled) Active: active (running) since Sun 2024-11-17 02:14:58 CET; 2min 54s ago TriggeredBy: ● docker.socket
Pentru ca treaba să fie bună, adăugăm contul personal la grupul select al utilizatorilor cu acces la docker:
$ sudo usermod -aG docker ${USER} $ newgrp docker $ groups docker cdrom floppy sudo audio dip video plugdev users netdev cls
Cum stăm cu spațiul? Ei bine, n-am pierdut doar 500MB:
$ df -H Filesystem Size Used Avail Use% Mounted on udev 978M 0 978M 0% /dev tmpfs 198M 930k 197M 1% /run /dev/mmcblk0p2 6.1G 2.7G 3.1G 47% / tmpfs 986M 0 986M 0% /dev/shm tmpfs 5.3M 0 5.3M 0% /run/lock /dev/mmcblk0p1 536M 13M 524M 3% /boot/efi tmpfs 198M 0 198M 0% /run/user/1000
500, 700, ce mai contează atât timp cât dorm liniștit știind că nu voi întâmpina dificultăți pentru a implementa și actualiza un serviciu sau altul?!?
Portainer și AdGuard
Îmi place să țin sub control locul în care containerele își salvează propriile fișiere, creând în acest scop foldere specifice, dedicate fiecărui viitor container pe care-l voi instala.
Singurul pentru care nu fac asta e Portainer, un container Docker a cărui unic scop este acela de a ne ajuta să creăm și gestionăm alte containere prin intermediul unei interfețe grafice. Instalarea acestuia e cât se poate de simplă și constă în doi pași: crearea volumului ce-i va găzdui baza de date:
docker volume create portainer_data
și instalarea propriu-zisă.
docker run -d -p 8000:8000 -p 9443:9443 --name portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce:2.21.4
Dacă n-au fost probleme, n-ar trebui să fie dacă instalarea Docker s-a realizat conform indicațiilor de pe site-ul oficial, vom vedea asta:
Iar Portainer ar trebui să poată fi accesat la https://adresa_ip_pc:9443:
După înregistrarea contului de utilizator și configurarea unei parole vom avea acces la interfața Portainer, locul din care vom putea crea și administra containerele Docker.
Înainte de a instala AdGuard Home voi crea directoarele despre care vă vorbeam mai devreme după ce mă voi asigura că mă aflu în directorul utilizatorului:
$ pwd /home/cls $ mkdir -p docker/containers/adguard/config $ mkdir -p docker/containers/adguard/workdir
Pentru crearea containerului urmăm indicațiile de pe docker hub, care adaptate la structura folderelor create de mine devin:
docker run --name adguardhome\ --restart unless-stopped\ -v /home/cls/docker/containers/adguard/workdir:/opt/adguardhome/work\ -v /home/cls/docker/containers/adguard/config:/opt/adguardhome/conf\ -p 53:53/tcp -p 53:53/udp\ -p 67:67/udp -p 68:68/udp\ -p 80:80/tcp -p 443:443/tcp -p 443:443/udp -p 3000:3000/tcp\ -p 853:853/tcp\ -p 784:784/udp -p 853:853/udp -p 8853:8853/udp\ -p 5443:5443/tcp -p 5443:5443/udp\ -d adguard/adguardhome
Fie facem același lucru din Portainer » Stacks » Add stack, lipind în editor următoarele:
version: '3' services: adguardhome: image: adguard/adguardhome container_name: adguardhome restart: unless-stopped ports: # Expose port 53 on TCP and UDP for DNS queries - "53:53/tcp" - "53:53/udp" # Expose port 67 on UDP for DHCP server - "67:67/udp" # Expose port 68 on UDP for DHCP client # - "68:68/udp" # Expose port 80 on TCP for HTTP web interface - "80:80/tcp" # Expose port 443 on TCP and UDP for HTTPS web interface - "443:443/tcp" - "443:443/udp" # Expose port 3000 on TCP for AdGuard Home's API - "3000:3000/tcp" # Expose port 853 on TCP for DNS-over-TLS (DoT) - "853:853/tcp" # Expose port 784 on UDP for DNS-over-QUIC (DoQ) - "784:784/udp" # Expose port 853 on UDP for DNS-over-DTLS (DoT) - "853:853/udp" # Expose port 8853 on UDP for DNS-over-TLS (DoT) - "8853:8853/udp" # Expose port 5443 on TCP and UDP for DNSCrypt - "5443:5443/tcp" - "5443:5443/udp" volumes: # Mount host directories as volumes inside the container - /home/cls/docker/containers/adguard/workdir:/opt/adguardhome/work - /home/cls/docker/containers/adguard/config:/opt/adguardhome/conf
Rezultatul va fi același indiferent de metoda de instalare aleasă: accesând http://adresa_ip_pc:3000 ar trebui să fim întâmpinați de asistentul de configurare al AdGuard Home.
Cum stăm cu spațiul de stocare după instalarea Portainer și AdGuard Home? Destul de bine!
Filesystem Size Used Avail Use% Mounted on udev 978M 0 978M 0% /dev tmpfs 198M 1.1M 197M 1% /run /dev/mmcblk0p2 6.1G 3.1G 2.8G 53% / tmpfs 986M 0 986M 0% /dev/shm tmpfs 5.3M 0 5.3M 0% /run/lock /dev/mmcblk0p1 536M 13M 524M 3% /boot/efi tmpfs 198M 0 198M 0% /run/user/1000
Nici consumul de memorie n-a crescut exagerat de mult:
total used free shared buff/cache available Mem: 1879 650 62 1 1330 1228 Swap: 975 0 975
Iar asta ar trebui să le confirme celor care aveau îndoieli cu privire la utilitatea Wyse-ului în astfel de scopuri că acesta este o gazdă numai bună pentru AdGuard și alte servicii similare.