Online registration system for managing meeting participants and for printing badges or reports.
- Install
Docker <https://docker.com>
_ - Install
Docker Compose <https://docs.docker.com/compose>
_
-
Clone the repo::
git clone https://github.com/eaudeweb/meetings-registration-tool.git cd meetings-registration-tool
-
Create configuration files and edit all the following files:
cp settings.example settings.py cp .env.example .env cp docker/db.env.example docker/db.env cp docker/init.sql.example docker/init.sql cp docker/log.env.example docker/log.env cp docker/app.env.example docker/app.env
-
Create the docker-compose.override.yml, either by copying docker-compose.prod.yml or docker-compose.dev.yml:
cp docker-compose.prod.yml docker-compose.override.yml
-
Spin up the docker containers:
docker-compose up -d docker-compose ps
-
To clean printout jobs older than one month and delete the files, run this command (to keep the printout files remove the --hook parameter):
docker exec mrt.rq python manage.py rq cleanup --hook clean_printouts
The application needs an webserver in front to handle the requests.
<VirtualHost *:443>
ProxyPreserveHost On
RequestHeader set X-Forwarded-Proto "https"
ProxyPass /static/files http://localhost:5001/static/files retry=2
ProxyPass / http://localhost:5000/ retry=2
ProxyPassReverse / http://localhost:5000/
</VirtualHost>
server {
location /static/files {
proxy_pass http://localhost:5001/static/files;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto "https";
}
location / {
proxy_pass http://localhost:5000;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size 30m;
proxy_set_header X-Forwarded-Proto "https";
}
-
Upgrade repo::
cd meetings-registration-tool git pull
-
Upgrade image tag::
vim .env
-
Get the latest docker images and restart the docker containers::
docker-compose pull docker-compose up -d docker-compose ps
For production logging:
-
Update log.env with your Papertrail host and port destination values (https://papertrailapp.com/account/destinations):
vim docker/log.env
For accurate remote_addr values, please insert the correct header in VHOST file. See https://stackoverflow.com/questions/45260132/docker-get-users-real-ip for example.
-
Error logging is made with Sentry.io. Get client key from https://sentry.io/[organisation]/[project]/settings/keys/ and set the value of SENTRY_DSN from settings.py file::
SENTRY_DSN='<https://xxx@sentry.io/232313>'
Restart the application and run http://app-url/crashme to test the integration.
To backup the application run the following commands:
docker exec mrt.db pg_dump -Upostgres <db_name> -Cc | gzip > db.sql.gz
docker exec mrt.app tar cvf - /var/local/meetings/instance/files/ | gzip > files.gz
-Cc is equivalent to --create --clean.
`--create` tells pg_dump to include tables, views, and functions in the backup, not just the data contained in the tables.
`--clean` tells pg_dump to start the SQL script by dropping the data that is currently in the database. This makes it easier to restore in one step.
- Database
Copy the Postgres SQL dump file inside the postgres container, drop the current database and use psql to import the backup (you will find the POSTGRES_DBUSER and the POSTGRES_PASSWORD in the system environment variables)::
$ docker cp backup.sql mrt.db:/tmp/backup.sql
$ docker exec -it mrt.db bash
/# dropdb <db>;
/# createdb <db>;
/# psql < /tmp/backup.sql
- Files
Copy the files directory to the mrt.app container, under the instance directory:
$ sudo docker cp ./files mrt.app:/var/local/meetings/instance/
$ sudo docker exec -ti mrt.app bash
# chown root:root /var/local/meetings/instance/files
Simply run py.test testsuite, it will find and run the tests. For a bit of speedup you can install pytest-xdist and run tests in parallel, py.test testsuite -n 4.
Simply run the next commands in the application container:
python manage.py alembic revision -- --autogenerate -m 'commit message'
python manage.py alembic upgrade head
Run the pybabel command that comes with Babel to extract your strings:
pybabel extract -F mrt/babel.cfg -k lazy_gettext -o mrt/translations/messages.pot mrt/
Create translations (this should be done only one time, at the start of the project):
pybabel init -i mrt/translations/messages.po -d mrt/translations -l es
pybabel init -i mrt/translations/messages.po -d mrt/translations -l fr
Update the changes you made:
pybabel update -i mrt/translations/messages.po -d mrt/translations
To compile the translations for use, pybabel helps again:
pybabel compile -d mrt/translations
Simply insert the snippet bellow in the CMS page:
<div style="width: 100%; height: 2500px; overflow: hidden; position: relative;">
<iframe scrolling="no" src="<registration-url>" style="left: -50px; top: -180px; width: 105%; height: 2700px; position: absolute;"></iframe>
</div>
The registration URL can be copied from Meeting -> Settings -> Integration -> Participant registration form.