野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 476|回复: 3

[经验\资料] 野火【鲁班猫】卡片电脑创意氛围赛(第二期)超级家用网盘...

[复制链接]
发表于 2023-12-8 19:01:27 | 显示全部楼层 |阅读模式
本帖最后由 HonestQiao 于 2023-12-25 00:55 编辑

一、项目简介
做家用网盘,有多种开源方案,这次在鲁班猫上,我选择的是NextCloud。
Nextcloud是一套用用于建立完整的网盘的方案,服务端基于PHP+MySQL来构建,其功能与DropBox类型,包括服务端和客户端完全开源。
这篇分享,记录了在鲁班猫上搭建NextCloud网盘系统的完成过程。搭建完成后,通过WEB及WebDav提供服务,可以直接通过浏览器访问,也可以在手机上或者电脑上,通过客户端访问。
野火论坛202312091147193833..png

二、方案规划
1. 硬件:鲁班猫1网络版
2. 存储:256G SD卡,可考虑外接USB3.0移动硬盘,提供更大的存储空间
3. 系统:Ubuntu 22.04
4. 软件:NextCloud ,运行于 LNMP 网络服务环境
4. 目录规划:
1) 网盘安装目录:/home/wwwroot/default/nextcloud
2) 存储目录:/media/256G/nextcloud/data

三、硬件选择
硬件方面,我选择的是鲁班猫1网络版,4G内存,32G eMMC
野火论坛202312082022378461..png
这款鲁班猫1网络版带有2个千兆网口,非常适合做网络服务设备。

野火论坛202312091026349719..jpg
野火论坛202312091026406432..jpg

存储卡:存储卡选择的是闪迪 class10 256G的卡:
野火论坛202312091047123990..png

四、系统环境准备
1. 操作系统:参考鲁班猫官方资料,安装Ubuntu22.04即可

2. 存储卡:
将256G存储卡安装到SD卡插槽后,线使用sudo fdisk -l查看挂接的设备:
  1. sudo fdisk -l
复制代码

野火论坛202312091030195034..png

从上述输出可以看到,SD卡的设备为:/dev/mmcblk1,然后使用sudo fdisk /dev/mmcblk1分区
  1. sudo fdisk /dev/mmcblk1
复制代码
在fdisk分区界面,依次使用:d n p w来创建新的分区,创建完成后,使用 lsblk  -f 查看新的设备信息:
野火论坛202312091033249016..png

记住上面的 ef开头的uuid,在/etc/fstab中添加下面的挂载信息:
  1. UUID="ef3e45ec-d4bf-4bb8-b2b4-ed6de69dfea6" /media/256G ext4 defaults 0 0
复制代码

然后使用下面的命令挂载:
  1. sudo mkdir /media/256G
  2. sudo mount -a
  3. sudo chmod 777 /media/256G
复制代码
挂载完成后,使用mount查看挂载情况:
野火论坛202312091035302916..png

从上面的输出可以看到,SD卡已经挂载到了/media/256G,后续就可以在NextCloud中使用做为存储空间。

3. LNMP运行环境准备
简介部分说了,Nextcloud服务端基于PHP+MySQL来构建,通过WEB及WebDav提供服务,因此需要在鲁班猫上,提供一套能够运行PHP和WEB环境,并切需要MySQL数据库提供支持。

要在鲁班猫的Ubuntu系统中安装WEB+PHP+MySQL运行环境,可以使用apt安装,但最好的方式,是使用LNMP一键安装包。LNMP一键安装包是一个用Linux Shell编写的可以为CentOS/RadHat/Fedora、Debian/Ubuntu/Raspbian VPS或独立主机安装LNMP、LNMPA、LAMP生产环境的Shell程序。

我会建立一个~/Projects/nextcloud目录,用于存放部署NextCloud相关的文件,然后按照下面步骤进入安装流程:
  1. mkdir -p ~/Projects/nextcloud
  2. cd ~/Projects/nextcloud
  3. wget https://soft.lnmp.com/lnmp/lnmp2.0.tar.gz
  4. tar xzvf lnmp2.0.tgz
  5. cd lnmp2.0
  6. sudo ./install.sh
