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 似乎都開放了, 沒想到藏在iptables 裡面, 看起來還是要小心為妙

安裝自己的照片管理軟體-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;',
);
############################

python起手式,建立python虛擬環境

網管人員學python, 看到虛擬環境,第六感覺得這很重要

  1. 安裝python
    https://www.python.org/downloads/
    ps. windows安裝,記得要把python程式路徑加到PATH的選項打勾
  1. 安裝virtualenv建立虛擬環境程式
windows:
  pip3 install virtualenv
linux:
  sudo pip3 install virtualenv
  or
  sudo apt install python3-virtualenv
  1. 使用virtualenv建立虛擬環境
virtualenv -p <python程式位置>  <虛擬環境名稱>
or 
sudo -p <python程式位置>  <虛擬環境名稱>

#範例
windows :
  virtualenv -p C:\Users\x\AppData\Local\Programs\Python\Python310\python.exe my-env
linux:
  sudo virtualenv -p /usr/bin/python3 my-env
  1. 進入虛擬環境

    Windows:
    .\xxx\Scripts\activate.bat

Linux:
source ./xxx/bin/activate

william@william-Inspiron-3891:~$ source ./my-env/bin/activate
(my-env) william@william-Inspiron-3891:~$ 

outlook 使用ldap通訊錄出現亂碼

對舊時代麻瓜來說(舊麻瓜), 收發信軟體就只有 m$ 的outlook , 因公司ldap通訊錄橫跨三個不同語系,三個不同網域服務器, 導致outook 2013,2016,2019 , 使用ldap 通訊錄的時候, 台灣舊麻瓜查看簡體,越南文, 會出現亂碼, 當然中國舊麻瓜看繁體,越南文也一樣會出現亂碼

後來google一下, 發現windows 10, windows 11的語言與地區, 可以點選Beta,使用UTF8提供全球語言支援, 解決問題

解決方法如圖示

重開機之後, 就不會有亂碼了

moodle 升級(docker)

去年安裝了moodle版想要當作公司知識管理, 當時沒多久就遇到資安問題, 系統需要升級.
可是 moodle 網站 對於upgrade並沒有太多說明, 反而有點誤導, 似乎只要images更新到最新即可自動更新,
其實不是的, 必須先從原本images升級之後, 再考慮刪除原本的images, 改用最新的images, 才是正確做法.

以下紀錄相關作法:

  • 先用管理者登入, 在網站管理->主機->網站維護模式 , 改成維護模式
  • 在網站管理->通知 , 點選"檢查可用的更新", 查看是否有新版本可供下載
  • 若發現有新版本, 系統會出現連結讓我們下載, 我們必須想辦法下載到docker container裡面.
  • 將原本舊版程式移走,並改名
mv /opt/bitnami/moodle  /opt/bitnami/moodle.bak
  • 找到先前下載之zip檔,, 解開會有一個moodle目錄, 請直接移成 /opt/bitnami/moodle
  • 將備份moodle.bak目錄, 裡面的config.php檔案複製到 /opt/bitnami/moodle
  • 接下來改用瀏覽器登入, 系統自動會發現有新版, 會要求一系列升級工作
  • 這樣升級就大功告成, 因為考慮到原本docker images為舊版, 升級後久了會忘記已是新版本, 到此才能接到官方網站建議的做法
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-compose stop moodle
Step 3: Take a snapshot of the application state
Follow the steps in Backing up your container to take a snapshot of the current application state.

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
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

google翻譯 與 隱私權宣告

最近遇到android app若要正式上架, 得製作隱私權宣告頁面

而這隱私權又要弄很多語系怎辦, 這時候就要在宣告中加上翻譯功能了

  • 加上java script function
<script>
function googleTranslateElementInit() {
  new google.translate.TranslateElement({
    pageLanguage: 'en',
    layout: google.translate.TranslateElement.InlineLayout.SIMPLE
  }, 'google_translate_element');
}
</script>
<script src="https://translate.google.com/translate_a/element.js?cb=googleTranslateElementInit"></script>
  • 頁面插入一段div
<div id="google_translate_element"></div>
  • 若需要限定語系, 請於javascript 的 pageLanguage: 'en', 底下, 加上 語系限定

includedLanguages: 'zh-CN,zh-TW',
1 2 3 ... 60