Certimate is a self-hosted SSL certificate management tool designed for automation and ease of use. It operates as a single-binary application built on top of PocketBase integrating a Go backend with an embedded React frontend main.go27-28
Certimate supports multiple deployment strategies, ranging from simple binary execution to containerized orchestration.
The application is compiled into a static binary with the frontend assets embedded using Go's embed package Dockerfile11-17 This allows for a "zero-dependency" execution README.md42
Steps:
serve command:
127.0.0.1:8090. You can override this using the --http flag Dockerfile24:
The official Docker image is based on alpine:latest for a minimal footprint Dockerfile21-24 Images are provided for linux/amd64, linux/arm64, and linux/arm/v7 platforms .github/workflows/release.yml63
Standard Run:
/app/pb_data: This is critical as it stores the SQLite database, application settings, and generated certificates README.md83For more structured management, a docker-compose.yml is provided in the repository to orchestrate the container and its persistent storage docker/docker-compose.yml
Sources: README.md58-89 Dockerfile1-25 .github/workflows/release.yml57-72
Certimate relies on PocketBase's underlying architecture for its runtime configuration and data persistence.
Upon the first launch, the system initializes with a default administrator account:
admin@certimate.fun README.md931234567890 README.md94pb_data README.md83The following diagram illustrates how the application initializes its core singletons and hooks into the PocketBase lifecycle.
System Bootstrap Diagram
Sources: main.go27-76 Dockerfile24 README.md89
Certimate is designed as a monolithic application where the backend and frontend are tightly coupled during the build process but separated during development.
The release process uses GitHub Actions to produce multi-platform binaries and Docker images.
| Stage | Tooling | Description |
|---|---|---|
| Frontend Build | Node.js 24 & Vite | Compiles TypeScript/React into ui/dist .github/workflows/release.yml18-26 |
| Backend Build | Go 1.25 & PocketBase | Embeds ui/dist and compiles the Go binary .github/workflows/release.yml46-72 |
| Release | GoReleaser / Makefile | Cross-compiles for Linux, Windows, and Darwin with specific flags .goreleaser.yml9-34 Makefile18-24 |
The application lifecycle is managed via PocketBase hooks:
CGO_ENABLED=0 flag is used during build to ensure a statically linked binary for maximum portability Dockerfile16-170.4.29 internal/app/app.go5 and can be injected during the build process using -ldflags .goreleaser.yml17-18pb_data directory, which should be persisted across deployments README.md83Deployment Entity Mapping
Sources: Dockerfile1-25 .goreleaser.yml9-34 README.md83 internal/app/app.go3-7
For contributors looking to run the project from source:
The Makefile provides a helper target local.run which performs all steps including UI build and backend startup:
This command performs the following sequence:
go mod vendornpm --prefix=./ui installnpm --prefix=./ui run buildgo run main.go serve --http 127.0.0.1:8090Sources: Makefile39-40 README.md89 Dockerfile1-25
Refresh this wiki
This wiki was recently refreshed. Please wait 6 days to refresh again.