复制代码
上述步骤执行后,会提示如下界面,让选择MySQL服务版本,建议选择MariaDB 10.6.13:
野火论坛202312091041047093..png
注意设置好密码,并记住。上面123456只是为了演示,请务必设置一个复杂的密码,确保安全。


然后选择PHP版本,建议选择PHP8.2版本:
野火论坛202312091041514710..png

然后选择Memory Allocator,建议选择TCMalloc:
野火论坛202312091042493732..png

选择完成后,就可以开始安装了:
野火论坛202312091043184722..png

需要注意的是,因为是从源码安装,所以安装的过程比较长(几个小时),请耐心等待安装完成:
野火论坛202312091043535193..png

安装完成后,各项服务都做好了配置,并自动启动:
野火论坛202312091044197829..png

可以使用下面的命令,检测安装的核心软件包:
野火论坛202312091044463353..png

此时,可以访问 http://鲁班猫IP/ ,即可查看到如下的界面:
野火论坛202312091048122143..png

点击其中的phpMyAdmin,就可以访问在线MySQl管理工具:
野火论坛202312091048474192..png
登录后,就能进入管理界面了:
野火论坛202312091049242054..png

在MySQL中,需要添加一个专用的用户给NextCloud,步骤如下:
野火论坛202312091050256845..png
野火论坛202312091050341621..png

LNMP环境准备好了,就可以开始正式的网盘系统搭建了。

五、网盘系统搭建
1. NextCloud文件部署
要安装NextCloud,可以使用webinstall脚本,也可以直接下载压缩包。
使用webinstall脚本,需要在安装过程中下载安装包,可能会超时,所以使用压缩包安装较好。
具体的步骤如下:
  1. cd ~/Projects/nextcloud/
  2. wget https://download.nextcloud.com/server/releases/latest.zip
  3. unzip latest.zip
  4. sudo chown -R www:www nextcloud
  5. sudo cp -a nextcloud /home/wwwroot/default/
复制代码

经过上面的步骤,nextcloud的文件,就放置到了WEB环境的根目录下的nextcloud中了。


2. Nginx环境设置
正式安装之前,需要进行Nginx的配置,使用下面的命令编辑nextcloud.conf添加配置
  1. sudo vim /usr/local/nginx/conf/nextcloud.conf
