docker安裝老牌「會議室預約系統(MRBS)」

幾年前為了讓公司習慣nextcloud,決心將原本安裝的會議室預約系統停用,改為nextcloud上面的行事曆,但是nextcloud上面的行事曆讓公司老屁股覺得難用,直到最近我覺得大家已經習慣nextcloud,於是答應恢復原本的會議室預約系統。

以前是mrbs直接安裝,現在新版已經能使用docker安裝,非常方便。

meeting-room-booking-system

安裝步驟如下:

git clone https://github.com/meeting-room-booking-system/mrbs-code.git
cd mrbs-code/docker_app/

vi php/config.inc.php
#########################
$auth["type"] = "ldap";
$ldap_host = "192.168.1.1";
$ldap_v3 = true;
$ldap_tls = false;
$ldap_base_dn = "OU=xxx,DC=test,DC=com,DC=tw";
$ldap_user_attrib = "sAMAccountName";
$ldap_port = 389;
$ldap_debug = true;
$ldap_dn_search_attrib = "sAMAccountName";
$ldap_dn_search_dn = "CN=xxxxx,CN=Users,DC=test,DC=com,DC=tw";
$ldap_dn_search_password = "password";
$mrbs_company = "XXX公司";

# AD登入帳號,那些可成為管理者
$auth["admin"][] = "xxxx";
$auth["admin"][] = "yyyy";
##########################


#然後修改 docker-compose.yml,看看還有沒需要修改的
#檢查完畢,就執行
docker compose up -d

因為我與Micro$oft AD整合,需要額外安裝php ldap元件

docker exec -it docker_app-www-1 bash

# 進入容器後,安裝ldap套件
apt update && apt-get install libldap2-dev -y
docker-php-ext-configure ldap --with-libdir=lib/x86_64-linux-gnu/
docker-php-ext-install ldap

#安裝完畢重開容器,就可以跟AD整合了
docker compose restart

OpenProject與GIT整合

OpenProject能與GitHub、GitLab深度整合,當然也包含一般git server或local git。整合後,專案成員可看到所有檔案內容,我覺得有必要管控權限,畢竟有些人只要看到修改記錄即可,如PM。

既然我的目標只是想讓OpenProject能看到git的修改記錄,於是硬著頭皮改openproject程式,好險不難,硬生生讓我改成只能看到修改記錄。

詳請參考咖啡偶之書。

https://book.kafeiou.pw/books/openproject/page/git

guacamole酪梨醬如何計算工時

guacamole是很棒的網頁版遠端連線工具,就差在切換輸入法不是那麼簡便。

公司可以安裝酪梨醬,綁定員工帳號只能連到員工主機,也不開放員工自行設定連線,搭配現在guacamole已經可以設定遠端開機,就可以讓員工遠距連線工作,而公司方面可以計算員工工時,若員工加班也能有所憑證。

我安裝的酪梨醬使用mysql,計算工時的語法如下:

# 可計算同一天連線小時(小數第二位)
SELECT username ,DATE_FORMAT(start_date, "%Y%m%d") the_same_date, cast(sum(TIMESTAMPDIFF(MINUTE,start_date,end_date))/60 as decimal(9,2)) overtime_hour 
from guacamole_connection_history 
group by username,the_same_date
order by username,the_same_date desc

#若資料庫時區沒有調整,預設是UTC,可暫時使用CONVERT_TZ轉換正確時區
SELECT username ,DATE_FORMAT(CONVERT_TZ(start_date,'+00:00','+08:00'), "%Y%m%d") the_same_date, cast(sum(TIMESTAMPDIFF(MINUTE,start_date,end_date))/60 as decimal(9,2)) overtime_hour 
from guacamole_connection_history 
group by username,the_same_date
order by username,the_same_date desc
# 排除每次連線低於30分鐘
SELECT username ,DATE_FORMAT(start_date, "%Y%m%d") the_same_date, cast(sum(TIMESTAMPDIFF(MINUTE,start_date,end_date))/60 as decimal(9,2)) overtime_hour 
from guacamole_connection_history 
where TIMESTAMPDIFF(MINUTE,start_date,end_date) >= 30
group by username,the_same_date
order by username,the_same_date desc

#若資料庫時區沒有調整,預設是UTC,可暫時使用CONVERT_TZ轉換正確時區
SELECT username ,DATE_FORMAT(CONVERT_TZ(start_date,'+00:00','+08:00'), "%Y%m%d") the_same_date, cast(sum(TIMESTAMPDIFF(MINUTE,start_date,end_date))/60 as decimal(9,2)) overtime_hour 
from guacamole_connection_history 
where TIMESTAMPDIFF(MINUTE,start_date,end_date) >= 30
group by username,the_same_date
order by username,the_same_date desc

為了員工健康,要設定上線時間

另外酪梨醬預設60分鐘沒有任何遠端連線,會整個登出。
可搭配遠端桌面連線相關設定

vi guacamole.properties
##### 修改30分鐘整個網頁登出(必須在沒有任何連線的情況下)
api-session-timeout:30

可以搭配設定閒置30分鐘後,遠端桌面連線自動登出,此時酪梨醬沒有任何連線了,過30分鐘也跟著登出了。

安裝bookstack書架

我的軟體工程概念很差,最近遇到一個案子,我想要找人一起,但是那個同事主管說要寫提案,了解後才會分配資源。

於是我想到了「SRS(Software Request Spec)軟體需求規格」當作提案,但是又不想要用傳統的word檔案書寫(很難維護),於是上網找了一下軟體需求與功能規格書的範例,終於找到滿意的書寫格式-使用gitbook

https://mason1762.gitbook.io/samxinbakery/gong-neng-ge

可惜gitbook自架很麻煩,於是我又找到相似而且可以自架、開源的系統-bookstack
bookstack宣稱是wiki軟體,也可以當知識管理,以書架、書本為基本架構的系統
https://demo.bookstackapp.com/books

安裝方式很簡單,我這次寫在網誌裡,也沒放在svn系統(https://docs.kafeiou.pw/!/#iammis),而是直接現學現賣,把安裝方式寫在自架的bookstack上。

https://book.kafeiou.pw/

另外有個很棒bookstack網站建議大家參考一下 BUBU 知識庫 & 秉迅資訊.Studio

gitea(吉茶)需要更新docker版本20.10.6或以上

前陣子我協助機構部門導入git LFS大檔案版本控管,當時希望push資料時,觸發webhooks,執行我寫好的程式進行分析。

我使用gitea內建測試功能,能很順利觸發webhooks,進而執行程式。

可是實作時卻觸發不了,經檢查logs與爬文後,發現docker版本必須大於等於 20.10.6 有作用,我更新到20.10.6之後測試,還是一樣沒用,只好先擺著,希望主機重開後,能有改善,但無論如何,吉茶說要更新我就照作了。

nextcloud(容器)連到windows檔案伺服器

nextcloud若能跟公司內部的檔案伺服器連線,在外面就能方便存取公司檔案,也不失為一個好方法;只要安裝「External Storage Support」這個app就能存取外部檔案。

External Storage support 預設無法連線windows檔案伺服器,我們需要額外安裝一些套件,安裝完畢就能支援了。

docker(podman) exec -it <nextcloud container> bash

apt update 
apt -y install libsmbclient-dev libmagickwand-dev 
pecl install smbclient 
pecl install inotify
echo "extension=smbclient.so" > /usr/local/etc/php/conf.d/docker-php-ext-smbclient.ini
echo "extension=inotify.so" > /usr/local/etc/php/conf.d/docker-php-ext-inotify.ini

安裝相關套件後,就能選取到「SMB/CIFS」

原本連線到\\10.1xxx.x.x\taipei 拆開成兩部分,帳號若屬於網域,也要填進去,最後還限制群組使用

worpress (docker) 連接 Active Directory(ldap)

我為了要測試教育訓練相關外掛程式「LearnPress」,必須先搞定員工能登入網站「上課」這件事。

參考以往經驗,我選擇在wordpress系統,安裝教育訓練外掛,而不使用moodle這類風評好又完全免費的系統,原因在於moodle太龐大了,很難駕馭;反之,wordpress可當作公司內部公告網站,讓平時員工習慣上此網站,也趁此加裝教育訓練模組,員工比較容接觸而上課。

wordpress系統要能連上網域主控站,才可讓員工登入,我找到的外掛為next-active-directory-integration

搜尋以下外掛且安裝完畢,於外掛啟用之前,容器必須安裝相關套件,才能正確連線,否則會出現錯誤。

docker exec -it wordpress_wordpress_1 /bin/bash
#####
apt-get update
apt-get install -y libldap2-dev
docker-php-ext-configure ldap --with-libdir=lib/x86_64-linux-gnu/
docker-php-ext-install ldap
rm -rf /var/lib/apt/lists/*
apt-get purge -y --auto-remove libldap2-dev
/etc/init.d/apache2 restart

#http://www.jaqb.gda.pl/eng/Community/Blog/Enable-LDAP-support-in-Docker-image-of-Wordpress

進容器安裝相關套件後,就可以啟用外掛,通知使用者輸入「帳號@域名」 就可以登入了。

至於ldap設定部分我就不多說,請自行依情況處理。

很困擾的httpd反向代理與容器(container)之間的問題

httpd 反向代理很好用, 一個ip就能搞定無數個網站, 某種角度來看, 也兼具資安效果, 可以阻擋使用ip進行網站攻擊的效果.

可是很困擾的是, 當我每三個月需要 renew 免費的 let’s encrypt 證書, 證書是renew成功了, 但是該檔案對應到容器的服務,有些並不會跟著改用新的證書, 就出問題了.

以mail server為例子, postfix與dovecot服務, 都會咬住舊版的證書, 而不使用新的, 重開mail server又要公告, 只能半夜偷偷重開, 真是困擾阿

Proxmox VE安裝免費網域主控站Turnkey Domain Controller

微軟的網域主控站超級好用, 很適合用來管理, 甚至交給非IT人員,如管理部同仁協助作業

網域主控好用,若只用來群組權限控管, 帳號密碼控管, 建議安裝免費的網域管理伺服器Turnkey Domain Controller就好了.

另外, 像我使用自製的容器郵件伺服器(docker-postfix-ad) ,須綁定微軟網域伺服器認證 ,也很適合安裝Turnkey Domain Controller.

TurnkeyLinux 有一大堆免費的軟體, 且支援Proxmox VE , 有vm版本, lxc版本,及vmware版, 琳瑯滿目.

安裝Turnkey Domain Controller 相當簡單,只要下載iso檔案,安裝成一個vm就好了, 當然也有lxc版本,但我並沒有測試過.
詳細請參閱 https://www.youtube.com/watch?v=PMUUuXmtFc8
安裝完畢, 用我筆電的RSAT工具, 就能管理網域主控站了

以下為安裝之後, 要注意的部分

  • 設定ip
    安裝完畢, 因為沒有設定ip, 所以無法使用瀏覽器登入, 請輸入指令 confconsole, 並且設定ip
  • 設定完IP, 使用瀏覽器登入
    http://ip
    登入後點選“Samba conf via Webmin(login first)
  • 入Webmin, 需先開放網路介面接聽功能, 否則電腦無法加入網域
    Servers -> Samba Windows File Sharing -> Unix Networking
  • 將Network interfaces 改為 Automatic
    *Automatic
  • 修改後要重啟samba server
    Restart Samba Servers
  • 修改要加入網域之電腦dns ,
    第一dns請改成 Turnkey Domain Controller 的IP
    第二dns必須設定, 輸入1.1.1.1 這類可查詢的dns server , 因Turnkey Domain Controller預設沒有dns server, 所以無法正常解析.

電腦dns設定正確, 就能成功找到網域主控站, 並且加入囉

目前安裝版本為 16.2 , 樹系2008R2, 經測試win11 22h2無法加網域, 將在17.0 樹系2012R2獲得解決.

1 2