Nextcloud

来自 Alpine Linux

Nextcloud 是基于 WedDAV 的解决方案,用于在线存储和共享您的数据、文件、图像、视频、音乐、日历和联系人。Nextcloud 是 ownCloud 的一个分支,包含了企业功能

安装

nextcloud 在 Alpine 3.5 及更高版本中可用。

在开始安装任何东西之前,请确保您拥有最新的软件包。确保您在 /etc/apk/repositories 文件中使用 'http' 仓库,然后

apk update

提示:详细信息请参见 文档。

数据库

首先您必须决定使用哪个数据库。使用下面列出的数据库之一。

Sqlite

您需要做的就是安装软件包

apk add nextcloud-sqlite

PostgreSQL

安装软件包

apk add nextcloud-pgsql postgresql postgresql-client

接下来是配置并启动数据库

rc-service postgresql setup rc-service postgresql start

接下来,您需要创建一个用户并临时授予 CREATEDB 权限

psql -U postgres CREATE USER mycloud WITH PASSWORD 'test123'; ALTER ROLE mycloud CREATEDB; \q

注意:将上面的用户名 'mycloud' 和密码 'test123' 替换为更安全的。记住这些设置。稍后在设置 nextcloud 时您将需要它们。

设置 postgresql 在启动时启动

rc-update add postgresql

MariaDB

安装软件包

apk add nextcloud-mysql mariadb mariadb-client

现在配置并启动 mariadb

mariadb-install-db --user=mysql --datadir=/var/lib/mysql service mariadb start rc-update add mariadb mariadb-secure-installation

按照向导设置密码等。

注意:记住您使用向导设置的用户名/密码。稍后您将需要它们。

接下来,您需要创建一个用户和数据库并设置权限

mariadb -u root -p CREATE DATABASE nextcloud; GRANT ALL ON nextcloud.* TO 'mycloud'@'localhost' IDENTIFIED BY 'test123'; GRANT ALL ON nextcloud.* TO 'mycloud'@'localhost.localdomain' IDENTIFIED BY 'test123'; FLUSH PRIVILEGES; EXIT

注意:将上面的用户名 'mycloud' 和密码 'test123' 替换为更安全的。记住这些设置。稍后在设置 nextcloud 时您将需要它们。

mariadb-client 不再需要了。让我们卸载它

apk del mariadb-client

Webserver

接下来是选择、安装和配置 webserver。在本例中,我们将安装 nginxlighttpd。您可以自由安装您选择的任何其他 webserver,只要它支持 PHP 和 FastCGI 即可。为您的 webserver 生成 SSL 证书不在本文档的范围之内。

nextcloud-initscript 有助于使用 php-fpm 运行 webserver。

apk add nextcloud-initscript

Nginx

安装所需的软件包

apk add nginx

删除默认的 nginx 网站配置

rm /etc/nginx/http.d/default.conf

/etc/nginx/http.d/mysite.mydomain.com.conf 中为您的站点创建一个配置文件

内容 /etc/nginx/http.d/mysite.mydomain.com.conf

server { #listen [::]:80; #取消注释以支持 IPv6 listen 80; return 301 https://$host$request_uri; server_name mysite.mydomain.com; } server { #listen [::]:443 ssl; #取消注释以支持 IPv6 listen 443 ssl; server_name mysite.mydomain.com; root /usr/share/webapps/nextcloud; index index.php index.html index.htm; disable_symlinks off; ssl_certificate /etc/ssl/cert.pem; ssl_certificate_key /etc/ssl/key.pem; ssl_session_timeout 5m; #启用完美前向保密和没有已知漏洞的密码 #注意!它会破坏与旧操作系统和浏览器的兼容性(例如 Windows XP、Android 2.x 等) #ssl_ciphers ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA; #ssl_prefer_server_ciphers on; location / { try_files $uri $uri/ /index.html; } # 将 PHP 脚本传递给监听 127.0.0.1:9000 的 FastCGI 服务器 location ~ [^/]\.php(/|$) { fastcgi_split_path_info ^(.+?\.php)(/.*)$; if (!-f $document_root$fastcgi_script_name) { return 404; } #fastcgi_pass 127.0.0.1:9000; #fastcgi_pass unix:/run/php-fpm/socket; fastcgi_pass unix:/run/nextcloud/fastcgi.sock; # 来自 nextcloud-initscript 软件包 fastcgi_index index.php; include fastcgi.conf; } # 帮助通过 nextcloud 安装后的配置检查: # 根据 https://docs.nextcloud.com/server/22/admin_manual/issues/general_troubleshooting.html#service-discovery location ^~ /.well-known/carddav { return 301 /remote.php/dav/; } location ^~ /.well-known/caldav { return 301 /remote.php/dav/; } location ^~ /.well-known/webfinger { return 301 /index.php/.well-known/webfinger; } location ^~ /.well-known/nodeinfo { return 301 /index.php/.well-known/nodeinfo; } include mime.types; types { text/javascript mjs; } }

如果您计划启用上传 - 您很可能这样做)- 那么您需要修改默认的

