Files
MarietjeDjango/README.md

97 lines
3.7 KiB
Markdown

# 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;
}
}
```