[{"data":1,"prerenderedAt":156},["ShallowReactive",2],{"seo-verification":3,"blog-host-listmonk-on-your-own-vps-ma-en":6,"promo-bar-likely":155},{"google":4,"bing":5},"EycwPY2XMyTkVzas3n1ygeNJFGAH513qrMjfDljzsMQ","",{"key":7,"data":8},"blog-host-listmonk-on-your-own-vps-ma-en",{"id":9,"slug":10,"slugs":11,"title":15,"excerpt":16,"readTime":17,"views":18,"isPinned":19,"noindex":19,"publishedAt":20,"updatedAt":21,"category":22,"categories":27,"featuredImage":29,"bgImage":30,"posterImage":31,"relatedSolution":32,"intro":34,"sections":35,"ctaTitle":96,"ctaBody":97,"ctaButton":98,"ctaUrl":99,"relatedPosts":100},87,"host-listmonk-on-your-own-vps",{"fr":12,"en":10,"ar":13,"es":14},"heberger-listmonk","استضافة-listmonk-على-خادمك-الافتراضي-الخاص-vps","alojar-listmonk-en-un-vps","Host Listmonk on Your Own VPS","Deploy Listmonk on your VPS: Docker installation, advanced SMTP configuration, bounce management, updates, common troubleshooting and PostgreSQL backups.",7,0,false,"2026-03-25T00:00:00+00:00","2026-09-20T21:13:53+00:00",{"id":17,"name":23,"slug":24,"color":25,"icon":26},"Self-hosting","self-hosting","bg-indigo-500\u002F10 text-indigo-400","cloud",[28],{"id":17,"name":23,"slug":24,"color":25,"icon":26},null,"\u002Fblog\u002Fcovers\u002Fbg.svg","\u002Fblog\u002Fcovers\u002Fheberger-listmonk-poster.svg",{"categorySlug":24,"appSlug":33},"listmonk","Mailchimp, Brevo and the like bill per contact and cap your sends. Listmonk reverses the model: an open source newsletter manager, written in Go, able to send millions of emails from your own infrastructure. Here is how to install it on a VPS, configure it in depth and keep it running over time.",[36,40,50,53,75,78,81,84,87,90,93],{"type":37,"title":38,"body":39},"h2","Why self-host Listmonk on a VPS","Listmonk is a single Go binary backed by PostgreSQL, able to manage massive lists and segmented campaigns with a very high send rate. Self-hosting becomes worthwhile as soon as your subscriber base exceeds a few thousand contacts: SaaS platforms then bill hundreds of euros a month for a task that a modest VPS performs for the price of the server. You retain full ownership of your email database (no leak to a third party), you connect the SMTP relay of your choice and you control the send pace to preserve your sender reputation. A VPS is essential here because Listmonk needs a persistent process, a PostgreSQL database and open outbound SMTP ports — freedoms that no shared hosting grants.",{"type":41,"title":42,"items":43},"ul","Concrete benefits of a self-hosted Listmonk",[44,45,46,47,48,49],"No per-contact cost: the bill no longer depends on the size of your list but only on the VPS.","Segmentation by SQL queries: target subsets of subscribers with a precision impossible on most SaaS platforms.","Rich templating (Go templates + HTML) and A\u002FB campaigns versionable in your repository.","Complete REST API: trigger transactional sends from your application via webhook.","Tracking of opens, clicks and bounces in a unified interface, without a third-party pixel.","Free choice of relay (Postmark, Amazon SES, OVH, your own Postfix) to optimize deliverability and cost.",{"type":37,"title":51,"body":52},"Technical requirements","Listmonk itself is very light, but PostgreSQL and the send volume call for reasonable sizing: plan for 2 vCPUs, 2 GB of RAM and 20 GB of disk for a base of a few tens of thousands of contacts; go up to 4 GB of RAM if you run large simultaneous campaigns. On the infrastructure side: Docker and Docker Compose, a domain `mail.yourdomain.com` with an A record to the VPS, and above all the email authentication DNS records (SPF, DKIM, DMARC) configured on the sending domain. An SMTP relay with credentials (host, port 587, user, password) is necessary — direct sending from a VPS's IP is often blocked by providers.",{"type":54,"title":55,"steps":56},"steps","Deploy Listmonk step by step",[57,60,63,66,69,72],{"title":58,"body":59},"Retrieve the official stack","On the VPS, create `\u002Fopt\u002Flistmonk` then download the reference compose file: `curl -LO https:\u002F\u002Fraw.githubusercontent.com\u002Fknadh\u002Flistmonk\u002Fmaster\u002Fdocker-compose.yml`. It declares two services, `app` (listmonk) and `db` (PostgreSQL).",{"title":61,"body":62},"Initialize the database","Run the initial migration before the first run: `docker compose run --rm app .\u002Flistmonk --install`. This command creates the PostgreSQL schema and the administrator user. Enter a strong admin password at the prompt.",{"title":64,"body":65},"Start the service","Start the stack with `docker compose up -d`. Listmonk listens on port 9000 internally. Check the container status with `docker compose ps` and review the logs if needed.",{"title":67,"body":68},"Configure the reverse proxy and SSL","Expose Listmonk behind a reverse proxy with HTTPS. Caddy example: `mail.yourdomain.com { reverse_proxy app:9000 }`. The Let's Encrypt certificate is generated automatically. Never expose port 9000 directly on the Internet.",{"title":70,"body":71},"Connect the SMTP relay","In Settings > SMTP, enter your relay's parameters (host, port 587, credentials, TLS enabled). Send a test email from the interface to validate the connection before any campaign.",{"title":73,"body":74},"Secure deliverability","Check with an external tool that SPF, DKIM and DMARC pass green on your sending domain. Start with small campaigns to \"warm up\" the relay's IP and monitor the bounce rate in the dashboard.",{"type":37,"title":76,"body":77},"Advanced configuration: SMTP, lists and segments","Listmonk supports multiple SMTP servers simultaneously: create one server dedicated to transactional sends (confirmations, forgotten passwords) and another for marketing campaigns, each with its own credentials and rate limits. To handle bounces automatically, enable the **Bounce Processor** under Settings > Bounces: Listmonk polls an IMAP inbox (or a webhook from your relay) and removes invalid addresses without manual intervention.\n\nFor lists, prefer **double opt-in** (Settings > Lists > Opt-in): a confirmation email is sent to every new subscriber, protecting your reputation and complying with GDPR. **Dynamic segments** (Lists > New segment) rely on raw SQL queries against the subscriber table: for example `attribs->>'plan' = 'pro' AND created_at > NOW() - INTERVAL '30 days'` to target new premium customers. These custom attributes are passed at subscription time via the API (`POST \u002Fapi\u002Fsubscribers`) in the `attribs` field (free JSON object).",{"type":37,"title":79,"body":80},"Updating Listmonk","Before any update, back up the database: `docker exec listmonk_db_1 pg_dump -U listmonk listmonk > backup-before-update.sql`. Then stop the stack, pull the new image and run the migration script:\n\n```bash\ndocker compose down\ndocker compose pull\ndocker compose run --rm app .\u002Flistmonk --upgrade\ndocker compose up -d\n```\n\nThe `--upgrade` flag applies the schema migrations required between versions. Check the changelog on the official repository before jumping between major versions: some migrations are irreversible. Once the service has restarted, verify the interface and send a test email to confirm everything is working.",{"type":37,"title":82,"body":83},"Common troubleshooting","**SMTP connection refused — `connection refused` on port 587.** Most VPS providers block outbound SMTP ports (25, 465, 587) to fight spam. The fix: use an external SMTP relay (Postmark, Amazon SES, Brevo in relay mode) whose traffic goes out via HTTPS API or an allowed port. Also verify that TLS is enabled on the Listmonk side (`STARTTLS` for port 587).\n\n**PostgreSQL unreachable at startup — `dial tcp db:5432: connect: connection refused`.** The `app` container starts before PostgreSQL is ready. Add a `depends_on` directive with `condition: service_healthy` in your `docker-compose.yml`, or wait a few seconds before restarting: `docker compose restart app`.\n\n**502 Bad Gateway with Caddy.** The Listmonk container is not running or has crashed. Check `docker compose ps`: if `app` is in an `Exited` state, run `docker compose logs app` to identify the error, then `docker compose up -d` to restart it.\n\n**CSV import blocked or subscribers missing.** Listmonk requires a CSV file encoded in **UTF-8 without BOM**, with at least one `email` column. A file exported from Excel may contain a BOM (invisible marker at the start of the file) or a Windows-1252 encoding: convert it with `iconv -f WINDOWS-1252 -t UTF-8 list.csv > list-utf8.csv` before importing.",{"type":85,"body":86},"tip","Set the send rate limit (`Settings > Performance > max concurrent connections` and `message rate`) according to your SMTP relay's quotas. Too aggressive a send drives up the spam and rejection rate. For critical transactional emails, create a second mail server in Listmonk dedicated to those sends, separate from the marketing server: that way a reputation issue on the newsletters does not affect your confirmation emails.",{"type":85,"title":88,"body":89},"GDPR and suppression lists","Listmonk automatically maintains a suppression list (unsubscribes + hard bounces). To comply with GDPR, enable double opt-in on all public lists and configure the unsubscribe page with a `{{ UnsubscribeURL }}` link in every template. Data from unsubscribed contacts remains in the database (to prevent accidental re-subscription) but is flagged `blocklisted`: they receive no further sends. Export and purge these entries regularly if your DPA requires it.",{"type":37,"title":91,"body":92},"Use case: e-commerce store with transactional email and newsletters","Consider a self-hosted PrestaShop or WooCommerce store on a ServOrbit VPS. Configure Listmonk as the central email engine: order confirmations and shipping notifications go through the transactional API (`\u002Fapi\u002Ftx`) with a Listmonk template; customers who opt in to the newsletter receive a weekly campaign via a Listmonk list. One SMTP relay, one platform, zero per-subscriber fees. Custom attribute segmentation (average cart value, preferred category, last purchase date) lets you target precise offers — without exporting your customer data to a third-party SaaS.",{"type":37,"title":94,"body":95},"Backup and data portability","Listmonk stores all data in PostgreSQL (the `listmonk-db` Docker volume). To back up: `docker exec listmonk_db_1 pg_dump -U listmonk listmonk > backup.sql`. To restore on a new instance: deploy a fresh Listmonk, stop the app container, restore the database (`psql -U listmonk listmonk \u003C backup.sql`) and restart. Attached files (inline images) live in the `listmonk-uploads` volume. Listmonk's REST API also lets you export subscribers as CSV at any time from the UI or via script.","Take back control of your newsletters","With the ServOrbit Cloud VPS and its preconfigured Listmonk template (PostgreSQL and reverse proxy included), send your campaigns with no contact cap and no monthly subscription. You keep your database, you choose your relay.","Deploy on Cloud VPS","\u002Fvps-cloud",[101,120,138],{"id":102,"slug":103,"slugs":104,"title":108,"excerpt":109,"readTime":110,"views":111,"isPinned":19,"noindex":19,"publishedAt":112,"updatedAt":113,"category":114,"categories":115,"featuredImage":29,"bgImage":30,"posterImage":117,"relatedSolution":118},71,"hosting-nextcloud-on-your-own-vps",{"fr":105,"en":103,"ar":106,"es":107},"heberger-nextcloud","استضافة-nextcloud-على-خادمك-الـvps-الخاص","alojar-nextcloud-en-su-propio-vps","Self-Host Nextcloud on VPS: NC 35, PHP 8.3 and MariaDB 11 Guide","Host Nextcloud on a VPS: Docker Compose, Redis, MariaDB backup, uploads over 40 GB behind Cloudflare and an alternative to Office 2021.",20,1,"2026-04-10T00:00:00+00:00","2026-11-08T16:32:50+00:00",{"id":17,"name":23,"slug":24,"color":25,"icon":26},[116],{"id":17,"name":23,"slug":24,"color":25,"icon":26},"\u002Fblog\u002Fcovers\u002Fheberger-nextcloud-poster.svg",{"categorySlug":24,"appSlug":119},"nextcloud",{"id":121,"slug":122,"slugs":123,"title":127,"excerpt":128,"readTime":129,"views":111,"isPinned":19,"noindex":19,"publishedAt":130,"updatedAt":131,"category":132,"categories":133,"featuredImage":29,"bgImage":30,"posterImage":135,"relatedSolution":136},72,"hosting-ghost-on-your-own-vps",{"fr":124,"en":122,"ar":125,"es":126},"heberger-ghost","استضافة-ghost-على-خادمك-الـvps-الخاص","alojar-ghost-en-un-vps","Hosting Ghost on your own VPS: complete 2026 guide","Deploy Ghost v6 on your VPS with Caddy, MySQL, Ghost CLI and Stripe Tax: installation, TLS reverse proxy, updates and troubleshooting common startup errors.",10,"2026-04-09T00:00:00+00:00","2026-11-04T16:30:25+00:00",{"id":17,"name":23,"slug":24,"color":25,"icon":26},[134],{"id":17,"name":23,"slug":24,"color":25,"icon":26},"\u002Fblog\u002Fcovers\u002Fheberger-ghost-poster.svg",{"categorySlug":24,"appSlug":137},"ghost",{"id":139,"slug":140,"slugs":141,"title":145,"excerpt":146,"readTime":17,"views":18,"isPinned":19,"noindex":19,"publishedAt":147,"updatedAt":148,"category":149,"categories":150,"featuredImage":29,"bgImage":30,"posterImage":152,"relatedSolution":153},73,"host-wordpress-on-your-own-vps",{"fr":142,"en":140,"ar":143,"es":144},"heberger-wordpress","استضافة-wordpress-على-خادم-vps-الخاص-بك","alojar-wordpress-en-un-vps","Host WordPress on your own VPS","Host WordPress on your VPS for maximum performance and control: Docker, MariaDB, caching, reverse proxy and SSL.","2026-04-08T00:00:00+00:00","2026-11-09T20:55:18+00:00",{"id":17,"name":23,"slug":24,"color":25,"icon":26},[151],{"id":17,"name":23,"slug":24,"color":25,"icon":26},"\u002Fblog\u002Fcovers\u002Fheberger-wordpress-poster.svg",{"categorySlug":24,"appSlug":154},"wordpress",true,1794270413120]