Skip to main content

Docker Clean Installation 1.8.x (HTTPS)

This guide describes how to install Hanami 1.8.x with HTTPS enabled. For HTTP installation, see Docker Clean Installation 1.8.x.

0 · Prerequisites

RequirementMandatory?Check / Notes
Sudo accesssudo -v (or sudo su) should succeed.
Docker 24+docker --version
Elasticsearch 7.14–Cluster reachable; service user with R/W on indices.
TCP port 443 openHanami will expose 443 for HTTPS.
SSL certificatesServer certificate, intermediate CA, and private key.
Nexus credentialsNeeded to download the ZIP artefact.
External triplestoreoptionalConfigure if you don't use the embedded store.
External IAM/OAuth2optionalRequired only when env.hanami.security.iam: true.

1 · Download release 1.8.0

curl -u <user>:<password> -O \
<artifact repository url>/hanami-1.8.0.zip

2 · Extract the artefact

unzip hanami-1.8.0.zip

Expected files:

hanami-1.8.0.tar   # Docker image
ext/ # Default configuration

3 · (If present) stop & remove an old container

sudo docker stop hanami-container
sudo docker rm hanami-container

4 · Load the Docker image

sudo docker load -i hanami-1.8.0.tar

5 · Stage the ext directory

sudo mkdir -p /opt/hanami-ext
sudo cp -r ./ext/* /opt/hanami-ext/

Resulting layout:

/opt/hanami-ext/config
├─ customer-env.yml.example ← template
├─ customer.yml ← keep as‑is
├─ customer-iam.yml ← keep as‑is
└─ customer-workflow.yml ← keep as‑is

6 · Prepare SSL certificates

6.1 · Create certificate directory

sudo mkdir -p /opt/hanami-tls

6.2 · Copy certificates

Place your certificates in /opt/hanami-tls:

# Copy your certificates (adjust paths as needed)
sudo cp /path/to/your-server.crt /opt/hanami-tls/server.crt # Server/leaf certificate
sudo cp /path/to/your-issuer.crt /opt/hanami-tls/issuer.crt # Intermediate CA
sudo cp /path/to/your-server.key /opt/hanami-tls/server.key # Private key

# Set permissions
sudo chmod 640 /opt/hanami-tls/*
sudo chown root:root /opt/hanami-tls/*

6.3 · Create PKCS#12 keystore

# Set a secure password
KEYSTORE_PASS='YourSecurePassword'

# Create PKCS#12 keystore
sudo openssl pkcs12 -export \
-inkey /opt/hanami-tls/server.key \
-in /opt/hanami-tls/server.crt \
-certfile /opt/hanami-tls/issuer.crt \
-name hanami \
-out /opt/hanami-tls/hanami-keystore.p12 \
-passout pass:"$KEYSTORE_PASS"

# Set permissions
sudo chmod 640 /opt/hanami-tls/hanami-keystore.p12
sudo chown root:root /opt/hanami-tls/hanami-keystore.p12

7 · Create truststore for external services

When using HTTPS, you need a truststore to verify certificates of external services:

sudo mkdir -p /opt/hanami-certs

# Import triplestore CA (if using HTTPS)
sudo keytool -importcert -trustcacerts \
-alias triplestore-ca \
-file /path/to/triplestore-ca.crt \
-keystore /opt/hanami-certs/truststore.jks \
-storepass changeit -noprompt

# Import Elasticsearch CA (if using HTTPS)
sudo keytool -importcert -trustcacerts \
-alias es-ca \
-file /path/to/elasticsearch-ca.crt \
-keystore /opt/hanami-certs/truststore.jks \
-storepass changeit -noprompt

8 · Create one customer-env.yml

  1. Copy the template:

    cp /opt/hanami-ext/config/customer-env.yml.example \
    /opt/hanami-ext/config/customer-env.yml
  2. Open it and replace placeholders. Update URLs to use HTTPS if applicable:

    env:
    hanami:
    elasticsearch:
    url: "https://es.example.com:9200" # Use HTTPS if available
    username: "hanami_svc"
    password: "********"
    triplestore:
    url: "https://triplestore:7200/repositories/data" # Use HTTPS if available
    username: "sparql_user"
    password: "********"

9 · Create optional directories

sudo mkdir -p /opt/hanami-backups
sudo mkdir -p /opt/hanami-logs

10 · Run the container with HTTPS

KEYSTORE_PASS='YourSecurePassword'  # Same as used in step 6.3
TRUSTSTORE_PASS='changeit' # Truststore password from step 7

sudo docker run -d \
--name hanami-container \
--network host \
--restart unless-stopped \
-v /opt/hanami-ext:/opt/hanami/ext \
-v /opt/hanami-backups:/opt/hanami/backups \
-v /opt/hanami-logs:/opt/hanami/logs \
-v /opt/hanami-tls:/opt/hanami/tls:ro \
-v /opt/hanami-certs:/opt/hanami/certs:ro \
-e JAVA_TOOL_OPTIONS="\
-Xms6g -Xmx6g \
-Djavax.net.ssl.trustStore=/opt/hanami/certs/truststore.jks \
-Djavax.net.ssl.trustStorePassword=${TRUSTSTORE_PASS} \
-Djavax.net.ssl.trustStoreType=JKS \
-Dserver.port=443 \
-Dserver.ssl.enabled=true \
-Dserver.ssl.key-store=/opt/hanami/tls/hanami-keystore.p12 \
-Dserver.ssl.key-store-password=${KEYSTORE_PASS} \
-Dserver.ssl.key-store-type=PKCS12 \
-Dserver.ssl.key-alias=hanami" \
hanami:1.8.0 \
--spring.profiles.active=env,workflow \
--server.port=443

Add ,iam to --spring.profiles.active if using OAuth2/IAM.


11 · Verify container is running

sudo docker ps | grep hanami

12 · Test the HTTPS endpoint

Test locally with curl:

# Test with certificate verification (adjust hostname as needed)
curl -v https://your-hostname/

# Or test ignoring certificate verification
curl -kv https://localhost/

Expected: You should see a TLS handshake and either a login page or 401 response (if authentication is required).


13 · Check logs

If issues arise:

sudo docker logs hanami-container --tail 50 -f

Troubleshooting

Certificate issues

  • Ensure the certificate CN or SAN matches your hostname
  • Verify the certificate chain is complete (server cert + intermediate CA)
  • Check keystore password matches in both creation and docker run

Port conflicts

  • Ensure port 443 is not already in use: sudo netstat -tlnp | grep 443
  • Stop conflicting services or use a different port

External service connection issues

  • Ensure all external service certificates are added to the truststore
  • Verify network connectivity to external services
  • Check that service URLs use the correct protocol (http vs https)