Madmail حسابها، تنظیمات، سهمیه، توکنها و وضعیت فدراسیون را در یک پایگاه SQL برنامه نگه میدارد: SQLite (پیشفرض) یا PostgreSQL. متن نامهها روی دیسک میماند (Maildir). صفحات اشتراک مخاطب فایل SQLite جداگانهای دارند (sharing.db).
MySQL پشتیبانی نمیشود. عوض کردن driver بهتنهایی فایل SQLite موجود را کپی نمیکند. بعد از ویرایش driver / dsn باید فرآیند را ریاستارت کنید — madmail reload پایگاه را دوباره باز نمیکند.
madmail install همیشه driver sqlite3 مینویسد. مسیر فایل از state_dir شما پیروی میکند.
auth.pass_table local_authdb {
table sql_table {
driver sqlite3
dsn /var/lib/madmail/credentials.db
table_name passwords
}
}
یک پایگاه خالی و نقشی با مجوز ساخت جدول بسازید. هر دو بلوک auth.pass_table و storage.imapsql را روی همان driver postgres و همان DSN بگذارید (v2 همان DSN احراز هویت را باز میکند؛ یکی نبودن آنها پیکربندی را گمراهکننده میکند).
CREATE USER madmail WITH PASSWORD 'choose-a-secret';
CREATE DATABASE madmail OWNER madmail;
نمونه در madmail.conf:
auth.pass_table local_authdb {
auto_create yes
jit_domain $(primary_domain)
table sql_table {
driver postgres
dsn host=127.0.0.1 port=5432 user=madmail password=choose-a-secret dbname=madmail sslmode=disable
table_name passwords
}
}
storage.imapsql local_mailboxes {
auto_create yes
driver postgres
dsn host=127.0.0.1 port=5432 user=madmail password=choose-a-secret dbname=madmail sslmode=disable
retention 24h
default_quota 1G
appendlimit 100M
}
فرم URL هم پذیرفته میشود: postgres://madmail:choose-a-secret@127.0.0.1:5432/madmail?sslmode=disable.
سپس Madmail را ریاستارت کنید. اولین اجرا روی Postgres خالی مهاجرتهای sqlx را اعمال میکند. GORM در کار نیست و لازم نیست جداول quotas / contacts را دستی بسازید.
اول سرویس را متوقف کنید تا SQLite بیکار باشد، بعد:
madmail db sqlite-to-postgres --dsn 'host=127.0.0.1 user=madmail dbname=madmail sslmode=disable' --dry-run
madmail db sqlite-to-postgres --dsn 'host=127.0.0.1 user=madmail dbname=madmail sslmode=disable' -y
پس از کپی، driver postgres را مثل بالا تنظیم کنید و سرویس را روشن کنید. فقط جداول برنامه کپی میشوند. Maildir، صف ارسال مجدد، admin_token و sharing.db جابهجا نمیشوند و madmail.conf بازنویسی نمیشود. اگر Postgres از قبل ردیف رمز عبور داشته باشد، --force لازم است.
برای سرعت، سرور در حال اجرا ممکن است ردیفهای اعتبارنامه (auth.pass_table) و مجموع سهمیه هر کاربر (storage.imapsql) را در RAM نگه دارد. منبع حقیقی همچنان پایگاه داده است.
اگر با CLI (مثلاً madmail creds، madmail accounts یا madmail imap-acct) در حالی که سرویس روشن است دیتابیس را عوض کردید، یک بار Admin API را با POST /admin/cache/reload صدا بزنید تا فرآیند دوباره جداول را بخواند؛ یا سرویس را ریاستارت کنید.