Self-hosted CRM for European SMBs — pipeline, contacts, deals, leads, campaigns, REST API
84
A self-hosted CRM for European SMBs and small sales teams. Pipeline management, contacts, deals, a lead inbox, activity logging, email campaigns, and reporting — in one container, with your data in your own database.
www.eurocrm.org · Source on GitHub · MIT licence
EuroCRM needs a MongoDB 7 database. The fastest way to try it:
# docker-compose.yml
services:
app:
image: vhristo/eurocrm:0.2.1
ports:
- "3000:3000"
environment:
MONGODB_URI: mongodb://admin:changeme@mongo:27017/eurocrm?authSource=admin
JWT_SECRET: replace-with-at-least-32-random-characters
JWT_REFRESH_SECRET: replace-with-a-different-32-plus-characters
ENCRYPTION_KEY: exactly-32-characters-long-here!
NEXT_PUBLIC_APP_URL: http://localhost:3000
depends_on:
- mongo
mongo:
image: mongo:7
environment:
MONGO_INITDB_ROOT_USERNAME: admin
MONGO_INITDB_ROOT_PASSWORD: changeme
volumes:
- mongo-data:/data/db
volumes:
mongo-data:
docker compose up -d
Open http://localhost:3000, register, and you have a working CRM. Registration creates your account and your first company, seeded with a default sales pipeline.
Generate the secrets rather than typing them:
openssl rand -hex 32 # JWT_SECRET, JWT_REFRESH_SECRET
openssl rand -hex 16 # ENCRYPTION_KEY (must be exactly 32 characters)
Required
| Variable | Notes |
|---|---|
MONGODB_URI | MongoDB 7 connection string |
JWT_SECRET | 32+ characters, used to sign access tokens |
JWT_REFRESH_SECRET | 32+ characters, different from the above |
ENCRYPTION_KEY | Exactly 32 characters; encrypts stored SMTP credentials |
NEXT_PUBLIC_APP_URL | Public base URL — used in email links and form embed codes |
Optional
| Variable | Default |
|---|---|
JWT_ACCESS_EXPIRY | 15m |
JWT_REFRESH_EXPIRY | 7d |
NEXT_PUBLIC_APP_NAME | EuroCRM |
PORT | 3000 |
The app listens on port 3000. It holds no state on disk — everything lives in MongoDB, so the container can be replaced freely.
nextjs, uid 1001)dumb-init as PID 1, so signals and zombie processes are handled properlyArchitecture: linux/amd64 only. It runs on Apple Silicon and other arm64
hosts through emulation, with the performance cost that implies.
| Tag | |
|---|---|
0.2.1 | Current release |
0.2.0 | Multiple companies per account |
0.1.0 | First release |
Pin a version in anything you care about rather than tracking a moving tag.
Put a reverse proxy with TLS in front of it — the container speaks plain HTTP
and sets Secure cookies only when NODE_ENV=production.
Do not publish MongoDB's port. Keep it on an internal Docker network reachable only by the app.
Registration is open by default, so anyone who can reach /register can create
an account and their own company. If the instance is on the public internet and
meant for you alone, block that path at the proxy once your account exists.
Content type
Image
Digest
sha256:7abad17b1…
Size
52.8 MB
Last updated
about 1 month ago
docker pull vhristo/eurocrm