Synology

Synology相關

Synology Docker相關

Synology Docker相關

Synology Docker相關

Synology 安裝Portainer 管理Docker

安裝Docker和Portainer

套件中心搜尋docker,DSM7.2之後已改名Container Manager,安裝套件

image.png

 

docker資料夾新增portainer

image.png

 

進入Synology Shell內切換root帳號執行

docker run -d --name=portainer \
-p 8000:8000 \
-p 9000:9000 \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /volume1/docker/portainer:/data \
--restart=always \
6053537/portainer-ce:latest

 

 

確認容器已經執行

image.png

 

進入Portainer,http://IP:9000

點擊連接右邊編輯圖示

image.png

 

輸入你的Synology IP並更新環境

image.png

 

安裝完成

Synology Docker相關

Synology 使用Docker架設LibreNMS

運行環境
安裝LibreNMS

確認已安裝Portainer,在docker內新增資料夾librenms並且在裡面分別新增data、db、redis資料夾

image.png

修改資料夾權限使docker能夠寫入執行

chmod 755 /volume1/docker/librenms -R

進入Portainer,點選堆棧(Stack),並添加堆棧

image.png

名稱填寫librenms,並貼到編輯器中,指令內PUID和PGID於Shell內執行id並自行替換

user1@synology:~$ id
uid=1026(user1) gid=100(users)

image.png

