威联通qnap 453dmini nas 部署docker+nextcloud+onlyoffice+https
威联通qnap 453dmini nas 部署docker+nextcloud+onlyoffice+https
1.概览
1.前言
本教程针对的宿主机为威联通qnap 453dmini nas,理论上其他威联通品牌的x86 nas是通用的,由于qnap系统是定制化的linux,很多ubuntu或者centos有的功能他没有,所以有些地方只能采用迂回处理的方式。
本教程不是小白教程,基础教程请自行百度,例如docker,ssh,nginx等等
2.缘由
全网基本很难找到一篇nas+docker+nextcloud+onlyoffice+https的完整教程,自己摸索了一整天才算部署到能正常使用,虽然有些地方的配置还是不如我意,唉,心累。遂打算抽点时间发个教程,有缘人看到了希望能为你节省点时间。
3.要求
会使用linux命令,docker和docker-compose,nginx,这些基础教程没法写一起,耦合度太高了,本篇内容仅针对nextcloud部署
4.整体思路
nextcloud部署为http请求方式,通过nginx反向代理实现https,onlyoffice直接配置https
2.环境
1.网络环境
以上为简单的网络拓扑图,旁路由设置了我的域名ip为nas内网ip,方便同一域名地址下外网走公网、内网走局域网
2.nas环境
已安装container station,已安装nginx且配好证书,打开ssh
3.教程
1.提示
防止隐私泄露,以下所有abc.com代指我的公网域名,192.168.0.103代指我的局域网nas ip
所有的账号密码自己都可以改,注意可能会需要改多个地方
所有vi命令都是把代码块cv进去,具体vi操作请百度,这里写个简单的示例:vi a.txt,按一下i,复制文本,shift+insert粘贴,按下esc,输入:wq回车。
CACHEDEV1_DATA指的是我的nas中的存储目录,你们的会不会是这个名字我不清楚,请自行查看
2.教程正文
ssh连接nas
mkdir -p /share/CACHEDEV1_DATA/docker/docker/docker-script/nextcloud
mkdir -p /share/CACHEDEV1_DATA/docker/docker/docker-volumes
cd /share/CACHEDEV1_DATA/docker/docker/docker-script/nextcloud
vi docker-compose.yml
version: '3'
services:
nextcloud:
container_name: nextcloud
image: nextcloud
environment:
- UID=0
- GID=0
- UPLOAD_MAX_SIZE=10G
- APC_SHM_SIZE=128M
- OPCACHE_MEM_SIZE=128
- CRON_PERIOD=15m
- TZ=Aisa/Shanghai
- NEXTCLOUD_ADMIN_USER=admin
- NEXTCLOUD_ADMIN_PASSWORD=admin
- MYSQL_HOST=mariadb
- MYSQL_USER=nextcloud
- MYSQL_PASSWORD=nextcloud
- MYSQL_DATABASE=nextcloud
- REDIS_HOST=redis
- REDIS_HOST_PORT=6379
volumes:
- ${NEXTCLOUD_DIR}/data:/var/www/html
ports:
- 8000:80
restart: always
extra_hosts:
- "abc.com:192.168.0.103" #按照自己的修改
links:
- mariadb
- redis
depends_on:
- mariadb
- redis
deploy:
resources:
limits:
cpus: 4
memory: 2G
mariadb:
container_name: mariadb
image: mariadb
ports:
- 3306:3306
restart: always
command: --skip-innodb-read-only-compressed --transaction-isolation=READ-COMMITTED --binlog-format=ROW --lower_case_table_names=1
volumes:
- ${MYSQL_DIR}/data:/var/lib/mysql
- ${MYSQL_DIR}/conf:/etc/mysql/conf.d
- ${MYSQL_DIR}/script:/docker-entrypoint-initdb.d
environment:
- TZ=Asia/Shanghai
- MYSQL_ROOT_PASSWORD=root
- MYSQL_PASSWORD=nextcloud
- MYSQL_DATABASE=nextcloud
- MYSQL_USER=nextcloud
logging:
options:
max-size: 1G
deploy:
resources:
limits:
cpus: 4
memory: 2G
redis:
container_name: redis
image: redis
ports:
- 6379:6379
environment:
TZ: Asia/Shanghai
volumes:
- ${REDIS_DIR}/data:/data
restart: always
logging:
options:
max-size: 1G
deploy:
resources:
limits:
cpus: 2
memory: 1G
onlyoffice:
container_name: onlyoffice
image: onlyoffice/documentserver
ports:
- "8001:443"
environment:
- TZ=Asia/Shanghai
volumes:
- ${ONLYOFFICE_DIR}/data:/var/www/onlyoffice/Data
- ${ONLYOFFICE_DIR}/logs:/var/log/onlyoffice
- ${ONLYOFFICE_DIR}/lib:/var/lib/onlyoffice
- ${ONLYOFFICE_DIR}/db:/var/lib/postgresql
- ${ONLYOFFICE_DIR}/fonts:/usr/share/fonts
privileged: true
restart: always
extra_hosts:
- "abc.com:192.168.0.103" #按照自己的修改
logging:
options:
max-size: 1G
deploy:
resources:
limits:
cpus: 2
memory: 4G
vi .env
MYSQL_ROOT_HOST=%
MYSQL_ROOT_PASSWORD=root
MYSQL_DIR=/share/CACHEDEV1_DATA/docker/docker-volumes/mariadb
NEXTCLOUD_DIR=/share/CACHEDEV1_DATA/docker/docker-volumes/nextcloud
REDIS_DIR=/share/CACHEDEV1_DATA/docker/docker-volumes/redis
ONLYOFFICE_DIR=/share/CACHEDEV1_DATA/docker/docker-volumes/onlyoffice
docker-compose —compatibility up
至此第一步部署成功,接下来需要更改文件配置
1.修改/share/CACHEDEV1_DATA/docker/docker-volumes/nextcloud/data/config/config.php中’trusted_domains’的值,并添加下面两行配置,格式按照以下示例,10.0.5.1指的是docker0的地址,默认都是这个,如果你不是,进入container station看下属性里的docker0
'trusted_domains' =>
array (
0 => '192.168.0.103:8000',
1 => 'abc.com:9000',
2 => '10.0.5.1:8000',
),
'overwriteprotocol' => 'https',
'allow_local_remote_servers' => true,
2./share/CACHEDEV1_DATA/docker/docker-volumes/onlyoffice/data文件夹中创建certs文件夹,把证书放入certs文件夹并重命名为onlyoffice.crt和onlyoffice.key
3.nginx配置反向代理:
server {
listen 9000 ssl http2;
listen [::]:9000 ssl http2;
#server_name请输入自己的域名
server_name abc.com;
root /usr/share/nginx/html;
#证书crt路径
ssl_certificate /etc/nginx/conf.d/ssl/server.crt;
#证书key路径
ssl_certificate_key /etc/nginx/conf.d/ssl/SSLprivatekey.key;
ssl_session_timeout 1d;
ssl_session_cache shared:MozSSL:10m; # about 40000 sessions
ssl_session_tickets off;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
ssl_prefer_server_ciphers off;
# HSTS (ngx_http_headers_module is required) (63072000 seconds)
add_header Strict-Transport-Security "max-age=63072000" always;
# OCSP stapling
ssl_stapling on;
ssl_stapling_verify on;
#charset koi8-r;
#access_log /var/log/nginx/host.access.log main;
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
client_max_body_size 10g;
location / {
proxy_buffering off;
proxy_set_header Host $http_host;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://127.0.0.1:8000;
}
}
4.端口8001和9000开放给公网(有公网ip就设路由器转发端口,像我这样走frp内网穿透的就配置下穿透端口,尽量保证端口一致避免未知问题)
5.访问https://apps.nextcloud.com/apps/onlyoffice ,下载对应版本压缩包
6.解压后放入/share/CACHEDEV1_DATA/docker/docker-volumes/nextcloud/data/apps中
7.访问https://abc.com:9000 ,登录后点下右上角头像下拉框,进入应用,选择已禁用的应用,启用onlyoffice
8.进入设置->ONLYOFFICE,第一行填https://abc.com:8001/ ,第二行留空,更多设置点开,第三行填https://abc.com:8001/ ,第四行填http://10.0.5.1:8000/
9.选择基本设置,后台任务设置为Webcron
10.连上ssh,输入crontab -e ,加一行 /5 * curl http://192.168.0.103:8000/cron.php ,保存退出
11.重启cron,输入/etc/init.d/crond.sh restart 回车
12.接触上传速度限制:docker exec -u www-data -it nextcloud php occ config:app:set files max_chunk_size —value 0
完成
4.结语
部署这套应用的目的就是为了能有一个属于个人的云流程图和云思维导图,方便win+mac+ios+android都可以不用安装相应的软件使用,并且不会受商业化的免费在线流程图和思维导图的限制,这俩插件直接下载解压就可以用了。onlyoffice我可能只会做预览使用,真要编辑office还是在本地更顺手。
由于我内网设置了域名ip为内网ip,没有考虑过内网通过ip访问,实测通过ip直接访问是有问题的,不想折腾了
如果教程有什么地方有问题麻烦评论下说一下,我看到会回复并且修改教程。
作者声明本文无利益相关,欢迎值友理性交流,和谐讨论~


校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案