Skip to content
Snippets Groups Projects
README.md 10.29 KiB

Maják

Maják je CMS pro Pirátské weby. Postavený je na Wagtail.

code style: Black powered by: Wagtail powered by: Django licence AGPLv3

Pod pokličkou

Wagtail a Django jsou poměrně vyspělé frameworky. Vždy mysli na to, že problém co řešíš, už pravděpodobně řešil někdo před tebou. A obvykle existuje elegantní řešení.

Pár užitečných odkazů:

A za zmínku stojí Awesome Wagtail jako přehled pluginů a rozšíření pro Wagtail.

Rozšíření která používáme:

  • wagtail-metadata
    • upravený template shared/templates/wagtailmetadata/parts/tags.html

Struktura projektu

.
├── home            = app na web úvodní stránky Majáku
├── donate          = app na web dary.pirati.cz
├── elections2021   = app na količní web k volbám 2021
├── senate          = app na web senat.pirati.cz
├── senat_campaign  = app na weby kandidátů na senátory
├── districts       = app na web kraje.pirati.cz
├── region          = app na weby krajskych sdruzeni
├── district        = app na weby mistnich sdruzeni
├── uniweb          = app na univerzalni webove stranky
...
├── majak           = Django projekt s konfigurací Majáku
├── shared          = app se sdílenými static soubory a templaty pro weby
├── calendar_utils  = app s modelem a utilitami na iCal kalendáře
├── search          = app pro fulltext search (default, asi se k ničemu nepoužívá)
├── tuning          = app na tuning administračního rozhraní Majáku
└── users           = app s custom user modelem a SSO, apod.

Poznámky k uspořádání:

  • nesdílíme a nemícháme modely zděděné z Page mezi jednotlivými appkami a weby, abychom předešli rozbití cizího webu
  • části definice tříd stránek sdílíme jako mixin pattern (shared.models.ArticleMixin, share.models.SubpageMixin, apod.)
  • sdílet se mohou obyčejné Django modely z models.Model, ale umístěné v nějaké appce/knihovně určené pro sdílení (shared, calendar_utils, apod.), nikoliv mezi weby (mezi appkami na weby by nikdy neměly vzniknout závislosti)

Konfigurace webu

Konfigurace konkrétního webu (odkazy do patičky, Matomo ID, apod.) se definuje v kořenové xxxHomePage webu. Je to pro uživatele snažší na správu než Site Settings Wagtailu pro konfigurace webů. A pro vývojáře je to skoro jedno.

Z různých podstránek webu se k té konfiguraci dostaneme přes property root_page kterou přidává shared.models.SubpageMixin. V xxxHomePage webu je třeba definovat root_page tak, aby vedla na self.

Styleguide

Některé weby využívají Pirátskou UI styleguide pro vzhled. Idea je, že se budou sdílet nejen statické assety (CSS, JS, ...), ale i univerzální kusy template, které se dají includovat v různých webech (patička webu, karta článku do přehledu, atp.).

Sdílené části využívané na více webech se umísťují do:

shared/static/styleguideXX/     = statické assety (CSS, JS, obrázky, ...)
shared/templates/styleguideXX/  = snippety pro include v templatech

XX v názvu adresáře je číslo major a minor verze šablony. Např. styleguide18 obsahuje věci ze šablony verze 1.8.x. Důvodem je snažší migrace na novější verze šablony, které mohou obsahovat nekompatibilní změny. Každý web tak může (a nemusí) migrovat nezávisle dle potřeby.

Různé verze šablony jsou k vidění na styleguide.pir-test.eu

Kalendáře

Pro práci s kalendáři v iCal formátu je připravena appka calendar_utils.

Poskytuje CalendarMixin do modelu, který přidá fieldy calendar_url pro editaci a calendar pro vazbu na model Calendar (který se plní a automaticky spravuje na pozadí). Typicky se použije ve Wagtail settings pro web, kde stačí calendar_url zpřístupnit pro editaci.

Kalendář se stáhne při uložení modelu obsahujícího CalendarMixin.

Appka přidává management command update_callendars, který stahuje a updatuje kalendáře. Je třeba ho pravidelně volat na pozadí (přes CRON).

Deployment

Konfigurace

Je třeba nastavit environment proměnné:

proměnná default popis
DATABASE_URL DSN k databázi (např. postgres://user:pass@localhost:5342/majak)
OIDC_RP_REALM_URL OpenID server realm URL (např. http://localhost:8080/auth/realms/master/)
OIDC_RP_CLIENT_ID OpenID Client ID
OIDC_RP_CLIENT_SECRET OpenID Client Secret
BASE_URL https://majak.pirati.cz základní URL pro notifikační emaily apod.

V produkci musí být navíc nastaveno:

proměnná default popis
DJANGO_SECRET_KEY tajný šifrovací klíč
DJANGO_ALLOWED_HOSTS allowed hosts (více hodnot odděleno čárkami)

Různé:

proměnná default popis
MAJAK_ENV prod prod/test/dev prostředí kde Maják běží
SENTRY_DSN pokud je zadáno, pády se reportují do Sentry

Settings pro appky na weby:

proměnná default popis
DONATE_PORTAL_REDIRECT_URL "" URL pro přesměrování z darovacího formuláře
DONATE_PORTAL_REDIRECT_SOURCE dary.pirati.cz identifikátor zdroje pro přesměrování na darovací portál
DONATE_PORTAL_API_URL "" URL s API darovacího portálu

Management commands

Přes CRON je třeba na pozadí spouštět Django manage.py commandy: