Skip to content

Redis - Zweite Instanz

Redis
  • Mein Plan stand ja fest, die Redis Datenbank auf einen anderen Server zu legen um beim Updaten von NodeBB nicht mehr so ein großes Risiko einzugehen, die DB mal aus versehen mit einem alten Stand, so wie letztens, zu überschreiben

    Ich nutze zwei NodeBB-Foren, das andere Forum dient mir eigentlich nur zum Testen, da hatte ich die DB schon ausgelagert. Heute war dieses Forum hier an der Reihe.

    Es hat etwas gedauert, bis ich eine funktionierende Konfiguration für den SystemD-Dienst gefunden hatte. Da gab es so einiges im Netz, was nicht funktionierte 😞 Interessanterweise braucht man sich die Arbeit gar nicht machen, das Redis Team hat das schon erledigt. Wenn man das Paket runterlädt und entpackt, findet man im Verzeichnis utils/ Vorlagen 🙂

    Die Vorlage heißt systemd-redis_multiple_servers@.service Ich habe den Namen angepasst.

    /etc/systemd/system/forum.service

    # example systemd template service unit file for multiple redis-servers
    #
    # You can use this file as a blueprint for your actual template service unit
    # file, if you intend to run multiple independent redis-server instances in
    # parallel using systemd's "template unit files" feature. If you do, you will
    # want to choose a better basename for your service unit by renaming this file
    # when copying it.
    #
    # Please take a look at the provided "systemd-redis_server.service" example
    # service unit file, too, if you choose to use this approach at managing
    # multiple redis-server instances via systemd.
    
    [Unit]
    Description=Redis data structure server - instance %i
    Documentation=https://redis.io/documentation
    # This template unit assumes your redis-server configuration file(s)
    # to live at /etc/redis/redis_server_<INSTANCE_NAME>.conf
    AssertPathExists=/etc/redis/redis_server_6380.conf
    #Before=your_application.service another_example_application.service
    #AssertPathExists=/var/lib/redis_forum
    PIDFile=/run/redis/redis-forum.pid
    ReadWritePaths=-/var/lib/redis_forum
    
    [Service]
    ExecStart=/usr/bin/redis-server /etc/redis/redis_server_6380.conf --supervised systemd --daemonize no
    Restart=always
    LimitNOFILE=10032
    NoNewPrivileges=yes
    #OOMScoreAdjust=-900
    #PrivateTmp=yes
    Type=notify
    TimeoutStartSec=infinity
    TimeoutStopSec=infinity
    UMask=0077
    User=redis
    Group=redis
      
    [Install]
    WantedBy=multi-user.target
    

    Damit ließ sich eine zweite Redis Datenbank starten. In der entsprechenden Konfigurationsdatei von Redis stand dann folgendes.

    /redis_server_6380.conf

    bind 10.10.1.100
    port 6380
    

    Die erste Redisdatenbank läuft auf

    bind 10.10.1.100
    port 6379
    

    Denkt bitte immer daran, die Redis Datenbank möglichst nicht ins Internet zu stellen! Passwort nicht vergessen! Möglichst private Adressen nutzen oder entsprechende Tunnel!

    Damit war der Teil erledigt. Noch die Firewall einstellen und gut. Das könnt ihr hier nachlesen.

    Im NodeBB-Forum dann die entsprechende Konfiguration anpassen.

    {
        "url": "https://DOMAIN",
        "port": "4567",
        "secret": "SECRET",
        "database": "redis",
        "redis": {
            "host": "10.10.1.100",
            "port": "6380",
            "password": "Passwort",
            "database": "0"
        }
    }
    

    Das NodeBB-Forum neustarten und fertig! Yeah! 🙂

    Meine beiden Foren laufen jetzt mit externen Redis-Datenbanken und zwar unabhängig. Jedes Forum hat seine eigen Datenbank! Nun kann ich auch mal ohne Datenverlust mal einen Snapshot zurück installieren, oder auch ein etwas älteres Backup, wenn es mal wieder klemmt.

  • FrankMF FrankM hat am auf dieses Thema verwiesen

  • Redis Stack?

    Redis
    1
    0 Stimmen
    1 Beiträge
    56 Aufrufe
    Niemand hat geantwortet
  • Redis - Datenbank Zugriff mit Python

    Redis
    3
    0 Stimmen
    3 Beiträge
    93 Aufrufe
    FrankMF

    Ich bin mit der Lernkurve noch nicht so richtig zufrieden. Eine Frage die sich mir stellte, geht das einfacher? Der Ursprung meiner Datenbank Struktur liegt in einem anderen Projekt, wo ich versucht habe Daten permanent in einem File zu speichern. Dazu hatte ich damals JSON genommen. Deswegen auch diese Zeilen

    self.project = str(db_client.json().get('settings', '$..project')[0]) or self.project

    Gut, ich hatte dann mal ChatGPT gefragt, wie macht man das so 'normalerweise'? es kam eine Klasse heraus, die ich dann intensiv ausprobiert habe, ein wenig umgebaut usw. So lange, bis ich der Meinung war, ok ich habe es verstanden. Jetzt nutzte der Code auch mehr Redis Funktionen, wie

    self.client.hset('settings', name, json.dumps(data))

    Es waren jetzt folgende Funktionen drin

    hset hexists hdel hget

    Dokumentation -> https://redis.io/commands/hset/

    Beim Durchlesen des Codes hatte ich jetzt mehr das Gefühl, so muss das sein 🙂

    In RedisInsight sieht das dann jetzt so aus.

    393195f7-1017-4285-8fca-734ee6b4bff7-grafik.png

    Klasse class PortfolioSettings: def __init__(self, host='172.17.0.2', port=6379, db=0): if args.test_mode == 1: self.client = redis.StrictRedis(host=SERVER_IP, port=port, db=TEST[0]) else: self.client = redis.StrictRedis(host=SERVER_IP, port=port, db=LIVE[0]) def set_settings(self, name, data): """Init settings if db don't exist""" if not self.client.hexists('settings', name): self.client.hset('settings', name, json.dumps(data)) return True return False def edit_setting(self, name, data): """Edit an entry in settings""" if self.client.hexists('settings', name): self.client.hset('settings', name, json.dumps(data)) return True return False def delete_setting(self, name): """Delete an entry in settings""" return self.client.hdel('settings', name) def get_setting(self, name): """Get an entry in settings""" setting = self.client.hget('settings', name) return json.loads(setting) if setting else None def get_all_settings(self): """Get all entries in settings""" settings = self.client.hgetall('settings') return {k.decode(): json.loads(v) for k, v in settings.items()}

    Und hier die Initialisierung

    settings_data = PortfolioSettings() ##################### # Will only be executed if DB is not available! ##################### if not settings_data.get_all_settings(): # Settings initialisieren print("INIT") settings_data.set_settings("project", "Portfolio") settings_data.set_settings("version", "0.0.3") settings_data.set_settings("theme", "dark") settings_data.set_settings("url_list", ["https://www.onvista.de/aktien/Deutsche-Telekom-Aktie-DE0005557508"]) settings_data.set_settings("exchange_list", ['DKB','Smartbroker','BUX'])

    Teile der Klasse sind [KI-generiert]

    Ich war zufrieden und habe die Klasse dann in mein Projekt übernommen und den Code überall entsprechend angepasst.

  • 0 Stimmen
    2 Beiträge
    402 Aufrufe
    FrankMF

    Ok, ich war leider nicht in der Lage den CODE-Server hinter einem Proxy zu installieren. Das CODE-Team scheint Docker zu lieben und das andere nur am Rande zu machen. Ohne Liebe 🙂

    Da ich extrem lange Ladezeiten hatte und die Software insgesamt nicht den Eindruck machte, das man das gerne produktiv auf einem Server nutzen möchte, habe ich den Server eben wieder gelöscht.

    Jetzt fehlt mir leider, die deepl.com Anbindung, aber das kann man ja auch über die Webseite nutzen.

    Ich nutze jetzt wieder den eingebauten CODE-Server, der eigentlich ein App-Image ist.

    28c41010-5ce1-4f7c-89d5-1c9b253011d0-grafik.png

    Der klare Vorteil, es läuft incl. Dokumenten Freigabe 🙂

    Nicht vergessen, unter Allow list for WOPI requests kommen die Server Adressen des Nextcloud-Webservers rein!

    c1a06c2c-86b5-4750-a062-7ba9d8dd8253-grafik.png

  • duf - ein hübsches Kommandozeilen Tool

    Linux
    1
    0 Stimmen
    1 Beiträge
    122 Aufrufe
    Niemand hat geantwortet
  • Vaultwarden - SystemD

    Linux
    1
    0 Stimmen
    1 Beiträge
    121 Aufrufe
    Niemand hat geantwortet
  • Redis - systemd anpassen

    Redis
    1
    0 Stimmen
    1 Beiträge
    54 Aufrufe
    Niemand hat geantwortet
  • Redis - Datenbank extern

    Redis
    2
    0 Stimmen
    2 Beiträge
    814 Aufrufe
    FrankMF

    Das habe ich doch oben vergessen reinzuschreiben, also wenn man das mal von extern testen muss um zu schauen ob die Verbindung geht. Keine Firewall blockt usw. dann kann man das ganz einfach so machen.

    root@webserver:~# redis-cli -h 10.10.1.10 -p 6379 10.10.1.10:6379> quit
  • Ubuntu 20.04 Focal - Einrichtung

    Linux
    16
    0 Stimmen
    16 Beiträge
    2k Aufrufe
    FrankMF

    @reiner-zufall sagte in Ubuntu 20.04 Focal - Einrichtung:

    auto-save-session

    Interessant. Bitte poste, wenn Du was findest.