Własny Serwer – cz.9: Serwer lustrzany
Ostatnia aktualizacja: 21 listopada 2024, 17:56
W dziewiątej części cyklu Własny Serwer zajmiemy się konfiguracją serwera lustrzanego pakietów debianowych.
Co to jest serwer lustrzany?
Serwer lustrzany (ang: mirror server) dostarcza dodatkowy serwer dla serwera głównego, w celu jego odciążenia oraz zaoferowania użytkownikom innego serwera znajdującego się w ich lokalizacji.
Reasumując, serwer lustrzany jest kopią serwera głównego i oferuje te same pakiety, co serwer główny.
Komu jest to potrzebne?
Serwer lustrzany jest pomocy w projektach, których serwer jest przeciążony. Pomoże on przekierować część użytkowników z serwera głównego na lustrzany, co może pomóc w poprawie wydajności i przepustowości serwera głównego.
Często projekty konfigurują własne serwery lustrzane, lecz możliwe jest stworzenie (i opłacanie) serwerów lustrzanych również przez członków społeczności zgromadzonej wokół projektu.
Jeśli prześledziłeś wszystkie poprzednie części serii Własny Serwer, to znasz zasady konfiguracji domeny, serwera www i szyfrowania TSL/SSL.
Domena
Możesz postawić serwer lustrzany repozytoriów na własnej, unikalnej domenie/subdomenie lub poprosić o utworzenie specjalnej subdomeny projektu, którego pakiety chcesz hostować, np.: de1.repo.sparkylinux.org
Serwer www
Minimum koniecznym do udostępniania plików jest serwer www, bazujący na Apache2 lub Nginx, lub innym.
Utwórz katalog, w którym będziesz udostępniał zasoby:
mkdir -p /var/www/de1.repo.sparkylinux.org/public_html
Dodaj konfigurację dla Apache:
nano /etc/apache2/sites-available/000-default.conf
wpisując:
##### de1.repo.sparkylinux.org #####
<VirtualHost *:80>
ServerAdmin admin@de1.repo.sparkylinux.org
ServerName de1.repo.sparkylinux.org
ServerAlias www.de1.repo.sparkylinux.org de1.repo.sparkylinux.org
DocumentRoot/var/www/de1.repo.sparkylinux.org/public_html
DirectoryIndex index.html index.php index.htm
<Directory /var/www/de1.repo.sparkylinux.org/public_html/>
Options All Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error- pl-repo-sparkylinux-org.log
CustomLog ${APACHE_LOG_DIR}/access- pl-repo-sparkylinux-org.log combined
</VirtualHost>
Jeśli posiadasz Nginx zamiast Apache, to dodaj konfigurację do:
nano /etc/nginx/sites-available/default
wpisując:
##### de1.repo.sparkylinux.org #####
server {
listen 80;
server_name de1.repo.sparkylinux.org www.de1.repo.sparkylinux.org;
root /var/www/de1.repo.sparkylinux.org/public_html;
index index.php index.html index.htm;
location /
{
try_files $uri $uri/ =404;
}
}
Zmiana praw do zawartości udostępnionego katalogu i plików:
chown -R www-data:www-data /var/www/de1.repo.sparkylinux.org/public_html/
Szyfrowanie TSL/SSL
Jeśli chcesz udostępniać swoje repozytoria przez szyfrowany protokół https, to dodaj link symboliczny:
ln -s /var/www/de1.repo.sparkylinux.org/public_html /var/www/de1.repo.sparkylinux.org/private_html
Oraz wpis do konfiguracji Apache:
nano /etc/apache2/sites-available/default-ssl.conf
dodając do powyższego pliku zawartość:
##### de1.repo.sparkylinux.org #####
<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerAdmin admin@de1.repo.sparkylinux.org
ServerName de1.repo.sparkylinux.org
ServerAlias www.de1.repo.sparkylinux.org de1.repo.sparkylinux.org
DocumentRoot /var/www/de1.repo.sparkylinux.org/private_html
<Directory /var/www/de1.repo.sparkylinux.org/private_html/>
Options All Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error-pl-repo-sparkylinux-org.log
CustomLog ${APACHE_LOG_DIR}/access-pl-repo-sparkylinux-org.log combined
SSLEngine on
<FilesMatch "\.(cgi|shtml|phtml|php)$">
SSLOptions +StdEnvVars
</FilesMatch>
<Directory /usr/lib/cgi-bin>
SSLOptions +StdEnvVars
</Directory>
</VirtualHost>
</IfModule>
Przeładuj Apache:
systemctl restart apache2
Teraz zainstaluj certyfikat TSL:
certbot --apache -d de1.repo.sparkylinux.org -d www.de1.repo.sparkylinux.org
Ponownie przeładuj Apache:
systemctl restart apache2
Lub do konfiguracji Nginx:
/etc/nginx/sites-available/default
server {
listen 443 ssl http2;
server_name de1.repo.sparkylinux.org www.de1.repo.sparkylinux.org;
root /var/www/de1.repo.sparkylinux.org/private_html;
index index.php index.html index.htm;
ssl_certificate /etc/ssl/certs/apache-selfsigned.crt;
ssl_certificate_key /etc/ssl/private/apache-selfsigned.key;
location /
{
try_files $uri $uri/ =404;
}
}
Przeładuj Nginx:
systemctl restart nginx
Teraz zainstaluj certyfikat TSL:
certbot --nginx -d de1.repo.sparkylinux.org -d www.de1.repo.sparkylinux.org
Ponownie przeładuj Nginx:
systemctl restart nginx
apt-mirror
Zainstaluj aplikację do zarządzania pakietami na serwerze lustrzanym:
apt install gnupg apt-mirror
Zrób kopię pliku konfiguracyjnego:
mv /etc/apt/mirror.list /etc/apt/mirror.list.bak
Wyedytuj plik konfiguracyjny:
nano /etc/apt/mirror.list
Dodając do powyższego pliku konfigurację katalog udostępniania oraz repo (tutaj: sparkylinux core & stable):
#=====================================start
set base_path /home/repotmp
set nthreads 20
set _tilde 0
### sparky core repos i386 amd64 armhf source
deb-amd64 https://repo.sparkylinux.org/ core main
deb-i386 https://repo.sparkylinux.org/ core main
deb-armhf https://repo.sparkylinux.org/ core main
deb-src https://repo.sparkylinux.org/ core main
### sparky 6 potolo repos i386 amd64 armhf source
deb-amd64 https://repo.sparkylinux.org/ potolo main
deb-i386 https://repo.sparkylinux.org/ potolo main
deb-armhf https://repo.sparkylinux.org/ potolo main
deb-src https://repo.sparkylinux.org/ potolo main
clean https://repo.sparkylinux.org
#====================================koniec
Utwórz katalog dla pakietów:
mkdir -p /home/repotmp
Ręcznie uruchom pierwszą synchronizację:
apt-mirror
W zależności od ilości i wielkości pakietów oraz szybkości łącza, synchronizacja może potrwać od kilku do kilkudziesięciu minut.
Utwórz dowiązania symboliczne katalogu z pakietami do katalogu udostępniania zasobów:
ln -s /home/repotmp/mirror/repo.sparkylinux.org/dists/ /var/www/de1.repo.sparkylinux.org/public_html/dists/
ln -s /home/repotmp/mirror/repo.sparkylinux.org/pool/ /var/www/de1.repo.sparkylinux.org/public_html/pool/
W przypadku udostępniania zasobów przez połączenie szyfrowanie, utwórz dowiązanie symboliczne do katalogu private_html zamiast public_html:
ln -s /home/repotmp/mirror/repo.sparkylinux.org/dists/ /var/www/de1.repo.sparkylinux.org/private_html/dists/
ln -s /home/repotmp/mirror/repo.sparkylinux.org/pool/ /var/www/de1.repo.sparkylinux.org/private_html/pool/
Możesz również (opcjonalnie) zainstalować klucz publiczny udostępniany przez serwer główny (tutaj: klucz sparkyinux):
wget https://repo.sparkylinux.org/sparky.gpg.key
gpg --allow-secret-key-import --import sparky.gpg.key
Cron
Serwer lustrzany jest już zsynchronizowany i gotowy do działania.
Aby zautomatyzować proces kolejnych synchronizacji, należy użyć cron-a.
Cron będzie używał własnego skryptu 'apt-mirror-sparky’, który należy umieścić w katalogu /usr/bin/
nano /usr/bin/apt-mirror-sparky
wklejając:
#!/bin/bash
apt-mirror
sleep 1
/bin/bash /home/repotmp/var/clean.sh
exit 0
Oraz nadaj prawa wykonalności
chmod +x /usr/bin/apt-mirror-sparky
Skonfiguruj zadanie cron-a, który, np. będzie synchronizował pakiety co 6 godzin:
crontab -e
wklejając na dole pliku:
0 */6 * * * /usr/bin/apt-mirror-sparky
Restart cron-a:
systemctl restart cron
Na tym skończyliśmy konfigurację serwera lustrzanego z pakietami debianowymi, który w tym przypadku konfiguruje mirror sparkylinux.
W kolejnej, dziesiątej części cyklu Własny Serwer skonfigurujemy narzędzie do tworzenia statystyk serwera.