玩客雲(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 $USERuid=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 psaria2-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 psqbittorrent /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 pstransmission /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 psh5ai /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 psapaxy 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 psfilebrowser /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
EOFdocker-compose.yml文件包括mariaDB數據庫 、KobCloud程式 及redis內存數據庫。由於玩客雲(OneCloud)的CPU架構是arm32位,所以數據庫會選用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 pskodbox /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 psfilerun /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 psmariadb /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 pshass /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 restartRestarting 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指令,就可以把所有的服務執行起來並指定容器間的依存關系。同時還可以使用
dockersave/load輸出/輸入映像檔(Image)。有了映像檔和Docker Compose組合就可以在任何Docker Engine環境執行進行遷移或者發佈。
| 參考資料: |
| 相關連結: |
















