复制代码
  1. location ^~ /.well-known {
  2.         # The rules in this block are an adaptation of the rules
  3.         # in the Nextcloud `.htaccess` that concern `/.well-known`.

  4.         location = /.well-known/carddav { return 301 /nextcloud/remote.php/dav/; }
  5.         location = /.well-known/caldav  { return 301 /nextcloud/remote.php/dav/; }

  6.         location /.well-known/acme-challenge    { try_files $uri $uri/ =404; }
  7.         location /.well-known/pki-validation    { try_files $uri $uri/ =404; }

  8.         # Let Nextcloud's API for `/.well-known` URIs handle all other
  9.         # requests by passing them to the front-end controller.
  10.         return 301 /nextcloud/index.php$request_uri;
  11.     }

  12.     location ^~ /nextcloud {
  13.         # set max upload size and increase upload timeout:
  14.         client_max_body_size 512M;
  15.         client_body_timeout 300s;
  16.         fastcgi_buffers 64 4K;

  17.         # Enable gzip but do not remove ETag headers
  18.         gzip on;
  19.         gzip_vary on;
  20.         gzip_comp_level 4;
  21.         gzip_min_length 256;
  22.         gzip_proxied expired no-cache no-store private no_last_modified no_etag auth;
  23.         gzip_types application/atom+xml text/javascript application/javascript application/json application/ld+json application/manifest+json application/rss+xml application/vnd.geo+json application/vnd.ms-fontobject application/wasm application/x-font-ttf application/x-web-app-manifest+json application/xhtml+xml application/xml font/opentype image/bmp image/svg+xml image/x-icon text/cache-manifest text/css text/plain text/vcard text/vnd.rim.location.xloc text/vtt text/x-component text/x-cross-domain-policy;

  24.         # Pagespeed is not supported by Nextcloud, so if your server is built
  25.         # with the `ngx_pagespeed` module, uncomment this line to disable it.
  26.         #pagespeed off;

  27.         # The settings allows you to optimize the HTTP2 bandwidth.
  28.         # See https://blog.cloudflare.com/delivering-http-2-upload-speed-improvements/
  29.         # for tuning hints
  30.         client_body_buffer_size 512k;

  31.         # HSTS settings
  32.         # WARNING: Only add the preload option once you read about
  33.         # the consequences in https://hstspreload.org/. This option
  34.         # will add the domain to a hardcoded list that is shipped
  35.         # in all major browsers and getting removed from this list
  36.         # could take several months.
  37.         #add_header Strict-Transport-Security "max-age=15768000; includeSubDomains; preload;" always;

  38.         # HTTP response headers borrowed from Nextcloud `.htaccess`
  39.         add_header Referrer-Policy                   "no-referrer"       always;
  40.         add_header X-Content-Type-Options            "nosniff"           always;
  41.         add_header X-Frame-Options                   "SAMEORIGIN"        always;
  42.         add_header X-Permitted-Cross-Domain-Policies "none"              always;
  43.         add_header X-Robots-Tag                      "noindex, nofollow" always;
  44.         add_header X-XSS-Protection                  "1; mode=block"     always;

  45.         # Remove X-Powered-By, which is an information leak
  46.         fastcgi_hide_header X-Powered-By;

  47.         # Specify how to handle directories -- specifying `/nextcloud/index.php$request_uri`
  48.         # here as the fallback means that Nginx always exhibits the desired behaviour
  49.         # when a client requests a path that corresponds to a directory that exists
  50.         # on the server. In particular, if that directory contains an index.php file,
  51.         # that file is correctly served; if it doesn't, then the request is passed to
  52.         # the front-end controller. This consistent behaviour means that we don't need
  53.         # to specify custom rules for certain paths (e.g. images and other assets,
  54.         # `/updater`, `/ocs-provider`), and thus
  55.         # `try_files $uri $uri/ /nextcloud/index.php$request_uri`
  56.         # always provides the desired behaviour.
  57.         index index.php index.html /nextcloud/index.php$request_uri;

  58.         # Rule borrowed from `.htaccess` to handle Microsoft DAV clients
  59.         location = /nextcloud {
  60.             if ( $http_user_agent ~ ^DavClnt ) {
  61.                 return 302 /nextcloud/remote.php/webdav/$is_args$args;
  62.             }
  63.         }

  64.         # Rules borrowed from `.htaccess` to hide certain paths from clients
  65.         location ~ ^/nextcloud/(?:build|tests|config|lib|3rdparty|templates|data)(?:$|/)    { return 404; }
  66.         location ~ ^/nextcloud/(?:\.|autotest|occ|issue|indie|db_|console)                  { return 404; }

  67.         # Ensure this block, which passes PHP files to the PHP process, is above the blocks
  68.         # which handle static assets (as seen below). If this block is not declared first,
  69.         # then Nginx will encounter an infinite rewriting loop when it prepends
  70.         # `/nextcloud/index.php` to the URI, resulting in a HTTP 500 error response.
  71.         location ~ \.php(?:$|/) {
  72.             # Required for legacy support
  73.             rewrite ^/nextcloud/(?!index|remote|public|cron|core\/ajax\/update|status|ocs\/v[12]|updater\/.+|ocs-provider\/.+|.+\/richdocumentscode\/proxy) /nextcloud/index.php$request_uri;

  74.             fastcgi_split_path_info ^(.+?\.php)(/.*)$;
  75.             set $path_info $fastcgi_path_info;

  76.             try_files $fastcgi_script_name =404;

  77.             include fastcgi_params;
  78.             fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
  79.             fastcgi_param PATH_INFO $path_info;
  80.             #fastcgi_param HTTPS on;

  81.             fastcgi_param modHeadersAvailable true;         # Avoid sending the security headers twice
  82.             fastcgi_param front_controller_active true;     # Enable pretty urls
  83.             fastcgi_pass php-handler;

  84.             fastcgi_intercept_errors on;
  85.             fastcgi_request_buffering off;

  86.             fastcgi_max_temp_file_size 0;
  87.         }

  88.         # Serve static files
  89.         location ~ \.(?:css|js|mjs|svg|gif|png|jpg|ico|wasm|tflite|map|ogg|flac)$ {
  90.             try_files $uri /nextcloud/index.php$request_uri;
  91.             add_header Cache-Control "public, max-age=15778463, $asset_immutable";
  92.             access_log off;     # Optional: Don't log access to assets

  93.             location ~ \.wasm$ {
  94.                 default_type application/wasm;
  95.             }
  96.         }

  97.         location ~ \.woff2?$ {
  98.             try_files $uri /nextcloud/index.php$request_uri;
  99.             expires 7d;         # Cache-Control policy borrowed from `.htaccess`
  100.             access_log off;     # Optional: Don't log access to assets
  101.         }

  102.         # Rule borrowed from `.htaccess`
  103.         location /nextcloud/remote {
  104.             return 301 /nextcloud/remote.php$request_uri;
  105.         }

  106.         location /nextcloud {
  107.             try_files $uri $uri/ /nextcloud/index.php$request_uri;
  108.         }
  109.     }
复制代码


在使用下面的命令,是的nginx使用上述配置:
  1. sudo vim /usr/local/nginx/conf/nginx.conf
复制代码
  1.         server_tokens off;
  2.         access_log off;

  3. # 此处为添加的配置-开始
  4. upstream php-handler {
  5.     #server 127.0.0.1:9000;
  6.     #server unix:/run/php/php8.2-fpm.sock;
  7.     server unix:/tmp/php-cgi.sock;
  8. }

  9. map $arg_v $asset_immutable {
  10.     "" "";
  11.     default "immutable";
  12. }
  13. # 此处为添加的配置-结束

  14. server
  15.     {
复制代码

  1.         include enable-php.conf;

  2.         # 此处为添加的配置-开始
  3.         include nextcloud.conf;
  4.         # 此处为添加的配置-结束

  5.         location /nginx_status
  6.         {
  7.             stub_status on;
  8.             access_log   off;
  9.         }
复制代码
添加完成后,重启Nginx使得配置生效:
  1. sudo lnmp nginx restart
复制代码


3. 安装NextCloud
然后,在浏览器访问网址 http://鲁班猫IP/nextcloud 就能进入安装界面:
野火论坛202312091053197029..png

首先设置默认管理员信息:
野火论坛202312091053261357..png
数据存储目录可以先用默认的,后续再修改到存储卡的目录

然后设置MySQL连接信息,使用前面添加的用户即可:
野火论坛202312091054055406..png

设置完成后,等待安装完成即可:
野火论坛202312091054401660..png

安装完成后,会进入到 网盘的使用界面:
野火论坛202312091055435762..png


4. 中文界面设置:
通过右上角的菜单,进入界面显示设置界面:
野火论坛202312091056599404..png

然后设置Language和Local为中文:
野火论坛202312091057507123..png

设置过程中会提示输入当前用户密码:
野火论坛202312091058223647..png

设置完成后,界面切换到中文:
野火论坛202312091058387169..png

5. 运行环境优化
进入管理 - 概览,进行系统环境检查:
野火论坛202312091059115185..png

检查完毕,会提示好多项需要优化:
野火论坛202312091059333160..png

依次按照下面的步骤进行优化:
1) PHP扩展库安装:
可以使用lnmp一键安装包的脚本,安装下面的扩展:
  1. cd ~/Projects/nextcloud/lnmp2.0
  2. sudo ./addons.sh
复制代码
野火论坛202312091101527391..png

在上述界面,分别安装启用:opcache、apcu、imageMagick、Exif、Sodium