client_max_body_size 1m;'

设置在 /etc/nginx/nginx.conf 中。为了测试目的,我通过将其更改为禁用限制

client_max_body_size 0;

这使得大文件上传和自动上传可以工作。请注意,这是一个文件大小限制,此外还有 /etc/php81/php-fpm.d/nextcloud.conf 中设置的限制。第二个限制默认为

; Maximal size of a file that can be uploaded via web interface.
php_admin_value[memory_limit] = 512M
php_admin_value[post_max_size] = 513M
php_admin_value[upload_max_filesize] = 513M

另一个可能限制文件大小的设置在配置文件 /etc/php81/php.ini 中,我在其中将限制设置为

upload_max_filesize = 513M

以匹配 /etc/php81/php-fpm.d/nextcloud.conf 文件大小限制。

如果您从 RAM 运行并且正在处理大文件,您可能需要将 FastCGI 临时文件从 /tmp 移动到 /var/tmp 或安装在 hdd 上的目录

fastcgi_temp_path /var/tmp/nginx/fastcgi 1 2;

大文件上传需要一些时间才能被 php-fpm 处理,因此您需要增加 Nginx 默认读取超时时间

fastcgi_read_timeout 300s;
注意:如果您正在为多个用户提供服务,请确保调整 /etc/php81/php-fpm.d/nextcloud.conf 中的 *pm.max_children 设置

/etc/nginx/nginx.conf 应该已经配置为从此目录加载您的站点配置

