Saturday, January 18, 2025

Cài đặt Mailcow

-

Yêu cầu bạn cần phải cài đặt Docker (phiên bản >= 20.10.2) và Docker Compose (phiên bản >= 2.0).

  • Đối với Windows và Mac, bạn có thể tải và cài đặt Docker Desktop từ trang chủ của Docker.
  • Đối với Linux, bạn có thể cài đặt Docker và Docker Compose thông qua các kho lưu trữ của bạn phân phối Linux.

Sau khi cài đặt xong, bạn có thể kiểm tra phiên bản Docker và Docker Compose của bạn bằng cách sử dụng các lệnh sau:

docker --version
docker-compose --version

Nếu phiên bản của bạn đạt yêu cầu được liệt kê ở trên, bạn đã sẵn sàng để triển khai Docker Compose.

curl -sSL https://get.docker.com/ | CHANNEL=stable sh
# After the installation process is finished, you may need to enable the service and make sure it is started (e.g. CentOS 7)
systemctl enable --now docker

Mailcow yêu cầu phiên bản mới nhất của docker compose là phiên bản v2. Nếu Docker được cài đặt bằng cách chạy script trên, Docker Compose sẽ được tự động cài đặt phiên bản >=2.0. Nếu phiên bản Mailcow của bạn cũ hơn hoặc Docker được cài đặt bằng cách khác, Docker Compose hoặc Docker phải được cài đặt bằng tay.

Cài đặt bằng Paketmanager (plugin)

Phương pháp này với các nguồn gói chỉ có thể được thực hiện nếu kho lưu trữ Docker đã được bao gồm. Điều này có thể xảy ra thông qua các hướng dẫn ở trên (xem Docker) hoặc thông qua việc tích hợp bằng tay.

Với hệ điều hành Debian/Ubuntu.

apt update
apt install docker-compose-plugin

Với Centos 7.

yum update
yum install docker-compose-plugin

Cú pháp lệnh của Docker Compose là “docker compose” khi sử dụng phiên bản plugin của Docker Compose. Điều này có thể làm cho người đọc hiểu nhầm rằng cú pháp lệnh là “docker-compose”, nhưng trong phiên bản plugin của Docker Compose, cú pháp lệnh sẽ là “docker compose”.

Cài đặt bằng Script (standalone).

Cài đặt này là cách cài đặt theo kiểu cũ. Nó cài đặt Docker Compose như một chương trình độc lập và không phụ thuộc vào Docker.

