Tomorrow.Comes.Today

在Ubuntu Server搭个ownCloud


前些时间搭了个ownCloud。话说搭建这货没啥技术门槛,理论上……

结果遇到一顿坑爹事儿:{

ownCloud是个啥?

先丢个维基百科链接。你可以想象成一个百度云,然后给它 附魔加成100 加上强大的自定义能力,成为你的云U盘!(当然你要是有钱弄个几T做成云移动盘……请分我一点用!)而且你在Windows、Mac、Linux、iOS、安卓、SailfishOS上都可以用,甚至有个浏览器你都可以用……

而且因为都是存在自己服务器上,你完全可以在上面存 羞羞 重要的东西!

安装ownCloud

官方文档总是最好的教程。不过安装本身很简单,我就只说说Ubuntu Server了。

安装ownCloud:

sudo sh -c "echo 'deb http://download.opensuse.org/repositories/isv:/ownCloud:/community/xUbuntu_15.04/ /' >> /etc/apt/sources.list.d/owncloud.list"
sudo apt-get update
sudo apt-get install owncloud

另外可以把Key添加到服务器里:

wget http://download.opensuse.org/repositories/isv:ownCloud:community/xUbuntu_15.04/Release.key
sudo apt-key add - < Release.key  

完成!就这么简单!现在在你浏览器中输入

http://<your.server.ip>

(把<your.server.ip>换成你的服务器ip或对应域名)

apache-works

恭喜,你的apache运行顺利……啥?

额,正确的进入方式应该是:

http://<your.server.ip>/owncloud/

等哈我忘了截图了,盗张 借张howtoforge.com的图:

setup-owncloud

稍微说明一下,最上面两行,分别填入作为管理员的帐号和密码即可。中间那行笔者安装时并未遇到。如果你遇到的话,填写

/var/www/owncloud/data/

即可。这个目录会成为你最终存放文件的位置。比如你用户名为tyler的话,你的所有文件都会存放在/var/www/owncloud/data/tyler下面。

坑爹的是下面一行,怕麻烦的各位请尽情选择SQLite,喜欢倒腾的请选择MySQL/MariaDB,然后一起进入坑爹的世界……

配置MySQL

同样先安装MySQL

sudo apt-get install mysql-server

安装过程中需要设置Root密码。这个需要用来进入MySQL。

setup-mysql-root-password

接着进入MySQL

mysql -u root

如果看到一行

mysql>

说明进去了。然后为ownCloud创建个数据库。

CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';
CREATE DATABASE IF NOT EXISTS owncloud;
GRANT ALL PRIVILEGES ON owncloud.* TO 'username'@'localhost' IDENTIFIED BY 'password';

其中

  • 'username'换成你想要的用户名,这个填到ownCloud初始化页面,第三部分的用户名中。
  • 'password'为数据库用户密码,填到ownCloud初始化页面,第三部分的密码中。
  • owncloud为数据库表格名称,填到ownCloud初始化页面,第三部分的第三栏。
  • localhost不需要改。

敲完回车,按ctrl+d退出。

客户端客户端

这里

Connect to your ownCloud with our clients:

中选择对应客户端下载安装即可!

本教程到此结束!谢谢大家!欢迎打赏!

……才怪……这种随随便便把人家文档拿出来翻译一遍骗人的把戏洒家才不做……

本文现在才开始……

一个提示:客户端安装完毕后会要求填写URL,这是你服务器的IP(或域名,取决于你是否租用并绑定了域名)。一般来说填写形如

http://127.0.0.1

即可(将127.0.0.1换成你服务器IP)。但实际上你并非直接使用这个地址。有些客户端(比如SailfishOS-ownCloud)就会报错。应该填写为:

http://127.0.0.1/owncloud/

排查问题

如果你ownCloud出了问题可以直接察日志

sudo cat /var/www/owncloud/data/owncloud.log

而MySQL数据库的问题则放在

sudo cat /var/log/mysql/error.log

数据库挂了?

好吧,本来跑着好好的,突然ownCloud就挂了……

重启又好了,跑着跑着又挂了……T^T

  • ownCloud无法使用,日志显示无法找到MySQL的socks文件
  • MySQL服务处于完全退出状态
  • service mysql start会卡住很久,然后显示failed(失败)

最后在MySQL日志里找到这么一行:

InnoDB: Fatal error: cannot allocate the memory for the buffer pool

额,无法为缓存池分配内存?赶紧查内存使用情况

free -m
             total       used       free     shared    buffers     cached
Mem:           489        471         17         17          4        112
-/+ buffers/cache:        355        133
Swap:            0          0          0

这,内存差不多被吃光了啊……

减少数据库缓存

既然是MySQL无法申请内存,那让它少申请点就好了嘛。

打开MySQL配置文件(找不到文件位置的看这里

sudo nano /etc/mysql/my.cnf

然后把这个添加到对应区域即可

[mysqld]
innodb_buffer_pool_size=100M
key_buffer_size=50M

总之把这两个值写小一些即可。写多小就只能你自己估计了。

然后重启MySQL

service mysql restart

然后我的ownCloud又欢乐地跑了好久好久!

……然后挂了。

SWAP分区

是的,即使把内存占用写小也无法改变内存实在不够的现实啊……

注意free -m最后一行,Swap: 0 0 0,这货没有Swap分区?!

毕竟是人家的服务器,总不可能重装分区割一块吧……

好在Linux没有解决不了的问题。没有?大不了咱造一个!

(如果你熟悉Linux,请尽情dd一个。我服务器连dd都跑不了,抛了个memory exhausted

  1. 创建swap文件

    sudo fallocate -l 1G /swapfile
    

    1G改成你需要的分区大小即可。

  2. 保存内存这么重要的东西得用权限保护好

    sudo chmod 600 /swapfile
    
  3. 启用这个swap分区

    sudo mkswap /swapfile
    sudo swapon /swapfile
    

好了。看看效果:

free -m
             total       used       free     shared    buffers     cached
Mem:           489        472         16         17          7        109
-/+ buffers/cache:        354        134
Swap:         1023        204        819

启用成功!

Nginx反向代理

一点题外话。你可以用Nginx做反向代理,这样就可以把多个站点/子域名放在同一个服务器上了。

Nginx用法不在这里阐述。假设你已经在使用Nginx,那么这些配置可能会帮助到你。

另外Nginx配置文件一般在/etc/nginx/nginx.conf中。配置完毕后需要sudo nginx -s reload。ownCloud使用apache驱动,因此你需要修改Apache2监听端口

1. SSL支持

SSL/TLS实在是件不怎么让人爽的事儿。毕竟它很重要,但贵得不要不要的……

不管你是付费还是在StartSSL上免费申请,或者已经在WoSign免费/付费地获取到证书,甚至说Let's Encrypt已经开始为大家服务,你都可以获得一个比较划算的SSL/TLS证书。

一个典型的SSL支持的Nginx配置如下:

server {
    listen 80;    # 默认http端口,勿改
    listen 443 ssl;    # 默认https端口,勿改
    server_name your.domain.com;    # 你的服务器域名。若没有域名则填""
    ssl_certificate      /path/to/domain.crt;    # 你证书crt文件位置
    ssl_certificate_key  /path/to/domain.key;    # 你证书key文件位置
    ssl_session_timeout  5m;
    ssl_protocols  SSLv3 TLSv1;
    ssl_ciphers  HIGH:!ADH:!EXPORT56:RC4+RSA:+MEDIUM;
    ssl_prefer_server_ciphers   on;
    client_max_body_size 0;    # 0表示不限制上传文件大小
    location / {
        proxy_pass_header Server;
        proxy_set_header Host $http_host;
        proxy_redirect off;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Scheme $scheme;
        proxy_pass http://127.0.0.1:8003;    # 8003改为你apache监听端口
    }
}

2. 强制HTTPS

既然选择了SSL/TSL支持,那么强制走HTTPS可能是个好主意。没人想每次都自己在URL前写个https://

server {
     listen 80;
     server_name your.domain.com;
     return 301 https://your.domain.com$request_uri;
 }
 server {
     listen 443 ssl;
     server_name your.domain.com;
     add_header Strict-Transport-Security "max-age=31536000; includeSubdomains" always;    # 强制客户端记住以后走https
     # 其它不变
 }

重定向到owncloud

记得那个坑爹的/owncloud/slug么?如果直接访问站点,会显示一个apache运行成功的页面……

大部分人不想自己添个/owncloud/后缀。所以直接重定向过去也许不失为一个好主意。

server {
    listen 443 ssl;
    # ...
    location / {
        rewrite ^/$ $scheme://your.domain.com/owncloud/ permanent;    # /重定向到/owncloud/
        rewrite ^/owncloud$ $scheme://your.domain.com/owncloud/ permanent;    # /owncloud重定向到/owncloud/
        # 其它不变
    }
}

以上。

参考链接:>>[1][2][3][4]<<


TylerTemp

TylerTemp is a Phthon programmer. You can find me here:      

If you like my work, you can buy me a cup of beer so I can make it better!   |   Flattr this

回到顶部