Buduję sobie NAS v2

Plan jest prosty - buduję domowy serwer nas oparty o mój stary laptop dell M6700. Ten projekt ma zastąpić aktualnie pracujący serwer oparty o celeron J1900 i 16gb ddr3.

Usługi, które chcę tam zainstalować

  1. sso
  2. nextcloud
  3. serwer collabora dla nextcloud
  4. serwer TURN + STUN dla nextcloud talk
  5. serwer backupu (jeszcze nie wiem jaki, ale powinien bezbłednie współpracować z moim linuxem oraz windowsem @justdzasta ).
  6. pivpn
  7. pihole
  8. certbot

Część z tych usług - np. pihole, serwer backupu powinny być dostępne tylko z sieci lokalnej/vpn , a część publicznie (np. nextcloud).

W przyszłości chcę się pobawić innymi zabawkami - np. gitlab, albo jakieś usługi AI, więc całość musi umożliwiać mi w miarę łatwe dodawanie kolejnych usług

Dodatkowo chcę żeby ten system był w stanie w pełni wykorzystać przepustowość mojej sieci lokalnej - 2.5 gbit/s.

To jest powolny projekt - sprzęt - czyli dyski, adaptery itd. gromadziłem przez długi czas i mam nadzieję że prowadzenie loga na forum pomorze mi w końcu przyśpieszyć pracę nad nim.

Log:
0. :ballot_box_with_check:zgromadzenie sprzętu

  1. :ballot_box_with_check: zgromadzenie sprzętu
  2. :ballot_box_with_check: zrobienie adaptera zasilania dla dysków 3.5 - jest
  3. :hourglass_flowing_sand: wybór systemu bazowego - musi wspierać zfs - w trakcie
  4. instalacja nextcloud + fpm
  5. instalacja certbot
  6. instalacja i konfiguracja sso z nextcloud
  7. instalacja serwera collabora
  8. instalacja serwera TURN + STUN
  9. pihole
  10. pivpn
  11. serwer backupu
  12. obudowa
1 polubienie

Pierwsza ciekawostka - jako że cały projekt powstawał wieczorami bez większego pomyślunku, to prezentuję diagram podzespołów, które wykorzystam do zmontowania całości. Zwróć uwagę na dużą liczbę adapterów i przejściówek. Mam nadzieję że to nie wybuchnie ;p

Dobry @iwan polecił mi sprawdzić czy na pewno potrzebuję zfs - okazuje się że nie. Linuksowe mdadm pozwala na stworzenie macierzy raid5, która jest równowarzna z raidz1 więc wybór systemu trochę się upraszcza - może być niemal dowolny linux (więc pewnie będzie albo debian albo fedora).

Miałem w końcu chwilę czasu i udało mi się odpalić nextcloud fpm + nginx, na razie po http: GitHub - mrozo/homeServer

Zrobiłem to na podstawie:
artykułu: Setting up Nextcloud with Nginx, PHP-FPM and Docker-Compose | Blog
przykładowego pliku konfiguracyjnego nginx: https://github.com/nextcloud/docker/blob/master/.examples/docker-compose/with-nginx-proxy/mariadb/fpm/web/nginx.conf

Jak każdy projekt tego typu, całość się mocno rozrosła - ponieważ ciągle trafiałem na problemy z dns i certyfikatami powalczyłem i postawiłem na raspberry pi2 caddy w charakterze reverse proxy - i postawiłem nową do testów - to był jedyny sposób na to, żeby móc równocześnie używać mojego aktualnego serwera oraz testować nową konfigurację. Całość zajęła mi jakieś 3 godziny.

Z innych dobrych wiadomości - proxy na rpi jest piekielnie wolne ;]

Caddy file na dzisiaj:

{
        debug
}

example.com {
        reverse_proxy {
        to https://x.x.x.x:443
        transport http {
                tls
                tls_insecure_skip_verify
                read_buffer 8192
        }
        #redir /.well-known/carddav /remote.php/dav 301
        #redir /.well-known/caldav /remote.php/dav 301
}

ach, administracja siecią jest trudna.

Pozdrowienia dla @iwan ;]

Jak tam, @mroz? U mnie aktualnie:
image

Dzisiaj błąd się ujawił: 413 Request Entity Too Large :smiley:

ostatnio nie mam na to siły i czasu (szukamy z Justyną mieszkania do kupienia i okazuje się że to generuje sporo emocji ) - udało mi się tylko postawić debiana + macierz na md na 4 dyskach ssd.

Na razie przerywam projekt, bo aktualnie średnio mi się chce siedzieć samemu w mojej “piwnicy” i mędrkować na tym. Zrobił bym coś grupowo żeby się z kimś trochę pointegrować. W sobotę chcę skoczyć na dzień otwarty do tubazy, może się zaprzyjaźnię.

Wpadłem na pułapkę - zainstalowałem nextcloud na nowym serwerze, na moim pc zalogowałem się do tego nowego serwera i … klient synchronizacji skasował mi wszystkie pliki w folderze nextcloud na PC … ach, to takie super.

W każdym razie ( piszę trochę z pamięci, trochę z notatek, więc mogłem coś przeoczyć)

  1. zainstalowałem debian 12

  2. Stworzyłem se macierz mdadm raid 5:

mdadm -Cv -l5 -c64 -n4 -pls /dev/md0 /dev/sd{a,b,d,f}
mdadm --examine --brief  /dev/sd{a,b,d,f} >> /etc/mdadm/mdadm.conf
update-initramfs  -u
reboot
  1. stworzyłem system plików na macierzy:
mkdir /media/data
mkfs.btrfs -L data /dev/md0 -f
btrfs subvolume create /media/data/nc
btrfs subvolume create /media/data/docker
btrfs subvolume create /media/data/config
btrfs subvolume create /media/data/backup
  1. Dodałem subvolumy z btrfs do fstab:
/dev/md0	/media/nc	btrfs	defaults,nofail,discard,subvol=nc	0	0
/dev/md0	/media/docker	btrfs	defaults,nofail,discard,subvol=docker	0	0
/dev/md0	/media/config	btrfs	defaults,nofail,discard,subvol=config	0	0
/dev/md0	/media/backup	btrfs	defaults,nofail,discard,subvol=backup	0	0
  1. Przeniosłem pliki dockera na macierz ( /media/docker ):
    /etc/docker/daemon.json:
{
  "data-root": "/media/docker"
}

Restart dockera:

systemctl stop docker
systemctl start docker
  1. Odpaliłem sobie nextcloud AIO ukrytego za caddy używając docker compose:
version: "3.8"

services:
  caddy:
    image: caddy:alpine
    restart: unless-stopped
    container_name: caddy
    volumes:
      - ./Caddyfile:/etc/caddy/Caddyfile
      - ./certs:/certs
      - ./config:/config
      - ./data:/data
      - ./sites:/srv
    network_mode: "host"

  nextcloud:
    image: nextcloud/all-in-one:latest
    restart: unless-stopped
    container_name: nextcloud-aio-mastercontainer
    ports:
      - "8080:8080"
    environment:
      - APACHE_PORT=11000
      - NEXTCLOUD_DATADIR=/media/nc 
    volumes:
      - nextcloud_aio_mastercontainer:/mnt/docker-aio-config
      - /var/run/docker.sock:/var/run/docker.sock:ro
    depends_on:
      - caddy

volumes:
  nextcloud_aio_mastercontainer:
    name: nextcloud_aio_mastercontainer

  1. zainstalowałem AIO (webgui)

  2. stworzyłem klucz ssh do połączenia PC → serwer

function add_ssh_key() {
	username=$1
	host=$2
	ssh_dir="$HOME/.ssh"
	key_name="$username@$host"
	passphrase=""
	passphrase_repeated=""
	while [ 1 ] ; do
		echo "key encryption passphrase:"
		read -s passphrase
		echo "repeat key encryption passphrase:"
		read -s passphrase_repeated
		if [[ "$passphrase" == "$passphrase_repeated" ]] ; then
			break
		fi
		echo "repeated passhphrase does not motch pass phrase"
	done
	ssh-keygen -f $ssh_dir/$key_name -N "$passphrase"
	echo "Host $host
	IdentityFile $ssh_dir/$key_name
" >> $ssh_dir/config
	ssh-copy-id $username@$host
}

add_ssh_key mroz xxx.xxx.xxx.xxx
  1. zainstalowałem google authenticator ( zabezpieczenie dostępu do ssh z użyciem kluczy jednorazowych) oraz wyłączyłem logowanie za pomocą hasła:
sudo apt install libpam-google-authenticator
sudo cp /etc/pam.d/sshd /etc/pam.d/~sshd
sudo sed 's/^#\?PasswordAuthentication[\t ]\+.*$/PasswordAuthentication no/g' /etc/ssh/sshd_config -i
echo "auth required pam_google_authenticator.so" | tee -a /etc/pam.d/sshd
sudo sed 's/^#\?ChallengeResponseAuthentication[\t ]\+.*$/ChallengeResponseAuthentication yes/g' /etc/ssh/sshd_config -i
sudo sed 's/^#\?PermitEmptyPasswords[\t ]\+.*$/PermitEmptyPasswords no/g' /etc/ssh/sshd_config -i
sudo sed 's/@include common-auth/#@include common-auth/g' /etc/pam.d/sshd -i
echo "AuthenticationMethods publickey,keyboard-interactive" | sudo tee -a /etc/ssh/sshd_config
google-authenticator
#yes, but Increase the original generation time limit: no

sudo systemctl restart ssh
  1. teraz czas na przeniesienie danych - kontakty, kalendarz, czytnik rss wspierają export import, więc spoko, ale pliki muszę po prostu przegrać przez klienta i to chwilę potrwa. Co prawda szybkie testy pokazały że upload przez przeglądarkę jest na poziomie 40 MB/s , ale download ze starego serwera przez ssh idzie z szybkością 20MB/s.

Co dalej?

  1. monitorowanie stanu macierzy
  2. automatyczne backupy nextcloud
  3. Dodanie macierzy mirrow 2x8TB do backupów i archiwizacji
  4. dodanie innych usług - smb (do backupu windowsa), pihole, backup mojego PC .
  5. synchronizacja telefonu z użyciem folderSyncPro
  6. Znalezienie miejsca dla mojego serwerka i może zrobienie obudowy - teraz siedzi na moim drugim biurku (obok starego serwera)

Pierwsze wrażenia?

Zmiana maszyny z celeron j1900 na i7-3740QM przyśpieszyło znacznie responsywność web gui, ale wciąż szybkość nie jest natychmiastowa - odpalenie “files” w przeglądarce wciąż trwa ~2s, ale to już chyba ograniczenie technologiczne (odpalenie tej strony generuje 130 zapytań). Oprócz tego przyśpieszyło transfery z maks 5-10MB/s do 40MB/s co jest spoko, ale wciąż nie jest w stanie w pełni wykorzystać mojej sieci lokalnej 2.5 Gb - a o tym marzyłem, ale to mogę chyba osiągnąć tylko z użyciem NFS.

Stary serwer (skrzynka) i nowy serwer (laptop):

Pozdro @iwan

Ciekawe - jak uplouduje jeden plik przez gui to mam transfer 40MB/s, ale jak równolegle w dwóch oknach przeglądarki uplouduje dwa pliki to uzyskuję transfer na poziomie 80MB/s - ciekawe.

Ciekawostka - w ciągu ostatnich miesięcy ludzie z nexcloud włożyli sporo pracy w optymalizację i zwłaszcza dwie ostatnie aktualizacje nexcloud HUB (wersje 6 i 7) sprawiają że całość, a zwłaszcza interfejs online jest szybszy.

Jeśli chodzi o wady, to keeweeb, pełnoprawny menedżer haseł reimplementujący keepassa w formie pluginu do nextcloud nie jest już utrzymywany i nie zostanie przeportowany do najnowszej wersji nexcloud ;[

Ostatnio w końcu wyrzuciłem przez okno starą drukarkę 3d i kupiłem taką która działa, dzięki czemu w końcu mogłem wydrukować sobie coś, co w miarę wygląda i pozwala mi ogarnąć bałagan z zewnętrznymi dyskami i zasilaniem, więc mój laptopowy serwer dorobił się przybudówki złożonej z dwóch dyskami 3.5, krowiastego zasilacza oraz małej sekcji zasilania dysków:



Modele, które wydrukowałem to:

klatka na hdd : https://www.printables.com/pl/model/215990-hard-drive-cage-525-x-3-bay-adapter
półki pasujące w sloty na dyski 3.5: HDD Adapter 3.2 by Dojan - Thingiverse