hammer-editor/docker
Adam Brown 7e9bd46c26
Replace the native Argon2 binding with a pure-JVM implementation (#908)
Argon2 hashing went through JNA, which extracts libjnidispatch.so at runtime.
On Linux JNA ignores java.io.tmpdir and uses $XDG_CACHE_HOME, falling back to
<user.home>/.cache, and the Docker image sets user.home=/data. That puts the
shared object on the data volume, so hosts mounting it noexec cannot load it,
and signup and login returned a 500 (#884).

Argon2PasswordHasher derives with BouncyCastle instead, reading the variant,
version, and cost parameters back out of the stored PHC string. Its output is
byte-identical to libargon2 for the same inputs, so existing hashes keep
verifying; the tests pin that against hashes generated by the C implementation.

JNA is still on the runtime classpath via the CLI's terminal library, so the
image also points XDG_CACHE_HOME at its own layer.
2026-08-16 00:26:01 -07:00
..
config.example.toml Add Docker support for self-hosting the sync server (#771) 2026-07-25 09:53:04 -07:00
docker-compose.yml Tell self-hosters when the server is not serving HTTPS (#800) 2026-07-30 22:16:41 -07:00
Dockerfile Replace the native Argon2 binding with a pure-JVM implementation (#908) 2026-08-16 00:26:01 -07:00
README.md Add Docker support for self-hosting the sync server (#771) 2026-07-25 09:53:04 -07:00

Docker files for the Hammer sync server

File Purpose
Dockerfile Runtime image; packages the pre-built server distribution
docker-compose.yml Turnkey setup with a data volume
config.example.toml Starting point for config.toml

Documentation lives in ../docs/HOW-TO-RUN-A-SERVER-DOCKER.md — quick start, networking and TLS, external PostgreSQL, backups, and building the image yourself.

cd docker
docker compose up -d