feat: Timeweb S3 offsite backup uploads
- Add vault_s3_access_key / vault_s3_secret_key to Ansible Vault - Expose via s3_access_key / s3_secret_key in all/main.yml - Add s3_endpoint + s3_bucket to backup role defaults - Install awscli via apt in backup role tasks - Extend backup.sh.j2: upload *.gz to S3 after local backup, prune S3 objects older than backup_retention_days Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
parent
a344998405
commit
fc6b1c0cec
5 changed files with 124 additions and 75 deletions
|
|
@ -10,6 +10,7 @@ domain_sync: "sync.{{ domain_base }}"
|
|||
domain_traefik: "traefik.{{ domain_base }}"
|
||||
domain_dashboard: "dashboard.{{ domain_base }}"
|
||||
domain_auth: "auth.{{ domain_base }}"
|
||||
domain_status: "status.{{ domain_base }}"
|
||||
|
||||
# Service paths
|
||||
services_root: /opt/services
|
||||
|
|
@ -34,6 +35,8 @@ authelia_session_secret: "{{ vault_authelia_session_secret }}"
|
|||
authelia_storage_key: "{{ vault_authelia_storage_key }}"
|
||||
authelia_admin_password_hash: "{{ vault_authelia_admin_password_hash }}"
|
||||
crowdsec_bouncer_key: "{{ vault_crowdsec_bouncer_key }}"
|
||||
s3_access_key: "{{ vault_s3_access_key }}"
|
||||
s3_secret_key: "{{ vault_s3_secret_key }}"
|
||||
|
||||
# CI/CD deploy key (public key — not a secret)
|
||||
ci_deploy_pubkey: "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIHdr9mRSSUqt7Ym4wA5RpVyz76wEXSOtVfh2/yCSMIbg ci-deploy@forgejo-runner"
|
||||
|
|
|
|||
|
|
@ -1,76 +1,81 @@
|
|||
$ANSIBLE_VAULT;1.1;AES256
|
||||
61316166393964386231353533353731353730326134323862666166373430346531383435396264
|
||||
3339363034336365363263643165656264333030323036640a313937396562326539633430643931
|
||||
61626330343235646637653065666237626564376130376662366238336135373836613362643963
|
||||
6335393437333362390a393930373132366161333762643535373232613136306664346662366231
|
||||
33643832306638306130653937323863643237346231363432623462313534386162373866663362
|
||||
34313665323632393766626535656239333231396438383833663835623963323530323663323539
|
||||
38373639623235396133373632613337353538666666303538333637333537363162323238376366
|
||||
65393233366162643835316439613262326531373961646336626232626334643331643438663834
|
||||
66386332316561333435313535666161323661663038343464383130663131363130303238626632
|
||||
62383934643539623434333566376463653930353833333433633364383764393732633734633636
|
||||
37646139656634666666613161396631353164363831353366393365643336376330613565353966
|
||||
32363431666534316165366636376164353165333738326230326232386137666366353636633865
|
||||
66623264623730653866663030646431386238633662336162623665356536613832346131316230
|
||||
34353664373930636361383961646334633838366636343335313438663836623761666235383431
|
||||
33373534653930623666323433326636633133336538633166333362353663356264323936623763
|
||||
37396338623962626638346538363565316262646232336266393936323839613533666465663439
|
||||
63343635346333636539373335323831366630356536336262353534643035323765653366656363
|
||||
63393534396135393061653234646362303066386133333736643739373164623034396361363539
|
||||
37326532643064656666363735333535643765643433633131356334393434333939623239343761
|
||||
32383966646435363936346464616233313865303264333331613437396635373336383664326665
|
||||
30366436303264633762336234356431666238353535396234383133353362366465363834643666
|
||||
33653732646264343636646266653138313634346239623764656136303462316364656234623833
|
||||
35313561323464346435656565633036383264373436313164363262643164616436663564643032
|
||||
30646637653036663533663430386134663237333030336430373936323738653030353564313464
|
||||
39393562383735313237366433646431356364363039353539366133333237303532653965666364
|
||||
35393830336533373133366666653765366562336539646131636633326434393164343530633737
|
||||
34626263636163626333373438376137636139643263646336643735316462313361663834613031
|
||||
37396233633831393536313838313964343762383363356238393761646230393334303836633735
|
||||
65666366393932346636396237333166323936613732333036323333343637393931393534323166
|
||||
61626334613035353137303365373365373837616336343838643365616538623538653238363664
|
||||
30356539663763633337393162623764376265646435663064303930643364396439626661666532
|
||||
38306364356463643866336530303430633766336236616135326462353163343637336438373534
|
||||
37616536386131366634633663633566313238366133376131353666663464306463313232626436
|
||||
61306236663332373764303566643332343530366362376134653437356630613937346663323131
|
||||
65376563666434653132383032643830386465363965653530323036623034313764306136366239
|
||||
34666538623232646266666537353033386661333861386564316662386233636265366536386135
|
||||
35653735383231616664366338623264326663353730623461613766613432396233383061383464
|
||||
35376461323233633938646532373663396233396463323565633539353630653934616231636166
|
||||
39633037333963653061386362316662613235646236326666633164336661373963386339633932
|
||||
64616436333637373930373062333463336562303439623937643136323735616231303762373161
|
||||
62666438613038363833626664316435316331373030343738356438323563313565613039326639
|
||||
65386533306132663964386330396566623063633433653439383235373761363037633138376461
|
||||
65323465663137363135336662643432616437323466656666313437333366626234623765643033
|
||||
30633132636235383561373566366465393664663464643965363634323466303433623361613061
|
||||
66623861336537333339636161636564356239636562363166326635646166653933376634626234
|
||||
61643738346263646664356134313138373331343731366532383264613931353030313061636135
|
||||
30343430383630633966393933396238366463373934653130656433633437323137326666633964
|
||||
32626639396165323334393263393961663666623137643834373065383966353835613335636362
|
||||
31646635356233323730393039366162613331393465633139616432353462363165333530373364
|
||||
32343935643933326136383835633232356263343264373437383630313537343138383135613832
|
||||
32383738353435323437336137626231343535633364666663633133353662383139383364373837
|
||||
37386133383135326662383661346639393134313931383637613631343836646663663834336632
|
||||
64383734373362316666343031393764393161613035373863323839383237643863326664656465
|
||||
34306637316466366332666237313064366534323961373166663339333439303365633137386236
|
||||
64313338383037613439626462323737393034303732303537636565353033386365653239326131
|
||||
32326162663766626264653965323134366664386238393564386163613165383661303832633565
|
||||
31306335393439323635653731363931663364613438373130623437376638386364333266643838
|
||||
35303436383839653434316632616163623264326531616439643437663538376333366432666165
|
||||
38363635653864383662346235353561316233656332383031643938613735396635363436313735
|
||||
66396535383030353437626165626432646634613434643830303434643530636566333063323366
|
||||
30663738326562343732376662366566636330346435373838363165643666393764343832656638
|
||||
65666134616265633138376133386438666465666661323631373539666330616638306439636533
|
||||
34346365333462623438333930376133383233373064366336343937616638376163303435313163
|
||||
34303537306532396230383236393731663230393135386133316638343735373666306337376235
|
||||
34616639326432386266373361306537343637356335613136346261316433613464323263646134
|
||||
31326232323738313830353535313363663363393037653631353932613834346133616535666361
|
||||
62353539646331656665323763396662313137366261336139356231646663646564646536373433
|
||||
62646234393737666635626536656636316535343661626364376536633461383530633135396137
|
||||
32343163373265623138333162653231636336373661316530633331346463393365353462336136
|
||||
66336236313765616436646532336164363261656262646135653734376331646665353139613037
|
||||
65323338316139353837623661353134656164613362313632656163643737353435366432666564
|
||||
36303631643331373965616239353762663862636232326234643663383664613666303538316465
|
||||
36323232663263653238393066663839653539343536316461333964316132353531333936663461
|
||||
37326337653930306637333163343431626663633139303263646639313862313365326665376264
|
||||
373039623038653731373939343537376634
|
||||
63316565343636313366333436653062386233326239633136353033363861393962376563373538
|
||||
6537376663323364316532303237666231373665613036370a653633333035336334333937313839
|
||||
34396166613565646561373237636331363039336539656136363031353466643437626535626235
|
||||
3835373662616135660a316533373034626239393465366331633237336238366163633136376561
|
||||
39353333323932366464653363653063643037323861343163386331306337643266353762626665
|
||||
64396366626333356135373161636239653434353939636365336235646533613336343438373939
|
||||
37633037333035346134356664326135646531616266376439303965313432316638336138666161
|
||||
64636234373839356362326363383437616265653934656665386231383662316136363164363631
|
||||
38393163656639343561636334326133646336383733633966316536323933356236616336333465
|
||||
38633365636363363237323232303064353232313030653132393439616462653736346665376165
|
||||
64663139396664363561386536643862653766343066363565336261646338323935663564376261
|
||||
35373833343563373731623136326666636165346564663133363763396231306665393536656566
|
||||
37393431626565396632353931373161326139646537643865336333353462326438666131633636
|
||||
38373463666539346230323437616135353166356331643962633537386364623265616239666235
|
||||
62336337643562363738323133353339326435333262623563383939626463636434346435343862
|
||||
35353366646635383738313561623366363736656465373665663663313632313132316665626635
|
||||
35613134313738653165323536326330336539323964316463636630386637353565366464373861
|
||||
33376364626633653937386137623936626663326638366235313637363561316265346632353633
|
||||
66616334656665663032646663306364303461343163653966633335633039643332343365343630
|
||||
32353837643930306534366233366234656436613730356632393466623636623263353139666664
|
||||
39623835613935666665393235353234343962623531316633343865313331363337326630383932
|
||||
66393263313031346634646335373032633762336462663037656139616531363265666535616135
|
||||
36326234303434663036656638393361656365353837386536363834623134353366316135353864
|
||||
33346338326534323335366331636338623931333561316466343733656333366632326131303536
|
||||
31623662626265323133363635326235363334356537646263643737373661373265306632656538
|
||||
38343061623235336537346463653634333837613162303930376532643539386132326539303336
|
||||
39333166643864633065653834653365666230393633303866653535376339613533313236396537
|
||||
62343136386637623439353061323531646365393733633339353364666633346634363264353166
|
||||
62643432653165373663663561653339643066393361333265376236663132653134373465366364
|
||||
38616364636337383438663737316630346632353635303430356463343066363766363662333632
|
||||
33363633343165663631373064353661666430343266373032373238663466313438313539343139
|
||||
34386131393337346364656632653831626561623763333063366166636439313030316664333861
|
||||
63643033666639393963626234666334663062346530313237333361303161363564346438306263
|
||||
66666365373061306464643836626635323439386565386437646238373064383861353038643335
|
||||
65366165353130613762633231393934346562643739666666353865386537376431336333623936
|
||||
39363563656432333961303033643365663963663239396330306333376634323139383762373736
|
||||
32643630623731356664616336616634353630303731643037313039666339633864323231646530
|
||||
61663735653034656137346635323331616130333761623830393137376665356639363963656465
|
||||
61303434303466626465656432613230396631363434393839366631306466353030306436663139
|
||||
31383461393733666465393733343231313737303833636231636136316530613538623535396230
|
||||
36323463306233393138643333663161636461343436646463346165323333323135666131326435
|
||||
34656161303664626135616134396266376234343139366561303765323530366632393736353762
|
||||
66666639376362366435353639353439663835613463613739643861376666383036326339396537
|
||||
35303161363763326439613834633564646161666135613935383739383838346563643961323864
|
||||
34633031306664643266623262363065303965336337386332613262646464653933343836336230
|
||||
63333934643763383566653762666638643565386264653132313333663130616537346366656463
|
||||
63653730613238663365613132303136353965653433386563393836393737646132666237656333
|
||||
34663330323437653761663235653565363632393332313630316433313436343539663366343638
|
||||
65346534623063343739326166613530633165383266623637653238623133663637626634306337
|
||||
36653937393234353136383933323661306263346466613362363739653733373938633332303132
|
||||
37383562643630323362303733316664386339653166626338316332353131653531646136626362
|
||||
61646263663162313964343939643834363931346462313862633339313866363562613330666163
|
||||
66383835323461663133343333303833333662643331633265343364663238393331383634326338
|
||||
36646337366638346537653533353038633031653134393831323766306261393232343532653139
|
||||
61323139616363356639613664626439613463633564346163636361393339343636353031343165
|
||||
37643264663366633034376534626430393431303133373563623132656239333139363764623430
|
||||
61303161653930363862373265336432656162623437393239613562633363343337393161646333
|
||||
39306338333566646565326631346534613863346236386363313063616462373831646430663738
|
||||
30363865356161313931393130363361313663393238663935373834353564346131373866326237
|
||||
39313939336435613234646230663835393166636463303030336262303337313339653164633436
|
||||
61613931383632623065626161663531336263633263636131393334333337653464323836393266
|
||||
38353437643334303434396463313063663564303431666336653636313338616334373836313161
|
||||
65383061363736663134316432376136633966616533336365616566396635383666666464636564
|
||||
37626465393466623666326565343265346662313938646639613737326534643664386132666336
|
||||
31616561663063663739323862333366313130653239326163616631336464323936383638623464
|
||||
36623963323837393662306436336261323934313664333634326538336334306133346666613139
|
||||
36323735623861316337333666366336626639623933663038666134636136303264356136383231
|
||||
64363262353434663263616536333662383331626130353931323034643336303931383166306139
|
||||
39336662643162363034653737626564653935336561386439653765326631336636663238653934
|
||||
38376162353533343964366232373066326432383362373834303331626161656234326663616135
|
||||
62306661346135343665386535356537383362356232613337666433326537363937383530656261
|
||||
64393662646639356161343439343035376161366632353136616136643230616135346561353932
|
||||
38376462633035666437306636323832623765326366326166323966656635313332313366343832
|
||||
38356666313164356437396638393530326136363465313966326430626662383032376337333438
|
||||
38656536623966656261386139363734393437623531313935323236643733303661393232666463
|
||||
36373933643736393765366131383666336338643465393162376538666663316365366636393532
|
||||
34666234313364656536643530396662663832643437616136376439656562326135366530343833
|
||||
35613066393034616235393462323038663966356130626666653735663938643332336236316238
|
||||
30366536353566393063336137626162303461333332656237646235666533313361626633373931
|
||||
39663862343635333162
|
||||
|
|
|
|||
|
|
@ -2,3 +2,7 @@
|
|||
backup_dir: /opt/backups
|
||||
backup_retention_days: 7
|
||||
backup_user: deploy
|
||||
|
||||
# Timeweb S3 offsite backups
|
||||
s3_endpoint: "https://s3.timeweb.cloud"
|
||||
s3_bucket: "visual-backup"
|
||||
|
|
|
|||
|
|
@ -1,4 +1,9 @@
|
|||
---
|
||||
- name: Install awscli for S3 uploads
|
||||
ansible.builtin.apt:
|
||||
name: awscli
|
||||
state: present
|
||||
|
||||
- name: Create backup directory
|
||||
ansible.builtin.file:
|
||||
path: "{{ backup_dir }}"
|
||||
|
|
|
|||
|
|
@ -42,9 +42,41 @@ docker run --rm \
|
|||
tar czf "/backup/forgejo-data_${DATE}.tar.gz" /data
|
||||
log " → ${BACKUP_DIR}/forgejo-data_${DATE}.tar.gz ($(du -sh "${BACKUP_DIR}/forgejo-data_${DATE}.tar.gz" | cut -f1))"
|
||||
|
||||
# ── Upload to Timeweb S3 ────────────────────────────────────────────────────
|
||||
log "Uploading backups to S3 ({{ s3_bucket }})..."
|
||||
AWS_ACCESS_KEY_ID="{{ s3_access_key }}" \
|
||||
AWS_SECRET_ACCESS_KEY="{{ s3_secret_key }}" \
|
||||
aws s3 sync "${BACKUP_DIR}/" "s3://{{ s3_bucket }}/" \
|
||||
--endpoint-url "{{ s3_endpoint }}" \
|
||||
--exclude "*" --include "*.gz" \
|
||||
--storage-class STANDARD \
|
||||
--no-progress \
|
||||
&& log " → S3 upload complete" \
|
||||
|| log " ⚠ S3 upload failed (local backups still intact)"
|
||||
|
||||
# ── Cleanup old backups ─────────────────────────────────────────────────────
|
||||
log "Removing backups older than ${KEEP_DAYS} days..."
|
||||
find "${BACKUP_DIR}" -name "*.gz" -mtime +${KEEP_DAYS} -delete
|
||||
|
||||
# Remove S3 objects older than KEEP_DAYS as well
|
||||
log "Pruning S3 objects older than ${KEEP_DAYS} days..."
|
||||
CUTOFF=$(date -d "-${KEEP_DAYS} days" +%Y-%m-%dT%H:%M:%S 2>/dev/null || date -v-${KEEP_DAYS}d +%Y-%m-%dT%H:%M:%S)
|
||||
AWS_ACCESS_KEY_ID="{{ s3_access_key }}" \
|
||||
AWS_SECRET_ACCESS_KEY="{{ s3_secret_key }}" \
|
||||
aws s3 ls "s3://{{ s3_bucket }}/" \
|
||||
--endpoint-url "{{ s3_endpoint }}" \
|
||||
| awk '{print $4}' \
|
||||
| while read -r obj; do
|
||||
obj_date=$(echo "$obj" | grep -oP '^\d{4}-\d{2}-\d{2}' || true)
|
||||
if [[ -n "$obj_date" && "$obj_date" < "${CUTOFF:0:10}" ]]; then
|
||||
AWS_ACCESS_KEY_ID="{{ s3_access_key }}" \
|
||||
AWS_SECRET_ACCESS_KEY="{{ s3_secret_key }}" \
|
||||
aws s3 rm "s3://{{ s3_bucket }}/$obj" \
|
||||
--endpoint-url "{{ s3_endpoint }}" \
|
||||
&& log " → Deleted old S3 object: $obj"
|
||||
fi
|
||||
done
|
||||
|
||||
log " → Done. Current backups:"
|
||||
du -sh "${BACKUP_DIR}"/*.gz 2>/dev/null | sort -k2 || true
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue