feat(web03): init pole #753
Labels
No labels
awaiting
awaiting-author
awaiting
awaiting-reviewer
bot
deployed
Silenced alert
bug
duplicate
enhancement
help wanted
invalid
question
wontfix
No milestone
No project
No assignees
5 participants
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
DGNum/infrastructure!753
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "pole"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
21a26bd5fa0535e31d4b@ -0,0 +66,4 @@cp ./manage.py $out/bin/.manage.pycp -r staticfiles $out/share/staticfor template in ${lib.concatMapStringsSep " " (t: ''"${t}"'') passthru.templateDirs}; doescapeShellArgsSurtout faire la boucle directement en nix :>
@ -0,0 +44,4 @@"AF_INET""AF_INET6""AF_UNIX"];pas besoin de laisser
AF_INETetAF_INET6, si ?@ -0,0 +94,4 @@DJANGO_CONFIGURATION = "Production";DJANGO_SETTINGS_MODULE = "polesubscribe.settings";DJANGO_ALLOWED_HOSTS = "*";hostplutôt ?@ -0,0 +111,4 @@];MemoryDenyWriteExecute = true;}// commonServiceConfig;je suis pas certain de l'intérêt d'en faire une variable à part... pourquoi faire l'attrs en deux temps comme ça ?
@ -0,0 +128,4 @@dgn-web.simpleProxies = {inherit host;# Port is unused because we override it with unixSocketport = 1;hmm, relou ça, faudrait pouvoir mettre
nullpour ce genre de casJe ferai surement une PR, si je fait pas vite ne pas attendre
Le logiciel c'est
poleSubscribepaspoledonc pour être cohérent il faut renommer les sources et les services enpole-subscribe@ -0,0 +18,4 @@};};inpython.pkgs.buildPythonApplication rec {C'est assez bof d'utiliser
buildPythonApplicationalors que ce que tu construis c'est un paquet pythonc'est faux, c'est une app, et c'est standard d'utiliser buildPythonApplication pour une app django
@ -0,0 +19,4 @@};inpython.pkgs.buildPythonApplication rec {pname = "pole-backend-${src.rev}";Pareil que pour le front,
revça ne va pas danspname@ -0,0 +42,4 @@django-vite];pythonRelaxDeps = true;Pourquoi est-ce qu'on a besoin de ça ? On contrôle toute la chaîne c'est pas normal de devoir relaxer les contraintes
@ -0,0 +47,4 @@preBuild = ''export DJANGO_CONFIGURATION=Devexport DJANGO_SETTINGS_MODULE=polesubscribe.settingsexport YARN_STATIC_PATH=${frontend}Sémantiquement la défénition de ces variables ça va dans l'attribut
envde la dérivation@ -0,0 +87,4 @@"apps/courses"];meta.mainProgram = "pole";Je vois pas l'intérêt de faire ça, si tu exécute ça, il va te manquer toutes les variable d'environnement et ça va casser de manière spectaculaire. Pour avoir un script de management disponible il faut faire comme sur https://git.dgnum.eu/DGNum/dgsi/src/branch/main/nix/nixos-module/default.nix#L96-L111
@ -0,0 +7,4 @@config,sources,pkgs,utils,@ -0,0 +13,4 @@letinherit (lib) getExe getExe' concatMapStringsSep;commonServiceConfig = {Pour un seul service ça ne sert à rien de séparer cette définition
@ -0,0 +52,4 @@UMask = "0077";};host = "pole.soyouzpanda.fr";Non
@ -0,0 +80,4 @@echo -n "${backend.src.rev}" > .versionfirm -f /var/lib/pole/staticPas besoin de delete le lien précédent si tu force le nouveau
Ça a déjà pété avec lasuite-* quand je ne mettais pas de rm et que je forçais, ça essayait de faire un ln dans le sous-dossier
C.f. la doc de
ln:-T, --no-target-directory treat LINK_NAME as a normal file always@ -0,0 +94,4 @@DJANGO_CONFIGURATION = "Production";DJANGO_SETTINGS_MODULE = "polesubscribe.settings";DJANGO_ALLOWED_HOSTS = "*";Le seul host autorisé c'est celui utilisé
@ -0,0 +114,4 @@// commonServiceConfig;};services.postgresql = {Tu ne set jamais la db de polesubscribe à postgres
parce que y'a pas/plus besoin de postgres apparement
La db est super simple donc j'ai laissé sqlite mais p-ê que c'est pas pertinent de laisser ça..?
@ -0,0 +125,4 @@];};dgn-web.simpleProxies = {Si tu n'utilise pas des listeners sur localhost il ne faut pas utiliser
simpleProxiesmais le faire à la main@ -0,0 +136,4 @@};};age-secrets.autoMatch = [ "pole" ];Ce serait mieux de passer par loadcredentials
je ne comprends pas, pourquoi?
Réponse généraliste for the record (De ce que je sais) : loadcredentials est moins permissif il me semble. Il faut avoir le user ET être dans le bon namespace. Aussi load credentials est compatible avec dynamicuser à moins de frais. Enfin loadcredential peut s'intégrer avec des schémas plus complexes de déchiffrement des secrets
@ -0,0 +15,4 @@}:stdenv.mkDerivation rec {pname = "pole-frontend-${src.rev}";version = "unstable";Si tu veux intégrer la rev du paquet tu veux la mettre dans
versionet pas danspname@ -0,0 +7,4 @@buildPythonPackage,fetchFromGitHub,setuptools,wheel,C'est inutile de mettre
wheelcomme input@ -0,0 +42,4 @@description = "Bulma template pack for django-crispy-forms";homepage = "https://github.com/ckrybus/crispy-bulma";license = lib.licenses.mit;maintainers = with lib.maintainers; [ ];inutile
@ -0,0 +39,4 @@homepage = "https://github.com/fabiocaccamo/django-colorfield";changelog = "https://github.com/fabiocaccamo/django-colorfield/blob/${src.tag}/CHANGELOG.md";license = lib.licenses.mit;maintainers = with lib.maintainers; [ ];Inutile
@ -0,0 +43,4 @@description = "Markdown template filter for Django";homepage = "https://github.com/erwinmatijsen/django-markdownify";license = lib.licenses.mit;maintainers = with lib.maintainers; [ ];Inutile
0535e31d4bf0f3bd98edf0f3bd98ed696854992969685499291da6c997721da6c997723dc8156f0d3dc8156f0d179e381f07179e381f07016653741a016653741a19e01399a119e01399a1e8991f1a90e8991f1a9005b3b0175c@ -0,0 +13,4 @@letinherit (lib) getExe getExe' concatMapStringsSep;host = "pole.dgnum.eu";pole.bds.ens.fr@ -0,0 +41,4 @@ln -sTf ${backend}/share/static /var/lib/pole-subscribe/static'';environment = {Il faudrait aussi configurer les mails admins pour les erreurs (
alice+polesubscribe@dgnumetadmins+polesubscribe@dgnum).Et je réitère le point de Tom : db postgres. C'est certes pas extrêmement utile, mais ça reste un gros facilitateur pour backup, et pour une app django assez simple, ça devrait pas être très dur a implem...
Je m'attendais un peu que à ce que ce soit "demandé" ; je tente de faire l'implem postgres rapidement. Vous avez des conventions pour les noms de variables d'env ?
Usuellement NOMSERVICE_VARIABLE
Mais c'est pas hyper strict imo
J'ai poussé quelque chose de basique sur le dépôt de base
aandres/poleSubscribe@99421a6e05Dites-moi si ça convient ou s'il faut que je modifie (ou allez modifier hein ^^)
@ -182,6 +182,7 @@ letweb03.dual = ["photos" # Vector"pole" # Poleon prend pas
pole.dgnum.euau final, donc inutile@ -0,0 +1,126 @@# SPDX-FileCopyrightText: 2026 Elias Coppens <elias@dgnum.eu>Peut-on avoir une commande de management avec le trick nsenter ? Comme ici :
manageScript = mkOption {type = package;default = pkgs.writeShellApplication {name = "${name}-manage";runtimeInputs = [pkgs.util-linuxconfig'.systemd.packageconfig.djangoEnv]++ config.extraPackages;text = ''MainPID=$(systemctl show -p MainPID --value dj-${name}.service)nsenter -e -a -t "$MainPID" -G follow -S follow python /var/lib/django-apps/${name}/source/${config.managePath} "$@"'';};description = ''Script to run manage.py related tasks.'';};@ -0,0 +49,4 @@};preBuild = ''export DATA_DIR=$(mktemp -d)/dataC'est pas reproductible mktemp, je pense c'est pas grave ici mais attention
@ -0,0 +64,4 @@''mkdir -p $out/{bin,share}cp ./manage.py $out/bin/.manage.pycp -r staticfiles $out/share/staticNit : il me semble on peut se passer de cette ligne si on met STATIC_ROOT à $out/share/static direct
@ -0,0 +79,4 @@"cp""-r""polesubscribe/${t}/templates/*""$out/share/templates/${t}"Je suis un peu étonné de ces copies. Il me semble le packaging python devrait les gérer seul. qq references trouvés rapido sur le sujet, à adopter en fonction du build system choisi :
J'ai check, authens utilise setuptools_scm (autodetection des fichiers selon de si ils sont git tracked ou pas)
En plus on est pas très update proof car on hard code les chemins plus bas
@ -0,0 +114,4 @@enableACME = true;locations."/static/" = {alias = "${backend}/share/static/";Pourquoi pas
/var/lib/pole-subscribe/static? Permet d'éviter un reload nginx lors des upgrades. (Marche que si les symlink sont activés ce qui semble être le cas de la config nixos par défaut)View command line instructions
Checkout
From your project repository, check out a new branch and test the changes.