大家好,
有沒有人在 Docker 容器中安裝過 LibreNMS?我想這麼做。我已經找到了推薦的 YAML compose 檔案,但因為我不是 YAML 專家,不太確定在 QNAP 上需要修改哪些地方等等。
謝謝!
大家好,
有沒有人在 Docker 容器中安裝過 LibreNMS?我想這麼做。我已經找到了推薦的 YAML compose 檔案,但因為我不是 YAML 專家,不太確定在 QNAP 上需要修改哪些地方等等。
謝謝!
你可以貼上 YAML 嗎?
主要是網路和共享資料夾需要為 WNAP 做調整。
name: librenms
services:
db:
image: mariadb:10
container_name: librenms_db
command:
- "mysqld"
- "--innodb-file-per-table=1"
- "--lower-case-table-names=0"
- "--character-set-server=utf8mb4"
- "--collation-server=utf8mb4_unicode_ci"
volumes:
- "./db:/var/lib/mysql"
environment:
- "TZ=${TZ}"
- "MARIADB_RANDOM_ROOT_PASSWORD=yes"
- "MYSQL_DATABASE=${MYSQL_DATABASE}"
- "MYSQL_USER=${MYSQL_USER}"
- "MYSQL_PASSWORD=${MYSQL_PASSWORD}"
restart: always
redis:
image: redis:7.2-alpine
container_name: librenms_redis
environment:
- "TZ=${TZ}"
restart: always
msmtpd:
image: crazymax/msmtpd:latest
container_name: librenms_msmtpd
env_file:
- "./msmtpd.env"
restart: always
librenms:
image: librenms/librenms:latest
container_name: librenms
hostname: librenms
cap_add:
- NET_ADMIN
- NET_RAW
ports:
- target: 8000
published: 8000
protocol: tcp
depends_on:
- db
- redis
- msmtpd
volumes:
- "./librenms:/data"
env_file:
- "./librenms.env"
environment:
- "TZ=${TZ}"
- "PUID=${PUID}"
- "PGID=${PGID}"
- "DB_HOST=db"
- "DB_NAME=${MYSQL_DATABASE}"
- "DB_USER=${MYSQL_USER}"
- "DB_PASSWORD=${MYSQL_PASSWORD}"
- "DB_TIMEOUT=60"
restart: always
dispatcher:
image: librenms/librenms:latest
container_name: librenms_dispatcher
hostname: librenms-dispatcher
cap_add:
- NET_ADMIN
- NET_RAW
depends_on:
- librenms
- redis
volumes:
- "./librenms:/data"
env_file:
- "./librenms.env"
environment:
- "TZ=${TZ}"
- "PUID=${PUID}"
- "PGID=${PGID}"
- "DB_HOST=db"
- "DB_NAME=${MYSQL_DATABASE}"
- "DB_USER=${MYSQL_USER}"
- "DB_PASSWORD=${MYSQL_PASSWORD}"
- "DB_TIMEOUT=60"
- "DISPATCHER_NODE_ID=dispatcher1"
- "SIDECAR_DISPATCHER=1"
restart: always
syslogng:
image: librenms/librenms:latest
container_name: librenms_syslogng
hostname: librenms-syslogng
cap_add:
- NET_ADMIN
- NET_RAW
depends_on:
- librenms
- redis
ports:
- target: 514
published: 514
protocol: tcp
- target: 514
published: 514
protocol: udp
volumes:
- "./librenms:/data"
env_file:
- "./librenms.env"
environment:
- "TZ=${TZ}"
- "PUID=${PUID}"
- "PGID=${PGID}"
- "DB_HOST=db"
- "DB_NAME=${MYSQL_DATABASE}"
- "DB_USER=${MYSQL_USER}"
- "DB_PASSWORD=${MYSQL_PASSWORD}"
- "DB_TIMEOUT=60"
- "SIDECAR_SYSLOGNG=1"
restart: always
snmptrapd:
image: librenms/librenms:latest
container_name: librenms_snmptrapd
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:
- "./librenms:/data"
env_file:
- "./librenms.env"
environment:
- "TZ=${TZ}"
- "PUID=${PUID}"
- "PGID=${PGID}"
- "DB_HOST=db"
- "DB_NAME=${MYSQL_DATABASE}"
- "DB_USER=${MYSQL_USER}"
- "DB_PASSWORD=${MYSQL_PASSWORD}"
- "DB_TIMEOUT=60"
- "SIDECAR_SNMPTRAPD=1"
restart: always
在 QTS 上,你可以用 /share/sharename/subfolder 來宣告你的共享資料夾
我通常這樣做(以 httpd 容器為例)
volumes:
- '/share/Web/webstage1:/usr/local/apache2/htdocs'
所以在這個例子中,我在我的共享資料夾 ‘Web’ 裡有一個名為 ‘webstage1’ 的資料夾
這個資料夾會在容器內掛載為 /usr/local/apache2/htdocs
如果你想讓它成為唯讀(例如你不希望容器編輯這些檔案),可以在最後加上 :ro
volumes:
- '/share/Web/webstage1:/usr/local/apache2/htdocs:ro'
所以那個資料夾就是在 QNAP docker 檔案系統「外部」的資料夾。那麼在這種情況下,我應該把它放在 /share/Container/LibreNMS,對嗎?
那麼,我需要安裝 MariaDB 嗎?我需要設定所有的密碼和資料庫等等嗎?
???
你需要對所有的卷(volumes)都這麼做
資料庫應該是 compose 套件的一部分,你唯一需要調整的,就是卷(volumes)和網路設定(如果你不想用 NAT,而是想用橋接模式等),以及你想更改的使用者名稱和密碼。
OK。所以我最後得到了這樣的 compose 檔案:
name: librenms
services:
db:
image: mariadb:10
container_name: librenms_db
command:
- "mysqld"
- "--innodb-file-per-table=1"
- "--lower-case-table-names=0"
- "--character-set-server=utf8mb4"
- "--collation-server=utf8mb4_unicode_ci"
volumes:
- "/share/Container/LibreNMS/db:/var/lib/mysql"
environment:
- "TZ=${TZ}"
- "MARIADB_RANDOM_ROOT_PASSWORD=yes"
- "MYSQL_DATABASE=${MYSQL_DATABASE}"
- "MYSQL_USER=${MYSQL_USER}"
- "MYSQL_PASSWORD=${MYSQL_PASSWORD}"
restart: always
redis:
image: redis:7.2-alpine
container_name: librenms_redis
environment:
- "TZ=${TZ}"
restart: always
msmtpd:
image: crazymax/msmtpd:latest
container_name: librenms_msmtpd
env_file:
- "/share/Container/LibreNMS/msmtpd.env"
restart: always
librenms:
image: librenms/librenms:latest
container_name: librenms
hostname: librenms
cap_add:
- NET_ADMIN
- NET_RAW
ports:
- target: 8000
published: 8000
protocol: tcp
depends_on:
- db
- redis
- msmtpd
volumes:
- "/share/Container/LibreNMS:/data"
env_file:
- "/share/Container/LibreNMS/librenms.env"
environment:
- "TZ=${TZ}"
- "PUID=${PUID}"
- "PGID=${PGID}"
- "DB_HOST=db"
- "DB_NAME=${MYSQL_DATABASE}"
- "DB_USER=${MYSQL_USER}"
- "DB_PASSWORD=${MYSQL_PASSWORD}"
- "DB_TIMEOUT=60"
restart: always
dispatcher:
image: librenms/librenms:latest
container_name: librenms_dispatcher
hostname: librenms-dispatcher
cap_add:
- NET_ADMIN
- NET_RAW
depends_on:
- librenms
- redis
volumes:
- "/share/Container/LibreNMS:/data"
env_file:
- "/share/Container/LibreNMS/librenms.env"
environment:
- "TZ=${TZ}"
- "PUID=${PUID}"
- "PGID=${PGID}"
- "DB_HOST=db"
- "DB_NAME=${MYSQL_DATABASE}"
- "DB_USER=${MYSQL_USER}"
- "DB_PASSWORD=${MYSQL_PASSWORD}"
- "DB_TIMEOUT=60"
- "DISPATCHER_NODE_ID=dispatcher1"
- "SIDECAR_DISPATCHER=1"
restart: always
syslogng:
image: librenms/librenms:latest
container_name: librenms_syslogng
hostname: librenms-syslogng
cap_add:
- NET_ADMIN
- NET_RAW
depends_on:
- librenms
- redis
ports:
- target: 514
published: 514
protocol: tcp
- target: 514
published: 514
protocol: udp
volumes:
- "/share/Container/LibreNMS:/data"
env_file:
- "/share/Container/LibreNMS/librenms.env"
environment:
- "TZ=${TZ}"
- "PUID=${PUID}"
- "PGID=${PGID}"
- "DB_HOST=db"
- "DB_NAME=${MYSQL_DATABASE}"
- "DB_USER=${MYSQL_USER}"
- "DB_PASSWORD=${MYSQL_PASSWORD}"
- "DB_TIMEOUT=60"
- "SIDECAR_SYSLOGNG=1"
restart: always
snmptrapd:
image: librenms/librenms:latest
container_name: librenms_snmptrapd
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:
- "/share/Container/LibreNMS:/data"
env_file:
- "/share/Container/LibreNMS/librenms.env"
environment:
- "TZ=${TZ}"
- "PUID=${PUID}"
- "PGID=${PGID}"
- "DB_HOST=db"
- "DB_NAME=${MYSQL_DATABASE}"
- "DB_USER=${MYSQL_USER}"
- "DB_PASSWORD=${MYSQL_PASSWORD}"
- "DB_TIMEOUT=60"
- "SIDECAR_SNMPTRAPD=1"
restart: always
cap_add:
- NET_ADMIN
- NET_RAW
ports:
- target: 8000
published: 8000
protocol: tcp
depends_on:
- db
- redis
- msmtpd
volumes:
- "/share/Container/LibreNMS:/data"
env_file:
- "/share/Container/LibreNMS/librenms.env"
environment:
- "TZ=${TZ}"
- "PUID=${PUID}"
- "PGID=${PGID}"
- "DB_HOST=db"
- "DB_NAME=${MYSQL_DATABASE}"
- "DB_USER=${MYSQL_USER}"
- "DB_PASSWORD=${MYSQL_PASSWORD}"
- "DB_TIMEOUT=60"
restart: always
dispatcher:
image: librenms/librenms:latest
container_name: librenms_dispatcher
hostname: librenms-dispatcher
cap_add:
- NET_ADMIN
- NET_RAW
depends_on:
- librenms
- redis
volumes:
- "/share/Container/LibreNMS:/data"
env_file:
- "/share/Container/LibreNMS/librenms.env"
environment:
- "TZ=${TZ}"
- "PUID=${PUID}"
- "PGID=${PGID}"
- "DB_HOST=db"
- "DB_NAME=${MYSQL_DATABASE}"
- "DB_USER=${MYSQL_USER}"
- "DB_PASSWORD=${MYSQL_PASSWORD}"
- "DB_TIMEOUT=60"
- "DISPATCHER_NODE_ID=dispatcher1"
- "SIDECAR_DISPATCHER=1"
restart: always
syslogng:
image: librenms/librenms:latest
container_name: librenms_syslogng
hostname: librenms-syslogng
cap_add:
- NET_ADMIN
- NET_RAW
depends_on:
- librenms
- redis
ports:
- target: 514
published: 514
protocol: tcp
- target: 514
published: 514
protocol: udp
volumes:
- "./librenms:/data"
env_file:
- "./librenms.env"
environment:
- "TZ=${TZ}"
- "PUID=${PUID}"
- "PGID=${PGID}"
- "DB_HOST=db"
- "DB_NAME=${MYSQL_DATABASE}"
- "DB_USER=${MYSQL_USER}"
- "DB_PASSWORD=${MYSQL_PASSWORD}"
- "DB_TIMEOUT=60"
- "SIDECAR_SYSLOGNG=1"
restart: always
snmptrapd:
image: librenms/librenms:latest
container_name: librenms_snmptrapd
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:
- "/share/Container/LibreNMS:/data"
env_file:
- "/share/Container/LibreNMS/librenms.env"
environment:
- "TZ=${TZ}"
- "PUID=${PUID}"
- "PGID=${PGID}"
- "DB_HOST=db"
- "DB_NAME=${MYSQL_DATABASE}"
- "DB_USER=${MYSQL_USER}"
- "DB_PASSWORD=${MYSQL_PASSWORD}"
- "DB_TIMEOUT=60"
- "SIDECAR_SNMPTRAPD=1"
restart: always
但是它產生了錯誤。在 GitHub repository 上,有一個 .env 檔案內容如下:
TZ=Europe/Paris
PUID=1000
PGID=1000
MYSQL_DATABASE=librenms
MYSQL_USER=librenms
MYSQL_PASSWORD=asupersecretpassword
我在這些變數上遇到錯誤。我猜我應該直接把這些值寫進 Compose 檔案裡嗎?
另外,他們還有另外兩個檔案:
librenms.env
MEMORY_LIMIT=256M
MAX_INPUT_VARS=1000
UPLOAD_MAX_SIZE=16M
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=*/5 * * * *
以及 msmtpd.env
# https://github.com/crazy-max/docker-msmtpd
SMTP_HOST=smtp.gmail.com
SMTP_PORT=587
SMTP_TLS=on
SMTP_STARTTLS=on
SMTP_TLS_CHECKCERT=on
SMTP_AUTH=on
SMTP_USER=foo
SMTP_PASSWORD=bar
SMTP_FROM=foo@gmail.com
我是不是應該把這些檔案放在 /share/Container/LibreNMS 資料夾裡再 build 這個 app?是的,我知道我需要更改裡面的值。
我想我從來沒用過它們
但我認為你可以將它們綁定到 NAS 的某個使用者/群組
id admin(反正這通常是預設),如果你想的話
這會顯示 admin 的 PUID 和 GUID,如果你想用其他權限執行容器,請檢查你想用來執行的那個使用者的值
另請參閱
我想你可能誤解了我的問題……
我應該可以隨意創建任何用戶名/密碼。對於容器來說,它與 NAS 沒有任何關係。所以在 .env 檔案中,我可以把這些資訊寫進 compose 腳本裡。
我的疑問是該如何處理 librenms.env 和 msmtpd.env 這兩個檔案。
不知道,我從未建立過帶有環境變數的容器
我用過的容器都能在 compose 視窗中設定,並且配置檔案都放在共享資料夾裡。
抱歉
好的。那我來看看我能做些什麼! ![]()
OK,所以 ContainerStation 在 Compose 檔案的 “cap_add:” 行這裡拋出了錯誤。你知道這是做什麼用的嗎?
- "DB_PASSWORD=xxxxx"
- "DB_TIMEOUT=60"
- "SIDECAR_SNMPTRAPD=1"
restart: always
cap_add:
- NET_ADMIN
- NET_RAW
ports:
- target: 8000
published: 8000
protocol: tcp
這裡是我快速用 Google 找到的資料
如果這個出現錯誤,也許是在 QNAP 的 Docker 版本中尚未實作?
是啊,也許還沒實作?這很奇怪。
我在想要不要嘗試:
CAP_NET_ADMIN
CAP_NET_RAW
直接寫在 Compose 檔案裡。還是這肯定行不通?
當你省略它時會發生什麼?
否則你可以查閱 Compose 手冊
所以我的 compose 檔案有一個重大缺陷。我不小心在結尾重複貼上了一堆內容。那些 cap_add: 指令本身沒問題,在檔案的其他地方也能正常被接受。不知怎麼的,我把某些東西複製貼上了不只一次。
現在你必須在驗證 YAML 程式碼之前,先在你指定的目錄裡放好那些 .env 檔案。如果沒有,你就會遇到錯誤。
當一切都準備好並正確建置後,我現在已成功建立了應用程式,但它創建了 7 個容器,每個都有自己的 IP 位址。全部都使用 QNAP 在 Network and Virtual Switch 提供的 IP 範圍。我現在需要想辦法處理這些容器。是要把它們放到我的主網路上,還是就這樣放著。到目前為止,我還沒能打開 LibreNMS 或其他任何網頁。所以還需要再調查。不過好消息是,我已經讓它跑起來了……
Grrr。這東西看起來相當複雜……
這個應用程式不斷崩潰並重新啟動。這裡出現了一個錯誤……
以以下週期欄位建立 LibreNMS daily.sh 的 cron 任務:15 0 * * *
建立 LibreNMS cron artisan schedule:run
修正 crontabs 權限……
chmod: 正在變更 ‘/var/spool/cron/crontabs/librenms’ 的權限:位址錯誤
我猜 QNAP 不喜歡 /var 路徑。也許我需要把它映射到外部路徑?我沒辦法進入 shell 查看是否可存取,因為它崩潰並重啟得太快了。
打算嘗試把 /var 映射到外部……