Login

Navigation

This articles is published 164 days ago and last updated 129 days ago, some information may be out of date.

玩客雲(OneCloud) 的Docker應用篇

OneCloud_Banner.jpg

前言:

上篇講到玩客雲(OneCloud) 的設置與使用 ,下篇分享的是Docker的安裝與應用。

Docker越來越受到大家歡迎,我覺得在安裝複雜軟件時可以免依賴環境(編譯環境)下簡單完成部署,如: Home Assistant,因為每一個容器(container)也是一個獨立進程共享主機內核, 可以做到非常輕量,更新或者升級也是非常方便。

2022-06-22_171616.png


目錄內容:

操作步驟:
所有的配置還是基於暮冬初一大佬適配的Armbian平台,版本: Linux onecloud 5.14.21-meson

刷機步驟可參考: 玩客雲Armbian22.08全自動刷入EMMC包-內核5.14_5.18

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),從配置中創建並啟動所有服務。

Overview of Docker Compose | Docker Documentation

sudo apt install docker-compose

2022-08-03_092336.png


LinuxServer 團隊制作的Compose 可相容於armhf CPU架構的程式工具。(可選)
GitHub - linuxserver/docker-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 指令可以一次管理多個容器。

https://docs.docker.com/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 下載工具

Aria2_Banner.jpg

P3TERX 大佬的Aria2 Pro一直是我的主力下載工具,Aria2 支持 BT、磁力、HTTP、FTP 等多種下載協議,作為24小時離線下載的服務的首選。

官方網站: https://aria2.github.io/

Docker: p3terx/aria2-pro - Docker Image | Docker Hub

建立程式和下載的目錄

mkdir -p /home/$USER/apps/aria2 && mkdir -p /mnt/mmc/downloads

查看用戶的UIDGID,實現下載的所有檔案套用當前用戶的權限(為擁有者)。

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 ProDocker-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=P3TERXAria2 程式 密碼(金鑰)為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

Aria2_2022-06-22_190432.png

得益於 Docker Compose CLI 的簡單性,只需一個指令就可以同時拉取多個容器并建立程式。

檢查容器的是否成功啟動

docker-compose ps
aria2-pro /init Up
ariang /darkhttpd /AriaNg --port ... Up

現在可以透過瀏覽器開啟Aria2服務輕鬆哋下載,http://onecloud:6880

Aria2_2022-06-22_190815.png

目錄內容列表

安裝 qBittorrent 下載工具

qbittorrent-Banner.jpg

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/

建立qBittorrentDocker-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

QB_2022-06-22_192632.png

檢查容器的是否成功啟動

docker-compose ps
qbittorrent /init Up

現在可以透過瀏覽器開啟qbittorrent服務輕鬆哋下載,http://onecloud:18080

QB_2022-06-23_073245.png


目錄內容列表

安裝 transmission 下載工具

transmission_Banner.png

Transmission 是一種BitTorrent客戶端,特點是一個跨平台的後端和其上的簡潔的用戶界面。。

官方網站: Transmission (transmissionbt.com)

Docker: linuxserver/transmission - LinuxServer.io

建立程式和下載的目錄

mkdir -p /home/$USER/apps/transmission && mkdir -p /mnt/mmc/downloads

進入程序目錄

cd /home/$USER/apps/transmission/

建立transmissionDocker-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=65534nobody用戶的權限。
- PGID=65534nogroup用戶的群組權限。
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

transmission_2022-06-27_153904.png

檢查容器的是否成功啟動

docker-compose ps
transmission /init Up

現在可以透過瀏覽器開啟transmission服務輕鬆哋下載,http://onecloud:9091

transmission_2022-06-17.jpg


目錄內容列表

安裝 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/

建立h5aiDocker-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

h5ai_2022-06-24_135903.png

檢查容器的是否成功啟動

docker-compose ps
h5ai /init.sh Up 0.0.0.0:8090->80/tcp,:::8090->80/tcp

現在可以透過瀏覽器開啟h5ai 服務,http://onecloud:8090

h5ai_2022-06-24_140034.png


目錄內容列表

安裝 Apaxy 檔案目錄分享

Apaxy_Banner.png

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/

修改ApaxyDocker-Compose YAML

vi docker-compose.yml

Apaxy_2022-06-24_142928.png

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

Apaxy_2022-06-24_144023.png

檢查容器的是否成功啟動

docker-compose ps
apaxy httpd-foreground Up 80/tcp, 0.0.0.0:2080->8080/tcp,:::2080->8080/tcp

現在可以透過瀏覽器開啟apaxy服務,http://onecloud:2080

Apaxy_2022-06-24_144652.png


目錄內容列表

安裝File Browser 網頁檔案管理

FileBrowser_banner.png

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 BrowserDocker-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

FileBrowser_2022-06-24_130425.png

檢查容器的是否成功啟動

docker-compose ps
filebrowser /filebrowser --root=/data ... Up 0.0.0.0:8080->8080/tcp,:::8080->8080/tcp

現在可以透過瀏覽器開啟filebrowser 服務,http://onecloud:8080

FileBrowser_2022-06-24_131035.png

FileBrowser_Screen.gif


目錄內容列表

安裝 KodCloud 可道雲

kodbox_2022-06-25_Banner.png

