簡易筆記-使用docker安裝iredmail

iredmail 是一個很強大的軟件,看文件開發者應該是大陸人,很牛!

我12年前就開始用這個軟件, 而且現在還在用!

雖說免費版不支持微軟的AD, 但很多小公司本來就沒有這些配置, 所以沒差.

目前這系統現在已經很穩定很成熟, 非常很適合小公司使用, 大推薦,

而且最近我才發現一位應該是俄羅斯人有持續提供docker安裝方式. https://hub.docker.com/r/lejmr/iredmail , 又更方便了.

以下是我安裝的心得, 有空會持續更新

1. 用volume的方式與docker建立對應, 方便以後備份升級
2. 與官網建議的不同,我移除灰名單模組,這東西又愛又恨,愛的是擋廣告很猛,恨的是要對方重發信,常常被使用者罵收信很慢.
3. 安裝後, 輸入 https://ip:8443/iredadmin  就可以用postmaster@<網域> 登入, 接下來就可以新增網域,或是使用者.
4. 輸入https://ip:8443/mail , 或是 https://ip:8443/sogo 
   使用者登入@<網域>  就可以收發信了
5. 使用管理者也可以收信, 最初系統自行發送的三封信很重要, 例如要dns設定DKIM之類的
6. 我有將/etc/letsencrypt 對應到iRedMal,打算用來取代自簽的證書
docker volume create iredmail_mysql
docker volume create iredmail_vmail
docker volume create iredmail_clamav
docker volume create iredmail_log
docker volume create iredmail_postfix_conf
docker volume create iredmail_amavisd_conf
docker run -p 8443:443 -p 110:110 -p 25:25 -p 587:587 -p 143:143 -p 993:993 -p 995:995 \
            -h <主機名稱(含網域),hostname.domain> \
            -d --restart always \
            -e "MYSQL_ROOT_PASSWORD=password" \
            -e "SOGO_WORKERS=1" \
            -e "TZ=Asia/Taipei" \
            -e "POSTMASTER_PASSWORD={PLAIN}password" \
            -e "IREDAPD_PLUGINS=['reject_null_sender', 'reject_sender_login_mismatch', 'throttle', 'amavisd_wblist', 'sql_alias_access_policy']" \
            -v iredmail_mysql:/var/lib/mysql \
            -v iredmail_vmail:/var/vmail \
            -v iredmail_clamav:/var/lib/clamav \
            -v iredmail_log:/var/log \
            -v iredmail_postfix_conf:/etc/postfix \
            -v iredmail_amavisd_conf:/etc/amavisd \
            -v /etc/letsencrypt:/etc/letsencrypt \
            --name=iredmail lejmr/iredmail:mysql-latest

安裝完畢後, 再進入docker iredamil裡面, 把lets encrypt的檔案對應進去

docker exec -it iredmail bash

mv /etc/ssl/private/iRedMail.key /etc/ssl/private/iRedMail.key.bak
mv /etc/pki/tls/certs/iRedMail.crt /etc/pki/tls/certs/iRedMail.crt.bak
ln -s /etc/letsencrypt/live/你的網域/privkey.pem /etc/ssl/private/iRedMail.key

ln -s /etc/letsencrypt/live/你的網域/fullchain.pem /etc/pki/tls/certs/iRedMail.crt
exit
docker restart iredmail

ubuntu新增bridge網路,讓kvm(libvirt)能夠使用

參考 http://www.linux-kvm.org/page/Networking#Public_Bridge

必須要這樣設定,才能讓 ravada vdi 或是 kvm 新增網卡時候, 不走nat模式, 走bridge模式

手動新增(每次開機都需要再執行一次)

# 請注意 要準備 eth1 為ubuntu第二網卡,請不要用原本的eth0
ip link add br0 type bridge ; ifconfig br0 up
ip link set eth1 master br0

開機自動啟動

# 若是 lxc 使用ubuntu 18.04 請記得確定有安裝netplan
apt install ifupdown  
#修改 /etc/network/interfaces
auto br0
 iface br0 inet dhcp
         bridge_ports    eth1
         bridge_stp      off
         bridge_maxwait  0
         bridge_fd       0 

如何使用virsh備份/還原系統

備份

1. 匯出xml設定檔案,假設vm名稱為 win10_1909

mkdir win10_1909
virsh dumpxml win10_1909 > win10_1909/win10_1909.xml

2.找出所有qcow2並且複製到vm_name這個目錄

cp /var/lib/libvirt/images/win10_1909*.qcow2 win10_1909/

3.壓縮整個目錄

tar jcvfp win10_1909.bz2 win10_1909

還原

1.解開bz2

tar vfxz win10_1909.bz2

2.匯入設定檔案

virsh define --file win10_1909/win10_1909.xml

3.複製qcow2檔案

cp win10_1909/*.qcow2 /var/lib/libvirt/images

沒什麼整理的Ravada vdi安裝筆記

Ravada vdi 網站資源

服務器安裝

1. 實體機(or lxc in pve)安裝ubuntu 18.04 
CPU需支援虛擬功能

2 安裝mysql

sudo apt-get update
sudo apt-get upgrade
sudo apt-get install mysql-server
sudo mysql_secure_installation
sudo mysqladmin -u root -p create ravada
sudo mysql -u root -p ravada -e "create user 'rvd_user'@'localhost' identified by 'Pword12345*'"
sudo mysql -u root -p ravada -e "grant all on ravada.* to rvd_user@'localhost'" 

3 查看mysql設定檔案,可視需要修改使用者密碼,但要搭配上一步驟一起修改

sudo vi /etc/ravada.conf
db:
  user: rvd_user
  password: Pword12345* 

4 安裝相關套件

sudo apt-get install perl libmojolicious-perl mysql-common libauthen-passphrase-perl \
libdbd-mysql-perl libdbi-perl libdbix-connector-perl libipc-run3-perl libnet-ldap-perl \
libproc-pid-file-perl libvirt-bin libsys-virt-perl libxml-libxml-perl libconfig-yaml-perl \
libmoose-perl libjson-xs-perl qemu-utils perlmagick libmoosex-types-netaddr-ip-perl \
libsys-statistics-linux-perl libio-interface-perl libiptables-chainmgr-perl libnet-dns-perl \
wget liblocale-maketext-lexicon-perl libmojolicious-plugin-i18n-perl libdbd-sqlite3-perl \
debconf adduser libdigest-sha-perl qemu-kvm libnet-ssh2-perl libfile-rsync-perl \
libdate-calc-perl libparallel-forkmanager-perl libssh2-1-dev  libssh2-1 libdate-calc-perl \
 zlib1g-dev libpcre3-dev zlib1g-dev libpcre3-dev  make gcc gcc-4.8 \
 libdatetime-perl libdatetime-locale-perl libdatetime-timezone-perl libparams-validationcompiler-perl libspecio-perl libio-stringy-perl libpbkdf2-tiny-perl \
 libfile-sharedir-perl libclass-singleton-perl libsub-quote-perl libexception-class-perl libref-util-perl libclass-data-inheritable-perl libclass-inspector-perl net-tools
sudo reboot
wget http://infoteleco.upc.edu/img/debian/libmojolicious-plugin-renderfile-perl_0.10-1_all.deb
sudo dpkg -i libmojolicious-plugin-renderfile-perl_0.10-1_all.deb 
sudo perl -MCPAN -we 'install "Net::SSH2"'

5 安裝Ravada

wget http://infoteleco.upc.edu/img/debian/ravada_0.6.0_ubuntu-18.04_all.deb
sudo dpkg -i ravada_0.6.0_ubuntu-18.04_all.deb 
sudo apt-get update
sudo apt-get -f install 

6 設定啟動參數

sudo systemctl daemon-reload
sudo systemctl enable rvd_back
sudo systemctl enable rvd_front
sudo systemctl start rvd_back
sudo systemctl start rvd_front 

7 設定qemu 壓縮

sudo vi /etc/libvirt/qemu.conf
加上以下參數
save_image_format = "bzip2" 

8 重開機後,新增使用者,並且同意該使用者為管理員

sudo /usr/sbin/rvd_back --add-user <使用者>

9 使用瀏覽器連線登(上一個步驟新增的使用者登入)

http://your.server.ip:8081/

10 登入ravada後, 安裝VM(win 10)

記得要先把win10 安裝檔案放到ravada主機上(/var/lib/libvirt/images), 然後執行以下指令刷新列表

sudo virsh pool-list

ps.安裝win 10會很痛苦, 滑鼠很慢,之後安裝驅動程式就正常了

11 win10安裝完畢,登入win10下載驅動程式並且安裝起來

安裝virtio驅動程式
https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/archive-virtio/
執行qemu-ga-x64.msi (64-bit) or qemu-ga-x86.msi (32-bit) 
安裝spice guest tools
https://www.spice-space.org/download.html
https://www.spice-space.org/download/windows/spice-guest-tools/spice-guest-tools-latest.exe 
#安裝win10後關機, 編輯開機設定,讓vm的cpu與本機同步
virsh edit <vm name>
加上host-passthrough(直接使用原本的cpu), 以及核心數4(請依照實際cpu數修改)
 <cpu mode='host-passthrough'>
    <topology sockets='1' cores='4' threads='1'/>
 </cpu>

服務器端安裝完畢,找一台主機,使用spice方式連線

若是 linux,樹梅派,可安裝virt-viewer這套件, 安裝完畢可以執行remote-viewer進行連線
若是windows,請到此下載  https://virt-manager.org/download/ 

ps 目前不要嘗試docker, 若要嘗試,請切換branch到369_dockers, 但有一些perl 的bug,要自己修正才能執行,可是最後又會出現backend錯誤

virsh備份還原

請參考 https://kafeiou.pw/2020/03/25/2303/  透過通用的virsh方式備份與還原

還原後,會發現ravada還是沒看到該machine, 因此必須下此指令帶進來,再稍微調整一下硬體設定

rvd_back --import-domain=<machine name>

pve 無法移除自身zfs的vm檔案

查看zfs的狀態

root@pve:/dev/zvol/zdata# zpool status
   pool: zdata
  state: ONLINE
   scan: scrub repaired 0B in 2h35m with 0 errors on Sun Mar  8 02:59:48 2020
 config:
 NAME                                           STATE     READ WRITE CKSUM zdata                                          ONLINE       0     0     0   mirror-0                                     ONLINE       0     0     0     wwn-0xDC_WD10EZEX-08WN4A0_WD-WCC6Y3LRYL6X  ONLINE       0     0     0     wwn-0xDC_WD10EZEX-08WN4A0_WD-WCC6Y2SYFNY2  ONLINE       0     0     0
 errors: No known data errors

查看zfs的檔案

root@pve:/dev/zvol/zdata# zfs list -t volume
 NAME                  USED  AVAIL  REFER  MOUNTPOINT
 zdata/vm-100-disk-0  33.0G   175G    56K  -
 zdata/vm-100-disk-1   683G   142G   683G  -
 zdata/vm-101-disk-0  27.0G   142G  27.0G  -
 zdata/vm-102-disk-0  10.3G   142G  10.3G  -
 zdata/vm-103-disk-0  4.12G   142G  4.12G  -

刪除某個vm, 但是失敗

root@pve:/dev/zvol/zdata# zfs destroy zdata/vm-103-disk-0
 cannot destroy 'zdata/vm-103-disk-0': dataset is busy

停用 multipathd 服務, 然後再刪除看看, 結果成功

root@pve:/dev/zvol/zdata# systemctl stop multipathd.service
 Warning: Stopping multipathd.service, but it can still be activated by:
   multipathd.socket
root@pve:/dev/zvol/zdata# zfs destroy zdata/vm-103-disk-0
root@pve:/dev/zvol/zdata# zfs list -t volume
 NAME                  USED  AVAIL  REFER  MOUNTPOINT
 zdata/vm-100-disk-0  33.0G   179G    56K  -
 zdata/vm-100-disk-1   683G   146G   683G  -
 zdata/vm-101-disk-0  27.0G   146G  27.0G  -
 zdata/vm-102-disk-0  10.3G   146G  10.3G  -
 root@pve:/dev/zvol/zdata# 
1 2 3 ... 34