Aufgabe #1995
offenConverse JS CDN Download auf Lokale Library mit autoupdater umstellen
100%
Beschreibung
Derzeit läd die Chat Website den gesammten code vom CDN Server von Converse js, bei jedem Besuch der Seiter neu herrunter. Dies soll umgestellt werden. Dazu soll das Script Local von userem Server bereitgestellt werden und durch Nixos regelmäßig(1/2 anno) aktualisiert werden.
Dateien
Von JohannFinsterbusch vor 3 Monaten aktualisiert
- Übergeordnetes Ticket
#1994wurde gelöscht
Von JohannFinsterbusch vor 3 Monaten aktualisiert
- Abgabedatum wurde auf 14.09.2024 gesetzt
- Beginn wurde von 13.09.2024 zu 14.09.2024 geändert
- Nachfolger von Aufgabe #1994: Hosten eines WebUI für den Candychat unter verwendung eines NixOS Containers und Converse. wurde hinzugefügt
Von MathisBluemel vor 3 Monaten aktualisiert
- % erledigt wurde von 0 zu 100 geändert
Ich habe die HTML so umgeschrieben das sie nach den 2 JS und einer CSS Datei im Webroot schaut.
Dazu habe ich die configuration.nix umgeschrieben und einen cron Job hinzugefügt welcher ein Skript:
#!/bin/sh
curl https://cdn.conversejs.org/dist/converse.min.css > /var/www/converse.min.css
curl https://cdn.conversejs.org/dist/converse.min.js > /var/www/converse.min.js
curl https://cdn.conversejs.org/3rdparty/libsignal-protocol.min.js > /var/www/libsignal-protocol.min.js
jeden Monat ausführt.
Hier nochmal die configuration.nix:
###########################################################################
#
# BOF - Begin of File
#
###########################################################################
###########################################################################
#
# Liste aller am ursprünglichen Dokument beteiligter Autorinnen
# List of
# @author admin@ --> Abgesprochene zusammenfuehrung von Kommentaren
# @author resi@
# @author mlp@
# @author vat@
# @author offbyone@
#
###########################################################################
# Autor der überarbeiteten Version
# @author johann@
###########################################################################
#
# Liste verwendeter Abkuerzungen im Dokument
#
# PVE - Proxmox Virtual Enviroment -
# Link: https://en.wikipedia.org/wiki/Proxmox_Virtual_Environment
#
# LXC - Linux Container
# Link: https://en.wikipedia.org/wiki/LXC | https://linuxcontainers.org/lxc/
#
# CT - Container
# ID - Identity Document
#
# DHCP - Dynamic Host Configuration Protocol
# Link: https://en.wikipedia.org/wiki/Dynamic_Host_Configuration_Protocol
#
# TCP & UDP - Transmission Control Protocol & User Datagram Protocol
# Link: https://en.wikipedia.org/wiki/Transmission_Control_Protocol & https://en.wikipedia.org/wiki/User_Datagram_Protocol
#
# HTW - Hochschule fuer Technik und Wirtschaft Dresden
# Link: https://www.htw-dresden.de/
#
# NGINX - "engine X" Webserver
# Link: https://en.wikipedia.org/wiki/Nginx | https://nginx.org/
#
#
###########################################################################
{ config, pkgs, ... }:
{
imports = [
<nixpkgs/nixos/modules/virtualisation/proxmox-lxc.nix>
];
###############################
### NixOS
##############################
system.stateVersion = "24.05";
system.autoUpgrade.enable = true;
system.autoUpgrade.allowReboot = true;
nix.settings.auto-optimise-store = true;
nix.optimise.automatic = true;
nix.gc.automatic = true;
nix.gc.options = "--delete-older-than 5d";
############################
#### System
############################
proxmoxLXC.manageHostName = true;
networking.hostName = "www";
networking.domain = "chat.stura.htw-dresden.de";
time.timeZone = "Europe/Berlin";
# NGINX Webserver
services.nginx.enable = true;
services.nginx.virtualHosts."${config.networking.fqdn}" = {
forceSSL = true;
enableACME = true;
root = "/var/www/";
};
services.nginx.logError = ''/var/log/nginx/error.log debug'';
security.acme.defaults.email = "cert@stura.htw-dresden.de";
security.acme.acceptTerms = true;
### Enable cron service für Autoupdate von Converse
services.cron = {
enable = true;
systemCronJobs = [
"5 4 1 * * root /var/update-converse.sh"
];
};
###############################################################
#
# SSH Verbindungen zu diesem Container sollen prinzipiell nicht moeglich sein.
# NixOS Container = Server - SSH Verbindung = Client
#
# Allgemein soll das Anmelden auf einen NixOS Container ueber "pct enter <ct_id>" erfolgen.
# Es ist demnach nicht notwendig SSH als Server fuer den Nixcontainer zu aktivieren.
# services.openssh.enable = false;
# Grund: Wird von Proxmoy auf true gesetzt.
###############################################################
services.openssh.enable = false;
############################
#### Netzwerk
############################
###############################################################
#
# Network Cofigruation - nur IPv4
# Zur nicht dynamischen Bereitstellung eignet sich DHCP nicht wirklich
#
###############################################################
networking.useDHCP = false;
networking.enableIPv6 = false;
###############################################################
#
# Firewall Configuration
# Standardmaessig ist die Firewall bei NixOS an. Wir spezifizieren erlaubte TCP Ports.
#
##############################################################
networking.firewall.allowedTCPPorts = [ 80 443 ];
}
##################################################################
#
# EOF - End of File
#
##################################################################
Von GoeranHeinemann vor 11 Tagen aktualisiert · Edited
- Datei clipboard-202412102143-exi2q.png clipboard-202412102143-exi2q.png wurde hinzugefügt
Sorry, dass ich dieses Ticket jetzt erst sehe, ich war gerade auch in dem Container und wollte mir das anschauen, aber da läuft schon was anderes, also nur so noch als Bemerkung:
Das shell Script unter /var/ ist ein wenig unschön, es empfielt sich wenigstens folgendes:
let script = pkgs.writeShellSctiptBin "scriptname.sh" ''
#!/bin/sh
curl https://cdn.conversejs.org/dist/converse.min.css > /var/www/converse.min.css
curl https://cdn.conversejs.org/dist/converse.min.js > /var/www/converse.min.js
curl https://cdn.conversejs.org/3rdparty/libsignal-protocol.min.js > /var/www/libsignal-protocol.min.js
''
Dadurch landet dieses sKript auch reproduzirbar im NixStore und könnte z.B. als package im system installiert werden.
besser wäre es allerdings einen Systemd Timer zu definieren. Diese funktionieren sehr ähnlich zu Cronjobs.
https://nixos.wiki/wiki/Systemd/Timers
Mit dem folgenden Script könnte man z.B. monatlich nach neuen Librarys schauen:
systemd.timers."cdn-update" = {
wantedBy = [ "timers.target" ];
timerConfig = {
OnCalendar = "weekly";
Unit = "script-update.service";
};
};
systemd.services."script-update" = {
script = ''
set -eu
${pkgs.curl.outPath}/bin/curl https://cdn.conversejs.org/dist/converse.min.css > /var/www/converse.min.css
${pkgs.curl.outPath}/bin/curl https://cdn.conversejs.org/dist/converse.min.js > /var/www/converse.min.js
${pkgs.curl.outPath}/bin/curl https://cdn.conversejs.org/3rdparty/libsignal-protocol.min.js > /var/www/libsignal-protocol.min.js
'';
serviceConfig = {
Type = "oneshot";
User = "nginx";
};
};
Frei nach dem Meme könnte man das aus Meiner Sicht nur noch verbessern, indem Man die drei javascript Dateien in den NixStore Läd, z.B. mit builtins.fetchurl, oder eben den build davon paketiert.
Beides potenziell wesentlich lästiger.