Cannery
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
Features
- 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
Installation
- Install Docker Compose or alternatively Docker Desktop on your machine.
- Copy the example docker-compose.yml. into your local machine where you want. Bind mounts are created in the same directory by default.
- Set the configuration variables in
docker-compose.yml
. You'll need to rundocker run -it shibaobun/cannery /app/priv/random.sh
to generate a new secret key base. - Use
docker-compose up
ordocker-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
expose:
- "4000"
use
ports:
- "127.0.0.1:4000:4000"
and reverse proxy to http://localhost:4000
.
If you don't already have a reverse proxy on the machine, I recommend installing
Nginx Proxy Manager, which is a GUI for Nginx
that makes it easy to configure and modify as your hosting needs change. By
adding NPM to cannery's docker-compose.yml
, you can avoid needing to bind any
ports to your machine and have all the internal traffic routed through the
generated docker network, which can be a bit more secure. The example
configuration is commented out in the docker-compose.yml
file, and more
information can be found on their documentation
here.
Configuration
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 to4000
. Must be reverse proxied!DATABASE_URL
: Controls the database url to connect to. Defaults toecto://postgres:postgres@cannery-db/cannery
.ECTO_IPV6
: If set totrue
, Ecto should use ipv6 to connect to PostgreSQL. Defaults tofalse
.POOL_SIZE
: Controls the pool size to use with PostgreSQL. Defaults to10
.SECRET_KEY_BASE
: Secret key base used to sign cookies. Must be generated withdocker run -it shibaobun/cannery priv/random.sh
and set for server to start.REGISTRATION
: Controls if user sign-up should be invite only or set to public. Set topublic
to enable public registration. Defaults toinvite
.LOCALE
: Sets a custom default locale. Defaults toen_US
- Available options:
en_US
,de
,fr
andes
- Available options:
SMTP_HOST
: The url for your SMTP email provider. Must be setSMTP_PORT
: The port for your SMTP relay. Defaults to587
.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 totrue
to enable SSL for emails. Defaults tofalse
.EMAIL_FROM
: Sets the sender email in sent emails. Defaults tono-reply@HOST
whereHOST
was previously defined.EMAIL_NAME
: Sets the sender name in sent emails. Defaults to "Cannery".
Upgrading the Database
Typically, PostgreSQL updates can improve the performance of the database, and
the cannery app. However, these require some additional maintenance. While the
typical method is to manually dump and restore the database using the pg_dump
tool, I recommend using the
pgautoupgrade tool,
which can perform this for you automatically. In the docker-compose.yml
file,
you can do this easily by switching the image:
value from for example,
postgres:13
to pgautoupgrade/pgautoupgrade:17-alpine
and rerun
docker-compose up -d
. This will automatically migrate your database to
Postgres 17, and then you can switch back to the original postgres:17
image
for additional performance, or keep using the upgrade image if you'd like.
Contribution
Contributions are greatly appreciated, no ability to code needed! You can browse the Contribution Guide to learn more.
I can be contacted at shibao@bubbletea.dev, or on the fediverse at @shibao@misskey.bubbletea.dev. Thank you!
License
Cannery is licensed under AGPLv3 or later. A copy of the latest version of the license can be found at LICENSE.md.
Links
- Website: Project website
- 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!