Online registration system for managing meeting participants and for printing badges or reports.
Docker <https://docker.com>_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://[email protected]/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.
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
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.
Content type
Image
Digest
Size
200.1 MB
Last updated
over 7 years ago
docker pull eaudeweb/mrt