If you want to run OpenVoting without building locally, use the published image:
ghcr.io/amyjeanes/openvoting/openvoting:latest
The app serves on container port 8080.
docker run --name openvoting --rm -p 8080:8080 \
-e ConnectionStrings__Database="Host=<db-host>;Database=<db-name>;Username=<db-user>;Password=<db-password>" \
-e Settings__Discord__ClientId="<discord-client-id>" \
-e Settings__Discord__ClientSecret="<discord-client-secret>" \
-e Settings__Discord__GuildId="<discord-guild-id>" \
-e Settings__Discord__BotToken="<discord-bot-token>" \
-e Settings__Discord__PublicKey="<discord-public-key>" \
-e Settings__Jwt__SigningKey="<long-random-signing-key>" \
-e Settings__BlobStorage__ConnectionString="<blob-connection-string>" \
-e Settings__BlobStorage__ContainerName="assets" \
-e Settings__BlobStorage__PublicBaseUrl="https://<cdn-or-storage-public-url>" \
-e Settings__Upload__MaxFileSizeMB="10" \
ghcr.io/amyjeanes/openvoting/openvoting:latestThen open: http://localhost:8080
Create a docker-compose.yml like this:
services:
openvoting:
image: ghcr.io/amyjeanes/openvoting/openvoting:latest
container_name: openvoting
restart: unless-stopped
ports:
- "8080:8080"
environment:
ConnectionStrings__Database: Host=<db-host>;Database=<db-name>;Username=<db-user>;Password=<db-password>
Settings__Discord__ClientId: <discord-client-id>
Settings__Discord__ClientSecret: <discord-client-secret>
Settings__Discord__GuildId: <discord-guild-id>
Settings__Discord__BotToken: <discord-bot-token>
Settings__Discord__PublicKey: <discord-public-key>
Settings__Discord__AdminRoleIds__0: <admin-role-id-1>
Settings__Discord__AdminRoleIds__1: <admin-role-id-2>
Settings__Jwt__SigningKey: <long-random-signing-key>
Settings__BlobStorage__ConnectionString: <blob-connection-string>
Settings__BlobStorage__ContainerName: assets
Settings__BlobStorage__PublicBaseUrl: https://<cdn-or-storage-public-url>
Settings__Upload__MaxFileSizeMB: "10"Start it:
docker compose up -d- You still need external PostgreSQL and blob storage (or local equivalents such as Azurite)
- Run EF migrations against your target database before first use
- For local container testing, add
http://localhost:8080/api/auth/discordto Discord OAuth redirect URIs - For production, use HTTPS and set:
- OAuth redirect URI:
https://<host>/api/auth/discord - Discord interaction endpoint:
https://<host>/api/discord/interactions
- OAuth redirect URI: