{"id":697,"date":"2026-09-06T14:52:29","date_gmt":"2026-09-06T17:52:29","guid":{"rendered":"https:\/\/www.linuxpro.com.br\/2026\/09\/go-postfixadmin\/"},"modified":"2026-09-08T10:15:50","modified_gmt":"2026-09-08T13:15:50","slug":"go-postfixadmin","status":"publish","type":"post","link":"https:\/\/www.linuxpro.com.br\/en\/2026\/09\/go-postfixadmin\/","title":{"rendered":"go-postfixadmin: a modern dashboard for your Postfix server"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" alt=\"Mascote do LinuxPro administrando as contas de e-mail no painel, com o gopher do Go segurando um envelope\" src=\"\/wp-content\/uploads\/2026\/09\/go-postfixadmin-v2.webp\" width=\"1486\" height=\"856\" \/><\/p>\n<p>Anyone who has set up an email server with Postfix + Dovecot knows the ritual: the <a href=\"\/en\/2026\/09\/a-historia-do-postfixadmin\/\">classic PostfixAdmin<\/a> in PHP, a web server configured just for it, and an interface frozen in time. <strong><a href=\"https:\/\/github.com\/jniltinho\/go-postfixadmin\" rel=\"noopener\" target=\"_blank\">go-postfixadmin<\/a><\/strong> is my modern answer to that: a <strong>single Go binary<\/strong> with the entire Vue 3 frontend embedded \u2014 web dashboard, REST API and command-line tools to manage domains, mailboxes, aliases and transports on your Postfix server. No PHP, no extra web server, no assets folder: download, run, manage.<\/p>\n<h2>What it does<\/h2>\n<ul>\n<li><strong>Complete email management<\/strong> \u2014 domains, mailboxes (with quotas), aliases, domain aliases and Postfix transports<\/li>\n<li><strong>Self-service portal<\/strong> \u2014 end users change their own passwords, configure forwarding and automatic vacation replies (via Dovecot Sieve) without opening a ticket<\/li>\n<li><strong>Production REST API<\/strong> \u2014 versioned (<code data-no-translation=\"\">\/api\/v1<\/code>), JWT with httpOnly refresh, persistent API keys and interactive Swagger to explore<\/li>\n<li><strong>RBAC<\/strong> \u2014 separation between superadmin and domain admin, with fine-grained permissions<\/li>\n<li><strong>CLI and automation<\/strong> \u2014 CSV import\/export, bulk mailbox creation, backups, quota reports and log readers<\/li>\n<li><strong>Observability<\/strong> \u2014 administrative action logging and mail log ingestion (<code data-no-translation=\"\">readlog<\/code>)<\/li>\n<li><strong>Interface in Portuguese<\/strong> \u2014 fully translated UI and messages (pt_BR, English and Spanish)<\/li>\n<li><strong>Two databases<\/strong> \u2014 MariaDB\/MySQL and PostgreSQL, via GORM<\/li>\n<\/ul>\n<h2>Installation in minutes<\/h2>\n<p>Each release publishes <strong>binary, .deb and .rpm<\/strong> \u2014 choose yours at <a href=\"https:\/\/github.com\/jniltinho\/go-postfixadmin\/releases\" rel=\"noopener\" target=\"_blank\">Releases<\/a>. On Debian\/Ubuntu:<\/p>\n<pre data-no-translation=\"\"><code class=\"language-bash\" data-no-translation=\"\">wget https:\/\/github.com\/jniltinho\/go-postfixadmin\/releases\/download\/v1.0.86\/go-postfixadmin_1.0.86_amd64.deb\nsudo apt install .\/go-postfixadmin_1.0.86_amd64.deb<\/code><\/pre>\n<p>In the Red Hat family:<\/p>\n<pre data-no-translation=\"\"><code class=\"language-bash\" data-no-translation=\"\">sudo dnf install https:\/\/github.com\/jniltinho\/go-postfixadmin\/releases\/download\/v1.0.86\/go-postfixadmin-1.0.86-1.x86_64.rpm<\/code><\/pre>\n<p>Generate the configuration, run database migrations and start the server:<\/p>\n<pre data-no-translation=\"\"><code class=\"language-bash\" data-no-translation=\"\">postfixadmin --generate-config\npostfixadmin migrate\npostfixadmin migrate rbac\npostfixadmin server<\/code><\/pre>\n<p>The dashboard opens at <code data-no-translation=\"\">http:\/\/localhost:8080<\/code> \u2014 and with <code data-no-translation=\"\">server.swagger_enable = true<\/code> in the config, live API documentation is at <code data-no-translation=\"\">\/swagger\/<\/code>.<\/p>\n<h2>Prefer Docker?<\/h2>\n<pre data-no-translation=\"\"><code class=\"language-bash\" data-no-translation=\"\">docker run -p 8080:8080 \n  -e DB_URL=\"postfix:senha@tcp(seu-db:3306)\/postfix?charset=utf8mb4&parseTime=True\" \n  jniltinho\/go-postfixadmin:latest<\/code><\/pre>\n<p>The repository includes a <code data-no-translation=\"\">docker-compose.yml<\/code> ready to use with MariaDB and automatic admin creation \u2014 the entire stack starts with one command.<\/p>\n<h2>Integration with Postfix and Dovecot<\/h2>\n<p>go-postfixadmin uses the same proven data model as PostfixAdmin: Postfix and Dovecot read domain, mailbox and alias tables directly from the database. Step-by-step guides for a complete server are in the repository \u2014 <a href=\"https:\/\/github.com\/jniltinho\/go-postfixadmin\/blob\/main\/DOCUMENTS\/setup\/SETUP_MAILSERVER_MARIADB.md\" rel=\"noopener\" target=\"_blank\">MariaDB<\/a> and <a href=\"https:\/\/github.com\/jniltinho\/go-postfixadmin\/blob\/main\/DOCUMENTS\/setup\/SETUP_MAILSERVER_POSTGRESQL.md\" rel=\"noopener\" target=\"_blank\">PostgreSQL<\/a>. There is even a <strong>TCP transport server<\/strong> built in to serve <code data-no-translation=\"\">transport_maps<\/code> to Postfix in real time.<\/p>\n<h2>Under the hood<\/h2>\n<p>Backend in <strong>Go 1.26<\/strong> (Echo v5, GORM, Cobra, Zerolog, OpenAPI via Swaggo); frontend <strong>Vue 3 + TypeScript + Tailwind v4<\/strong> compiled into the binary. The executable is compressed with UPX and .deb\/.rpm packages are generated by GitHub Actions for each release. MIT license.<\/p>\n<h2>Try it<\/h2>\n<p>If you administer Postfix \u2014 from a personal domain to hundreds of clients \u2014 go-postfixadmin was built to remove friction: one binary, one database, a beautiful dashboard and a real API. Install it, start the test <code data-no-translation=\"\">docker-compose<\/code> and tell me what you think: stars and issues on <a href=\"https:\/\/github.com\/jniltinho\/go-postfixadmin\" rel=\"noopener\" target=\"_blank\">GitHub<\/a> are very welcome, and the <a href=\"\/en\/contato\/\">contact page<\/a> is open for use cases and questions.<\/p>","protected":false},"excerpt":{"rendered":"<p>Anyone who has built an email server with Postfix + Dovecot knows the ritual: the classic PHP PostfixAdmin, a web server configured just for it, and an interface frozen in time. go-postfixadmin is my modern answer: a single Go binary with the entire Vue 3 frontend embedded \u2014 a dashboard \u2026 <a title=\"go-postfixadmin: a modern dashboard for your Postfix server\" class=\"read-more\" href=\"https:\/\/www.linuxpro.com.br\/en\/2026\/09\/go-postfixadmin\/\" aria-label=\"Read more about go-postfixadmin: painel moderno para seu servidor Postfix\">Read more<\/a><\/p>","protected":false},"author":0,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[78,2,111,120],"tags":[241,79,31,233,256,72],"class_list":["post-697","post","type-post","status-publish","format-standard","hentry","category-email","category-linux","category-opensource","category-servidores","tag-dovecot","tag-email","tag-golang","tag-postfix","tag-postfixadmin","tag-servidores"],"_links":{"self":[{"href":"https:\/\/www.linuxpro.com.br\/en\/wp-json\/wp\/v2\/posts\/697","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.linuxpro.com.br\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.linuxpro.com.br\/en\/wp-json\/wp\/v2\/types\/post"}],"replies":[{"embeddable":true,"href":"https:\/\/www.linuxpro.com.br\/en\/wp-json\/wp\/v2\/comments?post=697"}],"version-history":[{"count":3,"href":"https:\/\/www.linuxpro.com.br\/en\/wp-json\/wp\/v2\/posts\/697\/revisions"}],"predecessor-version":[{"id":1340,"href":"https:\/\/www.linuxpro.com.br\/en\/wp-json\/wp\/v2\/posts\/697\/revisions\/1340"}],"wp:attachment":[{"href":"https:\/\/www.linuxpro.com.br\/en\/wp-json\/wp\/v2\/media?parent=697"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.linuxpro.com.br\/en\/wp-json\/wp\/v2\/categories?post=697"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.linuxpro.com.br\/en\/wp-json\/wp\/v2\/tags?post=697"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}