Obeta

使用ubuntu搭建自己的私有云ownCloud

之前一只想着组装一个NAS,当作自己的家庭影音使用,也可以存储大量个人图片于视频,老了还可以慢慢看(其实是想多了...),后面由于搭建一个好一点的比较麻烦而且价格偏高,因此选择了ownCloud,虽然解决的痛点不多,但是能止痒也是不错的.

平时总是有一些小需求存一些自己的私密文件或者一些配置文件,方便之后使用,或者用作同步文档使用,而国内一些百度云这类不靠谱,作为程序员当然要有折腾的心,于是我准备搭建自己的私有云.最开始是直接在服务器按照官方文档上安装,但是每次都出现一些问题,导致来回弄了一个星期(有时间就弄一下),因此最后选择了 docker 方式安装,后面就顺利多了.

ownCloud

ownCloud 是国外一个开源的私有云搭建方案,个人使用不需要任何付费,还有各种 app,桌面级应用提供搭配使用.

搭建的系统环境: Ubuntu 16.04.5 LTS. 因为此服务器也用作博客搭建,使用的是 Nginx,因此并没有使用apache2,才用了 docker 方式(没有那么多其它问题,也不影响系统环境)安装.

安装

使用 Docker 这个步骤就不用说了,官网就有最新的.

  1. 设置环境变量
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.

  1. 创建 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查看是否创建成功.

  1. 安装 redis
# 安装redis
docker run -d \
  --name redis \
  -e REDIS_DATABASES=1 \
  --volume owncloud_redis:/var/lib/redis \
  webhippie/redis:latest
  1. 安装 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
  1. 安装 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;
	# ....
}

引用

个人随笔记录,内容不保证完全正确,若需要转载,请注明作者和出处.