CentOS7上ownCloud私有云服务的构建

2017-08-19 22:10:37

[开发运维 | Dev Ops] , ,

现在的电子设备真是越来越多。我同步不同设备一般用微软自带的共享文件(也就是前段时间出加密病毒那个),公网上就退化成非常落后的sftp、或者弄到网页上,非常不方便管理。一直在找一个适合的东西来同步。

免费的服务速度慢,像百毒云之流除了开车别的挺没良心的。收费的总带全家桶,不够自由,如微软的Office全家桶(个人觉得微软的全家桶性价比最好),微软还可以课金上azure个人觉得有没必要,google的G Suite全家桶,苹果封闭式的生态圈更不用说了,人家的数据中心也不近,又贵又慢,可玩性低。ownCloud很久以前就听过,总感觉没发展成熟,bug也特别多,一直没试。本来想今天氪一个微软的全家桶,氪之前digital ocean上面试玩了一下了oc,意外地觉得还不错!基本上满足现代生活多个设备文件、日历、通讯录的同步,特别的方便。然后就立马放弃氪微软全家桶(改氪了台新的ovh服务器)

oc的安全事故也有所耳闻,文档方面第一感觉是做得比Wordpress差,版本之间改动很大,特别是整个旧商城搬迁了,安装方面指引不太明确,也走了不少弯路,自己的服务安全显然要自己负责。但最终能够对接上我的自动更新程序,让我后面的维护省了不少功夫。另外oc的app做得非常烂,还收费。事实上我们并不需要这些app,因为网页版 加 系统自带的软件(例如iOS自带的日历)就足够了。

 

NAS也终于由非常专业的商业办公用途,开始走进千家万户了。WebDAV 作为一个效率没那么高的协议,仍不失为一种NAS解决方案。

 

安装过程

我架设之前的系统环境是CentOS7 + Nginx + HHVM + MariaDB。实验发现ownCloud 并不兼容 HHVM-3.18,会出现

perf_event_open failed with: No such file or directory
Fatal error: Call to undefined method OC\\Security\\CSP\\ContentSecurityPolicy::set() in /var/www/html/owncloud/lib/private/Security/CSP/ContentSecurityPolicyManager.php on line 67

这样的错误。有点懒得折腾,平时服务器也不同php,于是乎就决定采用CentOS7 + Nginx + Apache httpd + php5.6 + MariaDB 这样的架构。在这篇文章当中,因为我已经装好了Nginx 和 MariaDB,这里就不再赘述了。

 

 

安装PHP5.6

CentOS自带的库的php比较旧只支持ownCloud9,并不支持ownCloud10。因此,需要另寻途径安装新版的php。推荐一下Remi的RPM库,通过这个向导(http://rpms.remirepo.net/wizard/),可以根据自己的系统和需要的php版本(这里推荐用php5.6)以及安装方式(是否需要同时安装多个不同版本的php)。这是我们需要用到的包裹基本上就是:
yum install php php-cli php-common php-gd php-intl php-ldap php-mbstring php-mysqlnd php-pdo php-pecl-jsonc php-pecl-zip php-process php-xml

安装完成之后,需要进行一下设置,尽量的吧内存什么的调大一些,对用户体验非常有影响。官方文档主要提及需要修改以下地方

session.auto_start = Off
enable_post_data_reading = On
post_max_size = 512M
;这里是自少512MB

session.save_handler = files
session.path = /path to session
;session.path 一般会被httpd设定好了,在/etc/httpd/conf.d/php.conf 里面,所以不用担心

让我感到非常舒服的细节是官方文档这里非常细致,竟然会提醒人php.ini 里面,数据的单位用的是 K M G 而不是  KB MB GB.

后记:这owncloud10 在php7 里面竟然安装不了,但是安装完成后可以升级到php7

 

 

安装ownCloud 10

先亮出官方文档的地址:https://doc.owncloud.org/server/10.0/admin_manual/

其实也就是按照官方的方法:https://download.owncloud.org/download/repositories/10.0/owncloud/

rpm --import https://download.owncloud.org/download/repositories/10.0/CentOS_7/repodata/repomd.xml.key
cd /etc/yum.repos.d/
wget http://download.owncloud.org/download/repositories/10.0/CentOS_7/ce:10.0.repo
yum clean expire-cache
yum install owncloud-files

似乎服务器有防火墙什么的,或者是那几台repo的服务器不好。有些下载的指令试了好几次
整个ownCloud是基于php写成的,代码习惯方面,个人觉得比Wordpress的代码风格要现代。阅读性还算比较强的,有点类似于laravel的风格。

安装完成后,整个php程序就静静地躺在 /var/www/html/owncloud

 

 

配置nginx和apache httpd

出于统一管理的需要,我还是让数据过一下nginx。先配置一下httpd,让它bind到内网的一个端口上

Listen 127.0.0.1:9092

#从Nginx获取真正的IP
RemoteIPHeader X-Real-IP
RemoteIPInternalProxy 127.0.0.1

RemoteIPHeader 的用法可以参见 https://httpd.apache.org/docs/trunk/mod/mod_remoteip.html

 

然后再在Nginx里面进行设置,注意配好ssl,还有Strict-Transport-Security的header

server {
        listen                  443 ssl;
        listen                  [::]:443 ssl;
        server_name             你的域名;

        charset utf-8;

        root                    /var/www/html/owncloud;

        include /etc/nginx/default.d/ssl-challenges.conf;
        include /etc/nginx/default.d/ssl-enabled.conf;

        add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;

        location / {
                proxy_pass http://127.0.0.1:9092;
                proxy_set_header    Host            $host;
                proxy_set_header    X-Real-IP       $remote_addr;
                proxy_pass_header   X-Transmission-Session-Id;
        }
}

最后重启一下nginx 和httpd,打开网页,就是安装界面了。

 

 


遇到的坑其实还是很多的,这里记录一下遇到的问题

 

常见问题

修复Windows/Mac OS X中网络驱动器无法写入问题

又名0KB问题。在Mac OS 中Finder会提示:

Finder 不能完成该操作,因为不能读取或写入“文件名”中的某些数据。
(错误代码 -36)

修复方法见 https://github.com/owncloud/core/pull/28204/files 两处的修改

 						new LockDiscovery([$lockInfo])
  		]);
  		  
 		$response->setStatus(200);
  		$response->setBody($body);
  		  
  		return false;
 		if($request->isUserAgent([
  			'/WebDAVFS/',
  			'/Microsoft Office OneNote 2013/',
 			'/Microsoft-WebDAV-MiniRedir/',
  		])) {
  			$this->server->addPlugin(new FakeLockerPlugin());
  		}

预期将会在10.0.3 里面修复,9.x的stable版已经修复了。

 

 

owncloud 还是 nextcloud?

nextcloud是从owncloud fork出去的。一个社区大了,难免出现分歧,特别是这种可能有商业性质能够赚钱的项目,分歧更加大。两个程序都能在Digital Ocean上面一键部署,我两个都试用了一下,感觉nextcloud明显比owncloud要多功能,很多独特的功能,例如说Deck、文字视频聊天、集成邮件功能,nextcloud似乎更加适合办公用途。但是对于我个人来说,需要的主要是 设备之间共享文件(WebDAV)、通讯录(CardDAV)、日历(CalDAV),需要的是自动更新以及尽量少的维护成本,让我最终决定用owncloud的是owncloud提供rpm package,可以很方便的用yum命令来更新owncloud,不用复制代码什么的。我目前系统里面也只是有对yum装的软件的一系列更新备份的脚本。没有办法更新这些php 代码。

Nextcloud的网站上,有一个比较 https://nextcloud.com/compare/

查看图片

 

 

里面有一点其实非常重要,我们并不需要nextcloud或者owncloud的客户端,因为核心服务是基于WebDAV CardDAV CalDav的,因此只要找到支持这些服务器程序就好。Windows Mac OS系统自带就支持WebDAV。CardDAV CalDAV Thunderbird 也是支持的。另外nextcloud似乎是不满意owncloud的商业模式出走的,但是现在也不是在干同样的事情吗?233333

 

 

owncloud 这个rpm包 和 owncloud-files 这个rpm包 的区别是什么?

owncloud包含了运行owncloud所需的所有程序,包括php、httpd,遗憾的是,只提供到owncloud9。owncloud-files只是owncloud这一堆php文件。

 

owncloud 9 还是 owncloud 10 ?

owncloud9一个非常重要的问题是calendar的这个App的证书被吊销了,装不了,导致整个CalDAV都用不了,虽然支持@base repo的旧版php,但是CalDAV对于我来说是一个相当重要的核心功能。这个事情大概和owncloud 2016年fork出个nextcloud的原因有关,整个旧的应用商城 (https://apps.owncloud.com/) 都废弃,需要手动调成新的( https://marketplace.owncloud.com )。

 

手动加文件的方法

将需要添加的文件复制到 /owncloud储存目录/用户/files 里面,然后切换到程序目录,使用occ命令  sudo -u apache php occ file:scan --all

关于occ命令,更加详细的内容在这里

 

Local external storage 消失问题

https://central.owncloud.org/t/owncloud-10-0-0-local-external-storage-missing/7250

主要是因为安全问题被禁用了,需要启用,可以在config.php中将 files_external_allow_create_new_local  设置成 true 。

这篇博文发表在 开发运维 | Dev Ops 目录下,标签为 , ,
如需引用,请使用链接:https://note.mc256.dev/?p=1754

This article published in 开发运维 | Dev Ops with tags , , .
Cite this page using this link:https://note.mc256.dev/?p=1754

您的邮箱地址不会被公开,评论使用Gravatar头像。
Your email address will not be published. This blog is using Gravatar.

正在提交评论... Submitting ...
正在为您准备评论控件 Loading Comment Plugin
Copyright © 2013-2024 mc256. All Rights Reserved.
Powered by WordPress on top of a dual-stack k3s Cluster using JuiceFS.
Wordpress Theme Designed By mc256.
Encrypted By Let's Encrypt.  Hosted On Linode + OVH + AWS.
DNS Provided By Hostker.
Status Page by CloudFlare Worker.