Docker image untuk addy.io ini adalah layanan penerusan email anonim yang dilengkapi berbagai fitur untuk mempermudah pengelolaan email Anda. Image ini dirancang agar dapat berjalan sebagai non-root user dan mendukung multi-platform. s6-overlay digunakan sebagai process supervisor untuk menjaga proses tetap berjalan, dan Traefik dapat dimanfaatkan sebagai reverse proxy serta untuk pembuatan/pembaruan sertifikat Let’s Encrypt (Anda bisa melihat template yang disediakan untuk konfigurasi Traefik).
Fitur Utama:
- Non-root User: Dirancang untuk keamanan, berjalan sebagai pengguna non-root.
- Multi-platform: Mendukung berbagai arsitektur seperti linux/amd64, linux/arm/v6, linux/arm/v7, dan linux/arm64.
- s6-overlay: Digunakan sebagai process supervisor untuk memastikan stabilitas.
- Traefik Integration: Dapat diintegrasikan dengan Traefik untuk reverse proxy dan manajemen sertifikat Let’s Encrypt.
Cara Membangun Secara Lokal:
- Clone Repositori: git clone https://github.com/anonaddy/docker.git docker-addy
- Masuk Direktori: cd docker-addy
- Build Image:
- Default: docker buildx bake
- Multi-platform: docker buildx bake image-all
Ketersediaan Image (Platform):
Untuk melihat platform yang didukung, jalankan perintah ini:
docker buildx imagetools inspect anonaddy/anonaddy --format "{{json .Manifest}}" | jq -r '.manifests[] | select(.platform.os != null and .platform.os != "unknown") | .platform | "\(.os)/\(.architecture)\(if .variant then "/" + .variant else "" end)"'
Variabel Lingkungan (Environment Variables):
General:
- TZ: Zona waktu container (default: UTC)
- PUID: User ID (default: 1000)
- PGID: Group ID (default: 1000)
- MEMORY_LIMIT: Batas memori PHP (default: 256M)
- UPLOAD_MAX_SIZE: Batas ukuran unggah (default: 16M)
- CLEAR_ENV: Membersihkan lingkungan di worker FPM (default: yes)
- OPCACHE_MEM_SIZE: Konsumsi memori PHP OpCache (default: 128)
- LISTEN_IPV6: Mengaktifkan IPv6 untuk Nginx dan Postfix (default: true)
- REAL_IP_FROM: Alamat terpercaya untuk pengganti IP klien (default: 0.0.0.0/32)
- REAL_IP_HEADER: Header permintaan untuk mengganti alamat klien (default: X-Forwarded-For)
- LOG_IP_VAR: Variabel untuk mengambil alamat IP remote di Nginx (default: remote_addr)
- LOG_CROND: Mengaktifkan logging crond (default: true)
App:
- APP_NAME: Nama aplikasi (default: addy.io)
- APP_KEY: Wajib. Kunci enkripsi aplikasi. Hasilkan dengan anonaddy key:generate –show atau echo “base64:$(openssl rand -base64 32)”.
- APP_DEBUG: Mengaktifkan/menonaktifkan mode debug (default: false)
- APP_URL: URL instalasi Anda.
- ANONADDY_RETURN_PATH: Header return-path untuk email keluar.
- ANONADDY_ADMIN_USERNAME: Username admin untuk menerima email yang diteruskan di domain root.
- ANONADDY_ENABLE_REGISTRATION: Mencegah pendaftaran pengguna baru (default: true).
- ANONADDY_DOMAIN: Wajib. Domain root untuk menerima email.
- ANONADDY_HOSTNAME: FQDN hostname server Anda untuk validasi custom domain.
- ANONADDY_DNS_RESOLVER: Resolver DNS untuk validasi custom domain (default: 127.0.0.1).
- ANONADDY_ALL_DOMAINS: Daftar domain tambahan (misal: example.com,example2.com).
- ANONADDY_NON_ADMIN_SHARED_DOMAINS: Mencegah non-admin membuat alias domain bersama (default: true).
- ANONADDY_SECRET: Wajib. String acak panjang untuk hashing data balasan anonim.
- ANONADDY_LIMIT: Batas penerusan dan balasan email per jam (default: 200).
- ANONADDY_BANDWIDTH_LIMIT: Batas bandwidth bulanan dalam byte (default: 104857600).
- ANONADDY_NEW_ALIAS_LIMIT: Batas pembuatan alias baru per jam (default: 10).
- ANONADDY_ADDITIONAL_USERNAME_LIMIT: Batas penambahan username ke akun (default: 10).
- ANONADDY_SIGNING_KEY_FINGERPRINT: Fingerprint kunci GPG untuk menandatangani email yang diteruskan.
- ANONADDY_DKIM_SIGNING_KEY: Path ke kunci privat DKIM untuk menandatangani email custom domain.
- ANONADDY_DKIM_SELECTOR: Selector untuk kunci DKIM (default: default).
- Catatan: APP_KEY_FILE, ANONADDY_SECRET_FILE, dan ANONADDY_SIGNING_KEY_FINGERPRINT_FILE dapat digunakan untuk mengisi nilai dari file (fitur Docker secrets).
Database:
- DB_HOST: Wajib. Hostname/IP database MySQL.
- DB_PORT: Port database MySQL (default: 3306).
- DB_DATABASE: Nama database MySQL (default: anonaddy).
- DB_USERNAME: User MySQL (default: anonaddy).
- DB_PASSWORD: Password MySQL.
- DB_TIMEOUT: Waktu tunggu koneksi MySQL (default: 60 detik).
- Catatan: DB_USERNAME_FILE dan DB_PASSWORD_FILE dapat digunakan untuk mengisi nilai dari file (fitur Docker secrets).
Redis:
- REDIS_HOST: Hostname/IP Redis.
- REDIS_PORT: Port Redis (default: 6379).
- REDIS_PASSWORD: Password Redis.
- Catatan: REDIS_PASSWORD_FILE dapat digunakan untuk mengisi nilai dari file (fitur Docker secrets).
Mail:
- MAIL_FROM_NAME: Nama pengirim (default: addy.io).
- MAIL_FROM_ADDRESS: Alamat email pengirim (default: addy@${ANONADDY_DOMAIN}).
- MAIL_ENCRYPTION: Protokol enkripsi untuk email (default: null).
Postfix:
- POSTFIX_DEBUG: Mengaktifkan debug (default: false).
- POSTFIX_MESSAGE_SIZE_LIMIT: Ukuran maksimal pesan dalam byte (default: 26214400).
- POSTFIX_SMTPD_TLS: Mengaktifkan TLS di server SMTP Postfix (default: false, nilai: true|may|encrypt|ask|require).
- POSTFIX_SMTPD_TLS_CERT_FILE: File sertifikat RSA server SMTP Postfix (format PEM).
- POSTFIX_SMTPD_TLS_ECCERT_FILE: File sertifikat ECC server SMTP Postfix (format PEM).
- POSTFIX_SMTPD_TLS_ECKEY_FILE: File kunci privat ECC server SMTP Postfix (format PEM).
- POSTFIX_SMTPD_TLS_KEY_FILE: File kunci privat RSA server SMTP Postfix (format PEM).
- POSTFIX_SMTP_TLS: Mengaktifkan TLS di klien SMTP Postfix (default: false, nilai: true|may|encrypt|dane|dane-only|verify|secure).
- POSTFIX_RELAYHOST: Host default untuk mengirim mail.
- POSTFIX_RELAYHOST_AUTH_ENABLE: Mengaktifkan autentikasi sisi klien untuk relayhost (default: false).
- POSTFIX_RELAYHOST_USERNAME: Username klien SMTP Postfix untuk autentikasi relayhost.
- POSTFIX_RELAYHOST_PASSWORD: Password klien SMTP Postfix untuk autentikasi relayhost.
- POSTFIX_RELAYHOST_SSL_ENCRYPTION: Mengaktifkan enkripsi SSL melalui SMTP jika TLS tidak tersedia (default: false, nilai: true|tls_policy).
- POSTFIX_SMTP_TLS_DOMAINS_EXCEPTIONS: Daftar domain terpisah koma dengan pengecualian TLS.
- POSTFIX_SPAMAUS_DQS_KEY: Kunci personal untuk Spamhaus DQS.
- Catatan: POSTFIX_RELAYHOST_USERNAME_FILE dan POSTFIX_RELAYHOST_PASSWORD_FILE dapat digunakan untuk mengisi nilai dari file (fitur Docker secrets).
RSPAMD:
- RSPAMD_ENABLE: Mengaktifkan layanan Rspamd (default: false).
- RSPAMD_WEB_PASSWORD: Password web Rspamd (default: null).
- RSPAMD_NO_LOCAL_ADDRS: Menonaktifkan jaringan lokal Rspamd (default: false).
- RSPAMD_SMTPD_MILTERS: Daftar aplikasi Milter (spasi atau koma sebagai pemisah) untuk email baru (default: inet:127.0.0.1:11332).
- RSPAMD_GREYLIST_ENABLE: Mengaktifkan greylisting di Rspamd (default: true).
- Catatan: RSPAMD_WEB_PASSWORD_FILE dapat digunakan untuk mengisi nilai dari file (fitur Docker secrets).
- Peringatan: Kunci privat DKIM harus ada di /data/dkim/${ANONADDY_DOMAIN}.private. Jika tidak ditemukan, layanan Rspamd akan dinonaktifkan. Rspamd perlu diaktifkan agar fitur balasan anonim berfungsi.
Volumes:
- /data: Berisi semua data penyimpanan.
- Peringatan: Pastikan volume ini dimiliki oleh user/group dengan PUID dan PGID yang ditentukan. Izin yang salah dapat mencegah container memulai.
Ports:
- 8000: Port HTTP (addy.io).
- 11334: Port HTTP (dashboard web Rspamd).
- 25: Port SMTP (Postfix).
Penggunaan dengan Docker Compose:
Docker Compose adalah cara yang direkomendasikan.
- Jalankan Container: Gunakan template docker-compose.yml yang disediakan, lalu docker compose up -d.
- Lihat Log: docker compose logs -f.
Upgrade:
- docker compose pull
- docker compose up -d
Catatan Penting:
- Perintah anonaddy: Untuk mengelola pengguna, kata sandi, dan operasi server lainnya, gunakan: docker compose exec addy anonaddy <command>. Contoh untuk melihat semua perintah: docker compose exec addy anonaddy list.
- Membuat User Baru: docker compose exec addy anonaddy anonaddy:create-user “username” “webmaster@example.com”.
- Menghasilkan Keypair DKIM: Jalankan docker compose run –entrypoint ” addy gen-dkim. Ini akan menghasilkan kunci privat di data/dkim/example.com.private dan record DNS TXT publik di data/dkim/example.com.txt.
