安裝自己的照片管理軟體-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 目錄複製到新版本去, 這樣新版本就告訴你有未處裡的照片, 再自己手動重新建立相本吧, 這也是無可奈何的事情, 希望官方能有解決方案.

android kotlin viewBinding 新做法

寫android總是寫不好, 之前取得view要使用findViewByI的方式, 過了一段時間回頭看, 現在又改了改成使用viewBinding 說是比較快...

  • gradle(module)
buildFeatures {
    viewBinding = true
}
  • main activity
class MainActivity : AppCompatActivity() {

    lateinit var binding: ActivityMainBinding

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivityMainBinding.inflate(layoutInflater)
        setContentView(binding.root)
    }
}
  • 使用方式變簡單了
// 舊版
val myButton: Button = findViewById(R.id.my_button)
myButton.text = "A button"

// 新版
val myButton: Button = binding.myButton
myButton.text = "A button"

// Best way with view binding and no extra variable
binding.myButton.text = "A button"

windows 10列出usb連線裝置

我們外接usb裝置, 例如印表機, 讀卡機, 常常讀取失敗,也導致常常要換另外的usb孔測試

因此就需要這個軟體, 列出曾經連線過的usb裝置資訊, 必要時解除安裝其驅動程式,再重新安裝即可

https://www.nirsoft.net/utils/usb_devices_view.html

使用時請務必確認usb裝置未連接到主機

https://www.nirsoft.net/utils/usb_log_view.html

這個網站還有很多奇耙好用的小工具軟體

https://www.nirsoft.net

centos 7 啟用NFS server

真真氣死人, 只是使用restic備份, 需要掛載不同性質的資料來源,
從 rclone 到 sshfs 到回歸nfs server, 只有一種感慨, 就是交給專業的來,不要想東想西的, ssh 來掛載目錄, rclone掛載ssh都不切實際,目前都不穩定.

服務器端啟用nfs server

yum install nfs-utils

## 分享目錄
mkdir -p /mnt/docker
vi etc/exports
=================
#只讀ro,  10.192.130.4可使用
/mnt/docker      10.192.130.4(ro,sync,no_root_squash,no_all_squash)
#讀寫rw,  10.192.130.0/24網段可使用
/mnt/docker      10.192.130.0/24(rw,sync,no_root_squash,no_all_squash)
=================

#啟用
firewall-cmd --zone=public --add-service=nfs --permanent

## rockylinux
#firewall-cmd --add-service={nfs,nfs3,mountd,rpc-bind} --permanent

firewall-cmd --reload
systemctl enable nfs 
systemctl start nfs

## rockylinux
#systemctl enable nfs-server rpcbind
#systemctl start nfs-server rpcbind

#查看狀態(windows,linux通用)
showmount -e localhost

用戶端(linux)

mount -t nfs <server ip>:/mnt/docker  <本地要掛載的目錄>
或是
mount -t nfs4 <server ip>:/mnt/docker  <本地要掛載的目錄>

用戶端(windows)

mount -o anon  \\ip\mount_path  z:

nextcloud 上查詢支援onlyoffice的版本

https://apps.nextcloud.com/apps/onlyoffice/releases?platform=14

避免與不相容的版本起衝突

目前2022/5/13 我升級到nextcloud 22.2.7 , 但因為docker上面的onlyoffice 最新的是7.1.0,
onlyoffice 只有支援7.2以上才支援 nextcloud 23 , 所以我就無法升級到nextcloud 23囉

nextcloud清除垃圾桶與過多的檔案編輯版本

修改 config.php

過了31天清除

 'trashbin_retention_obligation' => 'auto,31',
 'versions_retention_obligation' => 'auto,31',

若使用docker安裝, 建議停用容器內建的排程, 改用外面主機, 設定排程自行刪除垃圾桶

docker exec --user www-data <container id> php occ config:app:set --value=no files_trashbin background_job_expire_trash

docker exec --user www-data nextcloud php occ config:app:set --value=no files_versions background_job_expire_versions
docker exec --user www-data <container id> php occ  trashbin:expire --quiet

Visualsvn server很好用,但免費版無備份功能,該如何自行備份?

https://www.visualsvn.com/server/

svn好用之處在於可以鎖定檔案, 這在公司是非常實用的,雖然學習門檻有點高,但還能接受.

備份方式 有兩種

  1. svnadmin hotcopy 方式, 一模一樣複製一份
  2. 直接用svnadmin dump的方式增量備份

