Installation and configuration guide for Ackify with Docker Compose.
- Docker and Docker Compose installed
- A domain (or localhost for testing)
- OAuth2 credentials (Google, GitHub, GitLab, or custom)
git clone https://github.com/kolapsis/ackify.git
cd ackify-ceCopy the example file and edit it:
cp .env.example .env
nano .envMinimum required variables:
# Public domain of your instance
APP_DNS=sign.your-domain.com
ACKIFY_BASE_URL=https://sign.your-domain.com
ACKIFY_ORGANISATION="Your Organization Name"
# PostgreSQL database
POSTGRES_USER=ackifyr
POSTGRES_PASSWORD=your_secure_password_here
POSTGRES_DB=ackify
# OAuth2 (example with Google)
ACKIFY_OAUTH_PROVIDER=google
ACKIFY_OAUTH_CLIENT_ID=your_google_client_id
ACKIFY_OAUTH_CLIENT_SECRET=your_google_client_secret
# Security - generate with: openssl rand -base64 32
ACKIFY_OAUTH_COOKIE_SECRET=your_base64_encoded_secret_keydocker compose up -dThis command will:
- Download necessary Docker images
- Start PostgreSQL with healthcheck
- Apply database migrations
- Launch the Ackify application
# View logs
docker compose logs -f ackify-ce
# Check health endpoint
curl http://localhost:8080/api/v1/health
# Expected: {"status":"healthy","database":"connected"}Open your browser:
- Public interface: http://localhost:8080
- Admin dashboard: http://localhost:8080/admin (requires email in ACKIFY_ADMIN_EMAILS)
Before using Ackify, configure your OAuth2 provider.
- Go to Google Cloud Console
- Create a new project or select an existing one
- Enable the "Google+ API"
- Create OAuth 2.0 credentials:
- Type: Web application
- Authorized redirect URIs:
https://sign.your-domain.com/api/v1/auth/callback
- Copy the Client ID and Client Secret to
.env
ACKIFY_OAUTH_PROVIDER=google
ACKIFY_OAUTH_CLIENT_ID=123456789-abc.apps.googleusercontent.com
ACKIFY_OAUTH_CLIENT_SECRET=GOCSPX-xyz...- Go to GitHub Developer Settings
- Create a new OAuth App
- Configuration:
- Homepage URL:
https://sign.your-domain.com - Callback URL:
https://sign.your-domain.com/api/v1/auth/callback
- Homepage URL:
- Generate a client secret
ACKIFY_OAUTH_PROVIDER=github
ACKIFY_OAUTH_CLIENT_ID=Iv1.abc123
ACKIFY_OAUTH_CLIENT_SECRET=ghp_xyz...See OAuth Providers for GitLab and custom providers.
# Cookie secret (required)
openssl rand -base64 32
# Ed25519 private key (optional, auto-generated if missing)
openssl rand -base64 64- Go to
http://localhost:8080/?doc=test_document - Click "Sign this document"
- Login via OAuth2
- Validate the signature
- Add your email in
.env:ACKIFY_ADMIN_EMAILS=admin@company.com
- Restart:
docker compose restart ackify-ce
- Login and access
/admin
<!-- Embeddable widget -->
<iframe src="https://sign.your-domain.com/?doc=test_document"
width="600" height="200"
frameborder="0"
style="border: 1px solid #ddd; border-radius: 6px;"></iframe># View logs
docker compose logs -f ackify-ce
# Restart
docker compose restart ackify-ce
# Stop
docker compose down
# Rebuild after changes
docker compose up -d --force-recreate ackify-ce --build
# Access the database
docker compose exec ackify-db psql -U ackifyr -d ackify# Check logs
docker compose logs ackify-ce
# Check PostgreSQL health
docker compose ps ackify-db# Manually re-run migrations
docker compose up ackify-migrateVerify that:
ACKIFY_BASE_URLexactly matches your domain- The callback URL in the OAuth2 provider is correct
- The cookie secret is properly configured