Deployment guide

Self-host Monica personal CRM on a VPS

Deploy on a VPS Cloud →

Tutorial

Self-hosting

Self-host Monica personal CRM on a VPS

Your professional network is one of your most valuable assets. But most people manage it in a way that leaks data to third parties — Google Contacts synced to the cloud, CRM SaaS subscriptions that own your relationship history, spreadsheets that miss the human context. Monica CRM fixes all three: an open-source personal relationship manager you deploy on your own VPS in under five minutes, with everything stored on hardware you control.

9 min read8 steps
Contents· The problem: your contacts are scattered and leaking1/10
  1. 01The problem: your contacts are scattered and leaking
  2. 02What Monica CRM does — and doesn't do
  3. 03Monica CRM vs open-source alternatives
  4. 04Architecture: PHP/Laravel, MariaDB, Redis — three containers, one VPS
  5. 05Deploy Monica CRM on ServOrbit: step by step
  6. 06Who benefits from Monica on a VPS
  7. 07Privacy and data ownership
  8. 08Troubleshooting: the most common errors
  9. 09Logging in for the first time
  10. 10Updating Monica to a new version

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 CRMHumHub ContactsTwenty CRMDuet
Data managedPersonal and professional relationships: notes, reminders, life events, gift ideasInternal social network: profiles, groups, collaborative workspaceSales CRM: contacts, deals, pipelines, custom objectsMinimalist personal contacts: cards, tags, notes — no team features
LicenceAGPL-3.0AGPL-3.0AGPL-3.0MIT
Server requirements2 vCPU / 4 GB RAM — PHP, MariaDB, Redis4 vCPU / 8 GB RAM — PHP, MariaDB, Elasticsearch recommended4 vCPU / 8 GB RAM — Node.js, PostgreSQL, Redis1 vCPU / 1 GB RAM — SQLite, single Go binary
Primary use casePersonal network tracking, human reminders, GDPR-compliant contact data storageCompany intranet and social network, knowledge sharingCustomer relationship management, sales automation, GraphQL API for integrationsLightweight 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

  1. 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.

  2. 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.yml with 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=redis

    It pulls all three images, starts the stack and waits for the healthcheck. The interface is ready in under a minute.

  3. Create your administrator account immediately

    Open http://<your-vps-ip>:8080 in 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.

  4. 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.

  5. 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).

  6. 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.

  7. 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).sql

    Also back up the .env file and the monica_storage volume (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 refused

Cause: 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 --show

Copy 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

  1. 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 app

Confirm 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.

Your relationships, your server

Deploy Monica CRM on a ServOrbit VPS and keep every contact, interaction and reminder on infrastructure you own — no subscription, no cloud dependency.