我最後打算用 hotcopy 方式 , 搭配restic超強備份軟體, 來完成備份

hotcopy的方式可以按此下載我寫的批次檔案(windows版本), 改一下變數即可使用.

至於還原 , 若使用hotcopy的方式備份, 只要刪除server的資料, 再下一次hotcopy 從備份檔案 還原回去既可

原本備份是
svnadmin hotcopy --incremental <server dir> <backup dir>

還原變成

svnadmin hotcopy <backup dir> <server dir>

CentOS安裝郵件紀錄分析軟體-SendmailAnalyzer

SendmailAnalyzer是老牌軟體了, 分析 maillog 製作成網站, 方便分析 , 軟體還在持續維護中呢

  • 安裝perl套件
yum install perl-CGI perl-CPAN perl-MIME-tools perl-GD*
  • github下載最新版後,安裝,設開機自動啟用
tar xzf sendmailanalyzer-x.x.tar.gz
cd sendmailanalyzer-x.x/
perl Makefile.PL LOGFILE=/var/log/maillog
make && make install
cp start_scripts/sendmailanalyzer.service /lib/systemd/system
  • 設定開機執行
systemctl enable sendmailanalyzer
systemctl start sendmailanalyzer
  • 網站設定
Alias /sareport /usr/local/sendmailanalyzer/www
<Directory /usr/local/sendmailanalyzer/www>
  Options ExecCGI
  AddHandler cgi-script .cgi
  DirectoryIndex sa_report.cgi
  #-- Apache 2.2
  #Order deny,allow
  #Deny from all
  #Allow from 192.168.1.0/24
  #-- Apache 2.4
  Require all denied
  Require ip 192.168.1.0/24
</Directory>
  • 設定cron 定期做快取 cache
    # SendmailAnalyzer log reporting daily cache
    0 1 * * * /usr/local/sendmailanalyzer/sa_cache > /dev/null 2>&1
    # On huge MTA you may want to have five minutes caching
    #*/5 * * * * /usr/local/sendmailanalyzer/sa_cache -a > /dev/null 2>&1
  • 因應logrotate會更換新的maillog, 加上更換maillog之後,重啟 SendmailAnalyzer
vi /etc/logrotate.d/syslog

################
systemctl restart sendmailanalyzer > /dev/null 2>&1 || true
################

這樣就可以透過瀏覽器查看狀態 http(s)://x.x.x.x/sareport/

restic 常用指令

使用情境是依不同系統 , 建立多個備份倉, 一個倉別若要備份不同目錄, 可用tag區分.

備份倉盡量用簡單的方式, 當然也可以掛載sftp ,或是 rclone.

要備份的目錄, 盡量用掛載的, 變成一個目錄, rclone是個好選擇

備份後,執行保留策略(7天或是30天), 備份可以從目錄, 也可以從stdin ,

還原就比較沒甚麼好談的

至於密碼, 我覺得用環境變數就好了, 用檔案存密碼, 我覺得指令看起來好複雜

  • 建立備份倉
export RESTIC_PASSWORD=123456
restic -r <備份倉目錄> init
  • 備份
#Linux
export RESTIC_PASSWORD=123456
restic -r <備份倉目錄> backup <想要備份的目錄>  --cleanup-cache --verbose --verbose >> restic.log 2>&1

#windows powershell
$Env:RESTIC_PASSWORD='password'
restic -r <備份倉目錄> backup <想要備份的目錄> | Out-File C:\temp\files.log -Encoding UTF8
  • 備份(mysql資料庫)
export RESTIC_PASSWORD=123456
mysqldump -u root -p<密碼>  --all-databases -h <主機ip> |  restic --repo <備份倉目錄> backup --stdin --stdin-filename all.sql
  • tag 以上備份可以加上tag區分不同目錄, tag 名稱可以一樣
restic -r <備份倉目錄> backup <想要備份的目錄> --tag:名稱  --cleanup-cache --verbose --verbose >> restic.log 2>&1
  • 查看備份
export RESTIC_PASSWORD=123456
restic -r <備份倉目錄> snapshots
  • 還原指定的snap
export RESTIC_PASSWORD=123456
restic -r <備份倉目錄> restore <snapshots id> --target <要還原的目錄>
  • 備份完畢,刪除過多的備份
export RESTIC_PASSWORD=123456
restic -r <備份倉目錄> forget --prune --keep-daily 7
1 2 3 ... 5