π ΠΠ°ΠΊ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ rsync Π΄Π»Ρ ΡΠ΅Π·Π΅ΡΠ²Π½ΠΎΠ³ΠΎ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΠ°ΠΉΠ»ΠΎΠ² Π²Π°ΡΠΈΡ VDS
Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ ΠΊΠ΅ΠΉΡ ΡΠ΅Π·Π΅ΡΠ²Π½ΠΎΠ³ΠΎ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΠ°ΠΉΠ»ΠΎΠ² ΠΌΠ΅ΠΆΠ΄Ρ ΡΠ΅ΡΠ²Π΅ΡΠΎΠΌ Prod ΠΈ ΡΠ΅ΡΠ²Π΅ΡΠΎΠΌ Backup. Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ° Π±ΡΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΡΡ Π±Π΅ΡΠΏΠ»Π°ΡΠ½ΡΡ ΡΡΠΈΠ»ΠΈΡΡ rsync.
Π£ΡΠΈΠ»ΠΈΡΠ° rsync ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΡ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΡ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΉ ΠΏΠΎ ssh ΠΈ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ:
- Sync method (ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠΉ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ).
- Snapshot (ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΏΠΎΠ»Π½ΠΎΠΉ ΠΊΠΎΠΏΠΈΠΈ ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠΉ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ).
Π ΡΡΠ°ΡΡΠ΅ ΡΠ°Π·Π±Π΅ΡΠ΅ΠΌ ΠΎΠ±Π° ΠΌΠ΅ΡΠΎΠ΄Π°, Π° ΡΠ°ΠΊΠΆΠ΅ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΈΡΡΠ΅ΠΌ ΠΊΠΎΠΌΠΏΠ»Π΅ΠΊΡΠ½ΡΠΉ backup ΠΏΠΎ ΡΠ°ΡΠΏΠΈΡΠ°Π½ΠΈΡ.
Π§ΡΠΎ Π½Π°ΠΌ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡΡΡ:
- Π‘Π΅ΡΠ²Π΅Ρ Ρ OS Ubuntu 20.04 LTS β Prod.
- Π‘Π΅ΡΠ²Π΅Ρ Ρ OS Ubuntu 20.04 LTS β Backup.
ΠΠ°Ρ ΠΎΠ΄ΠΈΠΌ ΠΏΠΎ ssh Π½Π° ΡΠ΅ΡΠ²Π΅Ρ Prod:
ssh root@Prod-IP
ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΡΠΈΠ»ΠΈΡΠ° rsync ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΡΠ΅ΡΠ΅Π· ssh, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠ»ΡΡ:
ssh-keygen -t rsa -b 4096 -v Generating public/private rsa key pair. Enter file in which to save the key (/root/.ssh/id_rsa): Created directory '/root/.ssh'. Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /root/.ssh/id_rsa. Your public key has been saved in /root/.ssh/id_rsa.pub. The key fingerprint is: SHA250q8TsT/X5pM+KE2n1Biz3Sre/p425I5wnRSI root@Gauss The key's randomart image is: +---[RSA 4096]----+ | | | | | . | | E o * | | S ...B.+.| | . + *+.ooB| | + +oB=o=+| | o +*=+Oo| | +*OBX| +----[SHA256]-----+
ΠΠ°ΡΠ΅ΠΌ ΠΊΠΎΠΏΠΈΡΡΠ΅ΠΌ ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΠΊΠ»ΡΡ Π½Π° ΡΠ΅ΡΠ²Π΅Ρ Backup:
ssh-copy-id root@Backup-IP
ΠΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΠ»ΡΡΠ° Π΄Π΅Π»Π°Π΅ΡΡΡ ΠΎΠ΄ΠΈΠ½ ΡΠ°Π· ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π½Π΅ Π²Π²ΠΎΠ΄ΠΈΡΡ ΠΏΠ°ΡΠΎΠ»Ρ ΠΏΡΠΈ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠΈ ΠΏΠΎ SSH. ΠΠ°ΠΉΠ΄Π΅ΠΌ Π½Π° Π±ΡΠΊΠ°ΠΏ-ΡΠ΅ΡΠ²Π΅Ρ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ssh:
ssh root@Backup-IP
ΠΠΈΠ΄ΠΈΠΌ ΡΡΠΎ ΠΌΡ Π·Π°ΡΠ»ΠΈ Π½Π° ΡΠ΅ΡΠ²Π΅Ρ ΠΈ Ρ Π½Π°Ρ Π½Π΅ ΡΠΏΡΠΎΡΠΈΠ»ΠΈ ΠΏΠ°ΡΠΎΠ»Ρ :) Π’Π°ΠΊ ΠΊΠ°ΠΊ ΠΌΡ Π½Π° ΡΠ΅ΡΠ²Π΅ΡΠ΅ Backup ΡΠ΅ΡΠ²Π΅ΡΠ΅ ΠΏΡΠ΅Π΄Π»Π°Π³Π°Ρ ΡΠΎΠ·Π΄Π°ΡΡ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ backup
. Π‘ΡΠ΄Π° Π±ΡΠ΄Π΅ΠΌ ΡΠΎΡ
ΡΠ°Π½ΡΡΡ ΡΠ΅Π·Π΅ΡΠ²Π½ΡΠ΅ ΠΊΠΎΠΏΠΈΠΈ ΡΠ°ΠΉΠ»ΠΎΠ² Ρ ΡΠ΅ΡΠ²Π΅ΡΠ° Prod. ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΡΡ ΠΎΠ±ΡΠ°ΡΠ½ΠΎ Π½Π° Prod ΡΠ΅ΡΠ²Π΅Ρ.
cd /root | mkdir backup exit
ΠΠ΅ΡΠΎΠ΄ Sync (ΠΈΠ½ΠΊΡΠ΅ΠΌΠ΅Π½ΡΠ°Π»ΡΠ½ΠΎΠ΅ ΡΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ)
- ΠΡΠ»ΠΈ Π±ΡΠ»ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ Π½ΠΎΠ²ΡΠ΅ ΡΠ°ΠΉΠ»Ρ.
- ΠΡΠ»ΠΈ Π±ΡΠ»ΠΈ ΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½Ρ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π² ΡΠ°ΠΉΠ»Π°Ρ ΠΊΠΎΠ½ΡΡΠΎΠ»ΠΈΡΡΠ΅ΠΌΠΎΠΉ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ.
- ΠΡΠ»ΠΈ Π±ΡΠ»ΠΎ ΡΠ΄Π°Π»Π΅Π½ΠΈΠ΅ ΡΠ°ΠΉΠ»ΠΎΠ² Π² ΠΊΠΎΠ½ΡΡΠΎΠ»ΠΈΡΡΠ΅ΠΌΠΎΠΉ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ.
ΠΠ° ΡΠ΅ΡΠ²Π΅ΡΠ΅ Prod ΡΠΎΠ·Π΄Π°Π΄ΠΈΠΌ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ ΠΈ Π² Π½Π΅ΠΉ ΡΠ°ΠΉΠ»Ρ, ΠΊΠΎΡΠΎΡΡΠ΅ Π±ΡΠ΄Π΅Ρ ΠΌΠΎΠ½ΠΈΡΠΎΡΠΈΡΡ ΡΡΠΈΠ»ΠΈΡΠ° rsync:
cd var mkdir www cd www touch 1.html index.html hello.html
ΠΡ ΠΏΠ΅ΡΠ΅ΡΠ»ΠΈ Π² var
ΠΈ ΡΠ°ΠΌ ΡΠΎΠ·Π΄Π°Π»ΠΈ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ www
Ρ ΡΠ°ΠΉΠ»Π°ΠΌΠΈ 1.html
, index.html
, hello.html
.
ΠΠΎΡΡΠΈ Π³ΠΎΡΠΎΠ²ΠΎ :) ΠΠ°ΠΏΡΡΠΊΠ°Π΅ΠΌ rsync Π² ΡΠ΅ΠΆΠΈΠΌΠ΅ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ:
rsync -azvP --delete /var/www/ root@Backup-IP:/root/backup/ sending incremental file list ./ 1.html 0 100% 0.00kB/s 0:00:00 (xfr#1, to-chk=2/4) hello.html 0 100% 0.00kB/s 0:00:00 (xfr#2, to-chk=1/4) index.html 0 100% 0.00kB/s 0:00:00 (xfr#3, to-chk=0/4) sent 222 bytes received 76 bytes 198.67 bytes/sec
ΠΠΈΠ΄ΠΈΠΌ ΡΡΠΎ Π±ΡΠ»Π° ΠΎΡΠΏΡΠ°Π²ΠΊΠ° ΡΠ°ΠΉΠ»ΠΎΠ² Π½Π° ΡΠ΅ΡΠ²Π΅Ρ Backup. Π’Π΅ΠΏΠ΅ΡΡ Π²Π½Π΅ΡΠ΅ΠΌ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ. Π£Π΄Π°Π»ΠΈΠΌ ΡΠ°ΠΉΠ» hello.html
ΠΈ ΡΠΎΠ·Π΄Π°Π΄ΠΈΠΌ Π½ΠΎΠ²ΡΠΉ ΡΠ°ΠΉΠ» 2.html
:
rm -r hello.html touch 2.html
ΠΠΎΠ²ΡΠΎΡΠ½ΠΎ Π·Π°ΠΏΡΡΡΠΈΠΌ rsync:
rsync -azvP --delete /var/www/ root@Backup-IP:/root/backup/
sending incremental file list deleting hello.html ./ 2.html 0 100% 0.00kB/s 0:00:00 (xfr#1, to-chk=1/4) sent 150 bytes received 52 bytes 134.67 bytes/sec total size is 0 speedup is 0.00
ΠΠΈΠ΄ΠΈΠΌ ΡΡΠΎ rsync ΡΠ΄Π°Π»ΠΈΠ» Π² ΠΏΠ°ΠΏΠΊΠ΅ backup
ΡΠ°ΠΉΠ» hello.html
ΠΈ ΡΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π» ΡΡΠ΄Π° ΡΠ°ΠΉΠ» 2.html
. ΠΡΠ΅Π΄Π»Π°Π³Π°Ρ ΡΠΎΠ·Π΄Π°ΡΡ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠΉ ΡΠ°ΠΉΠ», Π² Π΄Π°Π»ΡΠ½Π΅ΠΉΡΠ΅ΠΌ ΠΎΠ½ Π½Π°ΠΌ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡΡΡ Π΄Π»Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·Π°ΡΠΈΠΈ Π±Π΅ΠΊΠ°ΠΏΠ°:
nano sync.sh
#!/bin/sh rsync -azvP --delete /var/www/ root@Backup-IP:/root/backup/
Π’Π΅ΠΏΠ΅ΡΡ Π½Π΅Ρ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ Π·Π°ΠΏΠΎΠΌΠΈΠ½Π°ΡΡ Π΄Π»ΠΈΠ½Π½ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ rsync, Π° Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π·Π°ΠΏΡΡΡΠΈΡΡ sync.sh (Π½Π΅ Π·Π°Π±ΡΠ΄ΡΡΠ΅ ΡΠ΄Π΅Π»Π°ΡΡ Π΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠΌ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ chmod):
sh sync.sh
ΠΠ΅ΡΠΎΠ΄ Snapshot (ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΏΠΎΠ»Π½ΠΎΠΉ ΠΊΠΎΠΏΠΈΠΈ ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠΉ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ)
Π£ ΠΌΠ΅ΡΠΎΠ΄Π° ΠΈΠ½ΠΊΡΠ΅ΠΌΠ΅Π½ΡΠ½ΠΎΠ³ΠΎ Π±ΡΠΊΠ°ΠΏΠ° Π΅ΡΡΡ Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΎΠΊ. ΠΡΠ»ΠΈ Π²Ρ, ΠΊ ΠΏΡΠΈΠΌΠ΅ΡΡ, ΠΎΡΠΈΠ±ΠΎΡΠ½ΠΎ ΡΠ΄Π°Π»ΠΈΡΠ΅ ΡΠ°ΠΉΠ»Ρ, ΡΠΎ ΡΠ΄Π°Π»Π΅Π½ΠΈΠ΅ ΡΠ°ΠΊΠΆΠ΅ ΠΏΡΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ ΠΈ Π² Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ backup
. Π€Π°ΠΉΠ»Ρ Π±ΡΠ΄ΡΡ ΡΡΠ΅ΡΡΠ½Ρ. ΠΠ»Ρ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ Π°Π»Π³ΠΎΡΠΈΡΠΌ:
- ΠΠ΅Π»Π°Π΅ΠΌ ΠΈΠ½ΠΊΡΠ΅ΠΌΠ΅Π½ΡΠ½ΡΠΉ backup ΠΊΠ°ΠΆΠ΄ΡΠΉ Π΄Π΅Π½Ρ ΡΡΡΠΎΠΌ Π² 09:30.
- ΠΠ΅Π»Π°Π΅ΠΌ ΠΏΠΎΠ»Π½ΡΠΉ backup (Snapshot) Π΅ΠΆΠ΅Π½Π΅Π΄Π΅Π»ΡΠ½ΠΎ Π² ΠΏΠΎΠ½Π΅Π΄Π΅Π»ΡΠ½ΠΈΠΊ 10:30.
Snapshot ΠΊΠ»Π°Π΄Π΅ΠΌ Π² ΠΏΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΠΎΠ·Π΄Π°Π½Π½ΡΡ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ snapshot
Π½Π° ΡΠ΅ΡΠ²Π΅ΡΠ΅ Backup. Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ snapshot.sh:
nano snapshot.sh
!/bin/sh DATE=$(date +%Y-%m-%d-t-%H-%M-%S) rsync -arvt -t /var/www/ root@5.188.118.203:/root/backup/snapshot/$DATE
ΠΠ°ΠΏΡΡΠΊΠ°Π΅ΠΌ:
sh snapshot.sh
sending incremental file list created directory /root/backup/snapshot/2021-09-01-t-16-44-29 ./ 1.html 2.html index.html snapshot.sh sync.sh sent 577 bytes received 180 bytes 1,514.00 bytes/sec total size is 213 speedup is 0.28
ΠΠ· Π²ΡΠ²ΠΎΠ΄Π° ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ° ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ snapshot.sh Π²ΠΈΠ΄ΠΈΠΌ, ΡΡΠΎ Π±ΡΠ»Π° ΡΠ΄Π΅Π»Π°Π½Π° ΠΈ ΠΎΡΠΏΡΠ°Π²Π»Π΅Π½Π° ΠΏΠΎΠ»Π½Π°Ρ ΠΊΠΎΠΏΠΈΡ ΡΠΎΡ ΡΠ°Π½ΡΠ΅ΠΌΠΎΠΉ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ Π² backup Ρ ΠΈΠΌΠ΅Π½Π΅ΠΌ ΡΠ΅ΠΊΡΡΠ΅ΠΉ Π΄Π°ΡΡ ΠΈ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ.
ΠΠ²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΈΡΡΠ΅ΠΌ Π·Π°Π΄Π°ΡΡ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΠ°ΠΉΠ»ΠΎΠ²
ΠΠ²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΈΡΡΠ΅ΠΌ Π½Π°Ρ backup. ΠΡ Π½Π΅ Π·ΡΡ ΡΠΎΠ·Π΄Π°Π²Π°Π»ΠΈ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠ΅ ΡΠ°ΠΉΠ»Ρ sync.sh ΠΈ snapshot.sh. Π’Π΅ΠΏΠ΅ΡΡ Π½ΡΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°ΡΡ Π² ΠΏΠ»Π°Π½ΠΈΡΠΎΠ²ΡΠΈΠΊΠ΅ Cron Π·Π°Π΄Π°Π½ΠΈΠ΅:
crontab -e
# ΠΠΆΠ΅Π΄Π½Π΅Π²Π½ΠΎΠ΅ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² 09:30 30 9 * * * /root/sync.sh # ΠΠΆΠ΅Π½Π΅Π΄Π΅Π»ΡΠ½ΠΎΠ΅ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎΠ»Π½ΠΎΠΉ ΠΊΠΎΠΏΠΈΠΈ Π² ΠΠΎΠ½Π΅Π΄Π΅Π»ΡΠ½ΠΈΠΊ 10:30 30 10 * * 1 /root/snapshot.sh
ΠΠΎΡΠΎΠ²ΠΎ! Π ΠΏΠ»Π°Π½ΠΈΡΠΎΠ²ΡΠΈΠΊΠ΅ Π΄Π²Π° Π·Π°Π΄Π°Π½ΠΈΡ ΠΊΠΎΡΠΎΡΡΠ΅ Π±ΡΠ΄ΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠΈΠ»ΠΈΡΡ rsync ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ Π΅ΠΆΠ΅Π΄Π½Π΅Π²Π½ΡΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ ΠΈ ΡΠ°Π· Π² Π½Π΅Π΄Π΅Π»Ρ Π΄Π΅Π»Π°ΡΡ ΠΏΠΎΠ»Π½ΡΡ ΠΊΠΎΠΏΠΈΡ.
ΠΠ»Ρ ΡΠ΅Π·Π΅ΡΠ²Π½ΠΎΠ³ΠΎ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΡ Ρ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠ°Π±ΠΎΡΠ΅Π³ΠΎ ΡΠ΅ΡΠ²Π΅ΡΠ° ΠΎΡΠ΄Π΅Π»ΡΠ½Π°Ρ ΡΠΈΠ·ΠΈΡΠ΅ΡΠΊΠ°Ρ ΠΌΠ°ΡΠΈΠ½Π° ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠΊΠ°Π·Π°ΡΡΡΡ ΠΈΠ·Π±ΡΡΠΎΡΠ½ΠΎΠΉ, Π΅ΡΠ»ΠΈ ΠΏΡΠΎΠ΅ΠΊΡ Π½Π΅ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ ΠΊΡΡΠΏΠ½ΡΠΉ. Π’Π°ΠΊΠ°Ρ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ ΡΠΊΠΎΡΠ΅Π΅ ΠΏΠΎΠ΄ΠΎΠΉΠ΄Π΅Ρ Π΄Π»Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΡΠ΅ΡΠ²Π΅ΡΠΎΠ² Π½Π° ΠΏΡΠΎΠ΄Π΅ (ΠΈΠ»ΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ, Π΅ΡΠ»ΠΈ ΠΎΠ½ ΠΎΠ±ΡΠ»ΡΠΆΠΈΠ²Π°Π΅Ρ Π±ΠΎΠ»ΡΡΠΎΠΉ ΠΏΡΠΎΠ΅ΠΊΡ). Selectel ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π΅Ρ ΡΠ΅ΡΠ²Π΅ΡΡ, ΠΎΡΠ½Π°ΡΠ΅Π½Π½ΡΠ΅ 4-768 ΠΠ ΠΠΠ£, 2-72 ΡΠ΄ΡΠ°ΠΌΠΈ Π¦Π, Π° ΡΠ°ΠΊΠΆΠ΅ Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΡ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠΈΡΡ Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΡΡΠΊΠΎΡΠΈΡΠ΅Π»Ρ ΠΈ Π²ΡΠ±ΡΠ°ΡΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΠ΅ΡΠ²Π΅ΡΠ° Π΄Π°ΠΆΠ΅ Raspberry Pi 4 (4/64 ΠΠ) ΠΈ Mac mini Π΄Π»Ρ iOS-ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ².