Rocky Linux podman 更改storage注意事項

之前使用docker, 我會把selinux關掉, 這次改用podman, 我順帶挑戰不關selinux , 果然就遇到問題了

  • storage存放位置變更

正確的是, 我原本安裝時候, 就將路徑改了 , 請參照這篇文章 , 但是後來又新增一個新的partition , 用mount的方式覆蓋原本podman storage 路徑, 這看起來很棒, 都不用改,但還是遇到問題了, 我啟用原本的container, 出現

我用podman logs <container name> 查看有這bug , 後來想想應該是selinux權限問題, 就重新跑一次這個指令

restorecon -R -v /podman/storage/
# /podman/storage 是我安裝podman改的路徑

自製郵件伺服器啟動腳本

我用自製的docker版郵件伺服器已經一陣子了, 每次要組合出腳本很麻煩, 我又不喜歡用yaml文件, 因此利用github的免費pages, 自己寫了一個簡易自動產生腳本的網頁, 還滿方便的, 頁面難看就請多包涵.

https://williamfromtw.github.io/docker-Postfix-AD/genLaunchCommand.html

podman 安裝自製mail server全紀錄

自製mail server只在docker使用過, 這次挑戰podman

  • 安裝let’s encrypt
dnf install certbot
firewall-cmd --add-service=http --permanent
firewall-cmd --add-service=https --permanent
firewall-cmd --reload
systemctl stop httpd
certbot certonly --standalone --preferred-challenges http -d  mail.test.com

# 若要renew 請加到crontab
certbot renew --post-hook "systemctl restart httpd"
  • 搜尋容器
podman search inmethod
pod man pull docker.io/inmethod/docker-postfix-ad:3.3
  • 建立volume
podman volume create postfixldap_vmail    
podman volume create postfixldap_postfix    
podman volume create postfixldap_dovecot    
podman volume create postfixldap_log    
podman volume create postfixldap_rspamd_conf    
podman volume create postfixldap_rspamd_var    
podman volume create postfixldap_opendkim     
  • 啟用mail server容器

假設我們的AD主機IP : 10.192.130.227
郵件網域 : test.com
郵件主機 : mail.test.com
Ldap SEARCH_BASE : OU=group,DC=test,DC=com
BIND_DN : “cn=ldap,cn=Users,dc=test, dc=com”
BIND_PW: “password”
時區 : “America/New_York” (台灣Asia/Taipei)

我寫了一個自動產生腳本的scripts
https://williamfromtw.github.io/docker-Postfix-AD/genLaunchCommand.html
可以產生以下指令

podman run --name mailserver \
 -v /etc/letsencrypt:/etc/letsencrypt \
 -v mailserver_vmail:/home/vmail \
 -v mailserver_opendkim:/etc/opendkim \
 -v mailserver_postfix:/etc/postfix \
 -v mailserver_dovecot:/etc/dovecot \
 -v mailserver_rspamd_conf:/etc/rspamd\
 -v mailserver_rspamd_var:/var/lib/rspamd  \
 -v mailserver_log:/var/log \
 -p 25:25 -p 110:110 -p 143:143 -p 465:465 -p 587:587  -p 993:993 -p 995:995 -p 4190:4190 -p 11334:11334 \
 -e DOMAIN_NAME="test.com" \
 -e HOST_NAME="mail.test.com" \
 -e HOST_IP="10.192.130.227" \
 -e SEARCH_BASE="DC=test,DC=com" \
 -e BIND_DN="CN=ldap,CN=Users,DC=test,DC=com" \
 -e BIND_PW="your BIND_DN password" \
 -e TZ="America/New_York" \
 -e ALIASES="OU=aliases,DC=test,DC=com" \
 -e ENABLE_QUOTA="false" \
 --label=disable -d  --restart always  --net=host \
 docker.io/inmethod/docker-postfix-ad:3.3

相關port防火牆要開,DNS mx要設定,dkmi key請參照https://github.com/WilliamFromTW/docker-Postfix-AD,就可以測試看看了。

國際擋廣告組織spamhaus 提供 DQS 服務

spamhaus 是國際組織, 旨在提供”郵件是否為垃圾郵件”的檢查服務, DQS(Data Query Service) 便是首推的新架構.

以postfix郵件伺服器為例子, 原本main.cf設定如下, 非常簡單

smtpd_recipient_restrictions =
 ...
 reject_rbl_client zen.spamhaus.org

但是近年來, spamhaus 已經不提供以上檢查服務.

spamhaus擋廣告改採用DQS方式, 而且建議不要用postfix強硬阻擋, 請整合 spamassassin 或是 rspamd 這種依分數多寡來判斷的架構比較有彈性.


以下紀錄 rspamd 啟用 DQS 設定方式:

  • 申請一個spamhaus帳號

https://www.spamhaus.com/free-trial/free-trial-for-data-query-service/
免費試用30天,功能多,體驗完居然無法轉成免費帳號, 要試用要有心理準備


https://www.spamhaus.com/free-trial/sign-up-for-a-free-data-query-service-account/
免費使用,似乎要每年renew一次


申請完畢, 請到此登入 , 可以找到 Query Key , 請記下來

  • 到github下載設定檔案, 並將裡面的Query Key改成自己申請的
git clone https://github.com/spamhaus/rspamd-dqs
cd rspamd-dqs
cd 3.x
# 請取代紅色部分(我們申請的Query Key)
sed -i -e 's/your_DQS_key/paxxxxxxxbji/g' *.conf rspamd.local.lua
# 若為付費帳號
cp *.conf /etc/rspamd/local.d
cp rspamd.local.lua /etc/rspamd
# 若為免費帳號
cp rbl.conf rbl_group.conf /etc/rspamd/local.d
# 檢查語法, 若成功, 重啟rspamd即可生效
rspamadm configtest

rspamd 啟用 DQS 詳細設定,可參考 https://github.com/spamhaus/rspamd-dqs


  • 若不想使用rspamd, spamhaus 貼心準備好各種設定, 幾乎都是複製貼上即可.

只要登入到網站,就可以點選Manual , 取得相關設定資料, 該資料直接套用登入者Query Key 呢.

Rocky Linux 9 安裝podman

 dnf install podman container-tools

讓系統自動啟用podman

systemctl enable podman
systemctl enable podman-restart

修改預設儲存路徑(預設是”/var/lib/containers/storage”)

mkdir -p /podman/storage
vi /etc/containers/storage.conf

讓selinux開放使用

semanage fcontext -a -e /var/lib/containers/storage /podman/storage
restorecon -R -v /podman/storage/

將新的podman storage綁定到原本的/var/lib/container

mount -o bind /podman/storage/ /var/lib/containers
#上面指令綁定,若確認成功,改成開機就綁定
vi /etc/fstab
/podman/storage/ /var/lib/containers bind bind 0 0

重開機,或下指令讓podman 跑起來

systemctl start podman

查看修改的路徑是否生效

podman info

RockyLinux 9 簡易安裝 mariadb

好久沒安裝mysql了, 我之前都是docker 無腦安裝, 並不需要了解太多, 但是因為我先前安裝的 piwigo docker版本升級不利, 想說手動安裝piwigo看看, 當然第一步就是安裝mariadb囉.

這次RL9預設的mariadb是10.5, 安裝相當簡單

dnf install mariadb-server

接下來就是改密碼,預設console直接可以使用root登入

mysql -p -uroot

跟之前不一樣,我還停留mysql舊時代改密碼方式 update user set password=password(‘you password’) where user=’root’
居然失敗了, 爬了文, 反正就是跟上主流,改用oracle類似的變更方式了

alter user root@localhost identified by 'your password';
flush privileges;

很多相關設定可參考原廠文件

CentOS 7 docker 防火牆設定

CentOS 7安裝docker之後, 要確認防火牆是否阻擋不需要對外的container

iptables -I DOCKER 1 -i <對外網卡介面名稱>  -p tcp  --dport <埠號碼> -j DROP
# example
# iptables -I DOCKER 1 -i ens19 -p tcp --dport 4822 -j DROP

之前一直以為firewall-cmd 預設都會擋下來, 沒想到docker安裝後,container 似乎都開放了, 看起來還是要小心為妙

2023/09/06

後來發現還是無法阻止外面連到container port 這很奇怪,可能我是早期的docker 20.10.x ,最後追加以下指令直接阻擋container ip

firewall-cmd --direct --add-rule ipv4 filter DOCKER 0 -i eth0 -d 172.0.0.0/8 -j DROP

安裝自己的照片管理軟體-piwigo

這陣子研究清末明初古幣, 於是想起乾脆架設一個照片管理服務器(self hosting), 功能也不用太多, 有hash tag, 搜尋功能也不是很需要, 試用了一款最有名的 https://photoprism.app/ 發現功能太多, 還有AI自動辨識功能, 不符合我的需求.

最後終於找到簡單好用的 https://piwigo.org/ piwigo也有docker版本, 真是太棒了.

我架設了錢幣照片管理網站 – 布書 , 有不輸之意, 古代為錢之意.

安裝piwigo非常簡單

  • 先準備好mysql 這個container, 底下範例,名字叫做 my-mariadb
  • 指令如下, 請注意紅色部分需修改
docker volume create piwigo_config
docker volume create piwigo_gallery

docker run -d  --restart always --name=piwigo --link  my-mariadb:mysql -e PUID=1000 -e PGID=1000 -e TZ=Asia/Taipei -p 2342:80 -v piwigo_config:/config -v  piwigo_gallery:/gallery --restart unless-stopped  lscr.io/linuxserver/piwigo:12.3.0
  • 登入 http://ip:2342
    數據庫輸入mysql , 對應到以上指令中的 –link my-mariadb:mysql
    再輸入該資料庫的帳號密碼, 以及資料庫名稱(這部分我是先創建好資料庫, 沒試過未創建是否自己建立)
    加上 httpd 反向代理, 這樣就大功告成了

更改預設頁面,例如改成tags, docker 進入container, 修改設定檔案

cd /gallery/local/config
vi /gallery/local/config/config.inc.php
############################
$conf['random_index_redirect'] = array(
PHPWG_ROOT_PATH.'tags.php' => 'return true;',
);
############################

2022/10/15

piwigo釋出13.0.0 , 我迫不急待進行升級,結果失敗, 原因應該是我使用非官方的docker版本.
最後只能硬著頭皮,
1. 把舊版(12.3.0) piwigo_images 資料表匯出到新版本(13.0.0)去,
2.並且把舊版本/gallery/_data/i 目錄, 以及/gallery/upload 目錄複製到新版本去, 這樣新版本就告訴你有未處裡的照片, 再自己手動重新建立相本吧, 這也是無可奈何的事情, 希望官方能有解決方案.

moodle 升級(docker)

去年安裝了moodle想要當作公司知識管理,沒多久就遇到資安問題,系統需要升級。
可是 moodle 網站 對於升級並沒有太多說明;反而有點誤導,似乎只要容器(container)更新到最新即可自動更新。
其實不是的, 必須:1、先在舊版容器內,下載並更新新版程式, 後再停用且刪除正在運行之舊容器;2、改用最新的images(套用原先的volume資料)。 才是正確做法

以下紀錄相關作法:

  • 本文必須搭配bitnami moodle docker-compose 安裝。
    https://kafeiou.pw/2021/01/18/2961/
  • 先用管理者登入, 在網站管理->主機->網站維護模式, 改成維護模式
  • 在網站管理->一般->通知(反正就是找到通知) ,點選”檢查可用的更新”, 查看是否有新版本可供下載。
  • 若發現新版本, 系統會出現連結讓我們下載(但連結通常都怪怪的, 請自行想辦法到官網找到真的下載網址),然後下載到docker container裡面。

    docker exec -it <container name> bash
    apt update
    apt install wget
    wget …..
  • 備份舊版本程式(先備後刪)
#請注意,moodle將會被複製到 /bitnami/moodledata/moodle , /bitnami/moodledata這個目錄本身也很重要
/bin/cp -R /bitnami/moodle /bitnami/moodledata
rm -rf /bitnami/moodle/*
  • 下載並更新最新程式
    下載最新版zip檔, 解開會有一個moodle目錄,請複製或覆蓋到 /bitnami/moodle 。
  • 將先前備份moodle.bak目錄, 裡面的config.php檔案複製(取代)到 /bitnami/moodle
  • 接下來改用瀏覽器登入,系統自動會發現有新版,且要求一系列升級工作。
  • 升級完畢,請關閉維護模式
  • 這樣升級就大功告成。因為現主時container為舊版, 可停用且刪除目前舊版容器,修改yaml檔案改用新的container版本。

    官方網站建議做法如下
Step 1: Get the updated image
$ docker pull bitnami/moodle:latest

Step 2: Stop the running container
Stop the currently running container using the command
#這部分有時候會停用失敗,請用docker stop 方式直接停用container
$ docker-compose stop moodle

Step 3: Take a snapshot of the application state
Backup your container 要備分(我之前有做了)

Step 4: Remove the currently running container
Remove the currently running container by executing the following command:
docker-compose rm -v moodle

Step 5: Run the new image (修改yml裡面moodle版本->到最新)
Update the image tag in docker-compose.yml and re-create your container with the new image

$ docker-compose up -d

升級docker images, 舊版images變成none

最近升級moodle到4.0.1版本, 發現有問題, 想用回舊版, 發現舊版的變成 moodle:<none> , 這樣一來不就不能使用舊版了, 後來發現只要知道舊版images id , 就可以改成想要的tag, 也就能繼續使用了

docker tag <images id> <images name>:x.x
docker tag 43b9473f010d bitnami/moodle:3.10
1 ... 4 5 6 7 8 ... 14