使用Docker-compose安裝NextCloud,并部署Collabora作為office服務(wù)

使用Docker-compose安裝NextCloud,并部署Collabora作為office服務(wù)

在csdn也同步發(fā)布了,csdn上markdown格式顯示效果更好些

https://blog.csdn.net/u013568040/article/details/123648666

安裝Docker和docker-compose

使用docker-compose可以更快速的構(gòu)建nextcloud需要的各個服務(wù)

準(zhǔn)備域名,啟用SSL

2個子域名,分別用于Collabora Office和Nextcloud,且兩個域名均擁有合法SSL證書,通過備案后在云服務(wù)商申請免費(fèi)證書即可,證書授權(quán)一年。

例如:

nextcloud.eeeeeee.com用于訪問Nextcloud,collabora.eeeeeeee.com用于部署Collabora Office

nginx的 SSL 證書可用騰訊云或阿里云每年授權(quán)一次的免費(fèi)證書,就不用那個什么letsencrypt搞什么自動續(xù)簽了,

docker-compose文件

docker-compose.yml

version: '3'

services:

? db:

? ? image: mariadb:10.5

? ? container_name: nextcloud-db

? ? restart: always

? ? command: --transaction-isolation=READ-COMMITTED --binlog-format=ROW

? ? volumes:

? ? ? - ./mariadb/db:/var/lib/mysql

? ? environment:

? ? ? - MYSQL_DATABASE=nextcloud

? ? ? - MYSQL_ROOT_PASSWORD=sd21111111111111111w

? ? ? - MYSQL_USER=nextcloud

? ? ? - MYSQL_PASSWORD=GXDw1111111111111111112

? ? ports:

? ? ? - 3306:3306

? redis:

? ? image: redis:alpine

? ? container_name: nextcloud_redis

? ? restart: always

? ? expose:

? ? ? - 6379


? cron:

? ? image: nextcloud:apache

? ? restart: always

? ? volumes:

? ? ? - ./nextcloud_cron:/var/www/html

? ? entrypoint: /cron.sh

? ? depends_on:

? ? ? - db

? ? ? - redis

? nextcloud:

? ? image: nextcloud:apache

? ? container_name: nextcloud_web

? ? restart: always

? ? volumes:

? ? ? - ./nextcloud:/var/www/html

? ? environment:

? ? ? - NEXTCLOUD_ADMIN_USER=eeeee

? ? ? - NEXTCLOUD_ADMIN_PASSWORD=L111231

? ? ? - NEXTCLOUD_TRUSTED_DOMAINS='nextcloud.eeeeeeeee.com'

? ? ? - REDIS_HOST=redis

? ? ? - VIRTUAL_HOST=nextcloud.eeeeeee.com

? ? ? - TZ=Aisa/Shanghai

? ? ? - MYSQL_DATABASE=nextcloud

? ? ? - MYSQL_ROOT_PASSWORD=sdeeeeew

? ? ? - MYSQL_USER=nextcloud

? ? ? - MYSQL_PASSWORD=GXeeeeee

? ? ? - MYSQL_HOST=db

? ? ? - UID=0

? ? ? - GID=0

? ? ? - UPLOAD_MAX_SIZE=10G

? ? ? - APC_SHM_SIZE=1024M

? ? ? - OPCACHE_MEM_SIZE=512

? ? ? - CRON_PERIOD=15m

? ? depends_on:

? ? ? - db

? ? ? - redis

? ? links:

? ? ? - db

? ? cap_add:

? ? ? - MKNOD

? ? networks:

? ? ? - cloud_net

? ? ? - default

? proxy:

? ? image: nginxproxy/nginx-proxy:alpine

? ? container_name: nextcloud_proxy

? ? restart: always

? ? ports:

? ? ? - 80:80

? ? ? - 443:443

? ? volumes:

? ? ? - ./nginx/certs:/etc/nginx/certs:ro

? ? ? - ./nginx/vhost.d:/etc/nginx/vhost.d

? ? ? - ./nginx/html:/usr/share/nginx/html

? ? ? - /var/run/docker.sock:/tmp/docker.sock:ro

? ? ? - ./nginx/conf.d:/etc/nginx/conf.d

? ? networks:

? ? ? - cloud_net


? cloud_collabora:

? ? image: collabora/code:6.4.14.3

? ? container_name: cloud_collabora

? ? environment:

? ? ? - domain=nextcloud\.eeeeeeeeeeeeeeee\.com

? ? ? - username=yaeeeee

? ? ? - password=qingfeeeeeeeeeeeu

? ? ? - dictionaries=de en es zh

? ? cap_add:

? ? ? - MKNOD

? ? ports:

? ? ? - 9980:9980

? ? restart: always

? ? volumes:

? ? ? - ./collabora/coolwsd.xml:/etc/coolwsd/coolwsd.xml

? ? networks:

? ? ? - cloud_net


networks:

? cloud_net:

docker-compose.yml文件中涉及到的容器及參數(shù)配置

db:MySQL 數(shù)據(jù)庫

mariadb是完全兼容mysql的

command:是一個隔離級別的東西,不知道干嘛的,官方文檔里并沒寫

volumes:為了不把其他目錄搞亂,我比較喜歡把文件掛在當(dāng)前目錄下,我在?/home/dc/nextcloud/?文件夾下執(zhí)行安裝命令,文件都會創(chuàng)建在這個下面。

volumes,作用是,將宿主機(jī)的目錄掛載到docker容器中,這樣操作文件時,不用登錄docker容器了,直接在宿主機(jī)操作就可以了。

如果你使用的是windows版本的docker, 建議買個linux的云服務(wù)器,騰訊云雙十一的時候都不貴的。

environment:這里設(shè)置了root賬戶的密碼,還有給nextcloud使用的賬戶密碼和數(shù)據(jù)庫

? db:

? ? image: mariadb:10.5

? ? container_name: nextcloud-db

? ? restart: always

? ? command: --transaction-isolation=READ-COMMITTED --binlog-format=ROW

? ? volumes:

? ? ? - ./mariadb/db:/var/lib/mysql

? ? environment:

? ? ? - MYSQL_DATABASE=nextcloud

? ? ? - MYSQL_ROOT_PASSWORD=sd4eeeeee

? ? ? - MYSQL_USER=nextcloud

? ? ? - MYSQL_PASSWORD=Geeeeeee

? ? ports:

? ? ? - 3306:3306

redis:緩存服務(wù)

cron:后臺事務(wù)

nextcloud:云盤主服務(wù)

image:這里我選用的是nextcloud:apache鏡像,因?yàn)閍pache的更能看明白一點(diǎn)

environment:

NEXTCLOUD_ADMIN_*****?配置項(xiàng)里面nextcloud的管理員賬號密碼。這里如果不設(shè)置,應(yīng)該也可以在初始化的時候設(shè)置;

REDIS_HOST直接用redis,可能因?yàn)槲覀儐⒘艘粋€名字是redis的容器;

VIRTUAL_HOST這個應(yīng)該是給ngnix用的,就用nextcloud的域名就可用;

MYSQL_*****這個是數(shù)據(jù)庫相關(guān)設(shè)置,和db容器的一致就可以聯(lián)上;

UID GID是nextcloud操作文件時的用戶權(quán)限,可用id命令查詢用戶的uid和gid,我用的是root用戶的id。id權(quán)限不足回導(dǎo)致上傳文件只有文件名不能正常寫入文件;

其余的各種上限的配置就按著寫就夠用了;

cap_add: - MKNOD這個也是一個容器權(quán)限相關(guān)的設(shè)置,控制容器對宿主機(jī)文件的操作,MKNOD允許容器使用mknod(2)創(chuàng)建特殊文件;

? nextcloud:

? ? image: nextcloud:apache

? ? container_name: nextcloud_web

? ? restart: always

? ? volumes:

? ? ? - ./nextcloud:/var/www/html

? ? environment:

? ? ? - NEXTCLOUD_ADMIN_USER=yanglijun

? ? ? - NEXTCLOUD_ADMIN_PASSWORD=eeeeeeeeeeeeeeeeeeeeeeeeewew

? ? ? - NEXTCLOUD_TRUSTED_DOMAINS=nextcloud.weqeq

? ? ? - REDIS_HOST=redis

? ? ? - VIRTUAL_HOST=nextcloud.sevewnqweq

? ? ? - TZ=Aisa/Shanghai

? ? ? - MYSQL_DATABASE=nextcloud

? ? ? - MYSQL_ROOT_PASSWORD=sd42YGwqewqewqewqw

? ? ? - MYSQL_USER=nextcloud

? ? ? - MYSQL_PASSWORD=GXwqewqewqwqu

? ? ? - MYSQL_HOST=db

? ? ? - UID=0

? ? ? - GID=0

? ? ? - UPLOAD_MAX_SIZE=10G

? ? ? - APC_SHM_SIZE=1024M

? ? ? - OPCACHE_MEM_SIZE=512

? ? ? - CRON_PERIOD=15m

? ? depends_on:

? ? ? - db

? ? ? - redis

? ? links:

? ? ? - db

? ? cap_add:

? ? ? - MKNOD

? ? networks:

? ? ? - cloud_net

? ? ? - default

proxy:云盤nginx代理服務(wù)

volumes: - 宿主機(jī):容器?需要在阿里云把證書下載并放在 ./nginx/certs/

? proxy:

? ? image: nginxproxy/nginx-proxy:alpine

? ? container_name: nextcloud_proxy

? ? restart: always

? ? ports:

? ? ? - 80:80

? ? ? - 443:443

? ? volumes:

? ? ? - ./nginx/certs:/etc/nginx/certs:ro

? ? ? - ./nginx/vhost.d:/etc/nginx/vhost.d

? ? ? - ./nginx/html:/usr/share/nginx/html

? ? ? - /var/run/docker.sock:/tmp/docker.sock:ro

? ? ? - ./nginx/conf.d:/etc/nginx/conf.d

? ? networks:

? ? ? - cloud_net

cloud_collabora:office預(yù)覽服務(wù)

這里我也試了好幾個office預(yù)覽的服務(wù),包括onlyoffice占用內(nèi)存會特別多,微軟官方的officeOline2013,部署太麻煩了,最終選擇了collabora,并且nextcloud還有直接可用的插件,內(nèi)置的插件對中文支持不好,所以就用這個單獨(dú)部署的了。這個單獨(dú)部署的是支持中文的。

environment:

domain一定要設(shè)置正確(哪個網(wǎng)站上要用collabora就設(shè)置那個網(wǎng)站的地址,不是設(shè)置collabora在用的域名),否則在collabora預(yù)覽的時候會一直初始化然后就沒有然后了。

如果要讓這個Collabora Office同時服務(wù)于多個域名的話,需要在兩個不同域名之間加上|,例如:

domain=cloud\\.nextcloud\\.com\|second\\.nexcloud\\.com

username和password是collabora管理后臺的賬號密碼,管理后臺的訪問地址是https://collabora.seeeeeeee.com/loleaflet/dist/admin/admin.html

如果瀏覽器打不開新開一個瀏覽器就好了

cap_add: - MKNOD這個設(shè)置用于讓collabora能夠正常寫緩存

? cloud_collabora:

? ? image: collabora/code:6.4.14.3

? ? container_name: cloud_collabora

? ? environment:

? ? ? - domain=nextcloud\.eeeee\.com

? ? ? - username=eeeeeeeeeeeeee

? ? ? - password=qieeeeeeeeeeeeeeeeeee

? ? ? - dictionaries=de en es zh

? ? cap_add:

? ? ? - MKNOD

? ? ports:

? ? ? - 9980:9980

? ? restart: always

? ? volumes:

? ? ? - ./collabora/coolwsd.xml:/etc/coolwsd/coolwsd.xml

? ? networks:

? ? ? - cloud_net

backups:定期備份Nextcloud文件和數(shù)據(jù)庫

(暫時沒部署)

backups:

? ? image: christophetd/duplicacy-autobackup:v1.0

? ? container_name: backups

? ? restart: always

? ? environment:

? ? ? BACKUP_NAME: "${BACKUP_NAME}"

? ? ? BACKUP_LOCATION: "b2://${B2_BUCKET}"

? ? ? BACKUP_SCHEDULE: "${BACKUP_SCHEDULE}"

? ? ? BACKUP_ENCRYPTION_KEY: "${BACKUP_ENCRYPTION_KEY}"

? ? ? B2_ID: "${B2_ID}"

? ? ? B2_KEY: "${B2_KEY}"

? ? volumes:

? ? ? - "${DATA_DIR}:/data"

創(chuàng)建和啟動容器:

在docker-compose.yml文件所在目錄,運(yùn)行以下命令:

docker-compose up -d

我在配置完成后,把nextcloud的端口關(guān)了,nextcloud服務(wù)默認(rèn)是運(yùn)行在80端口的(在容器內(nèi)的80端口),初次安裝可用ports把80端口露出來。

命令完成后,就可以用http://宿主機(jī)IP:端口,來訪問nextcloud了。

如果運(yùn)行docker-compose,提示權(quán)限不夠,解決方法:

chmod +x /usr/local/bin/docker-compose

配置數(shù)據(jù)庫

訪問首頁,進(jìn)行初始化設(shè)置,就不用在這里設(shè)置了

進(jìn)入mysql:

mysql -u root -p

建立數(shù)據(jù)庫

create database nextcloud;

建立數(shù)據(jù)庫用戶

create user '你的數(shù)據(jù)庫用戶名'@'%' identified by '你的數(shù)據(jù)庫密碼';

將數(shù)據(jù)庫用戶與數(shù)據(jù)庫關(guān)聯(lián)起來,并允許所有IP訪問此數(shù)據(jù)庫

GRANT ALL PRIVILEGES ON 你的數(shù)據(jù)庫用戶名 TO '你的數(shù)據(jù)庫用戶名@'%' IDENTIFIED BY '你的數(shù)據(jù)庫密碼' WITH GRANT OPTION;

刷新權(quán)限信息

flush privileges;

參數(shù)解釋:

nextcloud,代表對這個數(shù)據(jù)庫有效,如果換成*.* ,代表對任意數(shù)據(jù)庫任意表有效

‘%’ 允許任意IP訪問數(shù)據(jù)庫,如果換成’localhost’代表只允許本機(jī)訪問

配置redis

如果doker-compose.yml添加了redis服務(wù),需要編輯nextcloud的php配置文件來啟用服務(wù),配置文件路徑是./nextcloud/config/config.php

? 'memcache.local' => '\OC\Memcache\Redis',

? 'memcache.distributed' => '\OC\Memcache\Redis',

? 'memcache.locking' => '\OC\Memcache\Redis',

? 'redis' => array(

? ? 'host' => 'redis',? #如果是在本機(jī)就是localhost,如果是docker,要和Redis的名一致

? ? 'port' => 6379,

? ? ),

必要設(shè)置

應(yīng)用商店

應(yīng)用商店是在墻外的,如果服務(wù)器聯(lián)網(wǎng)不科學(xué),是無法訪問到的,即使額能訪問到也沒法安裝成功應(yīng)用。

國內(nèi)有一個非常優(yōu)秀的鏡像可用使用,地址 https://www.orcy.net/ncapps/v1/

配置文件路徑是/docker/nextcloud/config/config.php,修改配置文件,在最后添加

注意最后也是有逗號的

? 'appstoreenabled' => true,

? 'appstoreurl' => 'https://www.orcy.net/ncapps/v1/',

受信任的域名

如果域名不受信任,即使指向了nextcloud的服務(wù)地址,也是無法打開的,需要在配置文件./nextcloud/config/config.php,修改配置文件,找到trusted_domains,在下面的數(shù)組中按編號新增自己的域名,如果是帶端口的端口也要寫上,有IP的IP也要寫

'trusted_domains' =>

? array (

? ? 0 => 'localhost',

? ? 1 => 'nextcloud.eeeeeeeeeeeeee.space',

? ? 2 => 'collabora.eeeeeeeeeeeeeeee.space',

? ),

您的安裝沒有設(shè)置默認(rèn)的電話區(qū)域

管理員后臺【概覽】頁提示【您的安裝沒有設(shè)置默認(rèn)的電話區(qū)域…】

編輯 Nextcloud config 目錄中的 config.php 文件,在文件最下方, ); 前添加如下代碼

注意,每行代碼后需添加英文逗號。

'default_phone_region' => 'CN',

掛載外部存儲提示"smbclient" 未安裝。無法掛載 “SMB / CIFS”, “SMB / CIFS 使用 OC 登錄信息”。

https://qingflow.com/tag/37253/app/c3ab1815/list/1?applyId=53805827

進(jìn)入Nextcloud容器:

docker exec -it nextcloud_web /bin/bash

apt 更新可用軟件包列表:

apt update

用apt安裝:

apt install smbclient libsmbclient-dev

pecl install smbclient

docker-php-ext-enable smbclient

重啟Docker服務(wù)即可

提示”php-imagick模塊不支持SVG”

https://www.himstudy.net/%e8%a7%a3%e5%86%b3nextcloud%e6%8f%90%e7%a4%baphp-imagick%e6%a8%a1%e5%9d%97%e4%b8%8d%e6%94%af%e6%8c%81svg%e7%9a%84%e9%97%ae%e9%a2%98/

管理員后臺【概覽】頁提示“此實(shí)例中的 php-imagick 模塊不支持 SVG。為了獲得更好的兼容性,建議安裝它。

首先進(jìn)入容器中

docker exec -it nextcloud_web /bin/bash

輸入“apt install libmagickcore-”,然后雙擊tab鍵,會顯示以“l(fā)ibmagickcore-”開頭的組件列表。

然后繼續(xù)敲入完整的安裝命令,安裝“l(fā)ibmagickcore-6.q16-6-extra”組件。

apt install libmagickcore-6.q16-6-extra

安裝完畢重啟docker,然后問題就搞定了。

鏈接教程中是說要重啟apache2,如果有安裝php-fpm,需一并重啟,筆者是php7.4-fpm,如下:

service apache2 restart

service php7.4-fpm restart

再次刷新管理后臺【概覽】頁,問題解決。

另一種在容器外直接操作的方法(不記得是否驗(yàn)證過):

https://techoverflow.net/2021/08/17/how-to-fix-docker-nextcloud-module-php-imagick-in-this-instance-has-no-svg-support-for-better-compatibility-it-is-recommended-to-install-it/

docker-compose exec nextcloud_web apt -y update

docker-compose exec nextcloud_web apt -y install libmagickcore-6.q16-6-extra

登錄無法跳轉(zhuǎn)

弄完以后,我測試發(fā)現(xiàn)填寫完用戶名及密碼之后,點(diǎn)擊登錄無法跳轉(zhuǎn)到主頁。但是刷新一下又是登錄狀態(tài)了,最后上網(wǎng)查了下,這是因?yàn)閣eb使用https反向代理了http導(dǎo)致的。只需要在配置文件(/config/config.json)中加上一條信息就可以了。

'overwriteprotocol' => 'https',

上傳大文件失敗

這個網(wǎng)頁上傳應(yīng)該會遇到,因?yàn)镹ginx做了限制。

首先,映射出Nginx的配置文件:

-v /volume1/docker/nginx/nginx.conf:/etc/nginx/nginx.conf

然后修改一下,添加一個參數(shù)就可以了:

client_max_body_size 2048M; # 自行調(diào)整大小

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容