在Ubuntu 20.04 LTS 上安裝Docker 版LibreNms+Mariadb+phpMyAdmin,未使用Docker-Compose
筆記如下(單引號不可以忽略):
###Ubuntu Docker安裝###
Ubuntu Docker 安裝,我是參考這篇flynncanfly大的文章「Docker獸 究極進化」來安裝的(https://ithelp.ithome.com.tw/articles/10239123)。結論是快又有效!讚!
#安裝所需基本套件sudo apt-get install apt-transport-https
sudo apt-get install ca-certificates
sudo apt-get install curl
sudo apt-get install gnupg-agent
sudo apt-get install software-properties-common
#安裝官方 GPG 金鑰$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
#驗證指紋金鑰(應為:9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88)sudo apt-key fingerprint 0EBFCD88
#將 Docker 安裝網址加入套件庫來源sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
#安裝Docker社群版sudo apt-get install docker-ce docker-ce-cli containerd.io
###安裝MariaDB###(mariadb_root_password 是指定Docker啟動後,這個MariaDB root帳號的密碼)sudo docker run -d -e 'MYSQL_ROOT_PASSWORD=mariadb_root_password' -e 'TZ=Asia/Taipei' -v '/home/myusername/database/mariadb':'/var/lib/mysql' -v '/home/myusername/mariadbcustom.cnf':'/etc/mysql/conf.d/custom.cnf' -p 3306:3306 --restart=always --name mariadb mariadb:latest
參數說明:run :執行指定的Docker Image (本地沒有就自動下載)-d :以背景方式執行-e 'MYSQL_ROOT_PASSWORD=mariadb_root_password' :設定環境變數,在此為設定MariaDB啟動後的root密碼-e 'TZ=Asia/Taipei' :指定MariaDB 時間(跟LibreNms配合)-v '/home/myusername/database/mariadb':'/var/lib/mysql' :將外部的/home/myusername/database/mariadb 資料夾(需事先建立空資料夾),映射到容器內部的/var/lib/mysql 資料夾。容器對資料夾的讀寫,實際是讀寫外部資料夾。容器刪除後,外部資料夾仍存在。-v '/home/myusername/mariadbcustom.cnf':'/etc/mysql/conf.d/custom.cnf' :將外部的/home/myusername/mariadbcustom.cnf檔案,映射到容器內部的/etc/mysql/conf.d/custom.cnf。此處是以此檔設定MariaDB的語系為UTF8,以此方式方便啟動新容器時可以直接套用。-p 3306:3306 :將容器Listen 的3306 Port直接對應到外部的3306 Port,也就是當連線外部機的3306 Port時,實際會連到此容器內Listen的3306 Port--restart=always :設定如果外部主機重啟了,會自動將本容器帶起來--name mariadb :命名本容器執行後的名稱,不命名的話,有時會自動命名成沒想到的名稱mariadb:latest :要執行的Image檔,因為本地若沒有會自動下載,所以指定最新版 |
mariadbcustom.cnf的內容(用來設定MariaDB 語系使用UTF8):[mysqld] character-set-server = utf8 collation-server = utf8_unicode_ci skip-character-set-client-handshake |
#連線Container mariadbsudo docker exec -it mariadb bash
#登入rootmysql -u root -p
##MariaDB設定LibreNMS會用到的帳密(登入MariaDB內設定)
#新增LibreNMS要用的DB,名稱librenms ,並指定LibreNMS指定的編碼CREATE DATABASE librenms CHARACTER SET utf8 COLLATE utf8_unicode_ci;
#新增LibreNMS要用的USER: librenms,並允許從任何主機登入CREATE USER 'librenms'@'%' IDENTIFIED BY 'user_librenms_password';
#授權librenms對 librenms 資料庫何做任何操作,並刷新權限GRANT ALL PRIVILEGES on librenms.* TO 'librenms'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
#檢視User權限show grants for librenms;
#檢視User清單select user,host from mysql.user;
#查看MariaDB版本select version();
#查看MariaDB 語系select * from INFORMATION_SCHEMA.SCHEMATA;
#停止、移除mariadb、清空外掛檔案區(方便不斷重新安裝測試用到)sudo docker stop mariadb; sudo docker rm mariadb; sudo rm /home/myusername/database/mariadb/* -f -r;
###安裝PhpMyAdmin### (視個人需求安裝,我裝好後就又沒用它了)
#以外部主機方式連線MariaDB(即指定主機IP,這裡以Docker分配的IP 172.17.0.2為例)sudo docker run --name phpmyadmin -d -e PMA_HOST=172.17.0.2 -p 8080:80 phpmyadmin/phpmyadmin
#以Docker Container方式連線MariaDB(「mariadb」是MariaDB的Container名稱,名稱後面的「:db」不能省略)sudo docker run --name phpmyadmin -d --link mariadb:db -p 8080:80 phpmyadmin/phpmyadmin
###安裝LibreNMS官方版及初始設定### (https://hub.docker.com/r/librenms/librenms/)
##安裝LibreNMS(安裝完成預設帳密是librenms/librenms)sudo docker run --name librenms -d -e 'DB_HOST=172.17.0.2' -e 'DB_PORT=3306' -e 'DB_NAME=librenms' -e 'DB_USER=librenms' -e 'DB_PASSWORD=user_librenms_password' -e 'DB_TIMEOUT=10' -e 'LIBRENMS_SNMP_COMMUNITY=mycommunityname' -e 'TZ=Asia/Taipei' -p '80:8000' -v '/home/myusername/librenmsdata/21.3.0/data':'/data' --restart=always librenms/librenms su - librenms -c "/opt/librenms/librenms-service.py -v"
參數說明():
|
##後置作業設定MariaDB:librenms
#連線Container mariadbsudo docker exec -it mariadb bash
#登入librenmsmysql -u librenms -p
#設定librenms 資料庫(登入LibreNMS後,右上的Validata Config內指出必需修正的內容)use librenms;
ALTER TABLE `notifications` CHANGE `datetime` `datetime` timestamp NOT NULL DEFAULT '1970-01-02 00:00:00' ;
ALTER TABLE `users` CHANGE `created_at` `created_at` timestamp NOT NULL DEFAULT '1970-01-02 00:00:01' ;
##後置作業,設定librenms 系統設定(登入LibreNMS後,右上的Validata Config內指出必需修正的內容)
#連線Container librenmssudo docker exec -it librenms bash
#執行以下指令,以複制及建立連結ln -s /opt/librenms/lnms /usr/bin/lnms;
cp /opt/librenms/misc/librenms.logrotate /etc/logrotate.d/librenms
##後置作業,啟動librenms-service (已整合到容器建置指令中)#(上述的安裝完成後,發現一直不會更新加入的設備資訊,一直停留在Generic Device,也不會收集數據。研究了很久,舊版的是用cron排程執行poller.php,新版的似乎可以用librenms-service.py完成所有原本cron做的事。)#(還不知道怎麼讓它整合進Ctainer 比較好,目前是先用背景方式執行(就是加上 &),但訊息還是會一直冒出來就是了。) /opt/librenms/librenms-service.py -v &
##重新啟動librenms 容器
sudo docker restart librenms
##批次移除本安裝的LibreNMS
#停止、移除librenms、清空外掛檔案區(方便不斷重新安裝測試用到)sudo docker stop librenms; sudo docker rm librenms; sudo rm /home/myusername/librenmsdata/21.3.0/data -r -f
###LibreNMS設定###
#登人librenms web後,右上齒輪→Global Settings 有多項設定可以使用,但若/opt/librenms/config.php有設定,在這裡就會變成唯讀。
##Email寄件設定
Global Settings→Alerting→Email Options
##自動通知設定
Alerts→Alert Transports→Create alert transport :設定各種通知方式,其中Api可以支援呼叫WebApi,Email一個設定只有一個接收人。
Alerts→Alert Transports→Create transport group :將transport群組化,例如通知多個Email跟Api。
##允許設備名稱重覆(有時候就是會發生,或需要)
Global Settings→Discovery→General Discovery Settings
##設定要執行的Poller Modules
Global Settings→Poller Modules
###Docker 基本指令###
#確認Docker版本sudo docker -v
#查看本機的Imagedocker images
#列出Container(看全部: -a )sudo docker ps -a
#登入Container(有bash的例子,如本例的mariadb)sudo docker exec -it <container_name> bash
#啟動Container(container_Name 或 container_id)docker start <container_name>
#停止Container(container_Name 或 container_id)docker stop <container_name>
#強制停止Container(container_Name 或 container_id)docker kill <container_name)
#移除Conteriner(container_Name 或 container_id)docker rm <container_name>
#查看Container IP (container_Name 或 container_id)(底下兩行都可以,中間的式子,只是從資料中撈出IP那一行)sudo docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' <container_name>
sudo docker inspect <container_name>|grep '"IPAddress"'|head -n 1