πΎ ΠΠ΅ΠΊΠ°ΠΏΡ (Π΄Π΅ΠΌΠΎΠ½) β
π ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ β
ΠΡΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠΉ ΠΌΠΎΠ΄ΡΠ»Ρ Π±Π΅ΠΊΠ°ΠΏΠΎΠ² Π½Π° Π½ΠΎΠ΄Π΅: ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅, Π²ΠΎΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΠΈ ΡΠΎΡΠ°ΡΠΈΡ Π±Π΅ΠΊΠ°ΠΏΠΎΠ² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. ΠΠΎΠ»ΠΈΡΠΈΠΊΠΈ ΠΈ ΡΠ°ΡΠΏΠΈΡΠ°Π½ΠΈΡ ΠΌΠΎΠΆΠ΅Ρ Π·Π°Π΄Π°Π²Π°ΡΡ ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ° (πΎ features/backups), Π½ΠΎ ΠΌΠΎΠ΄ΡΠ»Ρ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΠΈ Π°Π²ΡΠΎΠ½ΠΎΠΌΠ½ΠΎ ΡΠ΅ΡΠ΅Π· CLI (asc backup ...) β Π°ΠΊΠΊΠ°ΡΠ½Ρ ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ Π½Π΅ Π½ΡΠΆΠ΅Π½.
π― Π‘ΡΠ΅Π½Π°ΡΠΈΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ β
asc backup create <app>β Π±Π΅ΠΊΠ°ΠΏ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π² Π½Π°ΡΡΡΠΎΠ΅Π½Π½ΡΠ΅ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ° (ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡlocal), Π»ΠΈΠ±ΠΎ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠ΅ β--storage <ΠΈΠΌΡ>(ΠΌΠΎΠΆΠ½ΠΎ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ°Π·).asc backup restore <app> <backup-id>β Π²ΠΎΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅; ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ ΠΎΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΎ (Π΄Π΅ΡΡΡΡΠΊΡΠΈΠ²Π½ΠΎ: Π·Π°ΠΌΠ΅Π½ΡΠ΅Ρ repository, config ΠΈ data).asc backup list <app> [--storage <ΠΈΠΌΡ>]β Π±Π΅ΠΊΠ°ΠΏΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π½Π° ΠΎΠ΄Π½ΠΎΠΌ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅, ΠΎΡ ΡΡΠ°ΡΡΡ ΠΊ Π½ΠΎΠ²ΡΠΌ.asc backup prune <app> --keep <n> [--storage <ΠΈΠΌΡ>]β Π²ΡΡΡΠ½ΡΡ ΡΠ΄Π°Π»ΠΈΡΡ ΡΡΠ°ΡΡΠ΅ Π±Π΅ΠΊΠ°ΠΏΡ ΡΠ²Π΅ΡΡn(ΡΠΎΡΠ°ΡΠΈΡ ΡΠ°ΠΊΠΆΠ΅ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΠΏΠΎΡΠ»Π΅ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎcreateβ ΠΏΠΎ Π½Π°ΡΡΡΠΎΠΉΠΊΠ΅keepΡΠ°ΠΌΠΎΠ³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ).asc backup storage add|list|removeβ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠ΅ΠΌ, ΠΊΡΠ΄Π° ΠΈΠ΄ΡΡ Π±Π΅ΠΊΠ°ΠΏΡ;asc app settings <app>(ΠΊΠ°ΡΠ΅Π³ΠΎΡΠΈΡbackups) β Π² ΠΊΠ°ΠΊΠΈΠ΅ ΠΈΠ· ΡΡΠΈΡ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡ Π±Π΅ΠΊΠ°ΠΏΠΈΡΡΡ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΊΠΎΠΏΠΈΠΉ Ρ ΡΠ°Π½ΠΈΡΡ ΠΈ Ρ ΠΊΠ°ΠΊΠΎΠΉ ΠΏΠ΅ΡΠΈΠΎΠ΄ΠΈΡΠ½ΠΎΡΡΡΡ (ΡΠ°ΡΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅Ρ Π΄Π΅ΠΌΠΎΠ½, ΡΠΌ. β° scheduler).
ποΈ Π’Π΅Ρ Π½ΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ β
Π§ΡΠΎ Π²Ρ ΠΎΠ΄ΠΈΡ Π² Π±Π΅ΠΊΠ°ΠΏ β
ΠΡΡ
ΠΈΠ² (tar.gz) ΠΏΠΎΠ΄ΠΊΠ°ΡΠ°Π»ΠΎΠ³ΠΎΠ² repository/, config/ ΠΈ data/ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ β Π²ΡΡ, ΠΊΡΠΎΠΌΠ΅ meta.json (ΠΎΠ½ ΠΏΠ΅ΡΠ΅ΡΠΎΠ·Π΄Π°ΡΡΡΡ ΠΏΡΠΈ Π²ΠΎΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΈ, ΠΊΠ°ΠΊ ΠΈ ΠΏΡΠΈ 𧬠клониΡΠΎΠ²Π°Π½ΠΈΠΈ). asc.backup.yaml Π² ΠΊΠΎΡΠ½Π΅ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ ΠΏΠ°ΠΊΠ΅ΡΠ° ΠΈΡΠΊΠ»ΡΡΠ°Π΅Ρ ΠΏΡΡΠΈ ΠΈΠ· Π°ΡΡ
ΠΈΠ²Π°:
exclude:
- data/cache/**
- repository/vendorΠΠ°ΡΡΠ΅ΡΠ½Ρ β ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ * (Π»ΡΠ±Π°Ρ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ² Π² ΠΏΡΠ΅Π΄Π΅Π»Π°Ρ
ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠ΅Π³ΠΌΠ΅Π½ΡΠ° ΠΏΡΡΠΈ), ** (Π»ΡΠ±Π°Ρ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡ, Π²ΠΊΠ»ΡΡΠ°Ρ /) ΠΈ ? (ΠΎΠ΄ΠΈΠ½ ΡΠΈΠΌΠ²ΠΎΠ»); ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π° ΠΈΡΠΊΠ»ΡΡΠ°Π΅Ρ ΠΈ Π²ΡΡ, ΡΡΠΎ Π²Π½ΡΡΡΠΈ β ΠΊΠ°ΠΊ Π² .gitignore. Π€Π°ΠΉΠ»ΠΎΠ²ΡΠΉ Π±Π΅ΠΊΠ°ΠΏ Π½Π΅ Π·Π°ΠΌΠ΅Π½ΡΠ΅Ρ ΠΊΠΎΠ½ΡΠΈΡΡΠ΅Π½ΡΠ½ΠΎΡΡΡ Π½Π° ΡΡΠΎΠ²Π½Π΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π΄Π°ΠΌΠΏ ΠΠ) β pre/post-Ρ
ΡΠΊΠΈ Π±Π΅ΠΊΠ°ΠΏΠ° β Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ·Π΄Π½ΠΈΠΉ ΠΈΠ½ΠΊΡΠ΅ΠΌΠ΅Π½Ρ.
ΠΡΠ±ΠΎΡ ΡΠ°ΠΉΠ»ΠΎΠ² Π΄Π»Ρ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π±Π΅ΠΊΠ°ΠΏΠ° (DMN-118). CreateBackupRequest (REST: POST /v1/apps/{id}/backups) ΠΈ Π·Π°Π΄Π°ΡΠ° ΡΠ°ΡΠΏΠΈΡΠ°Π½ΠΈΡ ScheduleBackupJob ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ Π½Π΅ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΡΠ΅ ΡΠΏΠΈΡΠΊΠΈ include ΠΈ exclude Π² ΡΠΎΠΌ ΠΆΠ΅ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅. ΠΠ΅ΠΏΡΡΡΠΎΠΉ include ΡΡΠΆΠ°Π΅Ρ Π°ΡΡ
ΠΈΠ² Π΄ΠΎ ΡΠΎΠ²ΠΏΠ°Π²ΡΠΈΡ
ΡΠ°ΠΉΠ»ΠΎΠ² (ΡΠ°Π±Π»ΠΎΠ½ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π° Π±Π΅ΡΡΡ Π²ΡΡ Π²Π½ΡΡΡΠΈ; ΠΊΠ°ΡΠ°Π»ΠΎΠ³ΠΈ Π²ΡΡ ΡΠ°Π²Π½ΠΎ ΠΎΠ±Ρ
ΠΎΠ΄ΡΡΡΡ, ΠΏΠΎΡΡΠΎΠΌΡ **/*.db Π½Π°Ρ
ΠΎΠ΄ΠΈΡ ΡΠ°ΠΉΠ»Ρ Π½Π° Π»ΡΠ±ΠΎΠΉ Π³Π»ΡΠ±ΠΈΠ½Π΅); exclude ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΡΡΡ ΠΏΠΎΠ²Π΅ΡΡ
Π½Π΅Π³ΠΎ ΠΈ ΠΏΠΎΠ²Π΅ΡΡ
asc.backup.yaml β ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π²ΡΠ΅Π³Π΄Π° ΡΠΈΠ»ΡΠ½Π΅Π΅. Π¨Π°Π±Π»ΠΎΠ½Ρ ΠΎΠ±ΡΠ΅Π·Π°ΡΡΡΡ ΠΏΠΎ ΠΊΡΠ°ΡΠΌ, Π·Π°Π²Π΅ΡΡΠ°ΡΡΠΈΠΉ / ΠΎΡΠ±ΡΠ°ΡΡΠ²Π°Π΅ΡΡΡ; Π°Π±ΡΠΎΠ»ΡΡΠ½ΡΠ΅ ΠΏΡΡΠΈ, ΡΠ΅Π³ΠΌΠ΅Π½ΡΡ .. ΠΈ ΠΎΠ±ΡΠ°ΡΠ½ΡΠ΅ ΡΠ»Π΅ΡΠΈ ΠΎΡΠΊΠ»ΠΎΠ½ΡΡΡΡΡ Ρ InvalidArgument, Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΡΠΏΠΈΡΠΊΠ΅ β Π½Π΅ Π±ΠΎΠ»ΡΡΠ΅ 64 ΡΠ°Π±Π»ΠΎΠ½ΠΎΠ². ΠΠ΅ΠΌΠΎΠ½, ΠΊΠΎΡΠΎΡΡΠΉ Π½Π΅ Π·Π½Π°Π΅Ρ ΡΡΠΈΡ
ΠΏΠΎΠ»Π΅ΠΉ, ΠΈΠ³Π½ΠΎΡΠΈΡΡΠ΅Ρ ΠΈΡ
ΠΈ Π±Π΅ΠΊΠ°ΠΏΠΈΡ Π²ΡΡ.
Π₯ΡΠ°Π½ΠΈΠ»ΠΈΡΠ° (ΡΡΠ΅ΠΉΡ BackupStorage, src/daemon/backup/storage.rs) β
localβ Π²ΡΠ΅Π³Π΄Π° Π΄ΠΎΡΡΡΠΏΠ½ΠΎ, Π±Π΅Π· Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ: ΠΎΠ±ΡΡΠ½ΡΠΉ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ (<data_dir>/backups, ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ/var/lib/asc/backups). ΠΠ΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΡΠΉ ΡΠΈΠΏ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ°, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ΅Π³ΠΎΠ΄Π½Ρ ΡΠ΅Π°Π»ΡΠ½ΠΎ ΡΡΠΎ-ΡΠΎ ΠΏΠ΅ΡΠ΅Π½ΠΎΡΠΈΡ.s3β S3-ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΠ΅ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ (AWS S3, MinIO, Backblaze B2, Wasabi, Yandex Object Storageβ¦), DMN-115:asc backup storage add <ΠΈΠΌΡ> --type s3 --bucket β¦ --region β¦ [--endpoint β¦] --access-key β¦ --secret-key β¦ [--prefix β¦]. ΠΠ°ΡΡΠΎΡΡΠΈΠΉ ΠΏΠ΅ΡΠ΅Π½ΠΎΡ (src/daemon/backup/s3.rs): ΠΏΠΎΠ΄ΠΏΠΈΡΡ Signature V4 Π²ΡΡΡΠ½ΡΡ (HMAC-SHA256 ΠΏΠΎΠ²Π΅ΡΡ ΡΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΠΎΠ³ΠΎsha2), Π±Π»ΠΎΠΊΠΈΡΡΡΡΠΈΠΉ HTTPS-ΠΊΠ»ΠΈΠ΅Π½ΡureqΠ½Π° ΡΠΎΠΌ ΠΆΠ΅ rustls/ring, ΡΡΠΎ ΠΈ API Π΄Π΅ΠΌΠΎΠ½Π°. ΠΡΡ ΠΈΠ²Ρ Π΄ΠΎ 64 ΠΠΈΠ β ΠΎΠ΄Π½ΠΈΠΌPUT, ΠΊΡΡΠΏΠ½Π΅Π΅ β multipart (ΡΠ°ΡΡΠΈ ΠΎΡ 16 ΠΠΈΠ, ΠΏΡΠΈ ΡΠ±ΠΎΠ΅ Π½Π΅Π·Π°Π²Π΅ΡΡΡΠ½Π½Π°Ρ Π·Π°Π³ΡΡΠ·ΠΊΠ° ΠΎΡΠΌΠ΅Π½ΡΠ΅ΡΡΡ); ΡΠ΅Π»ΠΎ Π·Π°Π³ΡΡΠ·ΠΊΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡΡΡ ΠΊΠ°ΠΊUNSIGNED-PAYLOAD(Π°ΡΡ ΠΈΠ² Π½Π΅ ΡΠΈΡΠ°Π΅ΡΡΡ Π΄Π²Π°ΠΆΠ΄Ρ), ΠΎΡΡΠ°Π»ΡΠ½ΡΠ΅ Π·Π°ΠΏΡΠΎΡΡ ΠΏΠΎΠ΄ΠΏΠΈΡΡΠ²Π°ΡΡ Ρ Π΅Ρ ΡΠ΅Π»Π°. ΠΠ΄ΡΠ΅ΡΠ°ΡΠΈΡ β virtual-hosted Π΄Π»Ρ AWS, path-style Π΄Π»Ρ ΠΎΡΡΠ°Π»ΡΠ½ΡΡ (ΡΠΎΡ ΠΆΠ΅ Π²ΡΠ±ΠΎΡ, ΡΡΠΎ Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ); Π»ΠΈΡΡΠΈΠ½Π³ βListObjectsV2Ρ ΠΏΠ°Π³ΠΈΠ½Π°ΡΠΈΠ΅ΠΉ, Π² Π²ΡΠ΄Π°ΡΡ ΠΏΠΎΠΏΠ°Π΄Π°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π°ΡΡ ΠΈΠ²Ρ ΡΠΎΠ²Π½ΠΎ ΡΡΠΎΠ³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ (demoΠ½Π΅ ΠΏΠΎΠ΄Ρ Π²Π°ΡΡΠ²Π°Π΅Ρdemo-2). ΠΡΠΈΠ±ΠΊΠΈ Π½Π΅ΡΡΡ ΠΊΠΎΠ΄ S3 (SignatureDoesNotMatch,NoSuchBucketβ¦), Π½ΠΎ Π½ΠΈΠΊΠΎΠ³Π΄Π° β ΡΠ΅ΠΊΠ²ΠΈΠ·ΠΈΡΡ.ftp/sftpβ Π½Π°ΡΡΡΠ°ΠΈΠ²Π°ΡΡΡΡ ΡΠ°ΠΊ ΠΆΠ΅ (ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ Ρ ΡΠ°Π½ΡΡΡΡ ΠΊΠ°ΠΊ ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠΈ ΡΠ΅Π΅ΡΡΡΠ° β ΡΠΈΡΡΠ΅ΠΌΠ½ΡΠΉ ΡΠΏΠΈΡΠΎΠΊ/etc/asc/backup-storages.toml, ΡΠΏΡΠ°Π²Π»ΡΠ΅ΡΡΡ root ΠΈ Π²ΠΈΠ΄Π΅Π½ Π²ΡΠ΅ΠΌ, ΠΏΠ»ΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠΉ~/.config/asc/backup-storages.toml; ΡΠ°ΠΉΠ» 0600, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΡΡΡΡΠ½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅), Π½ΠΎ ΠΏΠ΅ΡΠ΅Π½ΠΎΡ ΠΏΠΎΠΊΠ° Π½Π΅ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ β Π»ΡΠ±Π°Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΏΠΎΠ½ΡΡΠ½ΡΡ ΠΎΡΠΈΠ±ΠΊΡ Β«Π½Π΅ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ΠΎΒ».managed_byΡ Π·Π°ΠΏΠΈΡΠΈ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ°: ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ° ΠΊΠ»Π°Π΄ΡΡ ΡΠ²ΠΎΠΈ S3-Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ° ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΠΈ ΠΊΠ°ΠΊplatform-<id>Ρmanaged_by = "platform"(ΠΏΡΠ΅ΡΠΈΠΊΡ ΠΊΠ»ΡΡΠ΅ΠΉ<path_prefix>/asc-backups/<id Π½ΠΎΠ΄Ρ>) ΠΈ ΠΌΠΎΠΆΠ΅Ρ ΠΈΡ ΠΎΠ±Π½ΠΎΠ²Π»ΡΡΡ; Π·Π°ΠΏΠΈΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ° ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ° Π½Π΅ Π·Π°ΠΌΠ΅Π½ΠΈΡ, ΠΈ Π½Π°ΠΎΠ±ΠΎΡΠΎΡ.- ΠΠΌΡ Π½Π°ΡΡΡΠΎΠ΅Π½Π½ΠΎΠ³ΠΎ Ρ
ΡΠ°Π½ΠΈΠ»ΠΈΡΠ° Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ
local(Π·Π°ΡΠ΅Π·Π΅ΡΠ²ΠΈΡΠΎΠ²Π°Π½ΠΎ), ΠΎΠ±ΡΡΠ½ΡΠΉ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π·Π°ΡΠ΅Π½ΠΈΡΡ ΠΈΠ»ΠΈ ΡΠ΄Π°Π»ΠΈΡΡ ΡΠΈΡΡΠ΅ΠΌΠ½ΠΎΠ΅ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ β ΡΠ΅ ΠΆΠ΅ ΠΏΡΠ°Π²ΠΈΠ»Π°, ΡΡΠΎ ΠΈ Ρ π¦ ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠΎΠ² ΡΠ΅Π΅ΡΡΡΠ°.
ΠΠΎΠ»ΠΈΡΠΈΠΊΠ° Π±Π΅ΠΊΠ°ΠΏΠΎΠ² (asc app settings β backups) β
Π₯ΡΠ°Π½ΠΈΡΡΡ ΠΏΠΎΠ΄ Π·Π°ΡΠ΅Π·Π΅ΡΠ²ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌ ΠΊΠ»ΡΡΠΎΠΌ $backup Π² config/settings.json, ΡΡΠ΄ΠΎΠΌ Ρ $quota/$start_command (ΡΠ° ΠΆΠ΅ ΠΊΠΎΠ½Π²Π΅Π½ΡΠΈΡ, DMN-017/030): storages (ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π΅Π½Π½ΡΠΉ Π²ΡΠ±ΠΎΡ, ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ ΠΏΠΎ Π½ΠΎΠΌΠ΅ΡΡ Π² ΡΠ΅Π΄Π°ΠΊΡΠΎΡΠ΅), keep (ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΊΠΎΠΏΠΈΠΉ Ρ
ΡΠ°Π½ΠΈΡΡ Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ Ρ
ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ β ΠΎΠ±ΡΠ΅Π·Π°Π΅ΡΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΡΡΠ°Π·Ρ ΠΏΠΎΡΠ»Π΅ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ create), schedule (daily@HH:MM, ΠΏΡΠΎΡΡΠΎ HH:MM ΠΈΠ»ΠΈ cron-Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΠΈΠ· ΠΏΡΡΠΈ ΠΏΠΎΠ»Π΅ΠΉ ΠΌΠΈΠ½ ΡΠ°Ρ Π΄Π΅Π½Ρ ΠΌΠ΅ΡΡΡ Π΄Π΅Π½Ρ_Π½Π΅Π΄Π΅Π»ΠΈ; ΡΠ΅Π΄Π°ΠΊΡΠΎΡ ΠΏΡΠΎΠ²Π΅ΡΡΠ΅Ρ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ). schedule ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ ΠΏΠ»Π°Π½ΠΈΡΠΎΠ²ΡΠΈΠΊΠΎΠΌ Π΄Π΅ΠΌΠΎΠ½Π° (β° scheduler, DMN-012): ΡΠ°Π· Π² ΠΌΠΈΠ½ΡΡΡ ΠΎΠ½ ΡΠ²Π΅ΡΡΠ΅Ρ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΈ Π²ΡΠ΅Ρ
ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Ρ Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΠΌ Π²ΡΠ΅ΠΌΠ΅Π½Π΅ΠΌ Π½ΠΎΠ΄Ρ ΠΈ Π·Π°ΠΏΡΡΠΊΠ°Π΅Ρ ΠΏΠΎΠ΄ΠΎΡΠ΅Π΄ΡΠΈΠ΅ Π±Π΅ΠΊΠ°ΠΏΡ Π² Ρ
ΡΠ°Π½ΠΈΠ»ΠΈΡΠ° ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΈ Ρ Π΅Ρ ΡΠΎΡΠ°ΡΠΈΠ΅ΠΉ keep β Π΄Π΅ΠΌΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ Π·Π°ΠΏΡΡΠ΅Π½ (asc service install ΠΈΠ»ΠΈ asc serve). asc backup create <app> Π±Π΅Π· --storage ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ Ρ
ΡΠ°Π½ΠΈΠ»ΠΈΡΠ° ΠΈΠ· ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΈ, Π° ΠΏΡΠΈ ΠΏΡΡΡΠΎΠΉ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠ΅ β ΡΠΎΠ»ΡΠΊΠΎ local.
ΠΠΈΡΡΠΈΠ½Π³ ΠΈ API (BackupService, capability backups) β
ΠΠΈΡΡΠΈΠ½Π³ ΠΎΡΠ΄Π°ΡΡ ΠΈΠΌΡ Π°ΡΡ
ΠΈΠ²Π°, Ρ
ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅, ΡΠ°Π·ΠΌΠ΅Ρ ΠΈ Π²ΡΠ΅ΠΌΡ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ (ΠΈΠ· ΠΈΠΌΠ΅Π½ΠΈ <app>-<unix-ts>.tar.gz); asc backup list ΠΏΠ΅ΡΠ°ΡΠ°Π΅Ρ ΠΈΠΌΡ ΠΈ ΡΠ°Π·ΠΌΠ΅Ρ. ΠΠ΅ΠΊΠ°ΠΏ Π² Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Ρ
ΡΠ°Π½ΠΈΠ»ΠΈΡ ΡΠΎΠ±ΠΈΡΠ°Π΅Ρ Π°ΡΡ
ΠΈΠ² ΠΎΠ΄ΠΈΠ½ ΡΠ°Π· ΠΈ ΠΎΡΠΏΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΡ ΠΆΠ΅ ΡΠ°ΠΉΠ» Π² ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ β Π²ΡΠ΅ ΠΊΠΎΠΏΠΈΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠ½ΠΈΠΌΠΊΠ°; ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ β ΠΏΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡ Ρ
ΡΠ°Π½ΠΈΠ»ΠΈΡΡ. ΠΠΌΠ΅Π½Π° Π°ΡΡ
ΠΈΠ²ΠΎΠ² Π½Π° Π²ΠΎΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΠΈ ΡΠ΄Π°Π»Π΅Π½ΠΈΠ΅ ΠΏΡΠΎΠ²Π΅ΡΡΡΡΡΡ (validate_backup_name): ΠΏΡΡΡ Ρ / ΠΈΠ»ΠΈ Π°ΡΡ
ΠΈΠ² Π΄ΡΡΠ³ΠΎΠ³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΎΡΠΊΠ»ΠΎΠ½ΡΡΡΡΡ Π΄ΠΎ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΈΠΌΡ ΠΏΠΎΠΏΠ°Π΄ΡΡ Π² ΠΏΡΡΡ ΠΈΠ»ΠΈ ΠΊΠ»ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ°.
API: ListBackupStorages, UpsertBackupStorage (S3 ΠΈΠ»ΠΈ Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΠΉ ΠΊΠ°ΡΠ°Π»ΠΎΠ³, Ρ managed_by), RemoveBackupStorage, ListBackups (ΠΎΠ΄Π½ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ Π²ΡΠ΅, ΠΎΠ΄Π½ΠΎ Ρ
ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ ΠΈΠ»ΠΈ Π²ΡΠ΅; Π½Π΅Π΄ΠΎΡΡΡΠΏΠ½ΠΎΠ΅ Ρ
ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ β Π² errors, Π° Π½Π΅ ΠΎΡΠΈΠ±ΠΊΠ° Π²ΡΠ·ΠΎΠ²Π°), CreateBackup, RestoreBackup (stop_app β ΠΎΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ, Π²ΠΎΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΠΈ Π·Π°ΠΏΡΡΡΠΈΡΡ ΠΎΠ±ΡΠ°ΡΠ½ΠΎ), DeleteBackup. REST-Π·Π΅ΡΠΊΠ°Π»ΠΎ: GET /v1/backups, GET /v1/backups/storages, PUT/DELETE /v1/backups/storages/{name}, POST /v1/apps/{id}/backups, POST /v1/apps/{id}/backups/restore, DELETE /v1/apps/{id}/backups/{storage}/{name} (π api). ΠΡΠΈΠΌ ΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ° (πΎ features/backups).
ΠΠΎΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ β
Π‘ΠΊΠ°ΡΠΈΠ²Π°Π΅Ρ Π°ΡΡ
ΠΈΠ² Π²ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΉ ΡΠ°ΠΉΠ», Π·Π°ΡΠ΅ΠΌ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ Π·Π°ΠΌΠ΅Π½ΡΠ΅Ρ repository/, config/ ΠΈ data/ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ (ΡΠ΄Π°Π»ΡΡΡΡΡ, Π·Π°ΡΠ΅ΠΌ ΡΠ°ΡΠΏΠ°ΠΊΠΎΠ²ΡΠ²Π°ΡΡΡΡ Π·Π°Π½ΠΎΠ²ΠΎ) β ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π² ΡΠΎΡΠ½ΠΎΡΡΠΈ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ Π±Π΅ΠΊΠ°ΠΏΡ, Π° Π½Π΅ ΡΠ»ΠΈΡΠ½ΠΈΡ Ρ ΡΠ΅ΠΌ, ΡΡΠΎ Π±ΡΠ»ΠΎ ΡΠ°Π½ΡΡΠ΅. CLI ΠΎΡΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ Π²ΠΎΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°ΡΡ ΠΏΠΎΠ²Π΅ΡΡ
Π·Π°ΠΏΡΡΠ΅Π½Π½ΠΎΠ³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ.
π Π‘Π²ΡΠ·Π°Π½Π½ΡΠ΅ Π·Π°Π΄Π°ΡΠΈ β
DMN-009, DMN-012, DMN-115, DMN-118, NODE-049, BE-005 Π² ROADMAP.md.