树莓派云存储系统,详细步骤设置Raspberry Pi Nextcloud服务器

这个项目详细展示如何设置和配置Raspberry Pi NextCloud服务器,这可以为您搭建一个个人的 “云 “存储系统。

Raspberry-Pi-Nextcloud-v3.jpg

随着时间的推移,用第三方公司保护自己的隐私变得越来越难。这时像Nextcloud这样的软件就派上用场了,因为它可以让你完全控制自己的文件,不需要看第三方的脸色。

重要的是要记住,由于您的数据将存储在您的本地网络上,当您从本地网络之外上传和下载文件时,会使用大量的带宽。如果您的互联网连接不是很好,而且您计划在本地网络之外使用它,您可能无法获得最佳体验。

Nextcloud是我之前介绍过的owncloud软件的一个主动维护的fork。开发的时间越长,这两个软件包可能就越不一样,我建议先研究一下这两个软件,然后再决定选择哪一个。

如果你想了解更多关于Nextcloud的信息,可以到Nextcloud官方网站查看。

注意:树莓Pi上的USB端口通常无法为外部硬盘驱动器供电。如果你发现这种情况,而你的硬盘又不使用外部电源,那么我建议你为Pi购买一个供电的USB接线器。

设备清单

下面找是我在这个树莓皮nextcloud教程中使用的所有设备,点击链接可直达特别优惠购买。

建议

可选

安装Apache和PHP

要在树莓派上运行Nextcloud,首先需要安装和设置Apache和PHP。我不会太深入地去安装这些,因为它们是本教程的一个次要组件。如果你想了解更多关于设置Web服务器的知识,那么一定要按照我的教程来做。为了获得最好的性能,我建议使用Raspbian lite,但普通的Raspbian也同样可以使用。如果需要关于如何设置这一切的信息,请查看 Pi 操作系统部分的指南。

在本教程中,我将使用最新的PHP 7版本。

1. 要开始,首先用下面的命令更新我们的软件包仓库。

sudo apt update
sudo apt upgrade

2. 完成后,现在用下面的命令安装apache。

sudo apt install apache2

可以通过访问你的Pi的IP地址来检查Apache2是否已经成功运行,这应该会加载一个默认的Apache页面。如果您不确定您的Raspberry Pi的本地IP地址是什么,那么在终端中输入hostname -I。

3. 现在Apache2已经安装到了Raspberry Pi上,只需要安装PHP和它的几个包。

在本教程中,我将使用PHP 7.3,这需要你安装Raspbian Buster。可以按照我的指南升级到Raspbian buster

要安装PHP和需要的软件包,运行以下命令。

sudo apt install php7.3 php7.3-gd php7.3-sqlite3 php7.3-curl php7.3-zip php7.3-xml php7.3-mbstring php7.3-mysql php7.3-bz2 php7.3-intl php7.3-smbclient php7.3-imap php7.3-gmp

4. 现在安装了Apache和PHP后,还需要做最后一件事,那就是重新启动Apache。

可以使用下面的命令来完成这项工作。

sudo service apache2 restart 

为Nextcloud设置MySQL数据库和用户

在本节中,我将向您展示如何为Nextcloud设置一个用户和数据库,以用于存储其数据。在开始本节之前,必须已经在Raspberry Pi上设置了一个MySQL服务器。

1. 首先需要做的是打开MySQL命令行工具,运行以下命令。

我将使用这个命令行工具为MySQL创建一个用户和数据库。

sudo mysql -u root -p

2. 登录该工具后,就可以开始创建数据库了。

运行以下命令来创建这个名为nextclouddb的数据库。

CREATE DATABASE nextclouddb;

3. 下一步是创建一个用户,将使用它来与新数据库进行交互。

运行以下命令来创建一个名为 nextclouduser 的用户。确保将[PASSWORD]替换为安全密码,并将其记录下来以备日后使用。

CREATE USER 'nextclouduser'@'localhost' IDENTIFIED BY '[PASSWORD]';

4. 创建了用户后,现在需要给它与数据库交互的权限。

可以通过运行以下命令来实现。

GRANT ALL PRIVILEGES ON nextclouddb.* TO 'nextclouduser'@'localhost';

该命令授予用户 nextclouduser 在 nextclouddb 数据库及其所有表上的所有权限。

5. 最后的任务是刷新特权表。

要刷新权限,只需要运行以下命令。

FLUSH PRIVILEGES;

做完这些,现在就可以继续在树莓派上安装Nextcloud了。

在Raspberry Pi上下载Nextcloud

获取Nextcloud在你的树莓派上是很简单的, 它主要涉及到从他们的网站下载zip文件, 解压,然后做一些.

1. 要开始,先用下面的命令移动到我们的html目录。

cd /var/www/

2. 现在可以下载最新版本的Nextcloud到我们的设备上。

为此,使用wget下载最新版本到当前文件夹。

sudo wget https://download.nextcloud.com/server/releases/latest.tar.bz2

3. 现在Nextcloud已经下载到我们的Raspberry Pi上,解压存档。

要使用tar解压存档,需要使用下面的命令。

sudo tar -xvf latest.tar.bz2

4. 现在需要为Nextcloud创建一个数据目录,为了Nextcloud的初始设置,必须在html/nextcloud目录下建立这个文件夹。

通过使用以下命令创建目录。

sudo mkdir -p /var/www/nextcloud/data

5. 现在运行以下命令,让正确的用户和组控制整个Nextcloud文件夹和里面的一切。

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

6. 最后需要给它正确的权限,同样运行以下命令。

sudo chmod 750 /var/www/nextcloud/data

为Nextcloud配置Apache

接下来,需要处理Nextcloud的.htaccess文件。

由于将Nextcloud安装到默认的Apache2目录/var/www/,需要在Apache2中更改一些设置,以允许.htaccess文件覆盖设置。

为了处理Nextcloud目录,创建一个新的配置文件。

1. 创建一个文件,它将存储我们对Nextcloud的配置更改。

sudo nano /etc/apache2/sites-available/nextcloud.conf

2. 在该文件中输入以下几行:

Alias /nextcloud "/var/www/nextcloud/"

<Directory /var/www/nextcloud/>
  Require all granted
  AllowOverride All
  Options FollowSymLinks MultiViews

  <IfModule mod_dav.c>
    Dav off
  </IfModule>

</Directory>

这几行基本上是告诉Apache2如何在/var/www/nextcloud/文件夹内处理自己。这些变化将允许Apache2读取和利用Nextcloud目录下的.htaccess文件。

3. 现在,可以通过按CTRL + X键,然后按Y键,再按ENTER键保存并退出文件。

4. 文件创建后,现在需要告诉Apache使用它。

可以利用a2ensite命令,再加上nextcloud.conf来实现。

sudo a2ensite nextcloud.conf

5. 现在需要重新启动Apache2,强制它读取更新的配置文件。可以通过下面的命令轻松完成。

sudo systemctl reload apache2

完成这些工作后,现在可以继续在Nextcloud软件的Web界面中进行设置。

Nextcloud初始设置

1. 现在已经完成了这些工作,终于可以进入Nextcloud本身,开始安装它。

要开始去你的Raspberry Pi的IP地址加上/nextcloud。

如果你不知道你的Raspberry Pi的IP地址,可以使用命令hostname -I。

记得把[IPADDRESS]换成你的树莓派的IPADDRESS。

[IPADDRESS]/nextcloud

2. 现在您将看到以下页面。

在这里您需要输入您打算用于管理账户的用户名和密码(1.)。

如果您计划允许您的Nextcloud文件服务从您的网络外部访问,请确保您使用一个长而安全的密码。

接下来,需要指定数据库服务器的详细信息。要进入这些选项,你需要点击 “Storage & Datbase “选项(2.

现在需要选择要使用的数据库类型。由于我使用的是SQL服务器,点击 “MySQL/MariaDB”(3.

最后,我们需要输入数据库服务器的详细信息。我们需要输入的信息有三点。

  1. 与数据库服务器交互的的用户的用户名。(A.) 如果你使用的是与我相同的,这个设置应该被设置为nextclouduser。
  2. 上面设置的用户的密码 (B.)
  3. 最后需要设置的数据库名字 (C.) 如果你设置的数据库名称和我的一样,就是: nextclouddb.

一旦设置完成,请按 “Finish Setup”(完成设置)按钮(4.),请注意,这可能需要一些时间来完成。

Raspberry-Pi-Nextcloud-Setup-Screen.jpg

3. 在这之后,现在应该会看到下面的欢迎屏幕,这只是列出了各种程序,可以用来连接你的Nextcloud安装。

只要点击右上角的X按钮就可以继续。

02-Welcome-Screen.jpg

4. 现在你终于可以看到树莓派Nextcloud的界面了,应该花点时间熟悉Nextcloud界面的所有功能。

我不会太深入地介绍如何使用Nextcloud界面,如果你需要更多的信息,那么我建议你查看Nextcloud的支持部分。

不过,我已经在下面的截图中强调了一些需要检查的关键区域。

03-Files-Screen.jpg

移动Nextcloud的数据文件夹

现在Nextcloud已经安全安装好了,现在可以调整设置,使其既更安全又更可用。要做的第一件事就是移动数据目录,使其不在网络访问目录中。也是同样的方式,会将Nextcloud数据目录移动到一个更大的外部硬盘上,而不是将增加的负载放到Raspberry Pi的SD卡上。

1. 开始吧,为我们存储数据文件的地方建立新的目录。

为了方便起见,我将在/var/nextcloud建立一个新的文件夹,并将数据文件夹移到那里。

通过运行以下命令创建文件夹。

sudo mkdir -p /var/nextcloud

2. 有了我们创建的新文件夹,现在要把数据目录移入其中,这要感谢mv命令,很容易做到。

请注意,移动文件然后调整配置文件时,Nextcloud系统将停止运行。

要开始移动,请输入以下命令。

sudo mv -v /var/www/nextcloud/data /var/nextcloud/data

3. 现在,随着文件的移动,现在可以修改数据目录的配置,使其指向新目录。

首先,我们用下面的命令更改到Nextcloud的config目录。

cd /var/www/nextcloud/config

4. 现在可以复制配置文件,对文件进行备份,可以用下面的命令来完成。

sudo cp -p config.php config.php.bk

5. 最后让我们打开config.php文件,用nano进行编辑。

sudo nano config.php

6. 在这个文件中,需要修改以下一行:

'datadirectory' => '/var/www/nextcloud/data',

'datadirectory' => '/var/nextcloud/data',

7. 现在按CTRL + X然后按Y然后按ENTER键保存并退出文件。

8. 作为最后一个前提,应该确保www-data用户仍然拥有新文件夹的所有权。

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

你现在应该可以刷新你的网页浏览器,所有文件应该会和以前一样显示。

增加Nextcloud的最大上传大小

默认情况下,PHP的上传限制很低,只有2MB。要想改变这种情况,需要修改php.ini文件,增加限制。如果你永远只能上传2mb的文件,云存储系统就没有什么用了。

1. 要开始,需要用以下命令开始编辑配置文件。

sudo nano /etc/php/7.3/apache2/php.ini

2. 需要找到并替换以下两行字。

post_max_size = 8M
upload_max_filesize = 2M

post_max_size = 1024M
upload_max_filesize = 1024M

当然,你可以将文件大小限制设置为比20M高得多,所以可以随意将这个数字改为任何你认为是你将上传到Nextcloud的最大尺寸文件。

3. 现在,可以通过按CTRL + X键,然后按Y键,再按ENTER键保存并退出文件。

现在,需要重新启动Apache2来强制它读取更新的配置文件。可以通过下面的命令轻松完成。

sudo service apache2 restart

4. 现在重新启动网络浏览器,并开始上传文件,看到最大上传大小已成功增加。

为Nextcloud设置SSL

现在,应该真正努力设置Raspberry Pi Nextcloud服务器,使其通过HTTPS而不是普通的HTTP运行。在本教程中,我将假设你没有域名,所以我们将生成我们自己的自签名证书,而不是利用Letsencrypt等免费服务的证书。

1. 在去修改Apache2的配置之前,首先要生成自签证书,幸运的是,由于OpenSSL的存在,可以用一个命令来完成这一切。

请记住,自签证书会在你的网络浏览器中抛出错误,而且不如正确签署的证书安全,但总比没有好。如果你没有域名,这也是唯一的选择。

在生成证书之前,先做一个目录来存储它。

sudo mkdir -p /etc/apache2/ssl

2. 现在让我们在终端运行以下命令来生成证书。

sudo openssl req -x509 -nodes -days 365 -newkey rsa:4096 -keyout /etc/apache2/ssl/apache.key -out /etc/apache2/ssl/apache.crt

如果你想知道这些命令参数的具体作用,那么请阅读我们下面的小说明。

  • req:这指定了X.509证书签名请求(CSR)管理的子命令。
  • -x509: 这个选项指定我们要制作一个自签名的证书文件,而不是生成一个证书请求。
  • -nodes。这告诉openssl程序我们不想指定密码,密码会要求我们每次重启Apache时都要输入,这很麻烦。
  • -天数 365。这指定了我们希望证书保持有效的天数,过了这个天数,你将不得不生成新的证书。
  • -newkey rsa:4096。这将同时创建证书请求和新的私钥。你需要这样做,因为我们没有提前创建私钥。rsa:2048告诉OpenSSL生成一个2048位长的RSA密钥。
  • -keyout。该参数为正在创建的私钥文件的输出文件命名。
  • -out:该选项为我们正在生成的证书的输出文件命名。

在按下回车键后,您将看到以下选项,请您填写。

Country Name (2 letter code) [AU]:
State or Province Name (full name) [Some-State]:
Locality Name (eg, city) []:
Organization Name (eg, company) [Internet Widgits Pty Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []:
Email Address []:

3. 一旦填写了所有这些信息,就可以继续设置Apache2来运行SSL,并利用新生成的证书。这是一个简单的过程,但却是一个重要的过程。

首先用下面的命令启用Apache的SSL模块。

sudo a2enmod ssl

4. 现在需要修改default-ssl.conf文件,这样它就会使用我们的新证书,而不是OpenSSL在安装时生成的默认证书。

要开始修改这个文件,请运行以下命令。

sudo nano /etc/apache2/sites-available/default-ssl.conf

5. 在这个文件中,我们需要修改下面的两行,指向我们在/etc/apache2/ssl文件夹中生成的新证书。

变化

SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem
SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key

SSLCertificateFile /etc/apache2/ssl/apache.crt
SSLCertificateKeyFile /etc/apache2/ssl/apache.key

6. 我们可以按CTRL + X然后按Y然后按Enter键保存并退出文件。

7. 现在,我们可以启用default-ssl配置,并重新启动Apache来加载新配置。可以通过以下两个命令来实现。

sudo a2ensite default-ssl.conf
sudo service apache2 restart

8. 你可以通过访问你的Raspberry Pi的IP地址,前面写着https://,来测试是否有效。它将会给你一个关于它可能是一个无效证书的警告。这是正常的,因为它是一个未签名的证书。

例如,为了确保我自己的Nextcloud副本现在在SSL后面运行,我将进入以下内容。

https://192.168.1.105/nextcloud

步骤9、10、11、12都是可选的,不需要完成。

9. 为了确保你的Nextcloud设置有最好的安全性,一个可选的额外步骤是强制执行SSL,所以不能通过HTTP进行连接,如果进行了连接,它会将你重定向到HTTPS。

我们可以通过对我们的apache配置进行一些修改,首先让我们用下面的命令编辑默认文件。

sudo nano /etc/apache2/sites-available/000-default.conf

10. 用下面的代码替换这个文件中的所有文本。这将把所有的HTTP流量重定向到它的HTTPs上。

<VirtualHost *:80>
   ServerAdmin example@example

   RewriteEngine On
   RewriteCond %{HTTPS} off
   RewriteRule ^(.*)$ https://%{HTTP_HOST}$1 [R=301,L]
</VirtualHost>

11. 现在,可以按CTRL + X键,然后按Y键,再按ENTER键来保存和退出文件。

12. 在这之前,需要启用重定向模块并重新启动apache。可以运行以下两个命令轻松实现。

sudo a2enmod rewrite
sudo service apache2 restart

现在通过HTTP访问你的Raspberry Pi应该会自动重定向到HTTPS版本。例如,如果我去http://192.168.1.105,它会重定向到https://192.168.1.105。

端口转发 Nextcloud

最后,到了关于端口转发Nextcloud的部分。我不会太深入地介绍路由器端口转发的来龙去脉,但我会告诉你哪些端口需要转发。我也会提到需要对Nextcloud做哪些更改才能正常工作。在开始本节之前,您需要知道Nextcloud将只在特别指定的受信任域名下运行。这意味着你需要指定一个你想用于连接的域名,或者使用你的公共IP地址。

由于大多数家庭公共IP地址都是动态的,你需要研究设置一个动态的DNS服务,你会发现我的教程如何为你的Raspberry Pi设置一个动态的DNS服务非常方便。

1. 要添加你的域名/IP,我们需要修改NextCloud的配置文件,可以运行以下命令来实现。

sudo nano /var/www/nextcloud/config/config.php

2. 在这个文件中,你会看到一个类似下面的文本块。这是您允许Nextcloud操作的所有受信任域的数组。现在,它应该只包括你的Raspberry Pi的本地IP地址。我们将把我们的新域名/IP添加到这个数组的最后。

'trusted_domains' =>
array (
    0 => '192.168.1.105',
),

对于我的例子,我将向数组中添加 nextcloud.labno3.com。这意味着我需要递增数组ID并添加域名。一旦你添加了一个新的,它应该看起来像下面的样子。重复这个过程添加新的IP或域名。

'trusted_domains' =>
array (
    0 => '192.168.1.105',
    1 => 'nextcloud.labno3.com',
),

3. 现在,可以按CTRL + X键,然后按Y键,再按ENTER键保存并退出文件。

4. 最后你需要转发两个端口,才能最终让Nextcloud启动并运行。这两个端口分别是80端口和443端口。这些需要的协议是TCP。

希望到这里,你已经有一个完全可以操作的Raspberry Pi Nextcloud服务器。

如果你遇到任何问题或有一些与本教程相关的反馈,那么请不要犹豫,在下面留言。

平均: 5 / 5. votes: 2

到目前为止还没有投票!成为第一位评论此文章。

欢迎转载,请留下出处链接:Labno3 » 树莓派云存储系统,详细步骤设置Raspberry Pi Nextcloud服务器

赞 (2)

2 评论

8+4=

  1. Dewitt

    关于端口转发:设置了转发tcp端口80以及443后,通过内外网访问受信任域中添加过的DDNS域名无法连接到nextcloud,是因为apache有端口转发限制吗,树莓派的防火墙应该不是问题,因为来自同一网段的访问域名显示拒绝,访问ip地址就可以,大概率是端口的锅,但我不太懂这个(设置了apache的ssl,使用的花生壳以及No-ip的DDNS,这两个DDNS我都未开通ssl服务)

    回复
    • Dewitt

      博主的文章写得特别好是我唯一能按步骤搭起来的(除了MariaDB搭建参考另一个博主的) 经过多次实验,我搭建时候的问题如下:1.DDNS域名解析服务商与路由的绑定问题(某米路由及花某壳);2.ufw总会在日志里甩出各种拦截,于是我弃用了UFW转投了自带的iptables,只需要设置规则并设置规则开机自启,完美;3.之前我为了方便在树莓派里还搭了威皮恩,修改某conf文件时导致DNS污染,全体网络设备罢工?

      回复