services:
  db:
    image: mariadb:11.4-noble #LTS Long Time Support Until May 29, 2029.
    container_name: LibreNMS-DB
    command:
      - mariadbd
      - --innodb-file-per-table=1
      - --lower-case-table-names=0
      - --character-set-server=utf8mb4
      - --collation-server=utf8mb4_unicode_ci
    volumes:
      - /volume1/docker/librenms/db:/var/lib/mysql:rw
    environment:
      TZ: Asia/Taipei
      MARIADB_RANDOM_ROOT_PASSWORD: yes
      MARIADB_DATABASE: librenms
      MARIADB_USER: librenmsuser
      MARIADB_PASSWORD: librenmspass
    restart: on-failure:5

  redis:
    image: redis:7.2-alpine
    container_name: LibreNMS_REDIS
    healthcheck:
     test: ["CMD-SHELL", "redis-cli ping || exit 1"]
    volumes:
      - /volume1/docker/librenms/redis:/data:rw
    environment:
      TZ: Asia/Taipei
    restart: on-failure:5


  librenms:
    image: librenms/librenms:latest
    container_name: LibreNMS
    healthcheck:
      test: ["CMD-SHELL", "nc -z 127.0.0.1 8000 || exit 1"]
      interval: 10s
      timeout: 5s
      retries: 3
      start_period: 90s
    hostname: librenms
    cap_add:
      - NET_ADMIN
      - NET_RAW
    ports:
      - target: 8000
        published: 28083
        protocol: tcp
    depends_on:
      - db
      - redis
    volumes:
      - /volume1/docker/librenms/data:/data:rw
    environment:
      TZ: Asia/Taipei
      PUID: 1026
      PGID: 100
      SESSION_SECURE_COOKIE: true
      DB_HOST: db
      DB_NAME: librenms
      DB_USER: librenmsuser
      DB_PASSWORD: librenmspass
      DB_TIMEOUT: 120
      MEMORY_LIMIT: 512M
      MAX_INPUT_VARS: 1000
      UPLOAD_MAX_SIZE: 128M
      OPCACHE_MEM_SIZE: 128
      REAL_IP_FROM: 0.0.0.0/32
      REAL_IP_HEADER: X-Forwarded-For
      LOG_IP_VAR: remote_addr
      CACHE_DRIVER: redis
      SESSION_DRIVER: redis
      REDIS_HOST: redis
      LIBRENMS_SNMP_COMMUNITY: librenmsdocker
      LIBRENMS_WEATHERMAP: false
      LIBRENMS_WEATHERMAP_SCHEDULE: "0 0 */2 * * *" # Schedule WeatherMAP every 2 hours
    restart: on-failure:5

  dispatcher:
    image: librenms/librenms:latest
    container_name: LibreNMS-DISPATCHER
    hostname: librenms-dispatcher
    cap_add:
      - NET_ADMIN
      - NET_RAW
    depends_on:
      - librenms
      - redis
    volumes:
      - /volume1/docker/librenms/data:/data:rw
    environment:
      TZ: Asia/Taipei
      PUID: 1026
      PGID: 100
      DB_HOST: db
      DB_NAME: librenms
      DB_USER: librenmsuser
      DB_PASSWORD: librenmspass
      DB_TIMEOUT: 120
      DISPATCHER_NODE_ID: dispatcher1
      SIDECAR_DISPATCHER: 1
      MEMORY_LIMIT: 512M
      MAX_INPUT_VARS: 1000
      UPLOAD_MAX_SIZE: 128M
      OPCACHE_MEM_SIZE: 128
      REAL_IP_FROM: 0.0.0.0/32
      REAL_IP_HEADER: X-Forwarded-For
      LOG_IP_VAR: remote_addr
      CACHE_DRIVER: redis
      SESSION_DRIVER: redis
      REDIS_HOST: redis
      LIBRENMS_SNMP_COMMUNITY: librenmsdocker
      LIBRENMS_WEATHERMAP: false
      LIBRENMS_WEATHERMAP_SCHEDULE: "0 0 */2 * * *" # Schedule WeatherMAP every 2 hours
    restart: on-failure:5
    
  syslogng:
    image: librenms/librenms:latest
    container_name: LibreNMS_SYSLOGNG
    hostname: librenms-syslogng
    healthcheck:
      test: ["CMD-SHELL", "nc -z 127.0.0.1 514 || exit 1"]
      interval: 10s
      timeout: 5s
      retries: 3
      start_period: 90s
    cap_add:
      - NET_ADMIN
      - NET_RAW
    depends_on:
      - librenms
      - redis
    ports:
      - target: 514
        published: 514
        protocol: tcp
      - target: 514
        published: 514
        protocol: udp
    volumes:
      - /volume1/docker/librenms/data:/data:rw
    environment:
      TZ: Asia/Taipei
      PUID: 1026
      PGID: 100
      DB_HOST: db
      DB_NAME: librenms
      DB_USER: librenmsuser
      DB_PASSWORD: librenmspass
      DB_TIMEOUT: 120
      SIDECAR_SYSLOGNG: 1
      MEMORY_LIMIT: 512M
      MAX_INPUT_VARS: 1000
      UPLOAD_MAX_SIZE: 128M
      OPCACHE_MEM_SIZE: 128
      REAL_IP_FROM: 0.0.0.0/32
      REAL_IP_HEADER: X-Forwarded-For
      LOG_IP_VAR: remote_addr
      CACHE_DRIVER: redis
      SESSION_DRIVER: redis
      REDIS_HOST: redis
      LIBRENMS_SNMP_COMMUNITY: librenmsdocker
      LIBRENMS_WEATHERMAP: false
      LIBRENMS_WEATHERMAP_SCHEDULE: "0 0 */2 * * *" # Schedule WeatherMAP every 2 hours
    restart: on-failure:5

  snmptrapd:
    image: librenms/librenms:latest
    container_name: LibreNMS_SNMPTRAPD
    healthcheck:
      test: ["CMD-SHELL", "nc -z 127.0.0.1 162 || exit 1"]
      interval: 10s
      timeout: 5s
      retries: 3
      start_period: 90s
    hostname: librenms-snmptrapd
    cap_add:
      - NET_ADMIN
      - NET_RAW
    depends_on:
      - librenms
      - redis
    ports:
      - target: 162
        published: 162
        protocol: tcp
      - target: 162
        published: 162
        protocol: udp
    volumes:
      - /volume1/docker/librenms/data:/data:rw
    environment:
      TZ: Asia/Taipei
      PUID: 1026
      PGID: 100
      DB_HOST: db
      DB_NAME: librenms
      DB_USER: librenmsuser
      DB_PASSWORD: librenmspass
      DB_TIMEOUT: 120
      SIDECAR_SNMPTRAPD: 1
      MEMORY_LIMIT: 512M
      MAX_INPUT_VARS: 1000
      UPLOAD_MAX_SIZE: 128M
      OPCACHE_MEM_SIZE: 128
      REAL_IP_FROM: 0.0.0.0/32
      REAL_IP_HEADER: X-Forwarded-For
      LOG_IP_VAR: remote_addr
      CACHE_DRIVER: redis
      SESSION_DRIVER: redis
      REDIS_HOST: redis
      LIBRENMS_SNMP_COMMUNITY: librenmsdocker
      LIBRENMS_WEATHERMAP: false
      LIBRENMS_WEATHERMAP_SCHEDULE: "0 0 */2 * * *" # Schedule WeatherMAP every 2 hours
    restart: on-failure:5

  scheduler:
    image: librenms/librenms:latest
    container_name: LibreNMS_scheduler
    volumes:
      - /volume1/docker/librenms/data:/data:rw   # 請與主容器掛載的路徑一致
    environment:
      - SIDECAR_CRON=1
      - DB_HOST=db
      - DB_NAME=librenms
      - DB_USER=librenmsuser
      - DB_PASSWORD=librenmspass
      - PUID=1026
      - PGID=100
      - TZ=Asia/Taipei
    depends_on:
      - db
      - redis
      - librenms
    restart: on-failure:5