LATEST=$(curl -Ls -w %{url_effective} -o /dev/null https://github.com/docker/compose/releases/latest) && LATEST=${LATEST##*/} && curl -L https://github.com/docker/compose/releases/download/$LATEST/docker-compose-$(uname -s)-$(uname -m) > /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose

Theo cách này thì cú pháp lệnh Docker Compose là docker-compose. Vui lòng sử dụng Docker mới nhất hiện có và không sử dụng công cụ đi kèm với kho lưu trữ distro của bạn.

Kiểm tra SELinux

Trên các hệ thống hỗ trợ SELinux, ví dụ: CentOS 7, bạn hãy kiểm tra xem gói ‘container-selinux’ có trên hệ thống của bạn không.

rpm -qa | grep container-selinux

Nếu lệnh trên trả về kết quả trống hoặc không có đầu ra, bạn nên cài đặt nó. Kiểm tra xem docker có hỗ trợ SELinux không:

docker info | grep selinux

Nếu lệnh trên trả về kết quả trống hoặc không có đầu ra, hãy tạo hoặc chỉnh sửa /etc/docker/daemon.json và thêm ‘selinux-enabled’: true, ví dụ:

{
  "selinux-enabled": true
}

Khởi động lại docker daemon và xác minh SELinux hiện đã được bật.

Bước này là cần thiết để đảm bảo các khối lưu trữ của Mailcow được đánh dấu đúng như được khai báo trong file docker-compose.yml. Nếu bạn quan tâm đến cách điều này hoạt động, bạn có thể xem thông tin chi tiết trong file README của https://github.com/containers/container-selinux, nơi đó có nhiều thông tin hữu ích về chủ đề này.

Cài đặt Mailcow

Đoạn code dưới là các lệnh được thực thi dưới quyền root trên một hệ thống Linux. Nó sử dụng git để sao chép mã nguồn của Mailcow-dockerized từ kho lưu trữ GitHub và lưu trữ mã nguồn đó trong thư mục /opt/mailcow-dockerized trên hệ thống.

Cụ thể, các bước được thực hiện như sau:

  • Đăng nhập với tư cách là người dùng root bằng cách sử dụng lệnh “su”.
  • Kiểm tra giá trị umask hiện tại bằng lệnh “umask”.
  • Di chuyển đến thư mục “/opt” bằng lệnh “cd /opt”.
  • Sử dụng git để sao chép mã nguồn Mailcow-dockerized từ kho lưu trữ GitHub bằng lệnh “git clone https://github.com/mailcow/mailcow-dockerized“.
  • Di chuyển đến thư mục mới tạo ra “/opt/mailcow-dockerized” bằng lệnh “cd mailcow-dockerized”.
su
umask

Output

0022 # <- Verify it is 0022

Tải source từ git về.

cd /opt
git clone https://github.com/mailcow/mailcow-dockerized
cd mailcow-dockerized

Initialize mailcow

Đoạn code ./generate_config.sh được sử dụng để tạo ra một file cấu hình cho mailcow. Tệp này sẽ chứa các biến môi trường cần thiết cho các container mailcow. Script này sẽ hỏi người dùng một số câu hỏi liên quan đến cấu hình, chẳng hạn như địa chỉ email, tên miền, tên người dùng, mật khẩu, cài đặt cho proxy và một số tùy chọn khác. Sau khi hoàn tất, script sẽ tạo ra một file .env, chứa các giá trị đã được nhập vào bởi người dùng. Tệp này sẽ được sử dụng trong quá trình triển khai mailcow bằng Docker Compose.

./generate_config.sh

Trình tự như sau, với servers hostname mình nhập admin.hoanghd.com.

root@localhost:/opt/mailcow-dockerized# ./generate_config.sh
Found Docker Compose Plugin (native).
Setting the DOCKER_COMPOSE_VERSION Variable to native
Notice: You´ll have to update this Compose Version via your Package Manager manually!
Press enter to confirm the detected value '[value]' where applicable or enter a custom value.
Mail server hostname (FQDN) - this is not your mail domain, but your mail servers hostname: admin.hoanghd.com

Tiếp theo bạn nhập Timezone.

Timezone [Etc/UTC]: Asia/Ho_Chi_Minh

Nếu bạn đang sử dụng hệ thống cho mục đích sản xuất và đòi hỏi tính ổn định cao, tôi khuyến nghị bạn chọn tùy chọn [1] – nhánh master (stable updates). Nhánh này cung cấp các bản cập nhật ổn định đã được kiểm tra kỹ lưỡng trước khi phát hành và thích hợp cho việc triển khai trong môi trường sản xuất.

Nếu bạn muốn tham gia kiểm thử các tính năng mới và không gìm chế bởi mức độ ổn định, bạn có thể chọn tùy chọn [2] – nhánh nightly (unstable updates, testing). Tuy nhiên, lưu ý rằng nhánh này có thể không phù hợp cho việc triển khai trong môi trường sản xuất, vì nó chưa được kiểm tra kỹ lưỡng và có thể gây ra sự không ổn định.

Which branch of mailcow do you want to use?

Available Branches:
- master branch (stable updates) | default, recommended [1]
- nightly branch (unstable updates, testing) | not-production ready [2]
Choose the Branch with it´s number [1/2] 1

Quá trình chỉnh sửa config bắt đầu.

Fetching origin
Your branch is up to date with 'origin/master'.
Generating snake-oil certificate...
Can't load /root/.rnd into RNG
140544398340544:error:2406F079:random number generator:RAND_load_file:Cannot open file:../crypto/rand/randfile.c:88:Filename=/root/.rnd
Generating a RSA private key
......................++++
..........................................................................................................................................................................................................................................................................................................++++
writing new private key to 'data/assets/ssl-example/key.pem'
-----
Copying snake-oil certificate...

Start mailcow

Nếu sử dụng docker compose (Plugin), hãy Pull các image về server bằng lệnh docker compose pull.

$ docker compose pull
[+] Pulling 71/53                                                                                             ✔ dockerapi-mailcow 4 layers [⣿⣿⣿⣿]      0B/0B      Pulled                                            34.7s
 ✔ netfilter-mailcow 3 layers [⣿⣿⣿]      0B/0B      Pulled                                              8.5s  ⠋ ipv6nat-mailcow 4 layers [⠀⠀⠀⠀]      0B/0B      Pulling                                             37.1s
 ⠋ postfix-mailcow 14 layers [⣷⣿⣿⣿⣿⣿⣿⠀⠀⠀⠀⠀⠀⠀] 29.82MB/31.41MB Pulling                                  37.1s  ⠋ memcached-mailcow 5 layers [⠀⠀⠀⠀⠀]      0B/0B      Pulling                                          37.1s
 ✔ dovecot-mailcow 21 layers [⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿]      0B/0B      Pulled                            35.1s  ⠋ sogo-mailcow 10 layers [⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿]    433B/433B    Pulling                                         37.1s
 ⠋ redis-mailcow 6 layers [⠀⠀⠀⠀⠀⠀]      0B/0B      Pulling                                             37.1s  ⠋ php-fpm-mailcow 11 layers [⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀]      0B/0B      Pulling                                     37.1s
 ⠋ mysql-mailcow 8 layers [⠀⠀⠀⠀⠀⠀⠀⠀]      0B/0B      Pulling                                           37.1s  ⠋ acme-mailcow 7 layers [⣿⣿⣿⣿⣿⣿⣿] 4.619kB/4.619kB Pulling                                             37.1s
 ✔ unbound-mailcow 2 layers [⣿⣿]      0B/0B      Pulled                                                31.3s  ✔ clamd-mailcow 10 layers [⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿]      0B/0B      Pulled                                          8.8s
 ⠋ rspamd-mailcow 5 layers [⠀⠀⠀⠀⠀]      0B/0B      Pulling                                             37.1s  ✔ olefy-mailcow 4 layers [⣿⣿⣿⣿]      0B/0B      Pulled                                                37.1s
 ⠋ nginx-mailcow 6 layers [⠀⠀⠀⠀⠀⠀]      0B/0B      Pulling                                             37.1s  ⠋ ofelia-mailcow 3 layers [⠀⠀⠀]      0B/0B      Pulling                                               37.1s
 ⠋ solr-mailcow 15 layers [⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀]      0B/0B      Pulling                                    37.1s  ⠋ watchdog-mailcow 3 layers [⠀⠀⠀]      0B/0B      Pulling                                             37.1s

Tiếp theo sử dụng docker compose up -d để start các container.

$ docker compose up -d
[+] Building 0.0s (0/0)
[+] Running 32/32
 ✔ Network mailcowdockerized_mailcow-network              Created                                       0.1s
 ✔ Volume "mailcowdockerized_solr-vol-1"                  Cr...                                         0.0s
 ✔ Volume "mailcowdockerized_mysql-vol-1"                 C...                                          0.0s
 ✔ Volume "mailcowdockerized_vmail-vol-1"                 C...                                          0.0s
 ✔ Volume "mailcowdockerized_clamd-db-vol-1"              Created                                       0.0s
 ✔ Volume "mailcowdockerized_crypt-vol-1"                 C...                                          0.0s
 ✔ Volume "mailcowdockerized_mysql-socket-vol-1"          Created                                       0.0s
 ✔ Volume "mailcowdockerized_vmail-index-vol-1"           Created                                       0.0s
 ✔ Volume "mailcowdockerized_rspamd-vol-1"                Created                                       0.0s
 ✔ Volume "mailcowdockerized_sogo-userdata-backup-vol-1"  Created                                       0.0s
 ✔ Volume "mailcowdockerized_postfix-vol-1"               Created                                       0.0s
 ✔ Volume "mailcowdockerized_redis-vol-1"                 C...                                          0.0s
 ✔ Volume "mailcowdockerized_sogo-web-vol-1"              Created                                       0.0s
 ✔ Container mailcowdockerized-olefy-mailcow-1            Started                                       4.0s
 ✔ Container mailcowdockerized-redis-mailcow-1            Started                                       6.6s
 ✔ Container mailcowdockerized-memcached-mailcow-1        Started                                       4.3s
 ✔ Container mailcowdockerized-sogo-mailcow-1             Started                                       1.8s
 ✔ Container mailcowdockerized-solr-mailcow-1             Started                                       3.5s
 ✔ Container mailcowdockerized-watchdog-mailcow-1         Started                                       2.2s
 ✔ Container mailcowdockerized-dockerapi-mailcow-1        Started                                       3.2s
 ✔ Container mailcowdockerized-unbound-mailcow-1          Started                                       2.8s
 ✔ Container mailcowdockerized-clamd-mailcow-1            Started                                       4.5s
 ✔ Container mailcowdockerized-mysql-mailcow-1            Started                                       5.3s
 ✔ Container mailcowdockerized-php-fpm-mailcow-1          Started                                       8.1s
 ✔ Container mailcowdockerized-postfix-mailcow-1          Started                                       7.1s
 ✔ Container mailcowdockerized-nginx-mailcow-1            Started                                       8.7s
 ✔ Container mailcowdockerized-dovecot-mailcow-1          Started                                       9.2s
 ✔ Container mailcowdockerized-rspamd-mailcow-1           Started                                      11.0s
 ✔ Container mailcowdockerized-acme-mailcow-1             Started                                      10.2s
 ✔ Container mailcowdockerized-ofelia-mailcow-1           Started                                      10.0s
 ✔ Container mailcowdockerized-netfilter-mailcow-1        Started                                       9.3s
 ✔ Container mailcowdockerized-ipv6nat-mailcow-1          Started                                      11.0s

Nếu sử dụng docker-compose (Standalone).

docker-compose pull
docker-compose up -d

Xác nhận các container đã khởi động thành công.

$ docker compose ps
NAME                                    IMAGE                    COMMAND                  SERVICE             CREATED              STATUS                             PORTS
mailcowdockerized-acme-mailcow-1        mailcow/acme:1.84        "/sbin/tini -g -- /s…"   acme-mailcow        About a minute ago   Up 53 seconds
mailcowdockerized-clamd-mailcow-1       mailcow/clamd:1.61       "/sbin/tini -g -- /c…"   clamd-mailcow       About a minute ago   Up 59 seconds (health: starting)   3310/tcp, 7357/tcp
mailcowdockerized-dockerapi-mailcow-1   mailcow/dockerapi:2.04   "/bin/sh /app/docker…"   dockerapi-mailcow   About a minute ago   Up About a minute
mailcowdockerized-dovecot-mailcow-1     mailcow/dovecot:1.24     "/docker-entrypoint.…"   dovecot-mailcow     About a minute ago   Up 54 seconds                      0.0.0.0:110->110/tcp, :::110->110/tcp, 0.0.0.0:143->143/tcp, :::143->143/tcp, 0.0.0.0:993->993/tcp, :::993->993/tcp, 0.0.0.0:995->995/tcp, :::995->995/tcp, 0.0.0.0:4190->4190/tcp, :::4190->4190/tcp, 127.0.0.1:19991->12345/tcp
mailcowdockerized-ipv6nat-mailcow-1     robbertkl/ipv6nat        "/docker-ipv6nat-com…"   ipv6nat-mailcow     About a minute ago   Up 52 seconds
mailcowdockerized-memcached-mailcow-1   memcached:alpine         "docker-entrypoint.s…"   memcached-mailcow   About a minute ago   Up 59 seconds                      11211/tcp
mailcowdockerized-mysql-mailcow-1       mariadb:10.5             "docker-entrypoint.s…"   mysql-mailcow       About a minute ago   Up 58 seconds                      127.0.0.1:13306->3306/tcp
mailcowdockerized-netfilter-mailcow-1   mailcow/netfilter:1.52   "python3 -u /server.…"   netfilter-mailcow   About a minute ago   Up 41 seconds
mailcowdockerized-nginx-mailcow-1       nginx:mainline-alpine    "/docker-entrypoint.…"   nginx-mailcow       About a minute ago   Up 54 seconds                      0.0.0.0:80->80/tcp, :::80->80/tcp, 0.0.0.0:443->443/tcp, :::443->443/tcp
mailcowdockerized-ofelia-mailcow-1      mcuadros/ofelia:latest   "/usr/bin/ofelia dae…"   ofelia-mailcow      About a minute ago   Up 53 seconds
mailcowdockerized-olefy-mailcow-1       mailcow/olefy:1.11       "python3 -u /app/ole…"   olefy-mailcow       About a minute ago   Up About a minute
mailcowdockerized-php-fpm-mailcow-1     mailcow/phpfpm:1.84      "/docker-entrypoint.…"   php-fpm-mailcow     About a minute ago   Up 55 seconds                      9000/tcp
mailcowdockerized-postfix-mailcow-1     mailcow/postfix:1.68     "/docker-entrypoint.…"   postfix-mailcow     About a minute ago   Up 56 seconds                      0.0.0.0:25->25/tcp, :::25->25/tcp, 0.0.0.0:465->465/tcp, :::465->465/tcp, 0.0.0.0:587->587/tcp, :::587->587/tcp, 588/tcp
mailcowdockerized-redis-mailcow-1       redis:7-alpine           "docker-entrypoint.s…"   redis-mailcow       About a minute ago   Up 57 seconds                      127.0.0.1:7654->6379/tcp
mailcowdockerized-rspamd-mailcow-1      mailcow/rspamd:1.92      "/docker-entrypoint.…"   rspamd-mailcow      About a minute ago   Up 11 seconds
mailcowdockerized-sogo-mailcow-1        mailcow/sogo:1.117       "/docker-entrypoint.…"   sogo-mailcow        About a minute ago   Up About a minute
mailcowdockerized-solr-mailcow-1        mailcow/solr:1.8.1       "docker-entrypoint.s…"   solr-mailcow        About a minute ago   Up About a minute                  127.0.0.1:18983->8983/tcp
mailcowdockerized-unbound-mailcow-1     mailcow/unbound:1.17     "/docker-entrypoint.…"   unbound-mailcow     About a minute ago   Up About a minute                  53/tcp, 53/udp
mailcowdockerized-watchdog-mailcow-1    mailcow/watchdog:1.97    "/bin/sh -c /watchdo…"   watchdog-mailcow    About a minute ago   Up About a minute

Tới đây đã kết thúc quá trình cài đặt mailcow-dockerized. Sau khi quá trình cài đặt hoàn tất, bạn có thể truy cập vào https://${MAILCOW_HOSTNAME} với tên đăng nhập mặc định là admin và mật khẩu là moohoo để sử dụng mailcow.

Kết quả login thành công.

LEAVE A REPLY

Please enter your comment!
Please enter your name here

4,956FansLike
256FollowersFollow
223SubscribersSubscribe
spot_img

Related Stories