玩客雲(OneCloud) 的Docker應用篇
前言: |
上篇講到玩客雲(OneCloud) 的設置與使用 ,下篇分享的是
Docker
的安裝與應用。
Docker
越來越受到大家歡迎,我覺得在安裝複雜軟件時可以免依賴環境(編譯環境)下簡單完成部署,如:Home Assistant
,因為每一個容器(container
)也是一個獨立進程共享主機內核, 可以做到非常輕量,更新或者升級也是非常方便。
目錄內容: |
下載工具
網頁版目錄分享工具
私有雲
- 安裝開源博客WordPress
智能家居助手
操作步驟: |
所有的配置還是基於暮冬初一大佬適配的Armbian
平台,版本:Linux onecloud 5.14.21-meson
。
Docker及Docker-Compose的安裝 |
玩客雲(OneCloud
)的Armbian
系統是基於Ubuntu Jammy 22.04 LTS
適配,所以安裝按官方Install Docker Engine on Ubuntu的教程一步步複製及貼上。
更新及安裝套件,可以透過 HTTPS 使用軟件儲存庫(repository)
sudo apt update && sudo apt install ca-certificates curl gnupg lsb-release -y
新增 Docker
的官方 GPG
金鑰
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
儲存設定軟件儲存庫,添加Docker
目錄
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
安裝 Docker
引擎
sudo apt update && sudo apt install docker-ce docker-ce-cli containerd.io docker-compose-plugin -y
新增現有用戶到docker
群組,使可執行Docker Engine
的權限
sudo usermod -aG docker $USER
安裝Docker Compose 程式
Compose
是用於編輯和運行多容器Docker
應用程式工具。Compose
可以使用YAML
檔來設定應用程式的服務。然後,使用單個命令(docker-compose up -d
),從配置中創建並啟動所有服務。
sudo apt install docker-compose
curl -L https://github.com/linuxserver/docker-docker-compose/releases/download/1.28.5-ls32/docker-compose-armhf | sudo tee /usr/local/bin/docker-compose >/dev/null
添加可執行權限
sudo chmod +x /usr/local/bin/docker-compose
重新登入後就可以現有用戶執行docker
指令
Docker-Compose 基礎指令 |
透過 docker-compose
指令可以一次管理多個容器。
例子¶
動作 | 指令 |
---|---|
啟動服務 | docker-compose up -d |
開始服務 | docker-compose start |
重新啟動服務 | docker-compose restart |
停止服務 | docker-compose stop |
下載更新 | docker-compose pull |
停止及卸載服務 | docker-compose down |
持續查看日誌 | docker-compose logs --tail=100 -f |
進入容器內 | docker-compose exec <service> bash |
刪除所有未使用的容器、網路、映像 及卷 | docker system prune -af |
安裝 Aria2 下載工具 |
P3TERX 大佬的Aria2 Pro
一直是我的主力下載工具,Aria2 支持 BT、磁力、HTTP、FTP 等多種下載協議,作為24小時離線下載的服務的首選。官方網站: https://aria2.github.io/
建立程式和下載的目錄
mkdir -p /home/$USER/apps/aria2 && mkdir -p /mnt/mmc/downloads
查看用戶的UID
及GID
,實現下載的所有檔案套用當前用戶的權限(為擁有者)。
id $USER
uid=1000(onecloud) gid=1000(onecloud) groups=1000(onecloud),27(sudo),100(users),999(docker),117(mysql)
進入程序目錄
cd /home/$USER/apps/aria2/
建立Aria2 Pro
的Docker-Compose
YAML
檔
cat >> docker-compose.yml << EOF
version: '3'
services:
Aria2-Pro:
container_name: aria2-pro
image: p3terx/aria2-pro
environment:
- PUID=1000
- PGID=1000
- UMASK_SET=022
- RPC_SECRET=P3TERX
- RPC_PORT=6800
- LISTEN_PORT=6888
- DISK_CACHE=64M
- IPV6_MODE=false
- UPDATE_TRACKERS=true
- CUSTOM_TRACKER_URL=
- TZ=Asia/Hong_Kong
volumes:
- $PWD/config:/config
- /mnt/mmc/downloads:/downloads
network_mode: host
restart: unless-stopped
logging:
driver: json-file
options:
max-size: 1m
# AriaNg is just a static web page, usually you only need to deploy on a single host.
AriaNg:
container_name: ariang
image: p3terx/ariang
command: --port 6880 --ipv6
network_mode: host
restart: unless-stopped
logging:
driver: json-file
options:
max-size: 1m
EOF
選項 | 註解 |
---|---|
container_name: aria2-pro | 容器名稱aria2-pro ,可自定義以示區分。 |
- PUID=1000 | 用戶的權限。 |
- PGID=1000 | 用戶的群組權限。 |
- RPC_SECRET=P3TERX | Aria2 程式 密碼(金鑰)為P3TERX ,可自定義。 |
- $PWD/config:/config | 配置文件儲存目錄: /home/$USER/apps/aria2/config |
- mnt/mmc/downloads:/downloads | 檔案的下載目錄為: mnt/mmc/downloads |
network_mode: host | 使用 host 網絡模式,直接使用宿主機網絡。 |
restart: unless-stopped | 設置容器重啟策略。 |
--log-driver json-file | 設置日誌記錄格式為 json 格式。 |
--log-opt max-size=1m | 日誌大小限制為1MB,防止 Aria2 持續下載產生大量的日誌佔用磁盤空間。 |
AriaNg: | 是另一個容器的網頁靜態頁面,方便使用WEB UI 操作,端口: 6880 |
檢驗Docker-Compose
YAML
檔配置
docker-compose config
拉取鏡像,建立和啟動容器
docker-compose up -d
得益於 Docker Compose CLI
的簡單性,只需一個指令就可以同時拉取多個容器并建立程式。
檢查容器的是否成功啟動
docker-compose ps
aria2-pro /init Up
ariang /darkhttpd /AriaNg --port ... Up
現在可以透過瀏覽器開啟Aria2
服務輕鬆哋下載,http://onecloud:6880
安裝 qBittorrent 下載工具 |
qBittorrent
專案旨在提供μTorrent
的開源軟體替代品,Aria2
的另一選擇。Docker
容器的選擇還是P3TERX 大佬的的優化版。官方網站: qBittorrent Official Website
Docker: p3terx/qbittorrent
建立程式和下載的目錄
mkdir -p /home/$USER/apps/qBittorrent && mkdir -p /mnt/mmc/downloads
進入程序目錄
cd /home/$USER/apps/qBittorrent/
建立qBittorrent
的Docker-Compose
YAML
檔
cat >> docker-compose.yml << EOF
version: '3'
services:
qbittorrent:
container_name: qbittorrent
image: p3terx/qbittorrent
environment:
- PUID=$UID
- PGID=$GID
- UMASK_SET=022
- QBT_WEBUI_PORT=18080
- TZ=Asia/Hong_Kong
volumes:
- $PWD/config:/qBittorrent
- /mnt/mmc/downloads:/downloads
network_mode: host
restart: unless-stopped
EOF
選項 | 註解 |
---|---|
container_name: qbittorrent | 容器名稱qbittorrent ,可自定義以示區分。 |
- PUID=$UID | 當前用戶的權限。 |
- PGID=$GID | 當前用戶的群組權限。 |
- QBT_WEBUI_PORT=18080 | 網頁WEB UI 操作端口: 18080。 |
- $PWD/config:/qBittorrent | 配置文件儲存目錄: /home/$USER/apps/qbittorrent/config |
- mnt/mmc/downloads:/downloads | 檔案的下載目錄為: mnt/mmc/downloads |
network_mode: host | 使用 host 網絡模式,直接使用宿主機網絡。 |
restart: unless-stopped | 設置容器重啟策略。 |
檢驗Docker-Compose
YAML
檔配置
docker-compose config
拉取鏡像,建立和啟動容器
docker-compose up -d
檢查容器的是否成功啟動
docker-compose ps
qbittorrent /init Up
現在可以透過瀏覽器開啟qbittorrent服務輕鬆哋下載,http://onecloud:18080
安裝 transmission 下載工具 |
Transmission
是一種BitTorrent
客戶端,特點是一個跨平台的後端和其上的簡潔的用戶界面。。
建立程式和下載的目錄
mkdir -p /home/$USER/apps/transmission && mkdir -p /mnt/mmc/downloads
進入程序目錄
cd /home/$USER/apps/transmission/
建立transmission
的Docker-Compose
YAML
檔
cat >> docker-compose.yml << EOF
version: "2.1"
services:
transmission:
image: lscr.io/linuxserver/transmission:latest
container_name: transmission
environment:
- PUID=65534
- PGID=65534
- TZ=Asia/Hong_Kong
- TRANSMISSION_WEB_HOME=/transmissionic/ #optional
# - USER=username #optional
# - PASS=password #optional
# - WHITELIST=iplist #optional
# - PEERPORT=peerport #optional
# - HOST_WHITELIST=dnsname list #optional
volumes:
- ./data:/config
- ./downloads:/downloads
- ./watch:/watch
ports:
- 9091:9091
- 51413:51413
- 51413:51413/udp
restart: unless-stopped
EOF
選項 | 註解 |
---|---|
container_name: transmission | 容器名稱transmission ,可自定義以示區分。 |
- PUID=65534 | nobody 用戶的權限。 |
- PGID=65534 | nogroup 用戶的群組權限。 |
9091:9091 | 網頁WEB UI 操作端口: 9091。 |
- ./data:/config | 配置文件儲存目錄: /home/$USER/apps/transmission/data |
- ./downloads:/downloads | 檔案的下載目錄為: /home/$USER/apps/transmission/downloads |
- ./watch:/watch | 監視種子的目錄, 路徑為: /home/$USER/apps/transmission/watch |
restart: unless-stopped | 設置容器重啟策略。 |
檢驗Docker-Compose
YAML
檔配置
docker-compose config
拉取鏡像,建立和啟動容器
docker-compose up -d
檢查容器的是否成功啟動
docker-compose ps
transmission /init Up
現在可以透過瀏覽器開啟transmission服務輕鬆哋下載,http://onecloud:9091
安裝 h5ai 檔案目錄分享 |
h5ai
是透過 Web 以目錄索引(index
)列表的方式管理檔案。是一款外觀優雅且非常實用的目錄列表程序,適合用來做個人分享網盤。官方網站: h5ai · modern HTTP web server
Docker: awesometic/h5ai
建立程式和分享的目錄
mkdir -p /home/$USER/apps/h5ai && mkdir -p /mnt/mmc
進入程序目錄
cd /home/$USER/apps/h5ai/
建立h5ai
的Docker-Compose
YAML
檔
cat >> docker-compose.yml << EOF
version: "3"
services:
filebrowser:
image: awesometic/h5ai
container_name: h5ai
ports:
- 8090:80
volumes:
- /mnt/mmc:/h5ai
- ${PWD}/config:/config
environment:
- PUID=$UID
- PGID=$GID
- TZ="Asia/Hong_Kong"
# - HTPASSWD=true
# - HTPASSWD_USER=awesometic
# - HTPASSWD_PW=awesometic
restart: unless-stopped
EOF
選項 | 註解 |
---|---|
container_name: h5ai | 容器名稱h5ai ,可自定義以示區分。 |
- PUID=$UID | 當前用戶的權限。 |
- PGID=$GID | 當前用戶的群組權限。 |
- 8090:80 | 網頁WEB UI 操作端口: 8090。 |
${PWD}/config:/config | 配置文件儲存目錄: /home/$USER/apps/h5ai/config |
/mnt/mmc:/data | 檔案的分享目錄路徑為: mnt/mmc |
- HTPASSWD=true | 密碼保護開啟 (* 需要刪除#號 註釋) |
- HTPASSWD_USER=h5ai | 密碼用戶名稱為 h5ai (* 需要刪除#號 註釋) |
- HTPASSWD_PW=awesometic | 保護的密碼為 awesometic (* 需要刪除#號 註釋) |
restart: unless-stopped | 設置容器重啟策略。 |
檢驗Docker-Compose
YAML
檔配置
docker-compose config
拉取鏡像,建立和啟動容器
docker-compose up -d
檢查容器的是否成功啟動
docker-compose ps
h5ai /init.sh Up 0.0.0.0:8090->80/tcp,:::8090->80/tcp
現在可以透過瀏覽器開啟h5ai
服務,http://onecloud:8090
安裝 Apaxy 檔案目錄分享 |
Apaxy
是一個簡單且可自定義的主題,Web
目錄的分享工具。官方網站: Apaxy: A simple, customisable Apache directory theme (oupala.github.io)
GitHub: GitHub - oupala/apaxy: a simple, customisable theme for your apache directory listing
進入程序目錄
mkdir -p /home/$USER/apps && cd /home/$USER/apps
拉取Apaxy
程式檔案及進入下載的目錄
git clone https://github.com/oupala/apaxy.git && cd apaxy/
修改Apaxy
的Docker-Compose
YAML
檔
vi docker-compose.yml
按ESC
退回到一般模式,輸入:wq
儲存及離開
選項 | 註解 |
---|---|
container_name: apaxy | 新增容器名稱apaxy ,可自定義以示區分。(可選) |
- '2080:8080' | 錯開程式的端為: 2080 (原端口是 80 )。 |
/mnt/mmc/ | 修改檔案的分享目錄路徑為: mnt/mmc (原路徑為 ./share/ )。 |
restart: unless-stopped | 新增容器重啟策略。 |
檢驗Docker-Compose
YAML
檔配置
docker-compose config
拉取鏡像,建立和啟動容器
docker-compose up -d
檢查容器的是否成功啟動
docker-compose ps
apaxy httpd-foreground Up 80/tcp, 0.0.0.0:2080->8080/tcp,:::2080->8080/tcp
現在可以透過瀏覽器開啟apaxy
服務,http://onecloud:2080
安裝File Browser 網頁檔案管理 |
File Browser
可以透過(瀏覽器) Web 界面輕鬆地存取文件,功能包括上傳,刪除,預覽,重命名和編輯檔案。同時允許多個用戶建立,每個用戶都可以擁有自己的目錄。官方網站: https://filebrowser.org/
Docker: hurlenko/filebrowser
建立程式和管理的目錄
mkdir -p /home/$USER/apps/filebrowser && mkdir -p /mnt/mmc
進入程序目錄
cd /home/$USER/apps/filebrowser/
建立File Browser
的Docker-Compose
YAML
檔
cat >> docker-compose.yml << EOF
version: "3"
services:
filebrowser:
image: hurlenko/filebrowser
container_name: filebrowser
ports:
- 8080:8080
volumes:
- /mnt/mmc:/data
- ${PWD}/config:/config
environment:
- PUID=1000
- PGID=1000
- TZ="Asia/Hong_Kong"
- FB_BASEURL=/
restart: always
EOF
選項 | 註解 |
---|---|
container_name: filebrowser | 容器名稱filebrowser ,可自定義以示區分。 |
- PUID=1000 | 用戶的權限。 |
- PGID=1000 | 用戶的群組權限。 |
- 8080:8080 | 網頁WEB UI 操作端口: 8080。 |
${PWD}/config:/config | 配置文件儲存目錄: /home/$USER/apps/filebrowser/config |
/mnt/mmc:/data | 管理檔案的目錄路徑為: mnt/mmc |
restart: always | 設置容器重啟策略。 |
檢驗Docker-Compose
YAML
檔配置
docker-compose config
拉取鏡像,建立和啟動容器
docker-compose up -d
檢查容器的是否成功啟動
docker-compose ps
filebrowser /filebrowser --root=/data ... Up 0.0.0.0:8080->8080/tcp,:::8080->8080/tcp
現在可以透過瀏覽器開啟filebrowser
服務,http://onecloud:8080
安裝 KodCloud 可道雲 |
KodCloud
是一款雲端文檔管理工具,在網盤內也可以像在電腦上操作一般熟悉而流暢,熟悉框選、拖拽、快捷鍵,從來沒有這麼簡單方便。
優點:
- 雲存儲 (私有部署、集中存管、卓越體驗、插件市場)
- 雲辦公 (一鍵分享、輕松預覽、同步備份)
- 雲協同 (協同編輯、劃詞標注、即寫即存、歷史版本)
- 雲管理 (組織架構、靈活權限、操作日誌)
- 雲拓展 (OpenAPI、單點登錄、對象存儲、擴展框架)
- 新體驗 (Windows體驗、企業LOGO)
建立程式和分享的目錄
mkdir -p /home/$USER/apps/kodbox && mkdir -p /mnt/mmc
進入程序目錄
cd /home/$USER/apps/kodbox/
建立kodbox
的Docker-Compose
YAML
檔
cat >> docker-compose.yml << EOF
version: "2.1"
services:
db:
image: lscr.io/linuxserver/mariadb:latest
container_name: mariadb
environment:
- PUID=1000
- PGID=1000
- MYSQL_ROOT_PASSWORD=ROOT_ACCESS_PASSWORD
- TZ=Asia/Hong_Kong
- MYSQL_DATABASE=USER_DB_NAME #optional
- MYSQL_USER=MYSQL_USER #optional
- MYSQL_PASSWORD=DATABASE_PASSWORD #optional
volumes:
- ${PWD}/db:/config
# ports:
# - 3306:3306
restart: unless-stopped
kod:
image: kodcloud/kodbox
container_name: kodbox
ports:
- 3080:80
depends_on:
- db
links:
- db
- redis
volumes:
- "/mnt/mmc/site:/var/www/html"
restart: unless-stopped
redis:
image: redis:alpine
container_name: redis
environment:
- "TZ=Asia/Hong_Kong"
restart: unless-stopped
EOF
docker-compose.yml
文件包括mariaDB
數據庫 、KobCloud
程式 及redis
內存數據庫。由於玩客雲(OneCloud
)的CPU
架構是arm
32位,所以數據庫會選用linuxserver/mariadb
。參數
depends_on
是在docker-compose
啟動服務之前先要把depends_on
指定的服務啟動起來。
選項 | 註解 |
---|---|
container_name: kodbox | 程式容器名稱kodbox ,可自定義以示區分。 |
container_name: mariadb | 數據庫容器名稱mariadb ,可自定義以示區分。 |
container_name: redis | 數據庫容器名稱redis ,可自定義以示區分。 |
ROOT_ACCESS_PASSWORD | 數據庫管理員密碼,可自定義 。 |
USER_DB_NAME | 數據庫名稱,可自定義 (如: kodbox_db )。 |
MYSQL_USER | 數據庫用戶名稱,可自定義 (如: kodbox )。 |
DATABASE_PASSWORD | 數據庫的密碼,可自定義 (如: kodbox_password )。 |
- ${PWD}/db:/config | 數據庫檔案路徑${PWD}/db 即(/home/$USER/apps/kodbox/db ),可自定義 。 |
- "/mnt/mmc/site:/var/www/html" | /mnt/mmc/site 是kodbox 持久化目錄位置,可自定義。 |
restart: unless-stopped | 新增容器重啟策略。 |
檢驗Docker-Compose
YAML
檔配置
docker-compose config
拉取鏡像,建立和啟動容器
docker-compose up -d
檢查容器的是否成功啟動
docker-compose ps
kodbox /entrypoint.sh /usr/bin/su ... Up 0.0.0.0:3080->80/tcp,:::3080->80/tcp, 9000/tcp
mariadb /init Up 3306/tcp
redis docker-entrypoint.sh redis ... Up 6379/tcp
現在可以透過瀏覽器開啟kodbox
服務,http://onecloud:3080
因為受限於玩客雲(OneCloud
) 是32位的ARM
架構,所以只能上載2G以內的檔案。
安裝 FileRun 私有雲 |
FileRun
是一款輕量的WEB
界面儲存、同步及分享工具。近似於NextCloud
。官方網站: FileRun - Selfhosted File Sync and Share
Docker安裝: docker-arm :: FileRun Documentation
優點:
- 適配移動裝置。
- 支持多種協定:
FTP
,SMB
或者WebDAV
。 - 在線共用相冊,支持快速生成縮圖和預覽。
- 透過
NextCloud
的客戶端軟件連接,從而支援多平台(Windows、macOS、Linux、Android、IOS)。 - 支持多用戶協作。
建立程式的目錄
mkdir -p /home/$USER/apps/filefrun
進入程序目錄
cd /home/$USER/apps/filefrun/
設定環境變量
docker-compose.yml
文件包括mariaDB
數據庫 和filerun
程式 引用相同的變量。為了減少繁瑣及重複的輸入及精簡配置,此時就可以建立.env 變量配置檔案作為docker-compose.yml
文件預設的變量值。
cat >> .env << EOF
# Define FileFun Environment
ROOT_PW=root_password
DATABASE=filerun_db
DB_USER=fielrun
DB_PW=filerun_password
UID=1000
GID=1000
EOF
選項 | 註解 |
---|---|
ROOT_PW=root_password | 數據庫root 密碼是root_password ,可自定義以示區分。 |
DATABASE=filerun_db | 數據庫名稱是filerun_db ,可自定義以示區分。 |
DB_USER=fielrun | 數據庫新建用戶名稱是fielrun ,可自定義以示區分。 |
DB_PW=filerun_password | 數據庫密碼是 filerun_password ,可自定義 。 |
UID=1000 | 使用者 ID |
GID=1000 | 使用者群組 ID |
讀取變量參數:
source .env
建立filefrun
的Docker-Compose
YAML
檔
cat >> docker-compose.yml << EOF
version: "3"
services:
db:
image: linuxserver/mariadb:latest
container_name: mariadb
environment:
PUID: "${UID}"
PGID: "${GID}"
MYSQL_ROOT_PASSWORD: "${ROOT_PW}"
TZ: Asia/Hong_Kong
MYSQL_DATABASE: "${DATABASE}"
MYSQL_USER: "${DB_USER}"
MYSQL_PASSWORD: "${DB_PW}"
volumes:
- ${PWD}/db:/config
# ports:
# - 3306:3306
restart: unless-stopped
web:
image: filerun/filerun:arm32v7
container_name: filerun
environment:
FR_DB_HOST: db
FR_DB_PORT: 3306
FR_DB_NAME: "${DATABASE}"
FR_DB_USER: "${DB_USER}"
FR_DB_PASS: "${DB_PW}"
# APACHE_RUN_USER=pi
APACHE_RUN_USER_ID: "${UID}"
# APACHE_RUN_GROUP=pi
APACHE_RUN_GROUP_ID: "${GID}"
depends_on:
- db
links:
- db:db
ports:
- 4080:80
volumes:
- ${PWD}/fr/html:/var/www/html
- ${PWD}/fr/user-files:/user-files
restart: unless-stopped
EOF
選項 | 註解 |
---|---|
container_name: mariadb | 數據庫容器名稱mariadb ,可自定義以示區分。 |
container_name: filerun | FileRun 程式容器名稱filerun ,可自定義以示區分。 |
- ${PWD}/db:/config | 數據庫檔案儲存路徑。/home/$USER/apps/filefrun/db |
- ${PWD}/fr/html:/var/www/html | FileRun 應用程式檔儲存路徑 。/home/$USER/apps/filefrun/fr/html |
- ${PWD}/fr/user-files:/user-files | FileRun 使用者檔案的儲存路徑。/home/$USER/apps/filefrun/fr/user-files |
- "4080:80" | 網頁WEB UI 操作端口: 4080。 |
restart: unless-stopped | 新增容器重啟策略。 |
檢驗Docker-Compose
YAML
檔配置
docker-compose config
拉取鏡像,建立和啟動容器
docker-compose up -d
檢查容器的是否成功啟動
docker-compose ps
filerun /filerun/entrypoint.sh /us ... Up 0.0.0.0:4080->80/tcp,:::4080->80/tcp
mariadb /init Up 3306/tcp
現在可以透過瀏覽器開啟filerun
服務,http://onecloud:4080
FileRun
會隨時建立超級用戶的密碼:
用戶(Your username): | 密碼(Your password): |
---|---|
superuser | 5eba4dffb4d2 |
安裝開源博客WordPress |
WordPress是一個免費的開源博客工具,也是一個基於PHP和MySQL的內容管理系統(CMS),該系統在網路託管服務上運行。功能包括外掛程式架構和範本系統。官方網站: WordPress.com:又快又安全的 WordPress 託管服務
Docker安裝: Wordpress - Official Image | Docker Hub
建立程式的目錄
mkdir -p /home/$USER/apps/wordpress
進入程序目錄
cd /home/$USER/apps/wordpress/
設定環境變量
docker-compose.yml
文件mariaDB
數據庫 和wordpress
容器 共用相同的變量。為了減少重複的輸入及精簡配置,建立.env 變量配置檔案作為docker-compose.yml
文件預設的變量值。
cat >> .env << EOF
# Define FileFun Environment
MYSQL_ROOT_PASSWORD=root_password
MYSQL_DATABASE=wordpress
MYSQL_USER=wordpress
MYSQL_PASSWORD=wordpress_password
TZ=Asia/Hong_Kong
PUID=1000
PGID=1000
EOF
選項 | 註解 |
---|---|
MYSQL_ROOT_PASSWORD=root_password | 數據庫root 密碼是root_password ,可自定義以示區分。 |
MYSQL_DATABASE=wordpress_db | 數據庫名稱是wordpress_db ,可自定義以示區分。 |
MYSQL_USER=wordpress | 數據庫新建用戶名稱是wordpress ,可自定義以示區分。 |
MYSQL_PASSWORD=wordpress_password | 數據庫密碼是 wordpress_password ,可自定義 。 |
TZ=Asia/Hong_Kong | 設定+8時區 |
PUID=1000 | 使用者 ID |
PGID=1000 | 使用者群組 ID |
讀取變量參數:
source .env
建立wordpress
的Docker-Compose
YAML
檔
cat >> docker-compose.yml << EOF
version: "3"
services:
db:
image: linuxserver/mariadb:latest
container_name: mariadb
environment:
PUID: "${PUID}"
PGID: "${PGID}"
MYSQL_ROOT_PASSWORD: "${MYSQL_ROOT_PASSWORD}"
TZ: "${TZ}"
MYSQL_DATABASE: "${MYSQL_DATABASE}"
MYSQL_USER: "${MYSQL_USER}"
MYSQL_PASSWORD: "${MYSQL_PASSWORD}"
volumes:
- ./db:/config
# ports:
# - 3306:3306
restart: unless-stopped
wordpress:
image: wordpress
container_name: wordpress
restart: always
ports:
- 5080:80
environment:
WORDPRESS_DB_HOST: db
WORDPRESS_DB_USER: "${MYSQL_USER}"
WORDPRESS_DB_PASSWORD: "${MYSQL_PASSWORD}"
WORDPRESS_DB_NAME: "${MYSQL_DATABASE}"
volumes:
- ./wp:/var/www/html
depends_on:
- db
restart: unless-stopped
EOF
選項 | 註解 |
---|---|
container_name: mariadb | 數據庫容器名稱mariadb ,可自定義以示區分。 |
container_name: wordpress | wordpress 容器名稱wordpress ,可自定義以示區分。 |
- ./db:/config | 數據庫檔案儲存路徑。/home/$USER/apps/wordpress/db |
- ./wp:/var/www/html | wordpress 應用檔儲存路徑 。/home/$USER/apps/wordpress/wp |
- "5080:80" | 網頁WEB UI 操作端口: 5080。 |
restart: unless-stopped | 新增容器重啟策略。 |
檢驗Docker-Compose
YAML
檔配置
docker-compose config
拉取鏡像,建立和啟動容器
docker-compose up -d
檢查容器的是否成功啟動
docker-compose ps
mariadb /init Up 3306/tcp
wordpress docker-entrypoint.sh apach ... Up 0.0.0.0:5080->80/tcp,:::5080->80/tcp
現在可以透過瀏覽器開啟wordpress
服務,http://onecloud:5080
HomeAssistant + MQTT + MariaDB的組合安裝 |
經過上邊多個程式的部署,如:Kodbox
、FileRun
和WordPress
等等,通過docker-compose
,使用單一YML
文件來配置多個應用程式及聯動(即多個服務)。最後,只需要使用一個指令,就可以建立並啟動所有服務。
這次嘗試
HomeAssistant
+MQTT
+MariaDB
的組合安裝。
HomeAssistant
主程式。MQTT
作為智能裝置代理人角色,如:我的遺產DC1
就需要用到MQTT
接入HomeAssistant
。MariaDB
替換預設的數據庫SQLite
,當數據大量時可以解決打開歷史頁簽響應慢及假死現象。
建立程式的目錄
mkdir -p /home/$USER/apps/hass/{config,db,mqtt} && mkdir -p /home/$USER/apps/hass/mqtt/{config,data,log}
目錄架構:
├── config #Home Assistant
檔案儲存路徑。
├── db # 數據庫檔案儲存路徑。
└── mqtt #mqtt
檔案存放路徑。
├── config #mqtt
配置檔案存放路徑。
├── data #mqtt
配置資料存放路徑。
└── log #mqtt
配置日誌存放路徑。
進入程序目錄
cd /home/$USER/apps/hass/
設定環境變量
將需要的環境變量寫入到.env
的檔案中及存放於docker-compose.yml
檔同一目錄內。
cat >> .env << EOF
# Define FileFun Environment
MYSQL_ROOT_PASSWORD=root_password
MYSQL_DATABASE=homeassistant
MYSQL_USER=homeassistant
MYSQL_PASSWORD=nxH1t2flaZq2n64
TZ=Asia/Hong_Kong
PUID=1000
PGID=1000
EOF
選項 | 註解 |
---|---|
MYSQL_ROOT_PASSWORD=root_password | 數據庫root 密碼是root_password ,可自定義以示區分。 |
MYSQL_DATABASE=homeassistant | 數據庫名稱是homeassistant ,可自定義以示區分。 |
MYSQL_USER=homeassistant | 數據庫新建用戶名稱是homeassistant ,可自定義以示區分。 |
MYSQL_PASSWORD=nxH1t2flaZq2n64 | 數據庫密碼是 nxH1t2flaZq2n64 ,可自定義 。 |
TZ=Asia/Hong_Kong | 設定+8時區 |
PUID=1000 | 使用者 ID |
PGID=1000 | 使用者群組 ID |
讀取變量參數:
source .env
建立Home Assistant
的基礎配置文件configuration.yaml
cat >> /home/$USER/apps/hass/config/configuration.yaml << EOF
default_config:
mqtt:
broker: 127.0.0.1
recorder:
db_url: mysql://homeassistant:[email protected]/homeassistant?charset=utf8
purge_keep_days: 7
EOF
選項 | 註釋 |
---|---|
broker: 127.0.0.1 | MQTT 的IP地址指向本機(127.0.0.1) |
db_url: | 轉用 MariaDB 資料庫為後端 |
purge_keep_days: 7 | 保留歷史的時間為 7 天 |
建立eclipse-mosquitto
的配置文件mosquitto.conf
cat >> /home/$USER/apps/hass/mqtt/config/mosquitto.conf << EOF
persistence true
persistence_location /mosquitto/data/
log_dest file /mosquitto/log/mosquitto.log
listener 1883
allow_anonymous false
EOF
建立hass
的Docker-Compose
YAML
檔
cat >> docker-compose.yml << EOF
version: '3'
services:
db:
image: linuxserver/mariadb
container_name: mariadb
restart: unless-stopped
environment:
MYSQL_ROOT_PASSWORD: "${MYSQL_ROOT_PASSWORD}"
MYSQL_DATABASE: "${MYSQL_DATABASE}"
MYSQL_USER: "${MYSQL_USER}"
MYSQL_PASSWORD: "${MYSQL_PASSWORD}"
TZ: "${TZ}"
PUID: "${PUID}"
PGID: "${PGID}"
volumes:
- ./db:/config
network_mode: host
# ports:
# - "3306:3306"
homeassistant:
container_name: hass
image: linuxserver/homeassistant
environment:
TZ: "${TZ}"
PUID: "${PUID}"
PGID: "${PGID}"
volumes:
- ./config:/config
restart: unless-stopped
network_mode: host
# ports:
# - 8123:8123
depends_on:
- db
- mosquitto
mosquitto:
image: eclipse-mosquitto
container_name: mqtt
restart: unless-stopped
network_mode: host
# ports:
# - "1883:1883"
# - "9001:9001"
volumes:
- "./mqtt/config:/mosquitto/config"
- "./mqtt/data:/mosquitto/data"
- "./mqtt/log:/mosquitto/log"
environment:
TZ: "${TZ}"
user: "${PUID}:${PGID}"
EOF
選項 | 註解 |
---|---|
container_name: mariadb | 數據庫容器名稱mariadb ,可自定義以示區分。 |
container_name: hass | Home Assistant 容器名稱hass ,可自定義以示區分。 |
container_name: mqtt | eclipse-mosquitto 容器名稱mqtt ,可自定義以示區分。 |
- ./db:/config | 數據庫檔案儲存路徑。/home/$USER/apps/hass/db |
- ./config:/config | Home Assistant 檔案儲存路徑。/home/$USER/apps/hass/config |
- "./mqtt/config:/mosquitto/config" | eclipse-mosquitto 配置檔案存放路徑。 |
- "./mqtt/data:/mosquitto/data" | eclipse-mosquitto 配置資料存放路徑。 |
- "./mqtt/log:/mosquitto/log" | eclipse-mosquitto 配置日誌存放路徑。 |
network_mode: host | 與容器共用主機網路。因為Home Assistant 需要共用主機網路才可以被某些設備發現。 |
restart: unless-stopped | 新增容器重啟策略。 |
檢驗Docker-Compose
YAML
檔配置
docker-compose config
拉取鏡像,建立和啟動容器
docker-compose up -d
檢查容器的是否成功啟動
docker-compose ps
hass /init Up
mariadb /init Up
mqtt /docker-entrypoint.sh /usr ... Up
現在可以透過瀏覽器開啟Home Assistant
服務,http://onecloud:8123
建立MQTT用戶 (可選)
如果想外網經MQTT
接入到Home Assistant
,基於安全考量還是建議關閉匿名訪問及建立MQTT
用戶。
建立MQTT
用戶
docker-compose exec mosquitto mosquitto_passwd -c /mosquitto/config/mosquitto.passwd user01
用戶名稱 | 密碼 |
---|---|
user01 | 輸入2次 |
修改eclipse-mosquitto
的配置文件
sed -i -e 's/allow_anonymous\ true/allow_anonymous\ false/g' \
-e '$a password_file /mosquitto/config/mosquitto.passwd' \
/home/${USER}/apps/hass/mqtt/config/mosquitto.conf
利用docker-compose
指令使新配置生效
docker-compose restart
Restarting hass ... done
Restarting mariadb ... done
Restarting mqtt ... done
開於DC1經MQTT接入到Home Assistant的詳細配置,可參考以下網址。
Phicomm (斐訊) DC1 智能拖板 接入 Home Assistant
LNMP(Docker + Nginx + MySQL + PHP): |
還有好多WEB
的應用服務在Docker Hub
未能覆蓋或者不技持的CPU
架構情況下,可以透過DNMP
方便快速部署。
詳情可參考大神的LNMP一鍵安裝程序: https://github.com/yeszao/dnmp
結語: |
Docker Hub網站也提供好多熱門軟件的YAML配置,即Docker Compose
部署方式。當運行多個
Docker
容器時docker-compose
是被官方所推薦部署方式。把所需要的
Docker
容器寫入到一個docker-compose.yml
檔案內,最後只要執行docker-compose up -d
指令,就可以把所有的服務執行起來並指定容器間的依存關系。同時還可以使用
docker
save
/load
輸出/輸入映像檔(Image)。有了映像檔和Docker Compose
組合就可以在任何Docker Engine
環境執行進行遷移或者發佈。
參考資料: |
相關連結: |