2021年7月11日 星期日

安裝 NextCloud docker image 及 maps app 顯示照片拍攝位置

因為 Gooogle 教育帳號縮水,要逃難了。

之前架設過 NextCloud ( 實際上是從 OwnCloud 開始後來轉成NextCloud)

但是覺得當時手動設定太麻煩了,

用 docker image 應該就方便多了。

主要想法是把 container 的 port 80 映射到 host,

並且讓 Nextcloud 的檔案資料夾和設定資料夾都對應到 Host 的實體資料夾。

弄了一個下午,卡最久的就是編譯 map app 。

現在安裝的 NextCloud 是 22 版,

比3年前用的截面好太多了,

app 也更豐富。

建立 Container

先下載 NextCloud docker image

https://hub.docker.com/_/nextcloud/

# docker pull nextcloud:latest 

產生一個 Container ,Container 的 port 80 對應到 host 的41234,

在 docker 網站的 NextCloud 有列出相對的資料夾:
  • /var/www/html 主資料夾,升級時需要變動
  • /var/www/html/custom_apps installed / 放置改過的 app
  • /var/www/html/config 本地端設定檔案
  • /var/www/html/data Nextcloud 存放上傳的檔案位置
  • /var/www/html/themes/<YOUR_CUSTOM_THEME> 佈景主題/品牌
 我決定直接把html 資料夾對應到 host 的 /opt/nextcloud_docker/html

# docker run -d -p 41234:80 -v /opt/nextcloud_docker/html:/var/www/html nextcloud

看有沒有執行成功 

# docker container ls

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ddaaaaaa223 nextcloud "/entrypoint.sh apac…" 4 hours ago Up About an hour 0.0.0.0:41234->80/tcp, :::41234->80/tcp confident_euler


查 container IP

# docker inspect ddaaaaaa223


下列這行就是container IP

"IPAddress": "172.17.0.2",

這時候就可以連線測試
 
http://127.0.0.1:41234
 
看到設定畫面就沒問題了 。

 

初始化設定

一開始會先設定管理員帳號和密碼,

下方還有要使用的資料庫資料,

預設是不必特別設定的 sqlite ,

但是效能沒其他的好。

 
當點了 sqlite 後會出現選單,

選了 mysql 就可以使用另外的mysql或 MariaDB。

我選擇使用原本就在 host 的 MariaDB。

 
MariaDB 上建立一個使用者名稱是 nextcloud 並勾選建立同名資料庫,


因為是從 Container 存取 host 上的資料庫,
 
用 PhpMyAdmin 建立使用者時,主機名稱我選任何主機。
 
輸入資料庫使用者名稱、密碼、及資料庫所在主機IP 或網址加port

 
例如像我的主機在區網的 192.168.0.2,
 
MariaDB port 沒改,
 
就是輸入 192.168.0.2:3306
 
接著等自動設定完成就可以進入NextCloud 個人儀表板。



外部連接

如果要使用網址從外部連接,


除了注意 port 41234 要開放外,


還要設定 NextCloud 允需的連接網址


檔案在 config/config.php

# less /opt/nextcloud_docker/html/config/config.php


'trusted_domains' =>
array (
0 => '127.0.0.1:41234',
1 => 'www.mysite.com:41234',
2 => '168.168.168.168:41234',
),

安裝 Map app



https://github.com/nextcloud/maps
 
因為 docker image 沒包含 git

所以直接到 host 的 /opt/nextcloud_docker/html/apps/ 下載 Map app

#cd /opt/nextcloud_docker/html/apps/

#git clone https://github.com/nextcloud/maps.git


進入 container console

# docker exec -it ddaaaaaa223 bash


docker image 缺少需要的 nodejs 和 npm
先升級套件庫

# apt-get update 


確認沒有相關套件

# apt list nodejs

# apt list npm 


手動安裝相關套件

# apt-get install libuv1 libc-ares2 libnode64 nodejs 

#  apt-get install npm


才能在 Map app 資料夾編譯成功

# cd /var/www/html/apps/maps

# make



===========

Container 網路失效


不過我卡在一個很奇怪的狀況,

container 內似乎因為之前 suspend 過造成docker 網路怪怪的,
 
一直無法取得 composer.phar ,
 
後來重啟 docker service 就好了
 
在 host 下

# docker container stop ddaaaaaa223

#systemctl stop docker

#systemctl start docker

確認正常運作 

#systemctl status docker

# docker container start ddaaaaaa223 

===========

更新資料庫中照片座標

Maps app 網頁上寫會在Nextcloud 定期背景作業時自動掃描照片座標資料 。

如果要馬上看到照片出現在度圖上,

就要手動執行

直接在 host 執行

#docker exec --user www-data ddaaaaaa223 php occ map:scan-photos

如果已經有上傳包含座標資料的照片,

等個幾分鐘就會看到出現在地圖上。

==============

NextCloud 的背景作業


其實應該還有要設定定時執行背景作業,

在 NextCloud 的右上角個人圖像選單「設定/ 基本設定」,

第1個是每當使用者點選切換到頁面時順便執行背景工作,

第2個是利用 webcron伺服器提供每5分鐘連到自己的 NextCloud 網站觸發背景工作。

第3個是手動設定到作業系統中的定時執行排程,

可以在主機建立 systemd timer 檔案和相對應的 service 檔案,

執行下方指令

docker exec --user www-data ddaaaaaa223 php cron.php

 

 

沒有留言:

張貼留言