Bitpoll is a software to conduct polls about Dates, Times or general Questions.
This is a new version of the Dudel from opatut (https://github.com/opatut/dudel) used on https://bitpoll.de, rewritten using the Django framework as a backend.
- set if anonymous votes are casted or if the user must provide it's name
- set if registration is required for voting
- allow the creation of private event only accessible to thoses invited
- Poll can be created for full day event or just a few hours. Custom classes can also be defined
- URL can be set manually or randomly choosen
You can deploy this tool on your server either by manually cloning the repo and setting it up or you can run a docker image.
The docker image is built automatically from the current master branch. You can use the following commands to set up the docker container:
Create a directory for static and config files:
mkdir -p run/{log,static,config}Get the example settings file and adapt it according to your needs:
wget https://raw.githubusercontent.com/fsinfuhh/Bitpoll/master/bitpoll/settings_local.sample.py -O run/config/settings.pyIt is important to change at least the database settings, secret key, and allowed hosts.
Start the docker container:
docker run -a stdout -a stderr --rm --name bitpoll -p 3008:3008 -p 3009:3009 --volume ./run/static:/opt/static --volume ./run/config:/opt/config ghcr.io/fsinfuhh/bitpollThe container is reachable on port 3009.
If you use an external web server, you can use uwsgi traffic on port 3008 and serve the static
assets from run/static at /static/.
Get the code:
git clone https://github.com/fsinfuhh/BitpollInstall Python and development dependencies with uv:
uv sync --group devCopy bitpoll/settings_local.sample.py to bitpoll/settings_local.py and customize the local settings.
Initialise Database:
./manage.py migrateRun Testserver:
./manage.py runserverRun the test suite:
uv run pytestIn production Sentry is used for error reporting. django-auth-ldap is used vor login via ldap uwsgi to serve the app
Install Dependencies for Production:
sudo apt install g++ make python3-psycopg2 python3-ldap3 gettext gcc python3-dev libldap2-dev libsasl2-devInstall Python Dependencies
uv sync --extra productionConfigure examples are in settings_local.py
our used uwsgi config can be found at https://github.com/fsinfuhh/mafiasi-rkt/blob/master/bitpoll/uwsgi-bitpoll.ini
For Production systems it is nessesarry to run
./manage.py compilemessages
./manage.py collectstaticWe use uv to manage and lock the dependencies. Runtime dependencies are in
pyproject.toml; production-only dependencies are in the production extra
and test tooling is in the dev dependency group.
After changing dependencies or for package updates, run:
uv lock --upgradeSynchronize the local environment with the lockfile using:
uv sync --group devFor a production environment use uv sync --extra production. The committed
uv.lock makes both environments reproducible.




