Raspberry Pi OwnCloud:您自己的个人云存储
转载自 Pi My Life Up ,作者 Gus
在这个项目中,我们将制造一个 Raspberry Pi Owncloud 服务器,该服务器可以充当您自己的个人云存储。

随着对隐私的保护越来越难,您可能正在考虑将文件移至私有云存储。如果是这种情况,那么本教程非常适合您。
重要的是要记住,由于您的数据将存储在本地网络中,因此如果从网络外部上载和下载文件,最终将占用更多带宽。
本教程将引导您完成安装和访问 Owncloud 所需的所有知识。
如果您好奇并想了解有关 Owncloud 软件的更多信息,请确保在Owncloud.org 上访问其网站。
设备
我在个人云存储设置中使用了以下设备。
推荐的
如果您使用的是 Raspberry Pi 2 或 B +,则为 SD 卡(建议使用 8GB +)或Micro SD 卡
外置硬盘或 USB 驱动器
可选的
注意: Raspberry Pi 上的 USB 端口很可能无法为外部硬盘驱动器供电,因此您可能需要投资有源的 USB 集线器。
视频
如果您是个有远见的人,并且想观看我们的视频,以了解如何将本教程放到一起,请查看下面的视频。
它将带您了解启动和运行 Raspberry Pi Owncloud 服务器所需的一切。
设置 Raspberry Pi Owncloud 服务器
首先,您需要安装带有 Raspbian 的 Raspberry Pi。如果您尚未安装 Raspbian,请查阅我们的指南,了解如何通过 NOOBS(全新的即用型软件)安装 Raspbian。
您可以通过多种方式将 Owncloud 安装到 Raspberry Pi 上。在此特定教程中,我们将下载 Web 服务器(Nginx)和 Owncloud。
1. 首先,在 Pi 的命令行中或通过 SSH,我们需要更新 Raspberry Pi 及其软件包,方法是输入:
sudo apt-get update
sudo apt-get upgrade
2. 现在,我们需要打开 Raspi Config Tool 来更改一些设置。
sudo raspi-config
3. 在这里,我们需要更改一些设置。
- 在国际化选项中 -> 更改本地,将区域设置更改为 en_US.UTF8。
- 在高级选项 -> 内存分割中将内存分割更改为 16m。
- 将超频更改为中。
4. 将 www-data 用户添加到 www-data 组。
sudo usermod -a -G www-data www-data
这些说明已更新为可与 Raspbian Buster 一起使用,如果您使用的是早期版本,那么我强烈建议您先升级到 Raspbian Buster,然后再继续。
您可以按照我们的指南从 Raspbian Stretch 升级到 Buster。
5. 一旦运行 Raspbian Buster,就可以安全地继续本教程。
在此步骤中,我们将安装运行 Owncloud 所需的所有软件包。这包括 php7.2 及其 OwnCloud 依赖的众多模块。
运行以下命令以安装我们需要的一切。
sudo apt-get install nginx openssl ssl-cert php7.2-cli php7.2-sqlite3 php7.2-gd php7.2-common php7.2-cgi sqlite3 php-pear curl libapr1 libtool curl libcurl4-openssl-dev php7.2-xml php7.2 php7.2-dev php7.2-curl php7.2-gd php7.2-fpm memcached php-memcache php7.2-zip php7.2-intl php7.2-mbstring varnish
6. 现在我们需要创建一个 SSL 证书,您可以通过运行以下命令来做到这一点:
sudo openssl req $@ -new -x509 -days 730 -nodes -out /etc/nginx/cert.pem -keyout /etc/nginx/cert.key
只需输入询问每个问题的相关数据。
7. 除了 SSL 证书,我们还需要为自己生成一个自定义 dhparam 文件。该文件有助于确保我们的 SSL 连接保持安全,默认情况下,它将使用几乎不那么安全的默认连接。
要生成 4096 字节长的 DH Param,请在 Raspberry Pi 上运行以下命令。此过程将花费很长时间,最多需要 16 个小时。将 -dsaparam 标志添加到命令将有助于加快过程,但是可以说安全性较低。
sudo openssl dhparam -out /etc/nginx/dh4096.pem 4096
8. 现在,我们需要对刚刚生成的三个证书文件进行 chmod。
sudo chmod 600 /etc/nginx/cert.pem
sudo chmod 600 /etc/nginx/cert.key
sudo chmod 600 /etc/nginx/dh4096.pem
9. 让我们清除服务器配置文件,因为我们将在其中复制并粘贴自己的版本。
sudo sh -c "echo '' > /etc/nginx/sites-available/default"
10. 现在,让我们配置 Web 服务器配置,以使其正确运行 Owncloud。
sudo nano /etc/nginx/sites-available/default
11. 现在,只需将以下代码复制并粘贴到文件中。
upstream php-handler {
server unix:/var/run/php/php7.2-fpm.sock;
}
server {
listen 80;
server_name _;
#Allow letsencrypt through
location /.well-known/acme-challenge/ {
root /var/www/owncloud;
}
# enforce https
location / {
return 301 https://$host$request_uri;
}
}
server {
listen 443 ssl http2;
server_name _;
ssl_certificate /etc/nginx/cert.pem;
ssl_certificate_key /etc/nginx/cert.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:AES256+EECDH:AES256+EDH';
ssl_dhparam /etc/nginx/dh4096.pem;
ssl_prefer_server_ciphers on;
keepalive_timeout 70;
ssl_stapling on;
ssl_stapling_verify on;
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;
root /var/www/owncloud/;
location = /robots.txt {
allow all;
log_not_found off;
access_log off;
}
# The following 2 rules are only needed for the user_webfinger app.
# Uncomment it if you're planning to use this app.
#rewrite ^/.well-known/host-meta /public.php?service=host-meta last;
#rewrite ^/.well-known/host-meta.json /public.php?service=host-meta-json last;
location = /.well-known/carddav {
return 301 $scheme://$host/remote.php/dav;
}
location = /.well-known/caldav {
return 301 $scheme://$host/remote.php/dav;
}
# set max upload size
client_max_body_size 512M;
fastcgi_buffers 8 4K;
fastcgi_ignore_headers X-Accel-Buffering;
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)/ {
return 404;
}
location ~ ^/(?:\.|autotest|occ|issue|indie|db_|console) {
return 404;
}
location ~ ^/(?:index|remote|public|cron|core/ajax/update|status|ocs/v[12]|updater/.+|ocs-provider/.+|core/templates/40[34])\.php(?:$|/) {
fastcgi_split_path_info ^(.+\.php)(/.*)$;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param HTTPS on;
fastcgi_param modHeadersAvailable true;
fastcgi_param front_controller_active true;
fastcgi_read_timeout 180;
fastcgi_pass php-handler;
fastcgi_intercept_errors on;
fastcgi_request_buffering off; #Available since NGINX 1.7.11
}
location ~ ^/(?:updater|ocs-provider)(?:$|/) {
try_files $uri $uri/ =404;
index index.php;
}
location ~ \.(?:css|js)$ {
try_files $uri /index.php$uri$is_args$args;
add_header Cache-Control "max-age=15778463";
# Before enabling Strict-Transport-Security headers please read into this topic first.
#add_header Strict-Transport-Security "max-age=15552000; includeSubDomains";
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 off;
}
location ~ \.(?:svg|gif|png|html|ttf|woff|ico|jpg|jpeg|map)$ {
add_header Cache-Control "public, max-age=7200";
try_files $uri /index.php$uri$is_args$args;
access_log off;
}
}
12. 现在只需保存并退出。
13. 现在完成了,我们需要更新一些其他配置,首先通过输入打开 PHP 配置文件。
sudo nano /etc/php/7.2/fpm/php.ini
14. 在此文件中,我们要查找并更新以下几行。(Ctrl + w 允许您搜索)
upload_max_filesize = 2000M
post_max_size = 2000M
15. 完成后,保存然后退出。现在,我们还需要编辑 dphys-swapfile。为此,请输入以下内容打开文件:
sudo nano /etc/dphys-swapfile
16. 现在将 conf_swapsize 行更新为以下内容:
CONF_SWAPSIZE = 512
17. 输入以下命令重新启动树莓派:
sudo reboot
18. Pi 重新启动后,您将需要在 Raspberry Pi 上安装 Owncloud。通过输入以下命令来执行此操作:
sudo mkdir -p /var/www/owncloud
cd /var/www/
curl https://download.owncloud.org/community/owncloud-10.2.1.tar.bz2 | sudo tar -jxv
sudo chown -R www-data:www-data /var/www
19. 现在,我们需要打开.user.ini 文件,以实施我们在本教程前面所做的一些更改。
sudo nano /var/www/owncloud/.user.ini
20. 在此处更新以下值,使其为 2000M:
upload_max_filesize=2000M
post_max_size=2000M
memory_limit=2000M
21. 现在,我们应该能够通过您的 PI 的 IP 地址连接到 Owncloud。
在设置管理员帐户之前,您可能需要安装外部驱动器,因此您的 Raspberry Pi Owncloud Server 有很多磁盘空间。只需按照下一节中的说明进行操作即可。
安装和设置驱动器
设置外部驱动器虽然相对简单,但有时无法正常运行。
这些说明用于安装并允许 Owncloud 将文件存储到外部硬盘驱动器上。
1. 首先,如果您有 NTFS 驱动器,则需要输入以下内容来安装 NTFS 软件包:
sudo apt-get install ntfs-3g
2. 现在让我们建立一个可以挂载的目录。
sudo mkdir /media/ownclouddrive
3. 现在我们需要获取 GID,UID 和 UUID,因为我们将很快使用它们。为 GID 输入以下命令:
id -g www-data
4. 现在为 UID 输入以下命令:
id -u www-data
5. 同样,如果我们获得了硬盘驱动器的 UUID,即使您将其插入其他 USB 端口,Pi 也会记住该驱动器。
ls -l /dev/disk/by-uuid