也可以直接进行安装:

  1. cd ~/Projects/nextcloud/
  2.   
  3. sudo apt-get install libmagickwand-dev libmagickcore-dev
  4. wget https://pecl.php.net/get/imagick-3.7.0.tgz
  5. tar xzvf imagick-3.7.0.tgz
  6. cd imagick-3.7.0
  7. /usr/local/php/bin/phpize
  8. ./configure --with-php-config=/usr/local/php/bin/php-config
  9. make && sudo make install
  10.   
  11. cd ~/Projects/nextcloud/lnmp2.0/src/php-8.2.6/ext/gmp
  12. /usr/local/php/bin/phpize
  13. ./configure --with-php-config=/usr/local/php/bin/php-config
  14. make && sudo make install
  15.   
  16. cd ~/Projects/nextcloud/lnmp2.0/src/php-8.2.6/ext/bcmath
  17. /usr/local/php/bin/phpize
  18. ./configure --with-php-config=/usr/local/php/bin/php-config
  19. make && sudo make install
  20.   
  21. cd ~/Projects/nextcloud/lnmp2.0/src/php-8.2.6/ext/mbstring
  22. /usr/local/php/bin/phpize
  23. ./configure --with-php-config=/usr/local/php/bin/php-config
  24. make && sudo make install
  25.   
  26. cd ~/Projects/nextcloud/lnmp2.0/src/php-8.2.6/ext/exif
  27. /usr/local/php/bin/phpize
  28. ./configure --with-php-config=/usr/local/php/bin/php-config
  29. make && sudo make install

  30. sudo apt install libsodium-dev
  31. cd ~/Projects/nextcloud/lnmp2.0/src/php-8.2.6/ext/sodium
  32. /usr/local/php/bin/phpize
  33. ./configure --with-php-config=/usr/local/php/bin/php-config
  34. make && sudo make install
复制代码


安装扩展完成后,修改php配置文件,启用对应的扩展:
  1. sudo vim /usr/local/php/etc/php.ini
复制代码
  1. extension=gmp
  2. extension=mbstring
  3. extension=exif
  4. extension=sodium
  5. extension=imagick
  6.   
  7. zend_extension=opcache
  8. opcache.enable = 1
复制代码


然后,修改php-fpm的配置进行设置:
  1. sudo vim /usr/local/php/etc/php-fpm.d/www.conf.default

  2. # 修改和添加配置:
  3. env[PATH] = /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin
  4. clear_env = no


  5. sudo vim /usr/local/php/etc/php-fpm.conf
  6. # 添加配置:
  7. env[PATH] = /usr/local/bin:/usr/bin:/bin:/usr/local/php/bin
复制代码




修改完成后,运行下面的指令进行检查安装设置是否完成:
  1. php -v
  2. php -m
复制代码
野火论坛202312091112003929..png
野火论坛202312091113135126..png

然后,配置NextCloud自身的配置文件,具体如下:
  1. sudo vim /home/wwwroot/default/nextcloud/config/config.php

  2. // 添加配置
  3.   'default_language' => 'zh_CN',
  4.   'default_locale' => 'zh',
  5.   'default_phone_region' => 'CN',
  6.   'check_for_working_wellknown_setup' => false,
  7.   'memcache.local' => '\OC\Memcache\APCu',
  8.   'filelocking.enabled' => true,
  9.   'memcache.locking' => '\OC\Memcache\APCu',
复制代码


检查无误后,执行下面的命令,重启php-fpm使得配置生效:
  1. sudo lnmp php-fpm restart
复制代码


然后再从管理界面,进入 管理 - 基本设置,设置邮件服务器信息:
野火论坛202312091114585729..png
设置完成后,要发送测试邮件验证,确保配置正确:
野火论坛202312091115178011..png

另外,还需要在该界面,设置 后台任务的运行方式,使用Cron能够提高性能,具体如下:
野火论坛202312091122168969..png
然后设置crontab即可:

  1. sudo crontab -u www -e

  2. # 添加配置
  3. */5 * * * * php -f /home/wwwroot/default/nextcloud/cron.php
复制代码



以上配置设置都完成后,就可以再次到 管理 - 概览 检查运行环境了:
野火论坛202312091119045888..png

现在优化工作都完成了,没有提示信息了,可以正式使用了。

因为是家用网盘,所以暂时没有使用HTTPS。
如果你有合适的域名,以及外部IP,可以参考如下的指南进行设置:Nextcloud in a subdir of the NGINX webroot

