Skip to content

Forgejo Installation mit Restic nach Hetzner S3 sichern

Restic
  • Ich sichere schon jahrelang alle meine Daten mit Restic, gerne auch ins Internet oder neumodisch Cloud genannt. Besser ausgedrückt, auf die Rechner anderer Menschen.

    Warum ist das wichtig?

    Die könnten mitlesen, was da liegt. Also verschlüsseln wir das Ganze. Restic macht das mit einer AES256 Verschlüsselung. Im Netz sieht das dann auf einem Object Storage von Hetzner so aus.

    47bc51e4-29ae-4e56-82e7-e0cb30a5be12-image.png

    Ich nehme für jeden Sicherungspunkt ein neues Projekt bei Hetzner, der Grund ist, dass ich nicht in verschiedene Unterordner mit entsprechenden Schlüsseln speichern kann. Zu mindestens hatte ich das mal nicht hinbekommen. Ein Wochenende mit verplempert. OK, also 1 Projekt je Backup-Vorgang. Das könnte man im Falle des Forgejos Servers auch nur mit einem Projekt machen. Warum? Wenn die Schlüssel in die falschen Hände fallen, wären ja beide Schlüssel weg. Ok, dann hätten man aber sowieso ein anderes Problem.

    Aber, alle meine anderen Sicherungen, wären nicht gefährdet.

    Was muss man sichern? Die Grundlage ist mein Forgejo Podman Projekt.

    Ok, fangen wir mal langsam an 😉

    Hetzner S3

    Ihr legt dort bitte zwei Projekte an.

    6cca1074-ad23-4cab-83c6-9ee9d8a6cd46-image.png

    Innerhalb der Projekte legt ihr dann ein Bucket an. Für dieses Projekte legt ihr Zugangsdaten an und notiert die bitte. Die brauchen wir später noch.

    Forgejo Server

    Für die Forgejo Installation muss man zwei Ordner sichern. In meinem Fall

    • /home/forgejo
    • /home/pguser/db-data

    Was brauchen wir dafür?

    • AWS Credentials File
    • Restic Passwörter
    • Restic Backup Script

    Software

    Restic installieren

    apt install restic
    

    AWS Credentials

    Wir legen ein File an

    mkdir /root/.aws
    nano /root/.aws/credentials
    

    Inhalt

    [forgejo]
    aws_default_region="nbg1"
    aws_access_key_id="<ACCESS_KEY>"
    aws_secret_access_key="<SECRET_ACCESS_KEY"
    
    [postgres]
    aws_default_region="nbg1"
    aws_access_key_id="<ACCESS_KEY>"
    aws_secret_access_key="<SECRET_ACCESS_KEY>"
    

    Sollte selbsterklärend sein. Die Keys habt ihr eben aufgeschrieben. Solltet ihr nicht Nürnberg bei Hetzner gewählt haben, müsst ihr die Region entsprechend ändern.

    Restic Passwörter

    Zwei Passwörter anlegen, bitte ordentliche 😉 Hier seht ihr, wo ich die abgelegt habe.

    forgejo_pwd="/root/.forgejo_pwd"
    postgres_pwd="/root/.postgres_pwd"
    

    Restic Backup Script

    Das Script.

    #!/bin/bash
    # Script um mit Restic Daten automatisiert zu sichern!
    # Dient zum Sichern der Forgejo Installation -> Hetzner S3
    
    
    ## S3 Forgejo
    s3_domain="s3:nbg1.your-objectstorage.com"
    s3_folder="forgejo2"
    s3_bucket="forgejo2"
    
    
    ## S3 Postgres
    s3_domain_pg="s3:nbg1.your-objectstorage.com"
    s3_folder_pg="postgres2"
    s3_bucket_pg="postgres2"
    
    
    ## PWD
    forgejo_pwd="/root/.forgejo_pwd"
    postgres_pwd="/root/.postgres_pwd"
    
    
    # Was soll gesichert werden?
    backup_pfad_forgejo="/home/forgejo"
    backup_pfad_postgres="/home/pguser/db-data"
    
       
    # Forgejo Start
    export AWS_PROFILE=forgejo
    #restic -r $s3_domain/$s3_bucket/$s3_folder init > forgejo.log
    #restic --password-file $forgejo_pwd -r $s3_domain/$s3_bucket/$s3_folder ls latest > forgejo.log
    restic --password-file $forgejo_pwd  -r $s3_domain/$s3_bucket/$s3_folder backup $backup_pfad_forgejo > forgejo.log
    restic --password-file $forgejo_pwd -r $s3_domain/$s3_bucket/$s3_folder forget --keep-last 3 --keep-monthly 3 --prune >> forgejo2.log
    # Testen
    restic --password-file $forgejo_pwd -r $s3_domain/$s3_bucket/$s3_folder check --read-data >> forgejo3.log
    
    
    # Postgres Start
    export AWS_PROFILE=postgres
    #restic -r $s3_domain_pg/$s3_bucket_pg/$s3_folder_pg init > postgres.log
    restic --password-file $postgres_pwd -r $s3_domain_pg/$s3_bucket_pg/$s3_folder_pg backup $backup_pfad_postgres > postgres.log
    restic --password-file $postgres_pwd -r $s3_domain_pg/$s3_bucket_pg/$s3_folder_pg forget --keep-last 3 --keep-monthly 3 --prune >> postgres2.log
    # Testen
    restic --password-file $postgres_pwd -r $s3_domain_pg/$s3_bucket_pg/$s3_folder_pg check --read-data >> postgres3.log
    

    Damit es funktioniert

    chmod +x   forgejo_backup.sh
    

    Sollte alles selbsterklärend sein.

    Erläuterungen

    Init

    Ein paar Erklärungen. Wenn ihr das Script das erste Mal nutzt kommentiert bitte alle Restic Zeilen aus, bis auf diese.

    restic -r $s3_domain/$s3_bucket/$s3_folder init > forgejo.log
    

    Hiermit wird das Restic Verzeichnis initialisiert, dazu müsst ihr das Restic Passwort eingeben, was ihr weiter oben angelegt habt. Danach braucht ihr diese Zeile nicht mehr. Wieder auskommentieren. Das bitte für Forgejo & Postgres machen.

    ls latest

    Wenn ihr mal testen wollt, ob was im Repo liegt, könnt ihr das mit dieser Zeile machen.

    restic --password-file $forgejo_pwd -r $s3_domain/$s3_bucket/$s3_folder ls latest > forgejo.log
    

    Backup

    Diese Zeile

    restic --password-file $forgejo_pwd  -r $s3_domain/$s3_bucket/$s3_folder backup $backup_pfad_forgejo > forgejo.log
    

    legt das Backup an.

    Forget

    Diese Zeile löscht alle Daten, die dem Filter nicht entsprechen.

    restic --password-file $forgejo_pwd -r $s3_domain/$s3_bucket/$s3_folder forget --keep-last 3 --keep-monthly 3 --prune >> forgejo2.log
    

    Es werden nur Daten behalten, nach einem eingestellten Wert. Sonst hätten man ja irgendwann ganz viele Daten, das möchte ich nicht.

    Testen

    Und diese Zeile testet das Repo

    restic --password-file $forgejo_pwd -r $s3_domain/$s3_bucket/$s3_folder check --read-data >> forgejo3.log
    

    Fertig. In den Logs könnt ihr nachlesen, was passiert ist. Besonders wichtig bei Fehlern.

    Normalerweise checke ich meine Backups noch zusätzlich mit CheckMK, ob diese auch durchgeführt wurden. Das ist aber ein anderes Thema.

    Crontab

    Und wenn alles funktioniert, legt ihr einen crontab an.

    crontab -e
    

    Inhalt

    # m h  dom mon dow   command
    03 09 * * * "/root/.acme.sh"/acme.sh --cron --home "/root/.acme.sh" --reloadcmd "systemctl restart nginx.service" > /dev/null
    0 3 * * * /root/forgejo_backup.sh
    

    Fertig!

    Viel Spaß

    Links

    Und danke an Restic, ich liebe diese Software 😉

  • Semaphore - Die API

    Verschoben Ansible
    2
    0 Stimmen
    2 Beiträge
    234 Aufrufe
    FrankMF
    Ich hasse schlecht lesbaren Code, scheint man sich bei Python so anzugewöhnen. Habe da nochmal was mit der langen Zeile getestet. stages: - deploy deploy: stage: deploy script: # $SEMAPHORE_API_TOKEN is stored in gitlab Settings/ CI/CD / Variables - >- curl -v XPOST -H 'Content-Type: application/json' -H 'Accept: application/json' -H "Authorization: Bearer $SEMAPHORE_API_TOKEN " -d '{"template_id": 2}' https://<DOMAIN>/api/project/2/tasks only: - master # Specify the branch to trigger the pipeline (adjust as needed) Hier noch was Dr. ChatGPT dazu schreibt [image: 1692643209159-631de9d4-b04d-4043-bfff-c5f2d1b6eea7-grafik.png] Erledigt - läuft Und verstanden habe ich es auch.
  • GoAccess - Visual Web Log Analyzer

    Verschoben Linux
    1
    1
    0 Stimmen
    1 Beiträge
    132 Aufrufe
    Niemand hat geantwortet
  • Bitwarden_RS auf einem Debian Buster 10 Server installieren!

    Angeheftet Linux
    85
    14
    1 Stimmen
    85 Beiträge
    7k Aufrufe
    N
    Immer wieder gerne. Dieses mal gab es richtig etwas zu tun: 13 files changed, 137 insertions(+), 96 deletions(-) Und das nur, damit es überhaupt wieder baut. Danach folgten noch 5 Bugfixing Runden, wobei zwei davon (lediglich) das Packaging betrafen. Ergänzend noch ein Hinweis: Port 3012 für die Websocket Verbindungen ist jetzt offiziell deprecated und wird demnächst vollständig aus Vaultwarden entfernt. Genau jetzt wäre der richtige Zeitpunkt die Apache/Nginx Konfiguration dahingehend anzupassen. Hierfür habe ich neue Templates online gestellt. Apache: https://bitwarden-deb.tech-network.de/Apache-VirtualHost.example.conf Nginx: https://bitwarden-deb.tech-network.de/Nginx-VirtualHost.example.conf Schönen Sonntag!
  • Restic v0.12.0 released

    Restic
    1
    0 Stimmen
    1 Beiträge
    237 Aufrufe
    Niemand hat geantwortet
  • Kopia - HTTP/2 deadlock

    Kopia
    1
    0 Stimmen
    1 Beiträge
    236 Aufrufe
    Niemand hat geantwortet
  • SCP mit IPv6 nutzen

    Linux
    1
    0 Stimmen
    1 Beiträge
    241 Aufrufe
    Niemand hat geantwortet
  • ACER und der UEFI-Booteintrag!

    Linux
    1
    0 Stimmen
    1 Beiträge
    228 Aufrufe
    Niemand hat geantwortet
  • NodeBB - nach Plugin platt

    NodeBB
    1
    0 Stimmen
    1 Beiträge
    615 Aufrufe
    Niemand hat geantwortet