部屬堆棧

image.png

成功後右上角應會顯示堆棧部署成功

等待幾分鐘安裝,確認所有服務已經執行

image.png

輸入IP和設定的PORT,例如http://Synology IP:28083,進入LibreNMS 安裝頁面

image.png

建立管理員後完成安裝

image.png

若出現419 Page Expired先清除快取

點選LibreNMS容器並進入終端

image.png

image.png

php artisan config:clear
php artisan cache:clear
php artisan route:clear
php artisan view:clear

重新整理網頁後再次登入

若輸入網址後直接跳過安裝頁面到登入畫面請手動新增使用者

點選LibreNMS容器並進入終端新增使用者

image.png

image.png

lnms user:add --role=admin user1

重新整理網頁後再次登入

進行組態驗證確認無錯誤設定,若有依照建議修正

image.png

開始監控Synology設備

開啟SNMP功能

image.png

LibreNMS新增Synology設備,輸入IP和community

image.png

查看已新增的設備

image.png

Synology Docker相關

Synology 使用Docker架設Vaultwarden密碼管理

Vaultwarden為官方的 Bitwarden 社群版本,使用SQLite非常輕量,適合個人架設使用

運行環境

安裝Vaultwarden

確認已安裝Portainer,在docker資料夾新增vaultwarden,裡面新增vw-data

image.png

進入Portainer,新增堆棧(Stack)並部屬

services:
  app:
    image: vaultwarden/server:latest
    container_name: vaultwarden
    restart: always
    volumes:
      - /volume1/docker/vaultwarden/vw-data:/data/
    environment:
      - ADMIN_TOKEN=1qaxxwsx3xx
    ports:
      - 8080:80

Vaultwarden需要https才能使用,Synology內登入入口>進階>反向代理

新增你的網域和通訊埠

image.png

進入https://domain:12345/admin,修改Domain URL和管理員token後儲存

管理員token在docker部屬時的ADMIN_TOKEN參數

image.png

image.png

進入https://domain:12345/,創建使用者,登入後完成架設

image.png

Chrome新增擴充功能

安裝Bitwarden - 免費密碼管理工具後,點選自架輸入伺服器URL並登入

image.png

進入其他網站,會顯示登入功能

image.png

Synology Docker相關

Synology 使用 Docker 架設 immich相簿

immich是一套開源的相簿系統,可當作替代Google相簿,提供手機APP,並有地圖標記和人臉辨識等功能

image.png

官方Demo

 

運行環境

 

安裝immich

確認已安裝Portainer,在docker資料夾新增immich-app,裡面新增librarypostgres資料夾

image.png

 

從官方下載docker-compose.yml和.env檔案

https://github.com/immich-app/immich/releases/latest/download/docker-compose.yml
https://github.com/immich-app/immich/releases/latest/download/example.env

 

修改下載的docker-compose.yml和.env檔案

編輯example.env並改名為.env

# You can find documentation for all the supported env variables at https://docs.immich.app/install/environment-variables

# The location where your uploaded files are stored
UPLOAD_LOCATION=/volume1/docker/immich-app/library

# The location where your database files are stored. Network shares are not supported for the database
DB_DATA_LOCATION=/volume1/docker/immich-app/postgres

# To set a timezone, uncomment the next line and change Etc/UTC to a TZ identifier from this list: https://en.wikipedia.org/wiki/List_of_tz_database_time_zones#List
# TZ=Asia/Taipei

# The Immich version to use. You can pin this to a specific version like "v1.71.0"
IMMICH_VERSION=release

# Connection secret for postgres. You should change it to a random password
# Please use only the characters `A-Za-z0-9`, without special characters or spaces
DB_PASSWORD=postgres

# The values below this line do not need to be changed
###################################################################################
DB_USERNAME=postgres
DB_DATABASE_NAME=immich

 

進入Portainer,新增堆棧(Stack)

將docker-compose.yml內容貼到Stack編輯器,並上傳剛剛修改的.env檔案

image.png

 

上傳後確認以下環境變量正確,並將編輯器內的- .env改成- stack.env

image.png

image.png

 

修改完成後部屬,第一次下載容器需等待一段間,所有容器成功開啟後即可登入http://192.168.0.250:2283/初始化安裝

Synology - 洗白+開啟photo人物辨識

運行環境

洗白設定

安裝VMM

安裝virtual machine manager套件,下載跟主機相應版本的Virtual DSM
新增虛擬機選擇Synology Virtual DSM,點選免費授權後開機
使用synology assistant搜尋新建立的虛擬機,紀錄序號及mac
將主機更改為虛擬機的序號和mac

Synology設定

sudo -i
mkdir /tmp/boot
cd /dev
mount -t vfat synoboot1 /tmp/boot/
nano /tmp/boot/user-config.yml

root@synology:/dev# nano /tmp/boot/user-config.yml
lkm: prod
directboot: "false"
model: "DS920+"
build: "42962"
sn: "xxx"   <<填入虛擬機序號
layout: qwerty
.
.
.
cmdline:
  netif_num: "1"
  mac1: xxx <<填入虛擬機mac

登入synology網頁,進入資訊中心,確認序號和mac已經更改

安裝active backup for business測試,登入synology帳號如果啟用成功即完成,以上為洗白功能開啟

開啟photo人物辨識

於套件中心確認photo版本,下載對應補丁替換

libsynophoto-plugin-model.so

libsynophoto-plugin-model.so_.1.-10

image.png

synopkgctl stop SynologyPhotos
cp -f /var/packages/SynologyPhotos/target/usr/lib/libsynophoto-plugin-model.so /var/packages/SynologyPhotos/target/usr/lib/libsynophoto-plugin-model.so-bak
cp -f /var/packages/SynologyPhotos/target/usr/lib/libsynophoto-plugin-model.so.1.0 /var/packages/SynologyPhotos/target/usr/lib/libsynophoto-plugin-model.so.1.0-bak
cd /tmp
wget --no-check-certificate https://github.com/jinlife/Synology_Photos_Face_Patch/releases/download/1.3.3-0330/libsynophoto-plugin-model.so
wget --no-check-certificate https://github.com/jinlife/Synology_Photos_Face_Patch/releases/download/1.3.3-0330/libsynophoto-plugin-model.so.1.0
cp -f libsynophoto-plugin-model.so /var/packages/SynologyPhotos/target/usr/lib/
cp -f libsynophoto-plugin-model.so.1.0 /var/packages/SynologyPhotos/target/usr/lib/
chmod +x /var/packages/SynologyPhotos/target/usr/lib/libsynophoto-plugin-model.so
chmod +x /var/packages/SynologyPhotos/target/usr/lib/libsynophoto-plugin-model.so.1.0
chown SynologyPhotos:SynologyPhotos /var/packages/SynologyPhotos/target/usr/lib/libsynophoto-plugin-model.so
chown SynologyPhotos:SynologyPhotos /var/packages/SynologyPhotos/target/usr/lib/libsynophoto-plugin-model.so.1.0
synopkgctl start SynologyPhotos

瀏覽器打開Synonlogy Photos,啟用人物相簿後重建索引即可

Synology - 安裝 WireGuard 客户端

套件中心設定

新增社群https://synopackage.com/repository/spk/all,安裝Wiregurad

image.png

主機設定

修复套件权限
sudo sed -i 's/package/root/g' /var/packages/WireGuard/conf/privilege
在etc目录下创建wireguard文件夹
mkdir /etc/wireguard/
进入Wireguard文件夹
cd /etc/wireguard/
新建 conf 配置文件
touch gw0.conf
给于配置文件权限
chmod 775 gw0.conf

建立客戶端金鑰

wg genkey | tee client1_privateKey | wg pubkey > client1_publicKey

設定gw0.conf

[Interface]
PrivateKey = eEUEA8BW5RKWfUxXdAxZrotuKdZ5JZD9WQyVY= (client1_privateKey)
Address = 10.9.0.5/24 (server端設定ip)
MTU = 1400

PostUp = iptables -t nat -A POSTROUTING -o eth0 -s 10.9.0.0/24 -j MASQUERADE   (可選,wg up後啟用nat)
PostDown = iptables -t nat -D POSTROUTING -o eth0 -s 10.9.0.0/24 -j MASQUERADE (可選,wg down後刪除nat)

[Peer]
PublicKey = Rh1yTxxVzswNMlhBClPH7KB2jrrIOZUexE= (server端公鑰)
AllowedIPs = 10.9.0.0/24,192.168.0.0/24 (wg網段和允許網段)
PersistentKeepalive = 25 (須設定)
Endpoint = ip:port
启动 WG服务
wg-quick up gw0
停止 WG服务
wg-quick down gw0
查看 WG状态
wg show gw0
開機自啟

# 开启
sudo wg-autostart enable gw0
# 关闭
sudo wg-autostart disable gw0