Dolibarr, a self-hosted open-source ERP/CRM (dolibarr.org), deployed as the
primary customer/contact/invoicing management system for Cody Codez LLC —
customers, contacts, agenda/tasks, quotes/proposals, invoices, payments, and
services.
History: this LXC originally ran Twenty CRM (deployed 2026-07-30). After a
full read-only capability audit, Twenty was found to have no native
invoicing or quotes functionality — a hard requirement for this business —
and was replaced with Dolibarr on 2026-08-01. A final Twenty backup is
preserved at /opt/retired-app-backups/twenty-final-2026-08-01/ on the
container as an emergency archive only; nothing was migrated into Dolibarr.
The system of record for Cody Codez LLC's clients: customers, contacts,
notes/history, agenda, quotes, invoices, payments, and services.
| Field | Value |
|---|---|
| Hostname | crm |
| VMID / Type | LXC 101, unprivileged |
| Proxmox Node | SuperPC |
| IP Address | 192.168.86.222 |
| Tailscale IP | 100.97.7.28 (crm.tailbacb1d.ts.net) |
| OS | Debian 13 (trixie) |
| CPU / RAM | 4 vCPU / 6 GB RAM / 8 GB swap |
| Storage | 50 GB rootfs on ceph-storage (Ceph RBD) |
None upstream — self-contained Docker Compose stack (own MariaDB). Will
depend on Nginx Proxy Manager (reverse proxy) and Authentik (auth)
once those are wired up in front of it (not yet configured).
| Port | Protocol | Purpose | Exposed to |
|---|---|---|---|
| 8080 | HTTP | Dolibarr web app | LAN (192.168.86.0/24) + Tailscale — not exposed to the internet |
| 3306 | TCP | MariaDB | internal Docker network only |
Docker Compose stack at /opt/crm/ on the LXC:
compose.yml — 2 services (dolibarr, mariadb).env — secrets + config, chmod 600data/ — reserved, unusedbackups/ — automated backup destinationscripts/backup.sh — the backup scriptDolibarr pinned to 23.0.3 (not latest), MariaDB pinned to 11.4.12
(current LTS). Full env var reference in /root/README.md on the container.
Dolibarr is deployed self-managed — no external auth configured inside
Dolibarr itself. The plan is for Authentik to sit in front of it once the
reverse proxy is live. Admin account admin, company name set to exactly
"Cody Codez LLC" — both verified live in the database after deploy.
Automated: /opt/crm/scripts/backup.sh, cron'd daily 03:30 UTC, logs to
/var/log/dolibarr-backup.log. Each run produces 4 files (DB dump, documents
volume, custom-modules volume, config) in /opt/crm/backups/, 14-day
retention. Verified 2026-08-01: ran manually, confirmed the DB dump contains
real data (company name constant, 466 real statements) and the documents tar
contains real Dolibarr directory structure.
cd /opt/crm
./scripts/backup.sh # backup first
# edit compose.yml, bump dolibarr image tag
docker exec crm-dolibarr rm -f /var/www/documents/install.lock
docker compose pull && docker compose up -d
docker compose logs -f dolibarr # watch migration complete
Full details (including rollback) in /root/README.md on the container.
Not yet added to Uptime Kuma — recommended follow-up: HTTP monitor against
http://192.168.86.222:8080/, expect 200.
/dev/net/tun by default — the Tailscale/etc/pve/lxc/101.confDOLI_URL_ROOT in .env is currently the LAN IP — unlike Twenty, Dolibarrhttps://crm.codycodez.com once the reverse proxyosd.0, osd.10) were showing aBLUESTORE_SLOW_OP_ALERT warning during deploy, unrelated pre-existing| Symptom | Check | Fix |
|---|---|---|
| Web UI not reachable | docker compose ps — both containers healthy? |
docker compose logs dolibarr for real errors |
| Login redirects/emails have wrong domain after reverse-proxy setup | .env's DOLI_URL_ROOT |
Update to https://crm.codycodez.com, docker compose up -d dolibarr |
| Need to see what's actually enabled | SELECT name FROM llx_const WHERE name LIKE 'MAIN_MODULE_%' in the dolidb database |
Compare against the Enabled Modules list below |
cd /opt/crm
docker compose ps # status
docker compose logs -f dolibarr # app logs
docker compose restart # restart everything, data-safe
docker exec -it crm-mariadb mariadb -u root -p dolidb # DB shell
curl -s -o /dev/null -w '%{http_code}\n' http://localhost:8080/ # health check
Exactly 6, verified against llx_const after deploy: User (mandatory core),
Societe (Third Parties — also gates Contacts), Agenda, Propale (Proposals),
Facture (Invoices — also gates Payments), Service. Everything else (Stock,
Warehouse, Shipping, POS, HR, Payroll, Expense Reports, Membership,
Contracts, Supplier purchasing, Manufacturing, Projects, advanced
Accounting) is deliberately not enabled, to keep the interface simple —
all available later via Settings → Modules if ever needed.
Customer notes & history — the two native mechanisms: a single
persistent note_private/note_public field per customer for standing
facts ("has an HP OfficeJet printer"), and Agenda/Events for the actual
dated chronological history (each visit = one dated event with a title and
long description, accumulating as a timeline on the customer record) — this
is the native answer to "come back months later and see what I did, by date."
Residential tech help: Customer → Agenda event (the visit) → Invoice
(Service line item, hourly qty × rate) → Payment.
Larger project: Customer → Proposal (line items) → accepted (status →
Signed) → Dolibarr's built-in "Create invoice" button carries over
everything from the proposal without re-entry → Payment.
Business customer: Company (Third Party) → Contact linked via native
fk_soc relation → Proposal/Agenda/Invoice as above, associated with the
company or the specific contact.
| Date | Change |
|---|---|
| 2026-07-31 | Initial Twenty CRM deployment (see git history / prior revisions of this page for full Twenty-era detail). |
| 2026-08-01 | Twenty CRM audited (read-only capability audit — full report delivered separately) and found to lack native invoicing/quotes, a hard requirement. Decision made to replace with Dolibarr. |
| 2026-08-01 | Twenty completely removed (containers, volumes, images, cron, /opt/crm contents) after taking a final backup to /opt/retired-app-backups/twenty-final-2026-08-01/. Dolibarr 23.0.3 + MariaDB 11.4.12 deployed via Docker Compose on the same LXC/IP, port 8080. Company name "Cody Codez LLC" and 6 modules (User/Societe/Agenda/Propale/Facture/Service) activated automatically at install. Backup automation, README, and this page all rebuilt for Dolibarr. |