...
# Includes virtual hosts configs.
include /etc/nginx/http.d/*;
...

启动服务

service nginx start service nextcloud start

启用服务的自动启动

rc-update add nginx rc-update add nextcloud

Lighttpd

安装软件包

apk add lighttpd php5-cgi

确保您在 lighttpd 中启用了 FastCGI

内容 /etc/lighttpd/lighttpd.conf

... include "mod_fastcgi.conf" ...

启动 webserver

rc-service lighttpd start

提示:您可能想要遵循 Lighttpd_Https_access 文档,以便配置 lighttpd 以使用 https (保护您与 nextcloud 服务器的连接)

链接 nextcloud 安装到 web 服务器目录

ln -s /usr/share/webapps/nextcloud /var/www/localhost/htdocs

防火墙

接下来,在防火墙中为 webserver 打开所需的端口。您可以将以下代码段用作新文件 /etc/nftables.d/50-https.nft 中 nftable 规则的参考

内容 /etc/nftables.d/50-https.nft

#!/usr/sbin/nft -f table inet filter { chain input { # allow https tcp dport 443 accept comment "accept HTTPS" } }

其他设置

加固

考虑更新 /etc/lighttpd/lighttpd.conf 中的变量 url.access-deny 以获得额外的安全性。将 "config.php" 添加到变量中 (数据库存储在那里),使其看起来像这样

内容 /etc/lighttpd/lighttpd.conf

... url.access-deny = ("~", ".inc", "config.php") ...

重启 lighttpd 以激活更改

rc-service lighttpd restart

附加软件包

一些大型应用,如 pdfviewer、texteditor、notifications 和 videoplayer 位于单独的软件包中

apk add nextcloud-files_pdfviewer nextcloud-text nextcloud-notifications nextcloud-files_videoplayer nextcloud-files_external

您还可以安装 nextcloud-default-apps 元软件包,它安装所有 30 个核心 Nextcloud 应用(在上述链接下列为依赖项)

apk add nextcloud-default-apps

如何创建自签名 SSL 证书

安装 openssl

apk add openssl

生成您的自签名证书及其私钥

openssl req -x509 -nodes -days 365 -newkey rsa:4096 -keyout /etc/ssl1.1/private/nextcloud-selfsigned.key -out /etc/ssl1.1/certs/nextcloud-selfsigned.crt

编辑您的 nginx 配置

内容 /etc/nginx/http.d/mysite.mydomain.com.conf

ssl_certificate /etc/ssl1.1/certs/nextcloud-selfsigned.crt; ssl_certificate_key /etc/ssl1.1/private/nextcloud-selfsigned.key;

如何安装和设置自动续订 LetsEncrypt SSL 证书

在按照下面“配置和使用 Nextcloud”部分中的说明首次设置 Nextcloud 服务器后,我按照以下链接中的 SSL 设置说明进行操作:[Tech Jogging]。

我还必须将我的 Nextcloud 服务器的完全限定域名 (FQDN) 添加到 /etc/nextcloud/config.php 中的受信任域名列表中。在标记为“trusted_domains”的部分中

'trusted_domains' =>
  array (
    0 => '<machine's local IP address>',
    1 => 'nextcloud.mydomain.com',
  ),
}}

配置和使用 Nextcloud

配置

将您的浏览器指向 https://mysite.mydomain.com 并按照屏幕上的说明完成安装,提供之前创建的数据库用户和密码。

加固 PostgreSQL

如果您选择了 PGSQL 后端,请从 'mycloud' 用户撤销 CREATEDB 权限

psql -U postgres ALTER ROLE mycloud NOCREATEDB; \q

增加上传大小

/etc/php81/php-fpm.d/nextcloud.conf has overridden default file sizes, but they can be modified further to suit your needs:
; Maximal size of a file that can be uploaded via web interface.
php_admin_value[memory_limit] = 512M
php_admin_value[post_max_size] = 513M
php_admin_value[upload_max_filesize] = 513M

为 nginx/php81 启用 opcache

要提高性能,请安装

apk add php81-opcache

现在取消注释/编辑 /etc/php81/php.ini 中的行

...
opcache.enable=1
opcache.enable_cli=1
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=10000
opcache.memory_consumption=128 //you can reduce this slightly when short on RAM
opcache.save_comments=1
opcache.revalidate_freq=1
...

重启 php-fpm81

rc-service php-fpm81 restart


为视频启用缩略图

为了能够为视频生成缩略图,除了 配置 nextcloud 之外,您还需要从 php 的禁用函数中取消列出 proc_open。PHP 依赖于该函数来调用 ffmpeg 以生成缩略图,否则即使您在 config.php 中启用了它,它也会失败。

/etc/php81/php-fpm.d/nextcloud.conf 中的禁用函数中删除 proc_open

; Disable certain functions for security reasons.
; https://php.ac.cn/disable-functions
php_admin_value[disable_functions] = exec,passthru,shell_exec,system,curl_multi_exec,show_source

现在将 'OC\\Preview\\Movie' 添加到 'enabledPreviewProviders' 列表并安装 ffmpeg

apk add ffmpeg

重启 fpm 服务后,它应该开始为视频生成缩略图。

客户端

有适用于许多平台(包括 Android)的客户端

nextcloud-client 当前在社区仓库中可用。

视频通讯

Nextcloud 11 的主要功能之一,在 Alpine 3.6(当前为 edge)上可用的是 WebRTC 应用,它依赖于 Spreed WebRTC 服务器,该服务器在 Alpine testing 仓库中可用。一切都还在 beta 阶段,所以请注意这一点 :-)。如果您想要一个私有视频会议服务器,请使用 Nginx 安装 Nextcloud 并执行以下操作(您也可以使用 Apache 并按照 nextcloud.com 上的Apache 配置说明进行操作)

将以下配置放在 Nginx 的 server 部分

# Spreed WebRTC
location ^~ /webrtc {
  proxy_pass http://127.0.0.1:8080;
  proxy_http_version 1.1;
  proxy_set_header Upgrade $http_upgrade;
  proxy_set_header Connection $connection_upgrade;
  proxy_set_header X-Forwarded-Proto $scheme;
  proxy_set_header Host $http_host;
  proxy_set_header X-Real-IP $remote_addr;
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

  proxy_buffering             on;
  proxy_ignore_client_abort   off;
  proxy_redirect              off;
  proxy_connect_timeout       90;
  proxy_send_timeout          90;
  proxy_read_timeout          90;
  proxy_buffer_size           4k;
  proxy_buffers               4 32k;
  proxy_busy_buffers_size     64k;
  proxy_temp_file_write_size  64k;
  proxy_next_upstream         error timeout invalid_header http_502 http_503 http_504;
}

将以下部分放在 Nginx 的 http 部分

map $http_upgrade $connection_upgrade {
  default upgrade;
  ''      close;
}

重新加载 Nginx

rc-service nginx reload

安装 Spreed WedRTC 服务器(确保您已启用 testing 仓库

apk add spreed-web-server

使用 /etc/spreed-webrtc/spreed-webrtc-server.conf 中的配置文件,按照 nextcloud.com 上的说明配置 Spreed WebRTC 服务器。然后启动服务器

rc-service spreed-web-server start

rc-update add spreed-web-server

在 Nextcloud 中安装 Spreed 视频通话 应用,享受您的私有视频通话。

Nextcloud CLI occ

访问 nextcloud 的 CLI 工具 occ

sudo -u nextcloud php82 /usr/share/webapps/nextcloud/occ

升级

如果您使用的是 alpine stable 而不是 edge,请注意当升级跳过主要版本时:Nextcloud 不支持在其升级路径中跳过主要版本。因此,alpine 也将之前的 nextcloud 版本打包为单独的软件包。

参见