The problem: your contacts are scattered and leaking
Think about where your contact data actually lives. Your phone syncs to iCloud or Google. Your email provider knows every name in your inbox. Your CRM subscription logs every note to a SaaS database in a jurisdiction you don't control. And none of these tools answer the most human question: when did you last talk to this person, and about what?
Monica CRM was built to answer exactly that. It is not a sales tool: no deal pipeline, no lead scoring, no revenue forecast. It is a personal relationship manager — a private journal of the people who matter, running on a server you own.
What Monica CRM does — and doesn't do
Monica organises your relationships the way a thoughtful person would. Every contact gets a dedicated page with:
- A full interaction log — every note, call, email and meeting you recorded, in chronological order.
- Smart reminders — birthdays, anniversaries, custom reminder dates, recurring check-in prompts.
- Personal context — relationship type (friend, colleague, mentor), occupation, company, social accounts, custom fields you define.
- Life events — engagements, births, job changes, health events; the milestones that give a relationship depth.
- Gift ideas — a list per contact, and a record of what you actually gave.
What Monica does not do: it does not track deals or revenue, does not score leads, and does not offer a shared team calendar. For a business CRM, Twenty — also in the ServOrbit marketplace — is a better fit. Monica handles the human layer.
Monica CRM vs open-source alternatives
Scroll the table
| Monica CRM | HumHub Contacts | Twenty CRM | Duet | |
|---|---|---|---|---|
| Data managed | Personal and professional relationships: notes, reminders, life events, gift ideas | Internal social network: profiles, groups, collaborative workspace | Sales CRM: contacts, deals, pipelines, custom objects | Minimalist personal contacts: cards, tags, notes — no team features |
| Licence | AGPL-3.0 | AGPL-3.0 | AGPL-3.0 | MIT |
| Server requirements | 2 vCPU / 4 GB RAM — PHP, MariaDB, Redis | 4 vCPU / 8 GB RAM — PHP, MariaDB, Elasticsearch recommended | 4 vCPU / 8 GB RAM — Node.js, PostgreSQL, Redis | 1 vCPU / 1 GB RAM — SQLite, single Go binary |
| Primary use case | Personal network tracking, human reminders, GDPR-compliant contact data storage | Company intranet and social network, knowledge sharing | Customer relationship management, sales automation, GraphQL API for integrations | Lightweight address book, solo use only |
Architecture: PHP/Laravel, MariaDB, Redis — three containers, one VPS
The ServOrbit marketplace recipe deploys Monica as three Docker containers:
1. monicahq/monicahq:apache — the PHP/Laravel application with an embedded Apache web server, exposed on port 8080 of the host.
2. mariadb:11 — the relational database storing all contacts, interactions and reminders.
3. redis:7-alpine — the in-memory cache for sessions and queued jobs.
MariaDB is the only officially supported database for Monica v4. The application runs its migrations automatically on first startup — no separate step required, and the first account created becomes the administrator.
Memory footprint at rest: under 600 MB, leaving headroom for the OS and Docker on the VPS Solo (4 GB).
Deploy Monica CRM on ServOrbit: step by step
Order a VPS running Ubuntu 24.04
The VPS Solo (2 vCPU, 4 GB) is sufficient. Monica's PHP process uses under 256 MB RAM; MariaDB adds 150–300 MB. The 4 GB allocation leaves headroom even for a large contact list (10 k+) or a small team. Choose Ubuntu 24.04 LTS — it is the target OS for the deployment playbook.
Deploy from the ServOrbit marketplace
Open your ServOrbit control panel, navigate to Marketplace → ERP & Business Management → Monica CRM, and click Deploy. The playbook automatically generates a
docker-compose.ymlwith the essential environment variables:MONICA_APP_KEY=base64:<generated-key> DB_HOST=db DB_DATABASE=monica DB_USERNAME=monica DB_PASSWORD=<generated-password> CACHE_DRIVER=redis SESSION_DRIVER=redis QUEUE_CONNECTION=redis REDIS_HOST=redisIt pulls all three images, starts the stack and waits for the healthcheck. The interface is ready in under a minute.
Create your administrator account immediately
Open
http://<your-vps-ip>:8080in a browser and sign up. The first account created automatically receives administrator rights. Do this as soon as the interface is accessible — registration stays open to anyone until an administrator restricts it in Settings → Administration.Import your existing contacts
Go to Settings → Import and upload a vCard (.vcf) file exported from your phone, Google Contacts, Apple Contacts or Outlook. Monica deduplicates on email address and maps fields automatically. CSV import with column mapping is also supported. For Google Contacts, choose vCard 3.0 format on export.
Configure SMTP to receive reminders by email
Without SMTP, reminders are only visible in the dashboard. To receive them in your inbox, add these variables to your instance's environment file (editable from the control panel or via SSH):
MAIL_MAILER=smtp MAIL_HOST=smtp.your-relay.com MAIL_PORT=587 [email protected] MAIL_PASSWORD=your-password MAIL_ENCRYPTION=tls [email protected] MAIL_FROM_NAME="Monica CRM"Compatible relays: AWS SES, Mailgun, Brevo, Postmark. Restart the container after updating (
docker compose restart app).Set your first reminders
Open a contact card, click Add a reminder and pick a date — one-time or recurring (weekly, monthly, annual). Write a short note: "call to catch up", "send a birthday card". Monica surfaces due reminders on the dashboard every day and, if SMTP is configured, also sends them to your inbox.
Schedule MariaDB backups
The MariaDB database is Monica's only persistent state. Two approaches:
Via Backrest (recommended): the ServOrbit marketplace includes Backrest — a web-based restic manager — which can back up Monica's Docker volume to Backblaze B2, Wasabi or S3 on a schedule, with deduplication and encryption.
Manual dump: run from the host:
docker exec monica-db mysqldump -u monica -p<password> monica > monica-$(date +%F).sqlAlso back up the
.envfile and themonica_storagevolume (imported avatars and attachments).
Who benefits from Monica on a VPS
- Freelancers and consultants who track every client interaction and need to remember what was discussed six months later — without paying a CRM subscription.
- Founders and networkers managing investors, advisors, partners and candidates — the full orbit of relationships a startup runs on.
- Professionals in GDPR-sensitive industries (legal, medical, finance) who cannot store client information with a foreign provider.
- Anyone who wants to be a better friend — Monica's birthday reminders, life event tracking and gift idea lists make the difference between the person who remembers and the one who forgets.
Privacy and data ownership
Monica is AGPL-3.0. There is no telemetry, no call home, no analytics service embedded in the self-hosted version. Your contact list, your interaction history and your personal notes stay on the MariaDB instance running on your VPS.
Regular backups are the responsibility of the operator. The ServOrbit marketplace includes Backrest — a web-based restic manager — which can back up Monica's MariaDB volume to Backblaze B2, Wasabi or S3 on a schedule, with deduplication and encryption.
To enable email sending, set MAIL_MAILER=smtp in the environment and point Monica at a transactional relay (AWS SES, Mailgun, Brevo). Monica will then deliver reminders and password reset links to your inbox. Without SMTP, both functions remain accessible from the dashboard — they are simply not pushed to your mailbox.
Troubleshooting: the most common errors
Error 1: database migration fails on first startup
Message seen in logs (docker compose logs app):
Illuminate\Database\QueryException: SQLSTATE[HY000] [2002] Connection refusedCause: the app container started before MariaDB was ready to accept connections. Fix: add a depends_on condition with service_healthy in your docker-compose.yml, or wait 20–30 seconds and restart just the app container: docker compose restart app. Monica will replay migrations automatically.
Error 2: email reminders are not sent
Message seen in Monica's dashboard (Settings → Logs) or in the worker logs:
Swift_TransportException: Connection could not be established with host smtp.example.com [Connection refused #111]Cause: MAIL_MAILER not set or SMTP relay unreachable from the container. Check that the VPS firewall allows outbound port 587 (ufw allow out 587), and that MAIL_HOST, MAIL_PORT, MAIL_USERNAME and MAIL_PASSWORD are all present in the environment. After correcting, restart the worker: docker compose restart worker.
Error 3: session expires in a loop after installation
Symptom: Monica redirects to the login page on every action, even after a successful login.
Cause: APP_KEY missing or invalid — the AES-256 key that encrypts session cookies. It must be in the form base64:<44-character-string>. If it is empty or incorrectly generated, sessions cannot be decrypted.
Fix: generate a valid key from inside the app container and update the environment:
docker compose exec app php artisan key:generate --showCopy the returned value into APP_KEY in your .env, then restart the full stack: docker compose down && docker compose up -d.
Logging in for the first time
Logging in for the first time
Open the URL and create your account through the sign-up form: this first account becomes the administrator of the instance. Do this immediately — registration stays open until an admin closes it.
Updating Monica to a new version
Monica follows a regular release cycle on the monicahq/monicahq Docker image. To update: pull the new image, stop the stack, restart — migrations run automatically on startup.
docker compose pull
docker compose down
docker compose up -d
docker compose logs -f appConfirm that Database is up to date or Migrated successfully appears in the logs before using the application. When in doubt, take a MariaDB dump before updating.