Skip to content

Latest commit

 

History

History
181 lines (152 loc) · 7.56 KB

README.md

File metadata and controls

181 lines (152 loc) · 7.56 KB

kninfra

Deze repository bevat het grootste deel van de digitale infrastructuur van ASV Karpe Noktem waaronder de website en het smoelenboek. Het gros is geschreven in Python 2, hoewel we langzaam overgaan naar Python 3. Dit is een prima Python tutorial.

De website

We gebruiken het Django raamwerk voor de website. Om over Django te leren, kun je het beste beginnen bij de officiele Django Tutorial. Er is een groot verschil tussen de meeste Django websites en de onze: wij gebruiken namelijk niet de Django modellen & database abstractie. In plaats daarvan gebruiken we MongoDB. Het grote voordeel aan MongoDB is dat in plaats van tabellen en rijen, het lijsten (collections) van JSON-objecten opslaat. Op deze manier kunnen we bijna alle informatie voor een gebruiker kwijt in één object, waar je normaal allerlei hulptabellen nodig hebt. Een voorbeeld van een gebruikersobject is:

{"_id" : ObjectId("4e6fcc85e60edf3dc0000270"),
 "addresses" : [ { "city" : "Nijmegen",
                   "zip" : "...",
                   "number" : "...",
                   "street" : "...",
                   "from" : ISODate("2004-..."),
                   "until" : DT_MAX) } ],
  "types" : [ "user" ],
  "names" : [ "giedo" ],
  "humanNames" : [ { "human" : "Giedo Jansen" } ],
  "person" : { "given" : null,
               "family" : "Jansen",
               "nick" : "Giedo",
               "dateOfBirth" : ISODate("..."),
               "titles" : [ ] },
  "is_active" : 0,
  "emailAddresses" : [ { "email" : "...",
                         "from" : ISODate("2004-08-31T00:00:00Z"),
                         "until" : DT_MAX } ],
  "password" : "pbkdf2_sha256$15000$...$...",
  "studies" : [ { "institute" : ObjectId("4e6fcc85e60edf3dc000001d"),
                  "study" : ObjectId("4e6fcc85e60edf3dc0000030"),
                  "number" : "...",
                  "from" : ...,
                  "until" : DT_MAX } ],
  "telephones" : [ { "number" : "...",
                     "from" : ISODate("2004-08-31T00:00:00Z"),
                     "until" : ISODate("5004-09-01T00:00:00Z") } ] },
  "preferred_language": "nl",
  "preferences" : {
      "visibility" : {
          "telephone" : false
      }
  }
}

De Django website is te vinden onder de kn map, met daaronder de volgende apps (zoals dat heet in Django-jargon):

  • kn/static. De homepage
  • kn/leden. Smoelenboek (en ledenadministratie)
  • kn/agenda. De agenda
  • kn/fotos. Fotoboek
  • kn/base. Gedeeld
  • kn/planning. Tappers planning

Wat minder gebruikte apps zijn:

  • kn/moderation. E-Mail moderatie
  • kn/browser. Voor het online browser van bestanden zoals de stukken pagina.

Een app bestaat (vaak) uit de volgende bestanden:

  • kn/app/urls.py. Dit vertelt welke URL naar welke view moet.
  • kn/app/views.py. Bevat de views van de app: dit zijn Python functies die een of meerdere pagina's renderen.
  • kn/app/entities.py. Bevat de mongo database definities en abstracties voor deze app.
  • kn/app/forms.py. Bevat definities en hulpfuncties voor webformulieren.
  • kn/app/templates/app/. Bevat de HTML templates voor de app.

Daarnaast zijn er de volgende mappen/bestanden:

  • utils. Bevat scripts die buiten de webserver om gedraaid kunnen worden. De meeste daarvan worden met de hand gedraaid als ze nodig zijn. Een voorbeeld is utils/prepare-for-the-next-year.py dat een paar dagen voor de overgang naar een nieuw verenigingsjaar gedraaid wordt. Anderen worden automatisch gedraaid, zoals utils/cron/send-informacie-digest.py dat de informacie informatie e-mails stuurt.
  • salt. Bevat de beschrijvingen van hoe de servers geïnstalleerd kunnen worden met behulp van saltstack. Zie ook het kopje Vagrant hier beneden.
  • locale. Bevat vertalingen.
  • kn/urls.py beschrijft welke app achter welke URL zit.

Synchronisatie

Naast de website draaien we nog een heleboel andere diensten, zoals

En nog een aantal die niet user-facing zijn:

  • Een BIND9 DNS server
  • Een LDAP server die gebruikt wordt door radius en saslauthd.
  • Een saslauthd die gebruikt wordt door postfix om gebruikers te authenticeren.

Karpe Noktem heeft twee servers: sankhara en phassa. De website en de meeste andere diensten draaien op sankhara. Op phassa kunnen leden inloggen en bestanden met elkaar delen.

Al deze verschillende diensten op sankhara en phassa moeten gesynchroniseerd blijven met de ledenadministratie: als iemand in een commissie gaat moet zij ook automatisch in de goede e-maillijsten en wolk-groepen komen. Bij elke verandering van de ledenadmnistratie wordt er gecontroleerd of alle instellingen nog ok zijn en zo nodig veranderingen aangebracht. Dit wordt gedaan door vijf verschillende daemons (programma's die in de achtergrond draaien).

  • giedo draait als de infra-gebruiker op sankhara. Dat is dezelfde gebruiker als waaronder de website draait. Als er een wijziging aan de ledenadministratie wordt gedaan, krijgt giedo daar een seintje van. giedo controleert dan of er zaken gewijzigd moeten worden en stuurt de wijzigingen door naar de andere daemons. De code van giedo is te vinden onder kn/utils/giedo. (Giedo was de eerste voorzitter.)
  • daan draait als de root-gebruiker op sankhara. daan voert de wijzigingen op sankhara uit die giedo nodig acht. De code an daan is te vinden onder kn/utils/daan. (Daan was de eerste secretaris.)
  • cilia draait als de root-gebruiker op phassa en voert daar de wijzigingen van giedo door. Code: kn/utils/cilia. (Cilia was de eerste commissaris activiteiten.)
  • moniek draait als de sys-moniek-gebruiker op phassa en heeft   toegang tot de financiële boekhouding die op phassa staat. Via moniek (via giedo) kan de website bij de boekhouding. Code: kn/utils/moniek. (Moniek was de eerste penningmeester.)
  • hans draait als de list-gebruiker op sankhara en laat giedo de mailman e-maillijsten inkijken en aanpassen. Code: kn/utils/hans.

Vagrant

Met vagrant is het systeem op je eigen computer te testen:

  1. Installeer vagrant.

  2. Maak een kopie van deze repository met git

    $ git clone https://github.com/karpenoktem/kninfra
    
  3. Start vagrant:

    $ cd pad/naar/kninfra
    $ vagrant up
       (...)
    $ vagrant ssh