平时总是有一些小需求存一些自己的私密文件或者一些配置文件,方便之后使用,或者用作同步文档使用,而国内一些百度云这类不靠谱,作为程序员当然要有折腾的心,于是我准备搭建自己的私有云.最开始是直接在服务器按照官方文档上安装,但是每次都出现一些问题,导致来回弄了一个星期(有时间就弄一下),因此最后选择了 docker 方式安装,后面就顺利多了.
ownCloud
ownCloud 是国外一个开源的私有云搭建方案,个人使用不需要任何付费,还有各种 app,桌面级应用提供搭配使用.
搭建的系统环境: Ubuntu 16.04.5 LTS
.
因为此服务器也用作博客搭建,使用的是 Nginx,因此并没有使用apache2
,才用了 docker 方式(没有那么多其它问题,也不影响系统环境)安装.
安装
使用 Docker 这个步骤就不用说了,官网就有最新的.
- 设置环境变量
export OWNCLOUD_VERSION=latest
export OWNCLOUD_DOMAIN=cloud.obeta.me # 自己的域名
export ADMIN_USERNAME=admin # 最好更换
export ADMIN_PASSWORD=admin # 最好更换
export HTTP_PORT=80 # 如果443端口被占用可以改成8888,建议使用8888
export HTTPS_PORT=443 # 如果443端口被占用可以改成9999,建议使用8888
因为 80,443 端口被 Nginx 使用,因此我这边是直接设置的 8888 与 9999,后面通过配置 nginx 来反向代理cloud.obeta.me
.
- 创建 volume
docker volume create --name=owncloud_redis
docker volume create --name=owncloud_mysql
docker volume create --name=owncloud_backup
docker volume create --name=owncloud_files
可以通过docker volume ls
查看是否创建成功.
- 安装 redis
# 安装redis
docker run -d \
--name redis \
-e REDIS_DATABASES=1 \
--volume owncloud_redis:/var/lib/redis \
webhippie/redis:latest
- 安装 mariadb
docker run -d \
--name mariadb \
-e MARIADB_ROOT_PASSWORD=owncloud \
-e MARIADB_USERNAME=${ADMIN_USERNAME} \
-e MARIADB_PASSWORD=${ADMIN_PASSWORD} \
-e MARIADB_DATABASE=owncloud \
--volume owncloud_mysql:/var/lib/mysql \
--volume owncloud_backup:/var/lib/backup \
webhippie/mariadb:latest
- 安装 owncloud
docker run -d \
--name owncloud \
--link mariadb:db \
--link redis:redis \
-p ${HTTP_PORT}:80 \
-p ${HTTPS_PORT}:443 \
-e OWNCLOUD_DOMAIN=${OWNCLOUD_DOMAIN} \
-e OWNCLOUD_DB_TYPE=mysql \
-e OWNCLOUD_DB_NAME=owncloud \
-e OWNCLOUD_DB_USERNAME=owncloud \
-e OWNCLOUD_DB_PASSWORD=owncloud \
-e OWNCLOUD_DB_HOST=db \
-e OWNCLOUD_ADMIN_USERNAME=${ADMIN_USERNAME} \
-e OWNCLOUD_ADMIN_PASSWORD=${ADMIN_PASSWORD} \
-e OWNCLOUD_REDIS_ENABLED=true \
-e OWNCLOUD_REDIS_HOST=redis \
--volume owncloud_files:/mnt/data \
owncloud/server:${OWNCLOUD_VERSION}
3, 4, 5 步骤安装完成后需要使用此命令docker ps
检查一下是否正常启动:
1f15ecf4002a owncloud/server:latest "/usr/bin/entrypoint…" 2 hours ago Up 2 hours 0.0.0.0:8888->80/tcp, 0.0.0.0:9999->443/tcp owncloud
8fdea3f8ab0b webhippie/mariadb:latest "/usr/bin/entrypoint…" 2 hours ago Up 2 hours 3306/tcp mariadb
6b6e8c6243e1 webhippie/redis:latest "/usr/bin/entrypoint…" 2 hours ago Up 2 hours 6379/tcp redis
如果列表中并没有上面三个实例,说明有启动失败,需要查看日志并 google 一下.这部分的话因人而异,因此没法提前说,只能提供部分方法:
docker ps -a # 查看所有启动的实例,包含已经错误停止的实例
假设缺少上面的一个实例:mariadb
,那么通过docker ps -a
我们可以找到他,copy 它的 id: 8fdea3f8ab0b
:
docker logs 8fdea3f8ab0b
此时查看日志有何错误信息 google 即可.更多关于 docker 的介绍可以去 docker 官网看一下.
最后说一下有时候 docker 实例并没有停止,但是服务异常,这时候也可以通过查看 logs 来查看是否异常,有时候还需要进入 docker 实例中查看对应的日志:
docker exec -it 8fdea3f8ab0b bash # 8fdea3f8ab0b 是实例的id
nginx 配置
http{
upstream owncloud {
server 127.0.0.1:8888;
}
# owncloud
server {
listen 443 ssl;
server_name cloud.obeta.me;
ssl on;
ssl_certificate /net_bundle.crt;
ssl_certificate_key /net.key;
ssl_session_timeout 5m;
client_max_body_size 100M;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
location / {
proxy_pass http://owncloud;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
}
已知 issuse
owncloud 可以设置最大上次文件大小,因为我没有什么特别大到文件,因此我设置到最大文件是 100M,但是上传 2M 大小的文件到时候提示 413 错误:
2018/9/11 16:58:54, fonts/FiraCode_1.205.zip, ownCloud,Server replied "413 Request Entity Too Large" to "PUT https://cloud.obeta.me/remote.php/dav/files/obeta/fonts/FiraCode_1.205.zip" (skipped due to earlier error, trying again in 24 hour(s))
这是由于 nginx 默认设置 1M 大小,因此通过设置 nginx 即可:
server {
# ....
client_max_body_size 100M;
# ....
}