# Marietje Welcome to the repository of Marietje! Marietje is the system that provides music in the South canteen of the Huygens building. Students of the faculty of science can request an account at the administrators and then upload and queue music. ## Getting started This project is built using the [Django](https://github.com/django/django) framework. [Poetry](https://python-poetry.org) is used for dependency management. ### Development setup 1. Get at least [Python](https://www.python.org) 3.9 installed on your system. 2. Clone this repository. 3. If ```pip3``` is not installed on your system yet, execute ```apt install python3-pip``` on your system. 4. Also make sure ```python3-dev``` is installed on your system, execute ```apt install python3-dev```. 5. Install Poetry by following the steps on [their website](https://python-poetry.org/docs/#installation). Make sure poetry is added to ```PATH``` before continuing. 6. Make sure `poetry` uses your python 3 installation: `poetry env use python3`. 7. Run `poetry install` to install all dependencies. 8. Run `poetry shell` to start a shell with the dependencies loaded. This command needs to be run every time you open a new shell and want to run the development server. 9. Run ```cd marietje``` to change directories to the ```website``` folder containing the project. 10. Change the `DATABASES` setting in `marietje/marietje/settings/settings.py` to the following: ``` "default": { "ENGINE": "django.db.backends.sqlite3", "NAME": os.path.join(BASE_DIR, "db.sqlite3"), } ``` 11. Install [berthad](https://github.com/bertha/berthad) on your system by following the README file. berthad is used for storing the music files. 12. Start a bertad service by following the berthad README file. 13. Adjust the `BERTHA_HOST` setting in `marietje/marietje/settings/settings.py` to the host you created previously. 14. Run ```./manage.py migrate``` to initialise the database and run all migrations. 15. Run ```./manage.py createsuperuser``` to create an administrator that is able to access the backend interface later on. 16. Run ```./manage.py runserver``` to start the development server locally. Optionally you can enable debug mode by changing the boolean setting `DEBUG` in `marietje/marietje/setting/settings.py` to `TRUE`. ## Production setup For a production environment, the steps for the development setup can be followed up until running the actual server. In a production environment, usage of uWSGI is recommended, so this needs to be installed. Then, using the snippet below, a service file can be used to start the uWSGI in the Poetry environment. ```systemd [Unit] Description=MarietjeDjango website After=syslog.target [Service] ExecStart=poetry run uwsgi \ --socket /run/uwsgi/MarietjeDjango.socket \ --uid=www-data \ --gid=www-data \ --module=marietje.wsgi \ --workers 2 --master \ --disable-write-exception WorkingDirectory=/srv/MarietjeDjango/marietje Restart=always KillSignal=SIGQUIT Type=notify StandardError=syslog NotifyAccess=all ProtectSystem=full ProtectHome=yes RuntimeDirectory=uwsgi PrivateTmp=no PrivateDevices=yes ProtectControlGroups=yes RemoveIPC=yes [Install] WantedBy=multi-user.target ``` The current production environment uses Nginx as webserver that connects to this WSGI socket. Static files are served from `marietje/static`. They can be loaded using `./manage.py collectstatic`. A minimal Nginx configuration for both IPv4 and IPv6 as default would be the following. ```nginx server { listen 80 default_server; listen [::]:80 default_server; location /static { alias /srv/MarietjeDjango/marietje/static; } location / { uwsgi_pass unix:///run/uwsgi/MarietjeDjango.service; include uwsgi_params; } } ```