在管理界面,还可以直接查看系统的基本信息:
野火论坛202312091136317102..png
野火论坛202312091136415141..png

六、网盘系统使用
经过上面的部署,网盘系统可以正式使用了。

1. 网页界面使用
使用NextCloud网盘系统,最简单的方式,就是直接在浏览器中使用。推荐使用Chrome、Edge。
从左上角的小图标中,进入文件查看界面:
野火论坛202312091125138374..png

再次界面上,可以新建目录:
野火论坛202312091125566036..png

在目录内,可以直接把本地文件拖拽过来,自动上传:
野火论坛202312091126236322..png

上传完成后,就可以列出,以及点击查看编辑:
野火论坛202312091126434980..png
野火论坛202312091127523424..png

也可以共享文件:
野火论坛202312091135474343..png

2. 电脑客户端使用
在电脑上,还可以下载客户端,实现目录的自动同步。

访问 https://nextcloud.com/install/ 下载对应系统的安装文件:
野火论坛202312091128357605..png
在Windows、macOS、Linux都有对应的客户端。

下载安装后,按照提示,进行登录:
野火论坛202312091129546140..png

注意登录地址选择 在浏览器访问的地址即可:
野火论坛202312091130054054..png

然后按照提示操作,会自动打开浏览器登录验证,按照提示操作直到完成登录授权即可:
野火论坛202312091130426082..png
野火论坛202312091130528349..png


然后设置需要同步的目录:
野火论坛202312091131019867..png
野火论坛202312091131453566..png

设置完成后,在电脑本地的目录,也可以看到同步的文件:
野火论坛202312091132092304..png

在这个目录中,修改文件,就会自动同步到服务端,并且同步到其他客户端了。

2. 手机客户端使用
NextCloud还提供了手机客户端,同样通过上面客户端的地址下载:
野火论坛202312091132546546..png

下载安装后,打开手机App,根据提示进行操作授权即可:
野火论坛202312091133326564..jpg
野火论坛202312091133409117..jpg
野火论坛202312091133512195..jpg
野火论坛202312091134032589..jpg

完成授权后,就进入文件查看界面:
野火论坛202312091134229810..jpg

可以进入之前创建的目录:
野火论坛202312091134389617..jpg

对于文本文件,可以直接打开查看和编辑:
野火论坛202312091134579038..jpg

也可以进行分享:
野火论坛202312091135104908..jpg


七、应用安装
NextCloud非常强大的一点,还在于可以安装应用,来扩展自身的功能。
从右上角的菜单进入应用,可以看到有非常多的应用可以安装:
野火论坛202312091142132722..png

1. Quick Notes:
可以安装一个非常好用的Quick Notes:
野火论坛202312091138123212..png

安装完成后,就可以在网页界面使用:
野火论坛202312091138344104..png

效果非常不错:
野火论坛202312091138472748..png

2. Draw.io在线画图
安装:
野火论坛202312250051389862..png

使用:
野火论坛202312250055319507..png
野火论坛202312250050544510..png

八、总结
鲁班猫的硬件做的非常的棒,系统支持也很完善。
这次选择的鲁班猫1网络版,4G内存,32G eMMC,同时还有两个千兆有线网口,能够提供高速家庭网络链接,运行上面的NextCloud网盘系统非常好。
不过有一点美中不足的是,目前WiFi网卡的支持还不是很完善,存在不定时卡的的现象。好在我直接链接的有线网络,所以使用上基本不收影响。
NextCloud是一个非常棒的网盘系统,通过上述的步骤部署并熟悉使用后,还可以配置HTTPS访问,以及frp或者花生壳等工具,提供外网访问,实现随时随地的资料同步,通过安装应用,还能提供丰富的功能,满足各种实际需要。




回复

使用道具 举报

发表于 2023-12-10 08:33:54 | 显示全部楼层
真不错         
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2023-12-11 20:18:16 | 显示全部楼层
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-12-25 00:57:35 | 显示全部楼层
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-4-27 23:10 , Processed in 0.156320 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表