Raspberry Pi OwnCloud:您自己的个人云存储

转载 Mar 14, 2020

转载自 Pi My Life Up ,作者 Gus

在这个项目中,我们将制造一个 Raspberry Pi Owncloud 服务器,该服务器可以充当您自己的个人云存储。

Raspberry Pi Owncloud

随着对隐私的保护越来越难,您可能正在考虑将文件移至私有云存储。如果是这种情况,那么本教程非常适合您。

重要的是要记住,由于您的数据将存储在本地网络中,因此如果从网络外部上载和下载文件,最终将占用更多带宽。

本教程将引导您完成安装和访问 Owncloud 所需的所有知识。

如果您好奇并想了解有关 Owncloud 软件的更多信息,请确保在Owncloud.org 上访问其网站。

设备

我在个人云存储设置中使用了以下设备。

推荐的

树莓派

如果您使用的是 Raspberry Pi 2 或 B +,则为 SD 卡(建议使用 8GB +)或Micro SD 卡

以太网线Wifi 加密狗

外置硬盘或 USB 驱动器

可选的

覆盆子皮套

USB 键盘

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. 现在我们需要获取 GIDUIDUUID,因为我们将很快使用它们。为 GID 输入以下命令:

id -g www-data

4. 现在为 UID 输入以下命令:

id -u www-data

5. 同样,如果我们获得了硬盘驱动器的 UUID,即使您将其插入其他 USB 端口,Pi 也会记住该驱动器。

ls -l /dev/disk/by-uuid
UUID硬盘驱动器

复制最后一个条目的浅蓝色字母和数字(末尾应带有 -> ../../sda1 之类的内容)。

6. 现在,将驱动器添加到 fstab 文件中,以便它将以正确的权限启动。

sudo nano /etc/fstab

7. 现在,将以下行添加到文件底部,使用上面得到的值更新 UIDGUID 和 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注册

如果您需要更新,但发现内部更新程序无法正常工作,则可能需要手动进行。您可以在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 文件的示例。

外部IP更改示例

完成后,通过输入以下内容重新启动 Nginx 服务:

sudo service nginx restart

请务必查看我的端口转发指南,并将以下端口 443 用于内部端口,我建议将随机端口用作外部端口。设置外部端口时,请确保尚未为特定程序保留该端口。

从外部连接到 Owncloud 服务器时,您需要确保使用 https,否则将在浏览器中收到无效的请求。

设置端口转发非常容易,并且可以让您随时随地访问您的个人云。同样,完成此操作后,您仍然仍然可以通过本地 IP 进行连接。

我希望本教程可以帮助您制作自己的 Raspberry Pi OwnCloud。如果您有任何麻烦,请留下反馈,或者如果我有任何遗漏,请随时在下面给我们留言。

知识共享许可协议
本站文章除特别声明外,均采用 知识共享署名 - 非商业性使用 - 相同方式共享 4.0 国际许可协议 进行许可。
您的支持将鼓励我们继续创作!

Who Am I STEM Club

博罗中学 WAI 科技社官方账号

Great! You've successfully subscribed.
Great! Next, complete checkout for full access.
Welcome back! You've successfully signed in.
Success! Your account is fully activated, you now have access to all content.