diff --git a/.gitignore b/.gitignore index 4be2a29..914dba7 100644 --- a/.gitignore +++ b/.gitignore @@ -89,3 +89,7 @@ ESP32/**/*.uf2 ESP32/**/*.o ESP32/**/*.d ESP32/**/*.a + +# Полные серверные бэкапы (тяжёлые архивы, не коммитим) +server-backup/archive/** +!server-backup/archive/.gitkeep diff --git a/VERSION.properties b/VERSION.properties index b83d272..a45515f 100644 --- a/VERSION.properties +++ b/VERSION.properties @@ -1,2 +1,2 @@ -client.version=1.2.109 -server.version=1.2.101 +client.version=1.2.110 +server.version=1.2.102 diff --git a/server-backup/AGENTS.md b/server-backup/AGENTS.md new file mode 100644 index 0000000..5ecf186 --- /dev/null +++ b/server-backup/AGENTS.md @@ -0,0 +1,29 @@ +# AGENTS для server-backup + +## Назначение +- Папка `server-backup/` хранит: + - тяжёлые локальные бэкапы сервера (НЕ в git); + - лёгкую схему восстановления (в git), чтобы можно было поднять сервер даже без полного архива. + +## Структура +- `archive/YYYY-MM-DD/` — полный бэкап конкретной даты. +- `scheme/shineup.me/` — схема восстановления и ключевые конфиги. +- `backup-version.properties` — версия контура бэкапа. + +## Правила +- Полный бэкап складывать только в `server-backup/archive/`. +- `server-backup/archive/**` не коммитить. +- Любое изменение схемы восстановления фиксировать в git. +- После обновления схемы увеличивать `backup.schema.version`. +- После нового полного бэкапа увеличивать `backup.full.version`. + +## Как обновлять бэкап +1. Обновить схему: + - `bash server-backup/scheme/shineup.me/scripts/refresh_scheme.sh` +2. Сделать новый полный бэкап: + - `bash server-backup/scheme/shineup.me/scripts/backup_full.sh` +3. Проверить `server-backup/archive/<дата>/MANIFEST.txt`. +4. Поднять версии в `server-backup/backup-version.properties`. + +## Как восстанавливать +- Смотреть `server-backup/scheme/shineup.me/docs/RESTORE.md`. diff --git a/server-backup/README.md b/server-backup/README.md new file mode 100644 index 0000000..d40e59f --- /dev/null +++ b/server-backup/README.md @@ -0,0 +1,7 @@ +# server-backup + +- `archive/` — локальные полные бэкапы по датам (не коммитятся). +- `scheme/` — лёгкая схема восстановления (коммитится). +- `backup-version.properties` — версии схемы и полного бэкапа. + +Текущий сервер-источник: `shineup.me`. diff --git a/server-backup/archive/.gitkeep b/server-backup/archive/.gitkeep new file mode 100644 index 0000000..4c0d52d --- /dev/null +++ b/server-backup/archive/.gitkeep @@ -0,0 +1 @@ + diff --git a/server-backup/backup-version.properties b/server-backup/backup-version.properties new file mode 100644 index 0000000..c745be1 --- /dev/null +++ b/server-backup/backup-version.properties @@ -0,0 +1,3 @@ +backup.schema.version=1 +backup.full.version=1 +last.full.backup.date=2026-06-01 diff --git a/server-backup/scheme/shineup.me/captures/01_host_disk.txt b/server-backup/scheme/shineup.me/captures/01_host_disk.txt new file mode 100644 index 0000000..84f23fb --- /dev/null +++ b/server-backup/scheme/shineup.me/captures/01_host_disk.txt @@ -0,0 +1,32 @@ +vm85188.geo.hosting +--- +Linux vm85188.geo.hosting 5.4.0-169-generic #187-Ubuntu SMP Thu Nov 23 14:52:28 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux +--- +Filesystem Size Used Avail Use% Mounted on +udev 1.9G 0 1.9G 0% /dev +tmpfs 392M 1.4M 391M 1% /run +/dev/vda2 79G 6.2G 69G 9% / +tmpfs 2.0G 0 2.0G 0% /dev/shm +tmpfs 5.0M 0 5.0M 0% /run/lock +tmpfs 2.0G 0 2.0G 0% /sys/fs/cgroup +/dev/loop0 92M 92M 0 100% /snap/lxd/24061 +/dev/loop2 41M 41M 0 100% /snap/snapd/20290 +/dev/loop4 50M 50M 0 100% /snap/snapd/26865 +/dev/loop3 92M 92M 0 100% /snap/lxd/38688 +/dev/loop5 64M 64M 0 100% /snap/core20/2769 +tmpfs 392M 0 392M 0% /run/user/1000 +tmpfs 392M 0 392M 0% /run/user/0 +/dev/loop6 64M 64M 0 100% /snap/core20/2866 +--- +NAME FSTYPE LABEL UUID FSAVAIL FSUSE% MOUNTPOINT +loop0 squashfs 0 100% /snap/lxd/24061 +loop1 squashfs +loop2 squashfs 0 100% /snap/snapd/20290 +loop3 squashfs 0 100% /snap/lxd/38688 +loop4 squashfs 0 100% /snap/snapd/26865 +loop5 squashfs 0 100% /snap/core20/2769 +loop6 squashfs 0 100% /snap/core20/2866 +sr0 +vda +├─vda1 +└─vda2 ext4 b3a7aca2-1c7b-470b-a2ee-dc7204eba7d3 68.4G 8% / diff --git a/server-backup/scheme/shineup.me/captures/02_enabled_services.txt b/server-backup/scheme/shineup.me/captures/02_enabled_services.txt new file mode 100644 index 0000000..3254a7b --- /dev/null +++ b/server-backup/scheme/shineup.me/captures/02_enabled_services.txt @@ -0,0 +1,74 @@ +UNIT FILE STATE VENDOR PRESET +accounts-daemon.service enabled enabled +agent-memory.service enabled enabled +apparmor.service enabled enabled +atd.service enabled enabled +autovt@.service enabled enabled +blk-availability.service enabled enabled +caddy.service enabled enabled +cloud-config.service enabled enabled +cloud-final.service enabled enabled +cloud-init-local.service enabled enabled +cloud-init.service enabled enabled +console-setup.service enabled enabled +containerd.service enabled enabled +coturn.service enabled enabled +cron.service enabled enabled +dbus-org.freedesktop.ModemManager1.service enabled enabled +dbus-org.freedesktop.resolve1.service enabled enabled +dbus-org.freedesktop.thermald.service enabled enabled +dbus-org.freedesktop.timesync1.service enabled enabled +dmesg.service enabled enabled +docker.service enabled enabled +e2scrub_reap.service enabled enabled +finalrd.service enabled enabled +getty@.service enabled enabled +grub-common.service enabled enabled +grub-initrd-fallback.service enabled enabled +irqbalance.service enabled enabled +iscsi.service enabled enabled +keyboard-setup.service enabled enabled +lvm2-monitor.service enabled enabled +lxd-agent-9p.service enabled enabled +lxd-agent.service enabled enabled +ModemManager.service enabled enabled +multipath-tools.service enabled enabled +multipathd.service enabled enabled +networkd-dispatcher.service enabled enabled +networking.service enabled enabled +ondemand.service enabled enabled +open-iscsi.service enabled enabled +open-vm-tools.service enabled enabled +pollinate.service enabled enabled +rsync.service enabled enabled +rsyslog.service enabled enabled +secureboot-db.service enabled enabled +setvtrgb.service enabled enabled +shine-server.service enabled enabled +snap.lxd.activate.service enabled enabled +snapd.apparmor.service enabled enabled +snapd.autoimport.service enabled enabled +snapd.core-fixup.service enabled enabled +snapd.recovery-chooser-trigger.service enabled enabled +snapd.seeded.service enabled enabled +snapd.service enabled enabled +snapd.system-shutdown.service enabled enabled +ssh.service enabled enabled +sshd.service enabled enabled +syslog.service enabled enabled +systemd-networkd-wait-online.service enabled enabled +systemd-networkd.service enabled enabled +systemd-pstore.service enabled enabled +systemd-resolved.service enabled enabled +systemd-timesyncd.service enabled enabled +thermald.service enabled enabled +ua-reboot-cmds.service enabled enabled +ubuntu-advantage.service enabled enabled +ubuntu-fan.service enabled enabled +udisks2.service enabled enabled +ufw.service enabled enabled +unattended-upgrades.service enabled enabled +vgauth.service enabled enabled +vmtoolsd.service enabled enabled + +71 unit files listed. diff --git a/server-backup/scheme/shineup.me/captures/03_running_services.txt b/server-backup/scheme/shineup.me/captures/03_running_services.txt new file mode 100644 index 0000000..d8f1274 --- /dev/null +++ b/server-backup/scheme/shineup.me/captures/03_running_services.txt @@ -0,0 +1,40 @@ + UNIT LOAD ACTIVE SUB DESCRIPTION + accounts-daemon.service loaded active running Accounts Service + agent-memory.service loaded active running agent-memory service + atd.service loaded active running Deferred execution scheduler + caddy.service loaded active running Caddy + containerd.service loaded active running containerd container runtime + coturn.service loaded active running coTURN STUN/TURN Server + cron.service loaded active running Regular background program processing daemon + dbus.service loaded active running D-Bus System Message Bus + docker.service loaded active running Docker Application Container Engine + getty@tty1.service loaded active running Getty on tty1 + irqbalance.service loaded active running irqbalance daemon + ModemManager.service loaded active running Modem Manager + multipathd.service loaded active running Device-Mapper Multipath Device Controller + networkd-dispatcher.service loaded active running Dispatcher daemon for systemd-networkd + polkit.service loaded active running Authorization Manager + qemu-guest-agent.service loaded active running QEMU Guest Agent + rsyslog.service loaded active running System Logging Service + shine-server.service loaded active running SHiNE Server + snapd.service loaded active running Snap Daemon + ssh.service loaded active running OpenBSD Secure Shell server + systemd-hostnamed.service loaded active running Hostname Service + systemd-journald.service loaded active running Journal Service + systemd-logind.service loaded active running Login Service + systemd-networkd.service loaded active running Network Service + systemd-resolved.service loaded active running Network Name Resolution + systemd-timesyncd.service loaded active running Network Time Synchronization + systemd-udevd.service loaded active running udev Kernel Device Manager + udisks2.service loaded active running Disk Manager + unattended-upgrades.service loaded active running Unattended Upgrades Shutdown + upower.service loaded active running Daemon for power management + user@0.service loaded active running User Manager for UID 0 + user@1000.service loaded active running User Manager for UID 1000 + uuidd.service loaded active running Daemon for generating UUIDs + +LOAD = Reflects whether the unit definition was properly loaded. +ACTIVE = The high-level unit activation state, i.e. generalization of SUB. +SUB = The low-level unit activation state, values depend on unit type. + +33 loaded units listed. diff --git a/server-backup/scheme/shineup.me/captures/04_listen_ports.txt b/server-backup/scheme/shineup.me/captures/04_listen_ports.txt new file mode 100644 index 0000000..f0758f2 --- /dev/null +++ b/server-backup/scheme/shineup.me/captures/04_listen_ports.txt @@ -0,0 +1,50 @@ +State Recv-Q Send-Q Local Address:Port Peer Address:Port Process +LISTEN 0 4096 127.0.0.1:2019 0.0.0.0:* users:(("caddy",pid=114218,fd=13)) +LISTEN 0 4096 0.0.0.0:2222 0.0.0.0:* users:(("docker-proxy",pid=195899,fd=4)) +LISTEN 0 4096 127.0.0.53%lo:53 0.0.0.0:* users:(("systemd-resolve",pid=718,fd=13)) +LISTEN 0 128 0.0.0.0:22 0.0.0.0:* users:(("sshd",pid=63620,fd=3)) +LISTEN 0 1024 45.136.124.227:3478 0.0.0.0:* users:(("turnserver",pid=22980,fd=99)) +LISTEN 0 1024 127.0.0.1:3478 0.0.0.0:* users:(("turnserver",pid=22980,fd=94)) +LISTEN 0 1024 45.136.124.227:3478 0.0.0.0:* users:(("turnserver",pid=22980,fd=82)) +LISTEN 0 1024 45.136.124.227:3478 0.0.0.0:* users:(("turnserver",pid=22980,fd=72)) +LISTEN 0 1024 127.0.0.1:3478 0.0.0.0:* users:(("turnserver",pid=22980,fd=67)) +LISTEN 0 1024 127.0.0.1:3478 0.0.0.0:* users:(("turnserver",pid=22980,fd=66)) +LISTEN 0 1024 45.136.124.227:3478 0.0.0.0:* users:(("turnserver",pid=22980,fd=53)) +LISTEN 0 1024 127.0.0.1:3478 0.0.0.0:* users:(("turnserver",pid=22980,fd=49)) +LISTEN 0 1024 45.136.124.227:3478 0.0.0.0:* users:(("turnserver",pid=22980,fd=32)) +LISTEN 0 1024 45.136.124.227:3478 0.0.0.0:* users:(("turnserver",pid=22980,fd=29)) +LISTEN 0 1024 127.0.0.1:3478 0.0.0.0:* users:(("turnserver",pid=22980,fd=23)) +LISTEN 0 1024 127.0.0.1:3478 0.0.0.0:* users:(("turnserver",pid=22980,fd=22)) +LISTEN 0 1024 45.136.124.227:3479 0.0.0.0:* users:(("turnserver",pid=22980,fd=102)) +LISTEN 0 1024 127.0.0.1:3479 0.0.0.0:* users:(("turnserver",pid=22980,fd=97)) +LISTEN 0 1024 45.136.124.227:3479 0.0.0.0:* users:(("turnserver",pid=22980,fd=85)) +LISTEN 0 1024 45.136.124.227:3479 0.0.0.0:* users:(("turnserver",pid=22980,fd=78)) +LISTEN 0 1024 127.0.0.1:3479 0.0.0.0:* users:(("turnserver",pid=22980,fd=79)) +LISTEN 0 1024 127.0.0.1:3479 0.0.0.0:* users:(("turnserver",pid=22980,fd=69)) +LISTEN 0 1024 45.136.124.227:3479 0.0.0.0:* users:(("turnserver",pid=22980,fd=55)) +LISTEN 0 1024 127.0.0.1:3479 0.0.0.0:* users:(("turnserver",pid=22980,fd=51)) +LISTEN 0 1024 45.136.124.227:3479 0.0.0.0:* users:(("turnserver",pid=22980,fd=35)) +LISTEN 0 1024 45.136.124.227:3479 0.0.0.0:* users:(("turnserver",pid=22980,fd=33)) +LISTEN 0 1024 127.0.0.1:3479 0.0.0.0:* users:(("turnserver",pid=22980,fd=27)) +LISTEN 0 1024 127.0.0.1:3479 0.0.0.0:* users:(("turnserver",pid=22980,fd=26)) +LISTEN 0 4096 127.0.0.1:3000 0.0.0.0:* users:(("docker-proxy",pid=195885,fd=4)) +LISTEN 0 4096 127.0.0.1:37021 0.0.0.0:* users:(("containerd",pid=188233,fd=11)) +LISTEN 0 50 *:7070 *:* users:(("java",pid=2278064,fd=9)) +LISTEN 0 4096 [::]:2222 [::]:* users:(("docker-proxy",pid=195906,fd=4)) +LISTEN 0 100 *:8080 *:* users:(("java",pid=304246,fd=11)) +LISTEN 0 4096 *:80 *:* users:(("caddy",pid=114218,fd=16)) +LISTEN 0 100 *:8018 *:* users:(("java",pid=321572,fd=13)) +LISTEN 0 128 [::]:22 [::]:* users:(("sshd",pid=63620,fd=4)) +LISTEN 0 1024 [::1]:3478 [::]:* users:(("turnserver",pid=22980,fd=38)) +LISTEN 0 1024 [::1]:3478 [::]:* users:(("turnserver",pid=22980,fd=41)) +LISTEN 0 1024 [::1]:3478 [::]:* users:(("turnserver",pid=22980,fd=57)) +LISTEN 0 1024 [::1]:3478 [::]:* users:(("turnserver",pid=22980,fd=84)) +LISTEN 0 1024 [::1]:3478 [::]:* users:(("turnserver",pid=22980,fd=88)) +LISTEN 0 1024 [::1]:3478 [::]:* users:(("turnserver",pid=22980,fd=106)) +LISTEN 0 1024 [::1]:3479 [::]:* users:(("turnserver",pid=22980,fd=40)) +LISTEN 0 1024 [::1]:3479 [::]:* users:(("turnserver",pid=22980,fd=47)) +LISTEN 0 1024 [::1]:3479 [::]:* users:(("turnserver",pid=22980,fd=59)) +LISTEN 0 1024 [::1]:3479 [::]:* users:(("turnserver",pid=22980,fd=90)) +LISTEN 0 1024 [::1]:3479 [::]:* users:(("turnserver",pid=22980,fd=91)) +LISTEN 0 1024 [::1]:3479 [::]:* users:(("turnserver",pid=22980,fd=113)) +LISTEN 0 4096 *:443 *:* users:(("caddy",pid=114218,fd=12)) diff --git a/server-backup/scheme/shineup.me/captures/05_docker_ps.txt b/server-backup/scheme/shineup.me/captures/05_docker_ps.txt new file mode 100644 index 0000000..b0ce8db --- /dev/null +++ b/server-backup/scheme/shineup.me/captures/05_docker_ps.txt @@ -0,0 +1,2 @@ +NAMES IMAGE STATUS PORTS +gitea gitea/gitea:1.22.6 Up 3 weeks 127.0.0.1:3000->3000/tcp, 0.0.0.0:2222->22/tcp, :::2222->22/tcp diff --git a/server-backup/scheme/shineup.me/captures/06_home_player_sizes.txt b/server-backup/scheme/shineup.me/captures/06_home_player_sizes.txt new file mode 100644 index 0000000..e0b4845 --- /dev/null +++ b/server-backup/scheme/shineup.me/captures/06_home_player_sizes.txt @@ -0,0 +1,6 @@ +4.0K /home/player/hosts.codex.test +16K /home/player/logs +796K /home/player/sites +15M /home/player/gitea +36M /home/player/agent-memory +200M /home/player/SHiNE diff --git a/server-backup/scheme/shineup.me/captures/07_var_sizes.txt b/server-backup/scheme/shineup.me/captures/07_var_sizes.txt new file mode 100644 index 0000000..f2ec913 --- /dev/null +++ b/server-backup/scheme/shineup.me/captures/07_var_sizes.txt @@ -0,0 +1,12 @@ +4.0K /var/crash +4.0K /var/local +4.0K /var/mail +4.0K /var/opt +28K /var/spool +60K /var/snap +76K /var/tmp +1.9M /var/backups +280M /var/cache +1.2G /var/lib +1.2G /var/log +2.7G /var diff --git a/server-backup/scheme/shineup.me/captures/UPDATED_AT_UTC.txt b/server-backup/scheme/shineup.me/captures/UPDATED_AT_UTC.txt new file mode 100644 index 0000000..017cb46 --- /dev/null +++ b/server-backup/scheme/shineup.me/captures/UPDATED_AT_UTC.txt @@ -0,0 +1 @@ +2026-06-01T08:53:07Z diff --git a/server-backup/scheme/shineup.me/configs/Caddyfile b/server-backup/scheme/shineup.me/configs/Caddyfile new file mode 100644 index 0000000..4be726c --- /dev/null +++ b/server-backup/scheme/shineup.me/configs/Caddyfile @@ -0,0 +1,54 @@ +openmindsoft.io, www.openmindsoft.io { + encode zstd gzip + root * /home/player/sites/OpenMindSoft.io + try_files {path} /index.html + file_server +} + +shineup.me { + encode zstd gzip + + @ws path /ws /ws/* + handle @ws { + reverse_proxy 127.0.0.1:7070 + } + + handle { + root * /home/player/SHiNE/shine-ui + try_files {path} /index.html + file_server + header -Etag + header { + Cache-Control "no-store, no-cache, must-revalidate, max-age=0" + Pragma "no-cache" + Expires "0" + } + } +} + +:80 { + encode zstd gzip + + @ws path /ws /ws/* + handle @ws { + reverse_proxy 127.0.0.1:7070 + } + + handle { + root * /home/player/SHiNE/shine-ui + try_files {path} /index.html + file_server + header -Etag + header { + Cache-Control "no-store, no-cache, must-revalidate, max-age=0" + Pragma "no-cache" + Expires "0" + } + } +} + + +git.shineup.me { + encode zstd gzip + reverse_proxy 127.0.0.1:3000 +} diff --git a/server-backup/scheme/shineup.me/configs/systemd/agent-memory.service b/server-backup/scheme/shineup.me/configs/systemd/agent-memory.service new file mode 100644 index 0000000..d365474 --- /dev/null +++ b/server-backup/scheme/shineup.me/configs/systemd/agent-memory.service @@ -0,0 +1,25 @@ +[Unit] +Description=agent-memory service +After=network-online.target +Wants=network-online.target +StartLimitIntervalSec=0 + +[Service] +Type=simple +User=player +Group=player +WorkingDirectory=/home/player/agent-memory +ExecStart=/usr/bin/java -jar /home/player/agent-memory/agent-gpt-memory.jar --spring.config.location=optional:file:/home/player/agent-memory/app.properties +Restart=always +RestartSec=3 +TimeoutStopSec=20 +KillMode=control-group +LimitNOFILE=65535 +NoNewPrivileges=true +PrivateTmp=true +ProtectSystem=strict +ProtectHome=read-only +ReadWritePaths=/home/player/agent-memory/data /home/player/agent-memory/logs + +[Install] +WantedBy=multi-user.target diff --git a/server-backup/scheme/shineup.me/configs/systemd/shine-server.service b/server-backup/scheme/shineup.me/configs/systemd/shine-server.service new file mode 100644 index 0000000..693bd67 --- /dev/null +++ b/server-backup/scheme/shineup.me/configs/systemd/shine-server.service @@ -0,0 +1,15 @@ +[Unit] +Description=SHiNE Server +After=network.target + +[Service] +Type=simple +User=player +Group=player +WorkingDirectory=/home/player/SHiNE/shine-server +ExecStart=/usr/bin/java -Dserver.1port=7070 -jar /home/player/SHiNE/shine-server/shine-server.jar +Restart=always +RestartSec=3 + +[Install] +WantedBy=multi-user.target diff --git a/server-backup/scheme/shineup.me/configs/turnserver.conf b/server-backup/scheme/shineup.me/configs/turnserver.conf new file mode 100644 index 0000000..4d8d5cf --- /dev/null +++ b/server-backup/scheme/shineup.me/configs/turnserver.conf @@ -0,0 +1,709 @@ +# Coturn TURN SERVER configuration file +# +# Boolean values note: where boolean value is supposed to be used, +# you can use '0', 'off', 'no', 'false', 'f' as 'false, +# and you can use '1', 'on', 'yes', 'true', 't' as 'true' +# If the value is missed, then it means 'true'. +# + +# Listener interface device (optional, Linux only). +# NOT RECOMMENDED. +# +#listening-device=eth0 + +# TURN listener port for UDP and TCP (Default: 3478). +# Note: actually, TLS & DTLS sessions can connect to the +# "plain" TCP & UDP port(s), too - if allowed by configuration. +# +#listening-port=3478 + +# TURN listener port for TLS (Default: 5349). +# Note: actually, "plain" TCP & UDP sessions can connect to the TLS & DTLS +# port(s), too - if allowed by configuration. The TURN server +# "automatically" recognizes the type of traffic. Actually, two listening +# endpoints (the "plain" one and the "tls" one) are equivalent in terms of +# functionality; but we keep both endpoints to satisfy the RFC 5766 specs. +# For secure TCP connections, we currently support SSL version 3 and +# TLS version 1.0, 1.1 and 1.2. +# For secure UDP connections, we support DTLS version 1. +# +#tls-listening-port=5349 + +# Alternative listening port for UDP and TCP listeners; +# default (or zero) value means "listening port plus one". +# This is needed for RFC 5780 support +# (STUN extension specs, NAT behavior discovery). The TURN Server +# supports RFC 5780 only if it is started with more than one +# listening IP address of the same family (IPv4 or IPv6). +# RFC 5780 is supported only by UDP protocol, other protocols +# are listening to that endpoint only for "symmetry". +# +#alt-listening-port=0 + +# Alternative listening port for TLS and DTLS protocols. +# Default (or zero) value means "TLS listening port plus one". +# +#alt-tls-listening-port=0 + +# Listener IP address of relay server. Multiple listeners can be specified. +# If no IP(s) specified in the config file or in the command line options, +# then all IPv4 and IPv6 system IPs will be used for listening. +# +#listening-ip=172.17.19.101 +#listening-ip=10.207.21.238 +#listening-ip=2607:f0d0:1002:51::4 + +# Auxiliary STUN/TURN server listening endpoint. +# Aux servers have almost full TURN and STUN functionality. +# The (minor) limitations are: +# +# 1) Auxiliary servers do not have alternative ports and +# they do not support STUN RFC 5780 functionality (CHANGE REQUEST). +# +# 2) Auxiliary servers also are never returning ALTERNATIVE-SERVER reply. +# +# Valid formats are 1.2.3.4:5555 for IPv4 and [1:2::3:4]:5555 for IPv6. +# +# There may be multiple aux-server options, each will be used for listening +# to client requests. +# +#aux-server=172.17.19.110:33478 +#aux-server=[2607:f0d0:1002:51::4]:33478 + +# (recommended for older Linuxes only) +# Automatically balance UDP traffic over auxiliary servers (if configured). +# The load balancing is using the ALTERNATE-SERVER mechanism. +# The TURN client must support 300 ALTERNATE-SERVER response for this +# functionality. +# +#udp-self-balance + +# Relay interface device for relay sockets (optional, Linux only). +# NOT RECOMMENDED. +# +#relay-device=eth1 + +# Relay address (the local IP address that will be used to relay the +# packets to the peer). +# Multiple relay addresses may be used. +# The same IP(s) can be used as both listening IP(s) and relay IP(s). +# +# If no relay IP(s) specified, then the turnserver will apply the default +# policy: it will decide itself which relay addresses to be used, and it +# will always be using the client socket IP address as the relay IP address +# of the TURN session (if the requested relay address family is the same +# as the family of the client socket). +# +#relay-ip=172.17.19.105 +#relay-ip=2607:f0d0:1002:51::5 + +# For Amazon EC2 users: +# +# TURN Server public/private address mapping, if the server is behind NAT. +# In that situation, if a -X is used in form "-X " then that ip will be reported +# as relay IP address of all allocations. This scenario works only in a simple case +# when one single relay address is be used, and no RFC5780 functionality is required. +# That single relay address must be mapped by NAT to the 'external' IP. +# The "external-ip" value, if not empty, is returned in XOR-RELAYED-ADDRESS field. +# For that 'external' IP, NAT must forward ports directly (relayed port 12345 +# must be always mapped to the same 'external' port 12345). +# +# In more complex case when more than one IP address is involved, +# that option must be used several times, each entry must +# have form "-X ", to map all involved addresses. +# RFC5780 NAT discovery STUN functionality will work correctly, +# if the addresses are mapped properly, even when the TURN server itself +# is behind A NAT. +# +# By default, this value is empty, and no address mapping is used. +# +#external-ip=60.70.80.91 +# +#OR: +# +#external-ip=60.70.80.91/172.17.19.101 +#external-ip=60.70.80.92/172.17.19.102 + + +# Number of the relay threads to handle the established connections +# (in addition to authentication thread and the listener thread). +# If explicitly set to 0 then application runs relay process in a +# single thread, in the same thread with the listener process +# (the authentication thread will still be a separate thread). +# +# If this parameter is not set, then the default OS-dependent +# thread pattern algorithm will be employed. Usually the default +# algorithm is the most optimal, so you have to change this option +# only if you want to make some fine tweaks. +# +# In the older systems (Linux kernel before 3.9), +# the number of UDP threads is always one thread per network listening +# endpoint - including the auxiliary endpoints - unless 0 (zero) or +# 1 (one) value is set. +# +#relay-threads=0 + +# Lower and upper bounds of the UDP relay endpoints: +# (default values are 49152 and 65535) +# +#min-port=49152 +#max-port=65535 + +# Uncomment to run TURN server in 'normal' 'moderate' verbose mode. +# By default the verbose mode is off. +#verbose + +# Uncomment to run TURN server in 'extra' verbose mode. +# This mode is very annoying and produces lots of output. +# Not recommended under any normal circumstances. +# +#Verbose + +# Uncomment to use fingerprints in the TURN messages. +# By default the fingerprints are off. +# +#fingerprint + +# Uncomment to use long-term credential mechanism. +# By default no credentials mechanism is used (any user allowed). +# +#lt-cred-mech + +# This option is opposite to lt-cred-mech. +# (TURN Server with no-auth option allows anonymous access). +# If neither option is defined, and no users are defined, +# then no-auth is default. If at least one user is defined, +# in this file or in command line or in usersdb file, then +# lt-cred-mech is default. +# +#no-auth + +# TURN REST API flag. +# (Time Limited Long Term Credential) +# Flag that sets a special authorization option that is based upon authentication secret. +# +# This feature's purpose is to support "TURN Server REST API", see +# "TURN REST API" link in the project's page +# https://github.com/coturn/coturn/ +# +# This option is used with timestamp: +# +# usercombo -> "timestamp:userid" +# turn user -> usercombo +# turn password -> base64(hmac(secret key, usercombo)) +# +# This allows TURN credentials to be accounted for a specific user id. +# If you don't have a suitable id, the timestamp alone can be used. +# This option is just turning on secret-based authentication. +# The actual value of the secret is defined either by option static-auth-secret, +# or can be found in the turn_secret table in the database (see below). +# +# Read more about it: +# - https://tools.ietf.org/html/draft-uberti-behave-turn-rest-00 +# - https://www.ietf.org/proceedings/87/slides/slides-87-behave-10.pdf +# +# Be aware that use-auth-secret overrides some part of lt-cred-mech. +# Notice that this feature depends internally on lt-cred-mech, so if you set +# use-auth-secret then it enables internally automatically lt-cred-mech option +# like if you enable both. +# +# You can use only one of the to auth mechanisms in the same time because, +# both mechanism use the username and password validation in different way. +# +# This way be aware that you can't use both auth mechnaism in the same time! +# Use in config either the lt-cred-mech or the use-auth-secret +# to avoid any confusion. +# +use-auth-secret + +# 'Static' authentication secret value (a string) for TURN REST API only. +# If not set, then the turn server +# will try to use the 'dynamic' value in turn_secret table +# in user database (if present). The database-stored value can be changed on-the-fly +# by a separate program, so this is why that other mode is 'dynamic'. +# +#static-auth-secret=north + +# Server name used for +# the oAuth authentication purposes. +# The default value is the realm name. +# +#server-name=blackdow.carleon.gov + +# Flag that allows oAuth authentication. +# +#oauth + +# 'Static' user accounts for long term credentials mechanism, only. +# This option cannot be used with TURN REST API. +# 'Static' user accounts are NOT dynamically checked by the turnserver process, +# so that they can NOT be changed while the turnserver is running. +# +#user=username1:key1 +#user=username2:key2 +# OR: +#user=username1:password1 +#user=username2:password2 +# +# Keys must be generated by turnadmin utility. The key value depends +# on user name, realm, and password: +# +# Example: +# $ turnadmin -k -u ninefingers -r north.gov -p youhavetoberealistic +# Output: 0xbc807ee29df3c9ffa736523fb2c4e8ee +# ('0x' in the beginning of the key is what differentiates the key from +# password. If it has 0x then it is a key, otherwise it is a password). +# +# The corresponding user account entry in the config file will be: +# +#user=ninefingers:0xbc807ee29df3c9ffa736523fb2c4e8ee +# Or, equivalently, with open clear password (less secure): +#user=ninefingers:youhavetoberealistic +# + +# SQLite database file name. +# +# Default file name is /var/db/turndb or /usr/local/var/db/turndb or +# /var/lib/turn/turndb. +# +#userdb=/var/db/turndb + +# PostgreSQL database connection string in the case that we are using PostgreSQL +# as the user database. +# This database can be used for long-term credential mechanism +# and it can store the secret value for secret-based timed authentication in TURN RESP API. +# See http://www.postgresql.org/docs/8.4/static/libpq-connect.html for 8.x PostgreSQL +# versions connection string format, see +# http://www.postgresql.org/docs/9.2/static/libpq-connect.html#LIBPQ-CONNSTRING +# for 9.x and newer connection string formats. +# +#psql-userdb="host= dbname= user= password= connect_timeout=30" + +# MySQL database connection string in the case that we are using MySQL +# as the user database. +# This database can be used for long-term credential mechanism +# and it can store the secret value for secret-based timed authentication in TURN RESP API. +# +# Optional connection string parameters for the secure communications (SSL): +# ca, capath, cert, key, cipher +# (see http://dev.mysql.com/doc/refman/5.1/en/ssl-options.html for the +# command options description). +# +# Use string format as below (space separated parameters, all optional): +# +#mysql-userdb="host= dbname= user= password= port= connect_timeout= read_timeout=" + +# If you want to use in the MySQL connection string the password in encrypted format, +# then set in this option the MySQL password encryption secret key file. +# +# Warning: If this option is set, then mysql password must be set in "mysql-userdb" in encrypted format! +# If you want to use cleartext password then do not set this option! +# +# This is the file path which contain secret key of aes encryption while using password encryption. +# +#secret-key-file=/path/ + +# MongoDB database connection string in the case that we are using MongoDB +# as the user database. +# This database can be used for long-term credential mechanism +# and it can store the secret value for secret-based timed authentication in TURN RESP API. +# Use string format is described at http://hergert.me/docs/mongo-c-driver/mongoc_uri.html +# +#mongo-userdb="mongodb://[username:password@]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[database][?options]]" + +# Redis database connection string in the case that we are using Redis +# as the user database. +# This database can be used for long-term credential mechanism +# and it can store the secret value for secret-based timed authentication in TURN RESP API. +# Use string format as below (space separated parameters, all optional): +# +#redis-userdb="ip= dbname= password= port= connect_timeout=" + +# Redis status and statistics database connection string, if used (default - empty, no Redis stats DB used). +# This database keeps allocations status information, and it can be also used for publishing +# and delivering traffic and allocation event notifications. +# The connection string has the same parameters as redis-userdb connection string. +# Use string format as below (space separated parameters, all optional): +# +#redis-statsdb="ip= dbname= password= port= connect_timeout=" + +# The default realm to be used for the users when no explicit +# origin/realm relationship was found in the database, or if the TURN +# server is not using any database (just the commands-line settings +# and the userdb file). Must be used with long-term credentials +# mechanism or with TURN REST API. +# +# Note: If default realm is not specified at all, then realm falls back to the host domain name. +# If domain name is empty string, or '(None)', then it is initialized to am empty string. +# +#realm=mycompany.org + +# The flag that sets the origin consistency +# check: across the session, all requests must have the same +# main ORIGIN attribute value (if the ORIGIN was +# initially used by the session). +# +#check-origin-consistency + +# Per-user allocation quota. +# default value is 0 (no quota, unlimited number of sessions per user). +# This option can also be set through the database, for a particular realm. +# +#user-quota=0 + +# Total allocation quota. +# default value is 0 (no quota). +# This option can also be set through the database, for a particular realm. +# +#total-quota=0 + +# Max bytes-per-second bandwidth a TURN session is allowed to handle +# (input and output network streams are treated separately). Anything above +# that limit will be dropped or temporary suppressed (within +# the available buffer limits). +# This option can also be set through the database, for a particular realm. +# +#max-bps=0 + +# +# Maximum server capacity. +# Total bytes-per-second bandwidth the TURN server is allowed to allocate +# for the sessions, combined (input and output network streams are treated separately). +# +# bps-capacity=0 + +# Uncomment if no UDP client listener is desired. +# By default UDP client listener is always started. +# +#no-udp + +# Uncomment if no TCP client listener is desired. +# By default TCP client listener is always started. +# +#no-tcp + +# Uncomment if no TLS client listener is desired. +# By default TLS client listener is always started. +# +#no-tls + +# Uncomment if no DTLS client listener is desired. +# By default DTLS client listener is always started. +# +#no-dtls + +# Uncomment if no UDP relay endpoints are allowed. +# By default UDP relay endpoints are enabled (like in RFC 5766). +# +#no-udp-relay + +# Uncomment if no TCP relay endpoints are allowed. +# By default TCP relay endpoints are enabled (like in RFC 6062). +# +#no-tcp-relay + +# Uncomment if extra security is desired, +# with nonce value having limited lifetime. +# By default, the nonce value is unique for a session, +# and has unlimited lifetime. +# Set this option to limit the nonce lifetime. +# It defaults to 600 secs (10 min) if no value is provided. After that delay, +# the client will get 438 error and will have to re-authenticate itself. +# +#stale-nonce=600 + +# Uncomment if you want to set the maximum allocation +# time before it has to be refreshed. +# Default is 3600s. +# +#max-allocate-lifetime=3600 + + +# Uncomment to set the lifetime for the channel. +# Default value is 600 secs (10 minutes). +# This value MUST not be changed for production purposes. +# +#channel-lifetime=600 + +# Uncomment to set the permission lifetime. +# Default to 300 secs (5 minutes). +# In production this value MUST not be changed, +# however it can be useful for test purposes. +# +#permission-lifetime=300 + +# Certificate file. +# Use an absolute path or path relative to the +# configuration file. +# +#cert=/usr/local/etc/turn_server_cert.pem + +# Private key file. +# Use an absolute path or path relative to the +# configuration file. +# Use PEM file format. +# +#pkey=/usr/local/etc/turn_server_pkey.pem + +# Private key file password, if it is in encoded format. +# This option has no default value. +# +#pkey-pwd=... + +# Allowed OpenSSL cipher list for TLS/DTLS connections. +# Default value is "DEFAULT". +# +#cipher-list="DEFAULT" + +# CA file in OpenSSL format. +# Forces TURN server to verify the client SSL certificates. +# By default it is not set: there is no default value and the client +# certificate is not checked. +# +# Example: +#CA-file=/etc/ssh/id_rsa.cert + +# Curve name for EC ciphers, if supported by OpenSSL +# library (TLS and DTLS). The default value is prime256v1, +# if pre-OpenSSL 1.0.2 is used. With OpenSSL 1.0.2+, +# an optimal curve will be automatically calculated, if not defined +# by this option. +# +#ec-curve-name=prime256v1 + +# Use 566 bits predefined DH TLS key. Default size of the key is 1066. +# +#dh566 + +# Use 2066 bits predefined DH TLS key. Default size of the key is 1066. +# +#dh2066 + +# Use custom DH TLS key, stored in PEM format in the file. +# Flags --dh566 and --dh2066 are ignored when the DH key is taken from a file. +# +#dh-file= + +# Flag to prevent stdout log messages. +# By default, all log messages are going to both stdout and to +# the configured log file. With this option everything will be +# going to the configured log only (unless the log file itself is stdout). +# +#no-stdout-log + +# Option to set the log file name. +# By default, the turnserver tries to open a log file in +# /var/log, /var/tmp, /tmp and current directories directories +# (which open operation succeeds first that file will be used). +# With this option you can set the definite log file name. +# The special names are "stdout" and "-" - they will force everything +# to the stdout. Also, the "syslog" name will force everything to +# the system log (syslog). +# In the runtime, the logfile can be reset with the SIGHUP signal +# to the turnserver process. +# +#log-file=/var/tmp/turn.log + +# Option to redirect all log output into system log (syslog). +# +syslog + +# This flag means that no log file rollover will be used, and the log file +# name will be constructed as-is, without PID and date appendage. +# This option can be used, for example, together with the logrotate tool. +# +#simple-log + +# Option to set the "redirection" mode. The value of this option +# will be the address of the alternate server for UDP & TCP service in form of +# [:]. The server will send this value in the attribute +# ALTERNATE-SERVER, with error 300, on ALLOCATE request, to the client. +# Client will receive only values with the same address family +# as the client network endpoint address family. +# See RFC 5389 and RFC 5766 for ALTERNATE-SERVER functionality description. +# The client must use the obtained value for subsequent TURN communications. +# If more than one --alternate-server options are provided, then the functionality +# can be more accurately described as "load-balancing" than a mere "redirection". +# If the port number is omitted, then the default port +# number 3478 for the UDP/TCP protocols will be used. +# Colon (:) characters in IPv6 addresses may conflict with the syntax of +# the option. To alleviate this conflict, literal IPv6 addresses are enclosed +# in square brackets in such resource identifiers, for example: +# [2001:db8:85a3:8d3:1319:8a2e:370:7348]:3478 . +# Multiple alternate servers can be set. They will be used in the +# round-robin manner. All servers in the pool are considered of equal weight and +# the load will be distributed equally. For example, if we have 4 alternate servers, +# then each server will receive 25% of ALLOCATE requests. A alternate TURN server +# address can be used more than one time with the alternate-server option, so this +# can emulate "weighting" of the servers. +# +# Examples: +#alternate-server=1.2.3.4:5678 +#alternate-server=11.22.33.44:56789 +#alternate-server=5.6.7.8 +#alternate-server=[2001:db8:85a3:8d3:1319:8a2e:370:7348]:3478 + +# Option to set alternative server for TLS & DTLS services in form of +# :. If the port number is omitted, then the default port +# number 5349 for the TLS/DTLS protocols will be used. See the previous +# option for the functionality description. +# +# Examples: +#tls-alternate-server=1.2.3.4:5678 +#tls-alternate-server=11.22.33.44:56789 +#tls-alternate-server=[2001:db8:85a3:8d3:1319:8a2e:370:7348]:3478 + +# Option to suppress TURN functionality, only STUN requests will be processed. +# Run as STUN server only, all TURN requests will be ignored. +# By default, this option is NOT set. +# +#stun-only + +# Option to suppress STUN functionality, only TURN requests will be processed. +# Run as TURN server only, all STUN requests will be ignored. +# By default, this option is NOT set. +# +#no-stun + +# This is the timestamp/username separator symbol (character) in TURN REST API. +# The default value is ':'. +# rest-api-separator=: + +# Flag that can be used to allow peers on the loopback addresses (127.x.x.x and ::1). +# This is an extra security measure. +# +# (To avoid any security issue that allowing loopback access may raise, +# the no-loopback-peers option is replaced by allow-loopback-peers.) +# +# Allow it only for testing in a development environment! +# In production it adds a possible security vulnerability, so for security reasons +# it is not allowed using it together with empty cli-password. +# +#allow-loopback-peers + +# Flag that can be used to disallow peers on well-known broadcast addresses (224.0.0.0 and above, and FFXX:*). +# This is an extra security measure. +# +#no-multicast-peers + +# Option to set the max time, in seconds, allowed for full allocation establishment. +# Default is 60 seconds. +# +#max-allocate-timeout=60 + +# Option to allow or ban specific ip addresses or ranges of ip addresses. +# If an ip address is specified as both allowed and denied, then the ip address is +# considered to be allowed. This is useful when you wish to ban a range of ip +# addresses, except for a few specific ips within that range. +# +# This can be used when you do not want users of the turn server to be able to access +# machines reachable by the turn server, but would otherwise be unreachable from the +# internet (e.g. when the turn server is sitting behind a NAT) +# +# Examples: +# denied-peer-ip=83.166.64.0-83.166.95.255 +# allowed-peer-ip=83.166.68.45 + +# File name to store the pid of the process. +# Default is /var/run/turnserver.pid (if superuser account is used) or +# /var/tmp/turnserver.pid . +# +#pidfile="/var/run/turnserver.pid" + +# Require authentication of the STUN Binding request. +# By default, the clients are allowed anonymous access to the STUN Binding functionality. +# +#secure-stun + +# Mobility with ICE (MICE) specs support. +# +#mobility + +# Allocate Address Family according +# If enabled then TURN server allocates address family according the TURN +# Client <=> Server communication address family. +# (By default coTURN works according RFC 6156.) +# !!Warning: Enabling this option breaks RFC6156 section-4.2 (violates use default IPv4)!! +# +#keep-address-family + + +# User name to run the process. After the initialization, the turnserver process +# will make an attempt to change the current user ID to that user. +# +#proc-user= + +# Group name to run the process. After the initialization, the turnserver process +# will make an attempt to change the current group ID to that group. +# +#proc-group= + +# Turn OFF the CLI support. +# By default it is always ON. +# See also options cli-ip and cli-port. +# +#no-cli + +#Local system IP address to be used for CLI server endpoint. Default value +# is 127.0.0.1. +# +#cli-ip=127.0.0.1 + +# CLI server port. Default is 5766. +# +#cli-port=5766 + +# CLI access password. Default is empty (no password). +# For the security reasons, it is recommended to use the encrypted +# for of the password (see the -P command in the turnadmin utility). +# +# Secure form for password 'qwerty': +# +#cli-password=$5$79a316b350311570$81df9cfb9af7f5e5a76eada31e7097b663a0670f99a3c07ded3f1c8e59c5658a +# +# Or unsecure form for the same password: +# +#cli-password=qwerty + +# Enable Web-admin support on https. By default it is Disabled. +# If it is enabled it also enables a http a simple static banner page +# with a small reminder that the admin page is available only on https. +# +#web-admin + +# Local system IP address to be used for Web-admin server endpoint. Default value is 127.0.0.1. +# +#web-admin-ip=127.0.0.1 + +# Web-admin server port. Default is 8080. +# +#web-admin-port=8080 + +# Web-admin server listen on STUN/TURN worker threads +# By default it is disabled for security resons! (Not recommended in any production environment!) +# +#web-admin-listen-on-workers + +# Server relay. NON-STANDARD AND DANGEROUS OPTION. +# Only for those applications when we want to run +# server applications on the relay endpoints. +# This option eliminates the IP permissions check on +# the packets incoming to the relay endpoints. +# +#server-relay + +# Maximum number of output sessions in ps CLI command. +# This value can be changed on-the-fly in CLI. The default value is 256. +# +#cli-max-output-sessions + +# Set network engine type for the process (for internal purposes). +# +#ne=[1|2|3] + +# Do not allow an TLS/DTLS version of protocol +# +#no-tlsv1 +#no-tlsv1_1 +#no-tlsv1_2 +static-auth-secret=def6d444734d380d2f67a9d345b1debf985eaba0973c343e392c060d97c30106 diff --git a/server-backup/scheme/shineup.me/docs/RESTORE.md b/server-backup/scheme/shineup.me/docs/RESTORE.md new file mode 100644 index 0000000..0061343 --- /dev/null +++ b/server-backup/scheme/shineup.me/docs/RESTORE.md @@ -0,0 +1,62 @@ +# Восстановление shineup.me на новый VPS + +## 1. Подготовка сервера +- ОС: Ubuntu (рекомендуется близкая версия к текущей). +- Пользователь: `player` с sudo. +- DNS пока не переключать. + +## 2. Установка базовых пакетов +```bash +sudo apt update +sudo apt install -y rsync caddy coturn docker.io +``` + +## 3. Восстановление файлов из полного бэкапа +Предполагается, что полный бэкап лежит локально в `server-backup/archive/YYYY-MM-DD/`. + +```bash +rsync -a server-backup/archive/YYYY-MM-DD/home-player/SHiNE/ player@NEW_SERVER:/home/player/SHiNE/ +rsync -a server-backup/archive/YYYY-MM-DD/home-player/sites/ player@NEW_SERVER:/home/player/sites/ +rsync -a server-backup/archive/YYYY-MM-DD/home-player/gitea/ player@NEW_SERVER:/home/player/gitea/ +rsync -a server-backup/archive/YYYY-MM-DD/home-player/agent-memory/ player@NEW_SERVER:/home/player/agent-memory/ + +rsync -a server-backup/archive/YYYY-MM-DD/etc-system/caddy/ player@NEW_SERVER:/tmp/restore-caddy/ +rsync -a server-backup/archive/YYYY-MM-DD/var-lib/caddy/ player@NEW_SERVER:/tmp/restore-var-lib-caddy/ +rsync -a server-backup/archive/YYYY-MM-DD/etc-system/turnserver.conf player@NEW_SERVER:/tmp/turnserver.conf +rsync -a server-backup/archive/YYYY-MM-DD/etc-system/*.service player@NEW_SERVER:/tmp/ +``` + +Далее на новом сервере: +```bash +sudo rsync -a /tmp/restore-caddy/ /etc/caddy/ +sudo rsync -a /tmp/restore-var-lib-caddy/ /var/lib/caddy/ +sudo cp /tmp/turnserver.conf /etc/turnserver.conf +sudo cp /tmp/*.service /etc/systemd/system/ +sudo systemctl daemon-reload +``` + +## 4. Запуск сервисов +```bash +sudo systemctl enable --now caddy +sudo systemctl enable --now coturn +sudo systemctl enable --now docker +sudo systemctl enable --now shine-server +sudo systemctl enable --now agent-memory +``` + +`SHiNE-promo-solana-devnet.service` не включать: сервис снят с эксплуатации. + +## 5. Проверка +```bash +sudo systemctl status caddy --no-pager +sudo systemctl status shine-server --no-pager +sudo ss -ltnp +``` + +Проверить: +- `https://shineup.me` +- `https://git.shineup.me` +- WebSocket `/ws` + +## 6. Переключение DNS +- После полной проверки поменять A-записи доменов на IP нового VPS. diff --git a/server-backup/scheme/shineup.me/scripts/backup_full.sh b/server-backup/scheme/shineup.me/scripts/backup_full.sh new file mode 100755 index 0000000..ee23605 --- /dev/null +++ b/server-backup/scheme/shineup.me/scripts/backup_full.sh @@ -0,0 +1,55 @@ +#!/usr/bin/env bash +set -euo pipefail + +REMOTE_HOST="${REMOTE_HOST:-player@shineup.me}" +ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/../../.." && pwd)" +TODAY="$(date +%F)" +DEST_NAME="${DEST_NAME:-${TODAY}}" +DEST_DIR="${ROOT_DIR}/archive/${DEST_NAME}" +RSYNC_REMOTE_SUDO=(--rsync-path="sudo -n rsync") + +mkdir -p "${DEST_DIR}" + +echo "[1/4] Создаю структуру бэкапа: ${DEST_DIR}" +mkdir -p "${DEST_DIR}/home-player" "${DEST_DIR}/etc-system" "${DEST_DIR}/var-lib/docker-images" + +echo "[2/4] Копирую основные данные /home/player" +rsync -aH --delete \ + "${RSYNC_REMOTE_SUDO[@]}" \ + --exclude='SHiNE/shine-server/logs/' \ + --exclude='SHiNE/**/.elaira_logs/' \ + --exclude='**/*.log' \ + "${REMOTE_HOST}:/home/player/SHiNE/" "${DEST_DIR}/home-player/SHiNE/" + +rsync -aH --delete "${RSYNC_REMOTE_SUDO[@]}" "${REMOTE_HOST}:/home/player/sites/" "${DEST_DIR}/home-player/sites/" +rsync -aH --delete "${RSYNC_REMOTE_SUDO[@]}" "${REMOTE_HOST}:/home/player/gitea/" "${DEST_DIR}/home-player/gitea/" +rsync -aH --delete "${RSYNC_REMOTE_SUDO[@]}" "${REMOTE_HOST}:/home/player/agent-memory/" "${DEST_DIR}/home-player/agent-memory/" + +echo "[3/4] Копирую системные конфиги" +rsync -aH --delete "${RSYNC_REMOTE_SUDO[@]}" "${REMOTE_HOST}:/etc/caddy/" "${DEST_DIR}/etc-system/caddy/" +rsync -aH --delete "${RSYNC_REMOTE_SUDO[@]}" "${REMOTE_HOST}:/var/lib/caddy/" "${DEST_DIR}/var-lib/caddy/" +rsync -aH "${RSYNC_REMOTE_SUDO[@]}" "${REMOTE_HOST}:/etc/turnserver.conf" "${DEST_DIR}/etc-system/turnserver.conf" +rsync -aH "${RSYNC_REMOTE_SUDO[@]}" "${REMOTE_HOST}:/etc/systemd/system/shine-server.service" "${DEST_DIR}/etc-system/" +rsync -aH "${RSYNC_REMOTE_SUDO[@]}" "${REMOTE_HOST}:/etc/systemd/system/agent-memory.service" "${DEST_DIR}/etc-system/" +ssh "${REMOTE_HOST}" 'sudo -n docker image save gitea/gitea:1.22.6' > "${DEST_DIR}/var-lib/docker-images/gitea_gitea_1.22.6.tar" + +echo "[4/4] Создаю манифест" +{ + echo "backup_date=${TODAY}" + echo "remote_host=${REMOTE_HOST}" + echo "created_at_utc=$(date -u +%Y-%m-%dT%H:%M:%SZ)" + echo + echo "sizes:" + du -sh "${DEST_DIR}/home-player/SHiNE" || true + du -sh "${DEST_DIR}/home-player/sites" || true + du -sh "${DEST_DIR}/home-player/gitea" || true + du -sh "${DEST_DIR}/home-player/agent-memory" || true + du -sh "${DEST_DIR}/etc-system" || true + du -sh "${DEST_DIR}/var-lib/caddy" || true + du -sh "${DEST_DIR}/var-lib/docker-images" || true + echo + echo "total:" + du -sh "${DEST_DIR}" || true +} > "${DEST_DIR}/MANIFEST.txt" + +echo "Готово: ${DEST_DIR}" diff --git a/server-backup/scheme/shineup.me/scripts/refresh_scheme.sh b/server-backup/scheme/shineup.me/scripts/refresh_scheme.sh new file mode 100755 index 0000000..23ecdf5 --- /dev/null +++ b/server-backup/scheme/shineup.me/scripts/refresh_scheme.sh @@ -0,0 +1,29 @@ +#!/usr/bin/env bash +set -euo pipefail + +REMOTE_HOST="${REMOTE_HOST:-player@shineup.me}" +SCHEME_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" +CAP_DIR="${SCHEME_DIR}/captures" +CFG_DIR="${SCHEME_DIR}/configs" + +mkdir -p "${CAP_DIR}" "${CFG_DIR}/systemd" + +echo "[1/3] Обновляю инвентарь" +ssh "${REMOTE_HOST}" 'hostnamectl --static; echo ---; uname -a; echo ---; df -h; echo ---; lsblk -f' > "${CAP_DIR}/01_host_disk.txt" +ssh "${REMOTE_HOST}" 'systemctl list-unit-files --type=service --state=enabled --no-pager' > "${CAP_DIR}/02_enabled_services.txt" +ssh "${REMOTE_HOST}" 'sudo -n systemctl list-units --type=service --state=running --no-pager' > "${CAP_DIR}/03_running_services.txt" +ssh "${REMOTE_HOST}" 'sudo -n ss -ltnp' > "${CAP_DIR}/04_listen_ports.txt" +ssh "${REMOTE_HOST}" 'sudo -n docker ps -a --format "table {{.Names}}\t{{.Image}}\t{{.Status}}\t{{.Ports}}"' > "${CAP_DIR}/05_docker_ps.txt" +ssh "${REMOTE_HOST}" 'du -sh /home/player/* 2>/dev/null | sort -h' > "${CAP_DIR}/06_home_player_sizes.txt" +ssh "${REMOTE_HOST}" 'sudo -n du -xhd1 /var 2>/dev/null | sort -h' > "${CAP_DIR}/07_var_sizes.txt" + +echo "[2/3] Обновляю ключевые конфиги" +rsync -a "${REMOTE_HOST}:/home/player/SHiNE/caddy/Caddyfile" "${CFG_DIR}/Caddyfile" +rsync -a "${REMOTE_HOST}:/etc/turnserver.conf" "${CFG_DIR}/turnserver.conf" +rsync -a "${REMOTE_HOST}:/etc/systemd/system/shine-server.service" "${CFG_DIR}/systemd/" +rsync -a "${REMOTE_HOST}:/etc/systemd/system/agent-memory.service" "${CFG_DIR}/systemd/" + +echo "[3/3] Метка обновления" +date -u +%Y-%m-%dT%H:%M:%SZ > "${CAP_DIR}/UPDATED_AT_UTC.txt" + +echo "Готово: ${SCHEME_DIR}"