突然有想部署一个自己云盘的想法,这样就避免了电脑同步一些资料还需要通过微信转发接收,而且有时候没有及时处理,又过期了,或者被清理微信空间的时候被删除。
最开始的选择是 OwnCloud,但是 OwnCloud 一些插件是收费的,而且再上传文件的时候,会出现 part
文件块再合并,对ALIYUN OSS
的支持就不好了,ALIYUN OSS
不支持文件修改,只能追加。于是转向 NextCloud
,而另一个常用的Seafile
开源版本是不支持外挂外部盘的,也就没再研究。
Docker 部署
直接先展示出我的配置文件,我用的数据库是PostgreSQL
, 可以根据个人喜好进行更换,并且配置 OSS
作为主存储方式。
version: "3"
services:
nextcloud:
image: nextcloud:23.0.0
restart: always
ports:
- 8001:80
depends_on:
- postgres
- redis
environment:
- POSTGRES_DB=数据库名称
- POSTGRES_USER=数据库用户名
- POSTGRES_PASSWORD=数据库密码
- POSTGRES_HOST=postgres:5432
- REDIS_HOST=redis
- OBJECTSTORE_S3_HOST=OSS地址,例如:oss-cn-beijing-internal.aliyuncs.com
- OBJECTSTORE_S3_BUCKET=OSS Bucket 名称
- OBJECTSTORE_S3_KEY=OSS Key
- OBJECTSTORE_S3_SECRET=OSS Secret
- OVERWRITEHOST=访问域名
- OVERWRITEPROTOCOL=访问协议, 例如 https
volumes:
- files:/var/www/html
postgres:
image: postgres:11.14
restart: always
environment:
- POSTGRES_DB=数据库名称
- POSTGRES_USER=数据库用户名
- POSTGRES_PASSWORD=数据库密码
healthcheck:
test: ["CMD", "pg_isready", "-U", "thought-action-cloud"]
interval: 10s
timeout: 5s
retries: 5
volumes:
- database:/var/lib/postgresql/data
redis:
image: redis:6
restart: always
command: ["--databases", "1"]
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 10s
timeout: 5s
retries: 5
volumes:
- redis:/data
cron:
image: nextcloud:23.0.0
restart: always
volumes:
- files:/var/www/html
entrypoint: /cron.sh
depends_on:
- postgres
- redis
volumes:
files:
database:
redis:
通过 Docker Stack
进行部署
docker stack deploy -c nextcloud.yml nextcloud
Nginx 配置
再 Nginx conf 目录下,新添配置文件
server {
server_name 域名地址;
listen [::]:80;
listen 80;
location / {
proxy_pass http://127.0.0.1:8001;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
client_max_body_size 100m;
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
}
location /.well-known/carddav {
return 301 $scheme://$host/remote.php/dav;
}
location /.well-known/caldav {
return 301 $scheme://$host/remote.php/dav;
}
error_log 错误日志目录;
access_log 访问日志目录;
}
后运行 certbot --nginx
选择配置的域名地址即可自动配置 SSL并修改配置文件。
Certbot
可以通过下述命令进行安装
sudo apt install certbot python3-certbot-nginx
访问安装
访问配置的域名,既可进入安装页面,因为环境变量里已经配置了数据库,安装界面只需输入管理员账户信息即可, 点击完成安装进行安装。
安全与警告
进入后台后,打开概览,可以看到一些待修复的问题,下面例举了部分遇见的问题解决方案
此实例中的 php-imagick 模块不支持 SVG。为了获得更好的兼容性,建议安装它
进入容器中,安装 imagemagick
即可
docker exec -it 容器名称 /bin/bash
apt update && apt install imagemagick
如何容器默认源配置安装缓慢,可以通过修改 /etc/apt/source.list
加速
sed -i "s/deb.debian.org/mirrors.aliyun.com/g" /etc/apt/sources.list
您的安装没有设置默认的电话区域
进入容器中, 修改 config/config.php
中的配置, 先生成新的配置,确认配置无误后覆盖配置。
tac config/config.php | sed "1a\ \ 'default_phone_region' => 'CN'," | tac > config.php_backup
cp config.php_backup config/config.php
后台任务配置
基本设置中,可以配置后台任务执行方式,通过Cron可以提高部分性能