KodCloud是一款雲端文檔管理工具,在網盤內也可以像在電腦上操作一般熟悉而流暢,熟悉框選、拖拽、快捷鍵,從來沒有這麼簡單方便。

官方網站: 可道雲-私有雲存儲&協同辦公平台_企業網盤_企業雲盤_網盤_雲盤 (kodcloud.com)

使用docker-compose快速部署kodbox(測試) - 可道雲社區 (kodcloud.com)

優點:

  • 雲存儲 (私有部署、集中存管、卓越體驗、插件市場)
  • 雲辦公 (一鍵分享、輕松預覽、同步備份)
  • 雲協同 (協同編輯、劃詞標注、即寫即存、歷史版本)
  • 雲管理 (組織架構、靈活權限、操作日誌)
  • 雲拓展 (OpenAPI、單點登錄、對象存儲、擴展框架)
  • 新體驗 (Windows體驗、企業LOGO)

建立程式和分享的目錄

mkdir -p /home/$USER/apps/kodbox && mkdir -p /mnt/mmc

進入程序目錄

cd /home/$USER/apps/kodbox/

建立kodboxDocker-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/sitekodbox持久化目錄位置,可自定義。
restart: unless-stopped新增容器重啟策略。

檢驗Docker-Compose YAML 檔配置

docker-compose config

拉取鏡像,建立和啟動容器

docker-compose up -d

kodbox_2022-06-24_163900.png

檢查容器的是否成功啟動

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

kodbox_2022-06-24_165832.png

kodbox_2022-06-24_170008.png

kodbox_2022-06-24_170020.jpg

kodbox_2022-06-24_170029.jpg

kodbox_2022-06-24_170044.jpg

kodbox_2022-06-24_170055.png

kodbox_2022-06-25_090831.png

因為受限於玩客雲(OneCloud) 是32位的ARM架構,所以只能上載2G以內的檔案。

目錄內容列表

安裝 FileRun 私有雲

FileRun_Banner.png

FileRun是一款輕量的WEB界面儲存、同步及分享工具。近似於NextCloud

官方網站: FileRun - Selfhosted File Sync and Share

Docker安裝: docker-arm :: FileRun Documentation

優點:

  • 適配移動裝置。
  • 支持多種協定: FTPSMB 或者 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

建立filefrunDocker-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: filerunFileRun程式容器名稱filerun,可自定義以示區分。
- ${PWD}/db:/config數據庫檔案儲存路徑。/home/$USER/apps/filefrun/db
- ${PWD}/fr/html:/var/www/htmlFileRun 應用程式檔儲存路徑 。/home/$USER/apps/filefrun/fr/html
- ${PWD}/fr/user-files:/user-filesFileRun 使用者檔案的儲存路徑。/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

FileRun_2022-06-28_113040.png

檢查容器的是否成功啟動

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_2022-06-28_122454.png

FileRun_2022-06-28_122459.png

FileRun_2022-06-28_122501.png

FileRun會隨時建立超級用戶的密碼:

用戶(Your username):密碼(Your password):
superuser5eba4dffb4d2

FileRun_2022-06-28_122553.png

FileRun_2022-06-28_122606.png


目錄內容列表

安裝開源博客WordPress

WordPress-logo.png

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

建立wordpressDocker-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: wordpresswordpress容器名稱wordpress,可自定義以示區分。
- ./db:/config數據庫檔案儲存路徑。/home/$USER/apps/wordpress/db
- ./wp:/var/www/htmlwordpress 應用檔儲存路徑 。/home/$USER/apps/wordpress/wp
- "5080:80"網頁WEB UI操作端口: 5080。
restart: unless-stopped新增容器重啟策略。

檢驗Docker-Compose YAML 檔配置

docker-compose config

拉取鏡像,建立和啟動容器

docker-compose up -d

WP_2022-06-29_095551.png

檢查容器的是否成功啟動

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

WP_2022-06-29_095711.png

WP_2022-06-29_095835.png

WP_2022-06-29_095855.png

WP_2022-06-29_100026.png


目錄內容列表

HomeAssistant + MQTT + MariaDB的組合安裝

Hass_Banner.png

經過上邊多個程式的部署,如: KodboxFileRunWordPress等等,通過 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.1MQTT 的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

建立hassDocker-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: hassHome Assistant容器名稱hass,可自定義以示區分。
container_name: mqtteclipse-mosquitto容器名稱mqtt,可自定義以示區分。
- ./db:/config數據庫檔案儲存路徑。/home/$USER/apps/hass/db
- ./config:/configHome 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

Hass_2022-06-28_143942.png

檢查容器的是否成功啟動

docker-compose ps
hass /init Up
mariadb /init Up
mqtt /docker-entrypoint.sh /usr ... Up

現在可以透過瀏覽器開啟Home Assistant服務,http://onecloud:8123

Hass_2022-06-28_144339.png

建立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

MQTT_2022-06-28_162115.png

MQTT_2022-06-28_162122.png

MQTT_2022-06-28_162139.png

MQTT_2022-06-28_162146.png

MQTT_2022-06-28_162150.png

Hass_2022-06-29_103510.png


目錄內容列表

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 環境執行進行遷移或者發佈。


參考資料:

相關連結: