0%

Ubuntu + LEMP + NextCloud 搭建自己云盘

前言

由于众说周知的原因使用Dropbox等等一大批云盘有些麻烦 ,而国内的云盘也越来越少还有限速,而且数据安全性得不到保障(9秒视频)。而拥有一台vps的我们怎能放弃使用这个优良的资源呢,在综合测试比价Syncthing,NextCloud,OwnCloud之后我果断选择了NextCloud。发现网上大多数教程是针对lamp的,这里便介绍下Ubuntu+Nginx+MariaDB+PHP-FPM的lemp(lnmp)运行环境下的安装吧。

DigitalOcean注册

我们的vps是采用的DigitalOcean家的,对于DigitalOceand的注册我在DigitalOcean Ubuntu 配置 shadowsocks这篇文章中已经说过了,这里就不在多说了。只是提一点,如果你还没有DigitalOcean帐号的话,通过这里注册 通过这里注册 通过这里注册,DigitalOcean会送你10美元的账号余额。(这是DigitalOcean的一个互惠互助的活动,如果您通过我的链接注册的话,DO会送你10美元,我也会获得一点点的佣金)

NextCloud介绍

NextCloud是开源的、可以用来搭建自己的文件同步和共享的私有云服务器,其实是OwnCloud的一个分支。多说无益,上官网。
NextCloud官网

MariaDB数据库

这里我们用的是 MariaDB ,作为是 MySQL 的开源分支,它命令和用法几乎MySQL完全一样。
首先更新软件源

1
sudo apt-get update

更新软件

1
sudo apt-get upgrade

安装MariaDB

1
sudo apt-get install mariadb-server

启动MariaDB

1
sudo systemctl start mysql

执行初始化安全脚本

1
sudo mysql_secure_installation

因为默认root密码为空,所以进入后回车即可,然后设置root密码和其他内容

1
2
3
4
5
6
7
Set root password? [Y/n] <– 是否设置root用户密码,输入y并回车
New password: <– 设置root用户的密码
Re-enter new password: <– 再输入一次你设置的密码
Remove anonymous users? [Y/n] <– 是否删除匿名用户,输入y并回车
Disallow root login remotely? [Y/n] <–是否禁止root远程登录,输入y并回车
Remove test database and access to it? [Y/n] <– 是否删除test数据库,输入y并回车
Reload privilege tables now? [Y/n] <– 是否重新加载权限表,输入y并回车

登陆MariaDB命令行

1
sudo mysql -u root -p

NextCloud创建一个数据库和用户

1
2
3
4
MariaDB [(none)]> CREATE DATABASE nextcloud;
MariaDB [(none)]> GRANT ALL PRIVILEGES ON nextcloud.* TO 'nextcloud'@'localhost' IDENTIFIED BY 'password';
MariaDB [(none)]> FLUSH PRIVILEGES;
MariaDB [(none)]> \q

创建数据库nextcloud,用户名nextcloud,密码password

PHP

安装PHP和相关模块

1
sudo apt-get -y install php-fpm php-cli php-json php-curl php-imap php-gd php-mysql php-xml php-zip php-intl php-mcrypt php-imagick php-mbstring

配置PHP

1
2
3
4
5
sudo sed -i "s/memory_limit = .*/memory_limit = 512M/" /etc/php/7.0/fpm/php.ini
sudo sed -i "s/;date.timezone.*/date.timezone = UTC/" /etc/php/7.0/fpm/php.ini
sudo sed -i "s/;cgi.fix_pathinfo=1/cgi.fix_pathinfo=1/" /etc/php/7.0/fpm/php.ini
sudo sed -i "s/upload_max_filesize = .*/upload_max_filesize = 200M/" /etc/php/7.0/fpm/php.ini
sudo sed -i "s/post_max_size = .*/post_max_size = 200M/" /etc/php/7.0/fpm/php.ini

重启PHP-FPM

1
sudo systemctl restart php7.0-fpm

下载NextCloud

访问 NextCloud 官方网站 的下载地址 ,如下图,在这里能找到 NextCloud 的所有版本。

现在最新的NextCloud版本是v12.0.5(2018.1.30更新):,NextCloud 的最新版本为 12.0.5。提供 .tar.bz2 和 .zip 两种压缩包,任选一种即可。

进入/var/www/目录中

1
cd /var/www/

下载

1
sudo wget https://download.nextcloud.com/server/releases/nextcloud-12.0.5.tar.bz2

解压并删除

1
2
sudo tar jxf nextcloud-12.0.5.tar.bz2
sudo rm nextcloud-12.0.5.tar.bz2

设置nextcloud的目录权限

1
sudo chown -R www-data: /var/www/nextcloud

设置nextcloud域名

在域名管理平台新增一条 A 记录,指向你所使用的服务器公网 IP 地址,将 cloud.example.com 域名绑定到你自己server ip上。

添加https

我在在Ubuntu上获取Let’s Encrypt免费证书 为网站使用https这篇博文中已经发过,可以去看下。

配置nginx

nginx的配置文件是/etc/nginx/nginx.conf文件, /etc/nginx/conf.d目录下的文件与/etc/nginx/default.d目录(实际上这个目录下的是备份文件)下的文件,权限方面大约是nginx.conf > conf.d 目录 > default.d 目录
其中conf.d能设置server,但不能设置http,—如果其中的server设置和nginx.conf冲突,nginx会出错。 而default.d文件夹中的配置不能设置server
我们的vps上有多个站点,所以强烈建议在conf.d目录下为每一个域名建立一个单独的配置文件,并用域名为配置文件命名。因为nginx.conf文件中默认有include include /etc/nginx/conf.d/*.conf;所以我们直接在conf.d目录下创建配置文件就好了。

进入conf.d目录并创建配置文件

1
2
cd /etc/nginx/conf.d/
sudo vim cloud.example.com.conf

输入下面的配置

/etc/nginx/conf.d/cloud.example.com.conf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
server {
listen 80;
server_name cloud.example.com; #修改为自己的域名
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl http2;
server_name cloud.example.com; #修改为自己的域名
root /var/www/nextcloud;

ssl on;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; #
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; #这两条是使用let encrypt证书

add_header X-Content-Type-Options nosniff;
add_header X-Frame-Options "SAMEORIGIN";
add_header X-XSS-Protection "1; mode=block";
add_header X-Robots-Tag none;
add_header X-Download-Options noopen;
add_header X-Permitted-Cross-Domain-Policies none;

access_log /var/log/nginx/nextcloud.access.log;
error_log /var/log/nginx/nextcloud.error.log;

location = /robots.txt {
allow all;
log_not_found off;
access_log off;
}

location = /.well-known/carddav {
return 301 $scheme://$host/remote.php/dav;
}
location = /.well-known/caldav {
return 301 $scheme://$host/remote.php/dav;
}

client_max_body_size 512M;
fastcgi_buffers 64 4K;
gzip off;

error_page 403 /core/templates/403.php;
error_page 404 /core/templates/404.php;

location / {
rewrite ^ /index.php$uri;
}

location ~ ^/(?:build|tests|config|lib|3rdparty|templates|data)/ {
deny all;
}

location ~ ^/(?:\.|autotest|occ|issue|indie|db_|console) {
deny all;
}

location ~^/(?:index|remote|public|cron|core/ajax/update|status|ocs/v[12]|updater/.+|ocs-provider/.+|core/templates/40[34])\.php(?:$|/) {
include fastcgi_params;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param HTTPS on;
#Avoid sending the security headers twice
fastcgi_param modHeadersAvailable true;
fastcgi_param front_controller_active true;
fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
fastcgi_intercept_errors on;
fastcgi_request_buffering off;
}

location ~ ^/(?:updater|ocs-provider)(?:$|/) {
try_files $uri/ =404;
index index.php;
}

location ~* \.(?:css|js)$ {
try_files $uri /index.php$uri$is_args$args;
add_header Cache-Control "public, max-age=7200";
add_header X-Content-Type-Options nosniff;
add_header X-Frame-Options "SAMEORIGIN";
add_header X-XSS-Protection "1; mode=block";
add_header X-Robots-Tag none;
add_header X-Download-Options noopen;
add_header X-Permitted-Cross-Domain-Policies none;
# Optional: Don't log access to assets
access_log off;
}

location ~* \.(?:svg|gif|png|html|ttf|woff|ico|jpg|jpeg)$ {
try_files $uri /index.php$uri$is_args$args;
access_log off;
}

location ~ /\.ht {
deny all;
}

}

测试Nginx配置文件

1
sudo nginx -t

重启nginx服务

1
sudo systemctl restart nginx

进入NextCloud

在浏览器中输入绑定的域名,然后在页面中填写

  • 用户名:uesrname (创建管理员用户名)
  • 密码:password (创建管理员密码)
  • 数据库用户:nextcloud (填写实际设置的用户名)
  • 数据库密码:password (填写实际设置的密码)
  • 数据库名:nextcloud (填写实际创建的数据库名)
  • localhost:数据库服务器地址,不用更改。

现在大家可以愉快的使用自己的网盘啦(之后会添加NextCloud插件的使用方式的)