The self-hosted firearm tracker website.
Go to file
shibao 15354d6004
All checks were successful
continuous-integration/drone/push Build is passing
update versions
2024-06-18 09:14:53 -04:00
assets update deps 2024-06-16 11:42:00 -04:00
config fix test mode warning 2024-02-23 21:16:46 -05:00
lib fix changeset warning 2024-06-16 11:48:49 -04:00
priv Improve login page autocomplete behavior 2024-03-18 23:39:06 -04:00
test fix an issue with emails not being able to be sent 2024-06-16 11:46:35 -04:00
.credo.exs fix credo 2022-03-28 23:05:12 -04:00
.drone.yml update versions 2024-06-18 09:14:53 -04:00
.formatter.exs upgrade to phoenix 1.7 2023-04-14 23:34:11 -04:00
.gitignore merge base project into cannery 2023-02-26 00:40:55 -05:00
.tool-versions update versions 2024-06-18 09:14:53 -04:00 update versions 2024-06-18 09:14:53 -04:00 rename ammo groups to packs 2023-03-30 20:07:16 -04:00
docker-compose.yml rename to cannery 2023-02-25 16:02:08 -05:00
Dockerfile update versions 2024-06-18 09:14:53 -04:00
home.png update screenshot lol 2022-07-04 21:52:08 -04:00 - add translation status to readme and contributing guide 2022-02-07 23:31:21 -05:00
mix.exs update versions 2024-06-18 09:14:53 -04:00
mix.lock update deps 2024-06-16 11:42:00 -04:00 add more text replacements 2023-03-30 21:38:56 -04:00


old screenshot

The self-hosted firearm tracker website.

  • Easy to Use: Cannery lets you easily keep an eye on your ammo levels before and after range day
  • Secure: Self-host your own instance, or use an instance from someone you trust. Your data stays with you, period
  • Simple: Access from any internet-capable device


  • Create containers to store your ammunition, and tag them with custom tags
  • Add ammunition types to Cannery, and then ammo packs to your containers
  • Stage ammo packs for range day and track your usage with shot records
  • Invitations via invite tokens or public registration


  1. Install Docker Compose or alternatively Docker Desktop on your machine.
  2. Copy the example docker-compose.yml. into your local machine where you want. Bind mounts are created in the same directory by default.
  3. Set the configuration variables in docker-compose.yml. You'll need to run docker run -it shibaobun/cannery /app/priv/ to generate a new secret key base.
  4. Use docker-compose up or docker-compose up -d to start the container!

The first created user will be created as an admin.

Reverse proxy

Finally, reverse proxy to port 4000 of the container. If you're using a reverse proxy in another docker container, you can reverse proxy to http://cannery:4000. Otherwise, you'll need to modify the docker-compose.yml to bind the port to your local machine.

For instance, instead of

  - "4000"


  - ""

and reverse proxy to http://localhost:4000.


You can use the following environment variables to configure Cannery in docker-compose.yml.

  • HOST: External url to generate links with. Must be set with your hosted domain name! I.e. cannery.mywebsite.tld
  • PORT: Internal port to bind to. Defaults to 4000. Must be reverse proxied!
  • DATABASE_URL: Controls the database url to connect to. Defaults to ecto://postgres:postgres@cannery-db/cannery.
  • ECTO_IPV6: If set to true, Ecto should use ipv6 to connect to PostgreSQL. Defaults to false.
  • POOL_SIZE: Controls the pool size to use with PostgreSQL. Defaults to 10.
  • SECRET_KEY_BASE: Secret key base used to sign cookies. Must be generated with docker run -it shibaobun/cannery mix phx.gen.secret and set for server to start.
  • REGISTRATION: Controls if user sign-up should be invite only or set to public. Set to public to enable public registration. Defaults to invite.
  • LOCALE: Sets a custom default locale. Defaults to en_US
    • Available options: en_US, de, fr and es
  • SMTP_HOST: The url for your SMTP email provider. Must be set
  • SMTP_PORT: The port for your SMTP relay. Defaults to 587.
  • SMTP_USERNAME: The username for your SMTP relay. Must be set!
  • SMTP_PASSWORD: The password for your SMTP relay. Must be set!
  • SMTP_SSL: Set to true to enable SSL for emails. Defaults to false.
  • EMAIL_FROM: Sets the sender email in sent emails. Defaults to no-reply@HOST where HOST was previously defined.
  • EMAIL_NAME: Sets the sender name in sent emails. Defaults to "Cannery".


Contributions are greatly appreciated, no ability to code needed! You can browse the Contribution Guide to learn more.

I can be contacted at, or on the fediverse at Thank you!


Cannery is licensed under AGPLv3 or later. A copy of the latest version of the license can be found at


  • Gitea: Main repo, feature requests and bug reports
  • Github: Source code mirror, please don't open pull requests to this repository
  • Weblate: Contribute to translations!

Status translation