复制最后一个条目的浅蓝色字母和数字(末尾应带有 -> ../../sda1 之类的内容)。
6. 现在,将驱动器添加到 fstab 文件中,以便它将以正确的权限启动。
sudo nano /etc/fstab
7. 现在,将以下行添加到文件底部,使用上面得到的值更新 UID,GUID 和 UUID。(以下内容应全部放在一行上)
UUID=DC72-0315 /media/ownclouddrive auto nofail,uid=33,gid=33,umask=0027,dmask=0027,noatime 0 0
8. 重新启动 Raspberry Pi,驱动器应自动安装。如果安装了它们,我们都很好。
注意:如果在启动时出现错误,指出 Pi 处于紧急模式,则可能意味着 fstab 条目存在问题。只需编辑 fstab 文件(sudo nano /etc/fstab
)并删除添加的行,或者查找错误并进行修复。
基本首次设置
我将在此处简要介绍设置 Owncloud Raspberry Pi 的基础知识。如果您想了解更多信息,我强烈建议您在其网站上查看这些手册,您可以在 Owncloud 手册站点上找到它们。
1. 在您的浏览器中,输入 Pi 的 IP 地址(本例中为 192.168.1.116)。
2. 转到 IP 后,您想获得证书错误,只需将其添加到例外列表中即可,因为这样可以安全进行。
3. 首次打开 ownCloud 时,应该显示一个简单的设置屏幕,并且没有错误。
4. 输入所需的用户名和密码。
5. 单击存储和数据库,然后输入外部驱动器 /media/ownclouddrive(如果未设置外部驱动器,请跳过此步骤)。
6. 单击完成设置。

如果您需要更新,但发现内部更新程序无法正常工作,则可能需要手动进行。您可以在owncloud 的更新手册页面上找到有关如何更新的详细过程。
端口转发和外部访问
如果您想访问本地网络以外的云驱动器,则需要设置端口转发并对我们的配置文件进行一些更改。
首先,我们需要返回默认文件并更改 server_name 值(其中有 2 个)。将它们更新为您的外部 IP 地址。您可以用我的 IP 地址获得 IP。
如果您有动态 IP,则可能需要设置动态 DNS 并将其用作您的地址。您可以在我的端口转发指南中找到有关此信息。
输入以下内容以调出我们的默认服务器文件:
sudo nano /etc/nginx/sites-available/default
一旦更新了服务器文件中的 IP,就需要将外部 IP 添加到受信任的 IP 列表中,并确保 Owncloud 不会覆盖它。为此,请打开 Owncloud 配置文件并输入:
sudo nano /var/www/owncloud/config/config.php
在这里,将新项目添加到 “受信任的域” 阵列(这将是您的外部 IP 地址)。您的新条目应如下所示(x 只是占位符)。
1 => 'xxx.xxx.xxx.xxx',
最后,将 overwrite.cli.url 行的 URL 更新为您的 IP 地址。它应该看起来像这样。
'overwrite.cli.url' => 'https://xxx.xxx.xxx.xxx',
以下是完成的 config.txt 文件的示例。

完成后,通过输入以下内容重新启动 Nginx 服务:
sudo service nginx restart
请务必查看我的端口转发指南,并将以下端口 443 用于内部端口,我建议将随机端口用作外部端口。设置外部端口时,请确保尚未为特定程序保留该端口。
从外部连接到 Owncloud 服务器时,您需要确保使用 https,否则将在浏览器中收到无效的请求。
设置端口转发非常容易,并且可以让您随时随地访问您的个人云。同样,完成此操作后,您仍然仍然可以通过本地 IP 进行连接。
我希望本教程可以帮助您制作自己的 Raspberry Pi OwnCloud。如果您有任何麻烦,请留下反馈,或者如果我有任何遗漏,请随时在下面给我们留言。