点击在我的博客 xuxusheng.com 中查看,有更好的排版哦~
owncloud
是个好东西,不管是作为私有云来存储文件,或者是分享文件给其他人、多人协作、本地文件夹映射都是非常好用的功能,在各大网盘都是龟速上传和下载的情况下,自建一个私有云就成了想当不错的选择。
得益于 docker
的存在,部署 owncloud
变得非常非常简单,不再需要折腾各种环境的坑,只需要注意一下安装的流程和简单的配置文件即可。
一、环境准备
不管是 linux
、macos
还是 windows
,只需要装好了 docker
和 docker-compose
,都可以顺利的完成部署,推荐使用 linux
作为服务器系统来进行部署。
我自己是用一台旧笔记本装上了 ubuntu
放在家里作为服务器使用,相对于同样存储空间和带宽的云服务器来说,便宜了不止一点点,当然可靠性上就下降了太多。
如果不会安装 docker
和 docker-compose
,参考另一篇博文:在linux、mac下快速简单的安装docker
二、数据库准备
owncloud
支持 SQLite
、MySQL/MariaDB
、PostgreSQL
,如果已有数据库,可以跳过这一步。
在机器上新建一个 mysql
目录,然后在目录下新建一个 docker-compose.yml
文件,内容如下:
version: "3"
services:
mysql:
image: mysql:5.7 # 使用 mysql5.7 版本的镜像
container_name: mysql # 容器名称
restart: always # 自动重启策略
ports:
- 3306:3306 # 映射到宿主机的端口
volumes:
- ./conf.d:/etc/mysql/conf.d # 配置文件挂载的宿主机目录
- ./data:/var/lib/mysql # 数据文件挂载的宿主机目录
environment:
- MYSQL_ROOT_PASSWORD=yourpasswd # 初始的 root 用户的密码
文件新建完成后,在当前目录下执行 docker-compose up --build -d
命令即可。
这时会发现当前目录下自动新建了 data
和 conf.d
两个目录,里面分别存储着数据库数据和配置,这样当容器重启时,之前的数据也不会丢失了。
使用 docker ps -a
命令即可看到刚才创建的 mysql
容器。
这里建议使用 navicat
连接上 mysql
,然后新建一个用户和数据库给 owncloud
使用。
其实 mysql 容器的配置可以直接和 owncloud 写到同一个 docker-compose.yml 文件中,也无需映射端口到本机,但是我一般喜欢跑一个 mysql,然后给各个服务用,而不是一个服务单独跑一个 mysql。
二、owncloud 准备
在机器上新建一个 owncloud
目录,然后在目录下新建一个 docker-compose.yml
文件,内容如下:
version: "3.1"
services:
app:
image: owncloud
container_name: owncloud
restart: always
ports:
- 9000:80
volumes:
- ./data:/var/www/html
extra_hosts:
- "dockerhost:${dockerhost}" # 宿主机的内网IP,便于容器内访问宿主机网络。
文件内容和上一部分的文件内容基本差不多,只是最后多了一项 extra_hosts
。
这是因为我们的 mysql
服务是单独在宿主机上跑的另一个容器,所以在 owncloud
容器中需要能够访问到宿主机的 63306 端口才行。
可以直接在配置数据库的时候填入宿主机的内网或公网IP,这里相当于将 dockerhost 直接解析到了那个IP,之后在配置的时候,直接输入 dockerhost 即可。
${dockerhost}
是读取的机器上的环境变量,需要手动设置一下这个环境变量,也可以直接使用 IP 来替换这一段(如 - "dockerhost:192.168.x.x"
)
三、启动 owncloud
在 owncloud
下执行 docker-compose up --build -d
命令,完成后执行 docker ps -a
就可以看到相应的容器啦。
同时目录下也会自动生成一个 data
目录,此目录下就存放了所有的 owncloud
代码、配置和数据,不管后期怎么重启容器,数据也不会丢失。
四、初始化配置
这个时候访问机器的 9000 端口,就看看到 owncloud
的配置页面了,填入相应的配置项。
因为我们之前设置了 dockerhost
指向宿主机的IP,所以这个时候我们直接在数据库部分填写 dockerhost:3306
即可,注意数据库的端口不要填错。
数据目录建议使用默认值,不要修改。
填完完成后,点击 安装完成
按钮进入下一步,等待一段时间后,页面将自动跳转向登录页面。
输入刚才配置的管理员账号密码,就大功告成啦.
第一次进入会有一个弹窗,提示你下载客户端,个人建议配合客户端使用才是最佳选择, 让客户端自动保持所有设备全端同步。
五、进阶配置
简单的使用,到上面就完了,但是在实际使用过程中,需要有一些注意的地方。
刚才我们是使用 IP:PORT
的形式进入的初始化配置页面,这个 IP:PORT
会被记录在 owncloud
的配置文件中,作为服务的地址,但是如果我们期望后期通过域名来访问的话,就会出现问题。
切换到 root
用户,进入 owncloud
目录下的 data
文件夹中,使用 ls
命令可以看到,owncloud
的所有相关文件都存放在此。
data
目录中的 config
目录即为存放配置文件的路径,vim ./config/config.php
查看配置文件信息。
<?php
$CONFIG = array (
'instanceid' => 'occknie0ywch',
'passwordsalt' => 'l4NblWwHaK8QfbCLU9i4WhWfd1QKXr',
'secret' => 'AM8p4ZTxvXU05U9xCWkr3qfrY9EoSjVBspm08jrlrU3b7AAH',
'trusted_domains' =>
array (
0 => '192.168.49.84:9000',
),
'datadirectory' => '/var/www/html/data',
'overwrite.cli.url' => 'http://192.168.49.84:9000',
'dbtype' => 'mysql',
'version' => '10.0.10.4',
'dbname' => 'owncloud',
'dbhost' => 'dockerhost:3306',
'dbtableprefix' => 'oc_',
'mysql.utf8mb4' => true,
'dbuser' => 'owncloud',
'dbpassword' => 'owncloud',
'logtimezone' => 'UTC',
'installed' => true,
);
各个配置项含义,可以参考文档:Config.php Parameters
如果需要使用域名,或改变端口等,则需要对其中的 trusted_domains
和 overwrite.cli.url
字段都进行相应的修改。
同时在 overwrite.cli.url
上面加上一行 overwritehost => 域名
。
然后在 owncloud
目录下执行 docker-compose restart
命令重启容器即可。