Compare commits
6 Commits
Author | SHA1 | Date |
---|---|---|
Masin Al-Dujaili | 1cc2a50df8 | |
Masin Al-Dujaili | a7774f6a41 | |
Masin Al-Dujaili | b776c4811b | |
Masin Al-Dujaili | ebe3cbedc6 | |
Masin Al-Dujaili | 371cb55544 | |
Tobias Herre | 87e1d6b8f0 |
70
README.md
70
README.md
|
@ -7,26 +7,16 @@ meaning "Onboarding, Change, Offboarding"
|
||||||
|
|
||||||
# development
|
# development
|
||||||
|
|
||||||
- install gettext for instance via "apt install gettext" for translations
|
- install gettext for instance via `apt install gettext` for translations
|
||||||
|
- set up a virtual environment with virtualenvwrapper or some other environment managing tool
|
||||||
- set up a virtual environment with virtualenvwrapper or some other
|
|
||||||
environment managing tool
|
|
||||||
|
|
||||||
- use this environment and do
|
- use this environment and do
|
||||||
|
```
|
||||||
pip install django django-multiselectfield django-formtools django-allauth
|
pip install django django-multiselectfield django-formtools django-allauth
|
||||||
|
```
|
||||||
- clone this repository
|
- clone this repository
|
||||||
|
- `ln -sr eva/settings_development.py eva/settings.py`
|
||||||
- ln -sr eva/settings_development.py eva/settings.py
|
- initialise your database with `python manage.py migrate`
|
||||||
|
- start your development server with `python manage.py runserver`
|
||||||
- initialise your database with
|
|
||||||
|
|
||||||
python manage.py migrate
|
|
||||||
|
|
||||||
- start your development server with
|
|
||||||
|
|
||||||
python manage.py runserver
|
|
||||||
|
|
||||||
# oauth
|
# oauth
|
||||||
|
|
||||||
|
@ -35,27 +25,55 @@ environment managing tool
|
||||||
# production
|
# production
|
||||||
|
|
||||||
- you can use gunicorn as server for example instead of the django development server.
|
- you can use gunicorn as server for example instead of the django development server.
|
||||||
|
|
||||||
- we use whitenoise for serving static files
|
- we use whitenoise for serving static files
|
||||||
|
|
||||||
- we still use the development SQLITE database from django
|
- we still use the development SQLITE database from django
|
||||||
|
|
||||||
do the following in the project main directory:
|
do the following in the project main directory:
|
||||||
|
```
|
||||||
ln -sr eva/settings_production.py eva/settings.py
|
ln -sr eva/settings_production.py eva/settings.py
|
||||||
|
```
|
||||||
edit /secrets.json to contain something similar to
|
edit /secrets.json to contain something similar to
|
||||||
|
```
|
||||||
{
|
{
|
||||||
"SECRET_KEY": "THIS IS ANOTHER SECRET!"
|
"SECRET_KEY": "THIS IS ANOTHER SECRET!"
|
||||||
}
|
}
|
||||||
|
```
|
||||||
run the following commands:
|
run the following commands:
|
||||||
|
```
|
||||||
python3 manage.py migrate
|
python3 manage.py migrate
|
||||||
python3 manage.py collectstatic
|
python3 manage.py collectstatic
|
||||||
django-admin compilemessages
|
django-admin compilemessages
|
||||||
|
```
|
||||||
|
|
||||||
server starts with
|
As root create a file `/etc/systemd/system` (it's already deployed by puppet when the corresponding manifest is applied):
|
||||||
|
|
||||||
export PYTHONUNBUFFERED=TRUE; nohup gunicorn --forwarded-allow-ips="*" -b '0:8000' eva.wsgi &> logfile &
|
```
|
||||||
|
# /etc/systemd/system/eva.service
|
||||||
|
#
|
||||||
|
|
||||||
|
[Unit]
|
||||||
|
Description=gunicorn EVA daemon
|
||||||
|
After=network.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=simple
|
||||||
|
User=eva
|
||||||
|
Group=eva
|
||||||
|
RuntimeDirectory=eva
|
||||||
|
WorkingDirectory=/home/eva/eva
|
||||||
|
Environment=PYTHONUNBUFFERED=TRUE
|
||||||
|
ExecStart=/usr/bin/gunicorn --forwarded-allow-ips='*' -b '0:8000' eva.wsgi
|
||||||
|
ExecReload=/bin/kill -s HUP $MAINPID
|
||||||
|
KillMode=mixed
|
||||||
|
TimeoutStopSec=5
|
||||||
|
PrivateTmp=true
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
|
```
|
||||||
|
|
||||||
|
Adapt the paths in the file accordingly. Then, still as root, run:
|
||||||
|
```
|
||||||
|
systemctl enable --now eva.service
|
||||||
|
```
|
||||||
|
This enables the service to start at boot time and starts it immediately now. The daemon logs to the journal. You can see the last 10 lines by running `systemctl status eva.service` or the whole log by running `journalctl -u eva.service`. The usual switches to manipulate that output are available.
|
|
@ -0,0 +1,24 @@
|
||||||
|
# Generated by Django 4.2.4 on 2023-08-11 10:28
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
import multiselectfield.db.fields
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('evapp', '0003_auto_20220208_0955'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='employee',
|
||||||
|
name='accounts',
|
||||||
|
field=multiselectfield.db.fields.MultiSelectField(blank=True, choices=[('OTRSWMDE', 'OTRS Ticketsystem'), ('CIVIC1', 'Civic CRM (allgemein)'), ('CIVIC2', 'Civic CRM (Mailings, impliziert allgemein)'), ('WEB', 'www.wikimedia.de (edit)'), ('BLOG', 'blog.wikimedia.de (edit)'), ('FORUM', 'forum.wikimedia.de')], max_length=10, null=True, verbose_name='Zusätzliche Accounts'),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='employee',
|
||||||
|
name='department',
|
||||||
|
field=models.CharField(choices=[('COENG', 'Communitys & Engagement'), ('SOFT', 'Softwareentwicklung'), ('CENT', 'Central'), ('KOMAD', 'Kommunikation & Advocacy'), ('VOR', 'Vorstand')], max_length=5, verbose_name='Bereich'),
|
||||||
|
),
|
||||||
|
]
|
|
@ -0,0 +1,19 @@
|
||||||
|
# Generated by Django 4.2.4 on 2023-08-17 11:08
|
||||||
|
|
||||||
|
from django.db import migrations
|
||||||
|
import multiselectfield.db.fields
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('evapp', '0004_alter_employee_accounts_alter_employee_department'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='employee',
|
||||||
|
name='accounts',
|
||||||
|
field=multiselectfield.db.fields.MultiSelectField(blank=True, choices=[('OTRSWMDE', 'OTRS Ticketsystem'), ('CIVIC1', 'Civic CRM (allgemein)'), ('CIVIC2', 'Civic CRM (Mailings, impliziert allgemein)'), ('WEB', 'www.wikimedia.de (edit)'), ('BLOG', 'blog.wikimedia.de (edit)'), ('FORUM', 'forum.wikimedia.de')], max_length=40, null=True, verbose_name='Zusätzliche Accounts'),
|
||||||
|
),
|
||||||
|
]
|
|
@ -7,10 +7,10 @@ from django.utils.translation import gettext_lazy as _
|
||||||
# suboptimal implementation in views.EvaFormView.beautify_data()
|
# suboptimal implementation in views.EvaFormView.beautify_data()
|
||||||
#
|
#
|
||||||
|
|
||||||
DEPARTMENT_CHOICES = {'PROG': _('Programme'),
|
DEPARTMENT_CHOICES = {'COENG': _('Communitys & Engagement'),
|
||||||
'SOFT': _('Softwareentwicklung'),
|
'SOFT': _('Softwareentwicklung'),
|
||||||
'CENT': 'Central',
|
'CENT': 'Central',
|
||||||
'KOMEV': _('Kommunikation und Events'),
|
'KOMAD': _('Kommunikation & Advocacy'),
|
||||||
'VOR': _('Vorstand'),}
|
'VOR': _('Vorstand'),}
|
||||||
|
|
||||||
VENDOR_CHOICES = {'STANDARD': 'Dell Latitude',
|
VENDOR_CHOICES = {'STANDARD': 'Dell Latitude',
|
||||||
|
@ -70,7 +70,7 @@ class Employee(models.Model):
|
||||||
keyboard = models.CharField(max_length=2, choices=KEYBOARD_CHOICES.items(), default='DE', verbose_name=_("Tastaturlayout"))
|
keyboard = models.CharField(max_length=2, choices=KEYBOARD_CHOICES.items(), default='DE', verbose_name=_("Tastaturlayout"))
|
||||||
comment = models.TextField(max_length=500, null=True, blank=True, verbose_name=_("zusätzliche IT-Anforderungen"))
|
comment = models.TextField(max_length=500, null=True, blank=True, verbose_name=_("zusätzliche IT-Anforderungen"))
|
||||||
language = models.CharField(max_length=3, choices=LANG_CHOICES.items(), default="GER", verbose_name=_("Sprache"))
|
language = models.CharField(max_length=3, choices=LANG_CHOICES.items(), default="GER", verbose_name=_("Sprache"))
|
||||||
accounts = MultiSelectField(choices=ACCOUNT_CHOICES.items(), null=True, blank=True, verbose_name=_("Zusätzliche Accounts"))
|
accounts = MultiSelectField(choices=ACCOUNT_CHOICES.items(), max_length=40, null=True, blank=True, verbose_name=_("Zusätzliche Accounts"))
|
||||||
lists = models.CharField(max_length=100, null=True, blank=True, verbose_name=_("Zusätzliche Mailinglisten"))
|
lists = models.CharField(max_length=100, null=True, blank=True, verbose_name=_("Zusätzliche Mailinglisten"))
|
||||||
rebu2go = models.BooleanField(verbose_name=_("Rebu2Go-Zugang benötigt?"), default=False)
|
rebu2go = models.BooleanField(verbose_name=_("Rebu2Go-Zugang benötigt?"), default=False)
|
||||||
|
|
||||||
|
|
|
@ -32,7 +32,7 @@ MAILS = {
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
'CENTRAL': {
|
'CENTRAL': {
|
||||||
'MAIL': 'eileen.miedtank@wikimedia.de',
|
'MAIL': 'anna.noelte@wikimedia.de',
|
||||||
'DATA': [
|
'DATA': [
|
||||||
'department', 'team', 'language', 'mobile', 'rebu2go'
|
'department', 'team', 'language', 'mobile', 'rebu2go'
|
||||||
],
|
],
|
||||||
|
@ -48,6 +48,11 @@ MAILS = {
|
||||||
'DATA': [
|
'DATA': [
|
||||||
'team', 'department', 'language',
|
'team', 'department', 'language',
|
||||||
]
|
]
|
||||||
|
},
|
||||||
|
'FINANCE': {
|
||||||
|
'MAIL': 'claudia.langrock@wikimedia.de',
|
||||||
|
'DATA': [
|
||||||
|
'rebu2go'
|
||||||
|
]
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue