使用Docker-compose安裝NextCloud敬拓,并部署Collabora作為office服務
在csdn也同步發(fā)布了,csdn上markdown格式顯示效果更好些
https://blog.csdn.net/u013568040/article/details/123648666
使用docker-compose可以更快速的構建nextcloud需要的各個服務
2個子域名乘凸,分別用于Collabora Office和Nextcloud,且兩個域名均擁有合法SSL證書累榜,通過備案后在云服務商申請免費證書即可营勤,證書授權一年灵嫌。
例如:
nextcloud.eeeeeee.com用于訪問Nextcloud,collabora.eeeeeeee.com用于部署Collabora Office
nginx的 SSL 證書可用騰訊云或阿里云每年授權一次的免費證書葛作,就不用那個什么letsencrypt搞什么自動續(xù)簽了寿羞,
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ù)配置
mariadb是完全兼容mysql的
command:是一個隔離級別的東西,不知道干嘛的赂蠢,官方文檔里并沒寫
volumes:為了不把其他目錄搞亂绪穆,我比較喜歡把文件掛在當前目錄下,我在?/home/dc/nextcloud/?文件夾下執(zhí)行安裝命令虱岂,文件都會創(chuàng)建在這個下面玖院。
volumes,作用是第岖,將宿主機的目錄掛載到docker容器中难菌,這樣操作文件時,不用登錄docker容器了绍傲,直接在宿主機操作就可以了扔傅。
如果你使用的是windows版本的docker, 建議買個linux的云服務器烫饼,騰訊云雙十一的時候都不貴的猎塞。
environment:這里設置了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
image:這里我選用的是nextcloud:apache鏡像杠纵,因為apache的更能看明白一點
environment:
NEXTCLOUD_ADMIN_*****?配置項里面nextcloud的管理員賬號密碼荠耽。這里如果不設置,應該也可以在初始化的時候設置比藻;
REDIS_HOST直接用redis铝量,可能因為我們啟了一個名字是redis的容器;
VIRTUAL_HOST這個應該是給ngnix用的银亲,就用nextcloud的域名就可用慢叨;
MYSQL_*****這個是數(shù)據(jù)庫相關設置,和db容器的一致就可以聯(lián)上务蝠;
UID GID是nextcloud操作文件時的用戶權限拍谐,可用id命令查詢用戶的uid和gid,我用的是root用戶的id馏段。id權限不足回導致上傳文件只有文件名不能正常寫入文件轩拨;
其余的各種上限的配置就按著寫就夠用了;
cap_add: - MKNOD這個也是一個容器權限相關的設置院喜,控制容器對宿主機文件的操作亡蓉,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
volumes: - 宿主機:容器?需要在阿里云把證書下載并放在 ./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
這里我也試了好幾個office預覽的服務喷舀,包括onlyoffice占用內存會特別多砍濒,微軟官方的officeOline2013淋肾,部署太麻煩了,最終選擇了collabora梯影,并且nextcloud還有直接可用的插件巫员,內置的插件對中文支持不好,所以就用這個單獨部署的了甲棍。這個單獨部署的是支持中文的简识。
environment:
domain一定要設置正確(哪個網(wǎng)站上要用collabora就設置那個網(wǎng)站的地址,不是設置collabora在用的域名)感猛,否則在collabora預覽的時候會一直初始化然后就沒有然后了七扰。
如果要讓這個Collabora Office同時服務于多個域名的話,需要在兩個不同域名之間加上|陪白,例如:
domain=cloud\\.nextcloud\\.com\|second\\.nexcloud\\.com
username和password是collabora管理后臺的賬號密碼颈走,管理后臺的訪問地址是https://collabora.seeeeeeee.com/loleaflet/dist/admin/admin.html
如果瀏覽器打不開新開一個瀏覽器就好了
cap_add: - MKNOD這個設置用于讓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"
在docker-compose.yml文件所在目錄,運行以下命令:
docker-compose up -d
我在配置完成后咱士,把nextcloud的端口關了立由,nextcloud服務默認是運行在80端口的(在容器內的80端口),初次安裝可用ports把80端口露出來序厉。
命令完成后锐膜,就可以用http://宿主機IP:端口,來訪問nextcloud了弛房。
如果運行docker-compose道盏,提示權限不夠,解決方法:
chmod +x /usr/local/bin/docker-compose
訪問首頁文捶,進行初始化設置荷逞,就不用在這里設置了
進入mysql:
mysql -u root -p
建立數(shù)據(jù)庫
create database nextcloud;
建立數(shù)據(jù)庫用戶
create user '你的數(shù)據(jù)庫用戶名'@'%' identified by '你的數(shù)據(jù)庫密碼';
將數(shù)據(jù)庫用戶與數(shù)據(jù)庫關聯(lián)起來,并允許所有IP訪問此數(shù)據(jù)庫
GRANT ALL PRIVILEGES ON 你的數(shù)據(jù)庫用戶名 TO '你的數(shù)據(jù)庫用戶名@'%' IDENTIFIED BY '你的數(shù)據(jù)庫密碼' WITH GRANT OPTION;
刷新權限信息
flush privileges;
參數(shù)解釋:
nextcloud粹排,代表對這個數(shù)據(jù)庫有效种远,如果換成*.* ,代表對任意數(shù)據(jù)庫任意表有效
‘%’ 允許任意IP訪問數(shù)據(jù)庫顽耳,如果換成’localhost’代表只允許本機訪問
如果doker-compose.yml添加了redis服務坠敷,需要編輯nextcloud的php配置文件來啟用服務,配置文件路徑是./nextcloud/config/config.php
? 'memcache.local' => '\OC\Memcache\Redis',
? 'memcache.distributed' => '\OC\Memcache\Redis',
? 'memcache.locking' => '\OC\Memcache\Redis',
? 'redis' => array(
? ? 'host' => 'redis',? #如果是在本機就是localhost,如果是docker斧抱,要和Redis的名一致
? ? 'port' => 6379,
? ? ),
應用商店是在墻外的常拓,如果服務器聯(lián)網(wǎng)不科學渐溶,是無法訪問到的辉浦,即使額能訪問到也沒法安裝成功應用。
國內有一個非常優(yōu)秀的鏡像可用使用茎辐,地址 https://www.orcy.net/ncapps/v1/
配置文件路徑是/docker/nextcloud/config/config.php宪郊,修改配置文件掂恕,在最后添加
注意最后也是有逗號的
? 'appstoreenabled' => true,
? 'appstoreurl' => 'https://www.orcy.net/ncapps/v1/',
如果域名不受信任,即使指向了nextcloud的服務地址弛槐,也是無法打開的懊亡,需要在配置文件./nextcloud/config/config.php,修改配置文件乎串,找到trusted_domains店枣,在下面的數(shù)組中按編號新增自己的域名,如果是帶端口的端口也要寫上叹誉,有IP的IP也要寫
'trusted_domains' =>
? array (
? ? 0 => 'localhost',
? ? 1 => 'nextcloud.eeeeeeeeeeeeee.space',
? ? 2 => 'collabora.eeeeeeeeeeeeeeee.space',
? ),
管理員后臺【概覽】頁提示【您的安裝沒有設置默認的電話區(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
進入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服務即可
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/
管理員后臺【概覽】頁提示“此實例中的 php-imagick 模塊不支持 SVG钝侠。為了獲得更好的兼容性,建議安裝它酸舍。
首先進入容器中
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
再次刷新管理后臺【概覽】頁群扶,問題解決及刻。
另一種在容器外直接操作的方法(不記得是否驗證過):
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
弄完以后,我測試發(fā)現(xiàn)填寫完用戶名及密碼之后竞阐,點擊登錄無法跳轉到主頁缴饭。但是刷新一下又是登錄狀態(tài)了,最后上網(wǎng)查了下骆莹,這是因為web使用https反向代理了http導致的颗搂。只需要在配置文件(/config/config.json)中加上一條信息就可以了。
'overwriteprotocol' => 'https',
這個網(wǎng)頁上傳應該會遇到幕垦,因為Nginx做了限制丢氢。
首先傅联,映射出Nginx的配置文件:
-v /volume1/docker/nginx/nginx.conf:/etc/nginx/nginx.conf
然后修改一下,添加一個參數(shù)就可以了:
client_max_body_size 2048M; # 自行調整大小