首页 » Linux » 部署 Nextcloud 网络硬盘

部署 Nextcloud 网络硬盘

现在百度云盘的限速会经常导致在备份数据的时候,传的上去,下不下来。与其花钱买 VIP 不如自己搭建属于自己的私有云。 本文介绍在 Linux 上部署 Nextcloud 网络硬盘 。有需求的可以配合 nps 进行内网穿透, 实现在外网的访问。

部署 Nextcloud 网络硬盘_Nextcloud Logo
  1. 检查环境
  2. 创建数据库
  3. 修改 Apache 运行用户
  4. 外部存储
  5. PHP 设置
  6. 使用 Redis 进行缓存
  7. Cron
  8. URL 美化
  9. 其他
  10. 参考

1 检查环境

Nextcloud 使用 LAMP 环境即可,软件的安装就不赘述了。关于 PHP需要检查必须包含以下插件,可以使用 php -m | grep -i <模块名称> 来检查是否安装了该模块。

PHP (7.1, 7.2 or 7.3)
PHP module ctype
PHP module curl
PHP module dom
PHP module GD
PHP module iconv
PHP module JSON
PHP module libxml (Linux package libxml2 must be >=2.7.0)
PHP module mbstring
PHP module openssl
PHP module posix
PHP module session
PHP module SimpleXML
PHP module XMLReader
PHP module XMLWriter
PHP module zip
PHP module zlib

根据使用的数据库软件,下面三个插件必须包含一种

PHP module pdo_sqlite (>= 3, usually not recommended for performance reasons)
PHP module pdo_mysql (MySQL/MariaDB)
PHP module pdo_pgsql (requires PostgreSQL >= 9.0)

2 创建数据库

在创建数据库前,先对 MySQL 进行些配置,编辑文件 /etc/php/7.3/apache2/conf.d/20-pdo_mysql.ini

; configuration for php mysql module
; priority=20
extension=pdo_mysql.so

[mysql]
mysql.allow_local_infile=On
mysql.allow_persistent=On
mysql.cache_size=2000
mysql.max_persistent=-1
mysql.max_links=-1
mysql.default_port=
mysql.default_socket=/var/run/mysqld/mysqld.sock
mysql.default_host=
mysql.default_user=
mysql.default_password=
mysql.connect_timeout=60
mysql.trace_mode=Off

编辑文件 /etc/mysql/conf.d/mysql.cnf,以限制 MySQL 的内存使用。

[mysql]
innodb_buffer_pool_size=256m
innodb_io_capacity=4000

接下来就可以创建数据库了。使用 sudo mysql -u root -p ,用 root 用户进行登录数据库,输入命令

create database nextcloud;
create user nxtcloudadmin@localhost identified by 'admin123';
grant all privileges on nextcloud.* to nxtcloudadmin@localhost identified by 'admin123';
flush privileges;
exit;

这样得到的数据库信息如下

Username: skycorp
Password: skycorp_password
Database user: nxtcloudadmin
Database password: admin123
Database name: nextcloud
Database host: localhost

3 修改 Apache 运行用户

默认情况下 Apache 使用单独的用户运行,方便进行权限管理。但这样做会在我们访问外部存储时造成权限混乱,所以将 Apache 的运行用户设置 我们的常用用户。编辑文件 /etc/apache2/envvars ,修改下面行

export APACHE_RUN_USER=pi
export APACHE_RUN_GROUP=pi

4 外部存储

除了在初始化服务器时指定的存储空间外,使用其他空间都需使用 外部存储 功能。需要注意,修改的是管理中的存储空间,而不是个人中的存储空间。

对于移动硬盘、U盘等设备 Linux 中可能需要手动挂载,才能使用。使用 blkid 命令查看设备路径、 UUID 、硬盘格式等信息。然后可以使用 mount 命令进行挂载,例如

mkdir /media/pi/disk
sudo mount /dev/sda1 /media/pi/disk

如需要自动挂载,可以编辑文件 /etc/fstab ,在其中添加行

UUID=2158fd9b-655d-40c9-9eb6-86bccc96af03 /media/pi/disk ext4 defaults 0 0

至此已经实现了全部功能,后面是对性能的优化。

5 PHP 设置

编辑 /etc/php/7.3/apache2/php.ini ,修改下面项

memory_limit = 512M
upload_max_filesize = 16G
post_max_size = 16G
max_input_time = 3600
max_execution_time = 3600
upload_tmp_dir = /var/big_temp_file/
output_buffering = 0

[opcache]
opcache.enable=1
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=10000
opcache.memory_consumption=128
opcache.save_comments=1
opcache.revalidate_freq=30

/var/big_temp_file 使用用来存储大文件的临时文件,需要手动建立目录并改变所属用户和用户组。

6 使用 Redis 进行缓存

Debian/Ubuntu/Mint 系统安装 redis-serverphp-redis 。安装完成后系统会自动启动服务。CentOS/Fedora 系统安装 redisphp-pecl-redis 。安装完成后需要手动启动服务。完成后使用 ps ax 查看服务是否正常运行

ps ax | grep redis
22203 ? Ssl    0:00 /usr/bin/redis-server 127.0.0.1:6379

编辑文件 /etc/redis/redis.conf

unixsocket /var/run/redis/redis-server.sock
unixsocket /dev/shm/redis.sock

重启 web 服务和 redis 服务。

sudo systemctl restart redis
sudo systemctl restart apache2

在配置文件中 ./config/config.php 中加入

  'memcache.local' => '\OC\Memcache\Redis',
  'memcache.locking' => '\OC\Memcache\Redis',
  'filelocking.enabled' => 'true',
  'redis' => array(
     'host' => '/var/run/redis/redis-server.sock',
     'port' => 0,
     'dbindex' => 0,
     'password' => '',
     'timeout' => 1.5,
  ),

7 Cron

使用 crontab -u www-data -e 编辑 cron 文件,其中 www-data 为 web 服务器的运行用户。如果用前面的方法更换了 web 服务器的运行用户,这里也需要更换成对应用户。在文件中加入

*/5  *  *  *  * php -f /var/www/html/nextcloud/cron.php

其中 /var/www/html/ 为 nextcloud 所在文件夹。

8 URL 美化

编辑 ./config/config.php,如果Nextcloud 位于名为 nextcloud 的二级目录中,则将对应行修改为

'overwrite.cli.url' => 'https://example.org/nextcloud',
'htaccess.RewriteBase' => '/nextcloud',

如果在根目录上则修改为

'overwrite.cli.url' => 'https://example.org/',
'htaccess.RewriteBase' => '/',

更新 htaccess 文件

sudo -u www-data php /var/www/nextcloud/occ maintenance:update:htaccess

如果没有生效,可能需要在 Apache 配置文件中加入

<Directory "/var/www/nextcloud/">
AllowOverride All
</Directory>

根据情况修改目录、用户名

9 其他

Apache 的超时模块可能会断开连接,所以将其禁用

sudo a2dismod reqtimeout

解决 “您的网页服务器未正确设置以解析“/.well-known/caldav”。更多信息请参见文档。
您的网页服务器未正确设置以解析“/.well-known/carddav”。更多信息请参见文档。”

为了使用 CardDAV 和 CalDAV,编辑 apache 中站点的配置文件 /etc/apache2/sites-enabled/000-default.conf 在其中加入

RewriteEngine On
RewriteRule ^/.well-known/host-meta /public.php?service=host-meta [QSA,L]
RewriteRule ^/.well-known/host-meta\.json /public.php?service=host-meta-json [QSA,L]
RewriteRule ^/.well-known/webfinger /public.php?service=webfinger [QSA,L]
RewriteRule ^/.well-known/carddav /remote.php/dav/ [R=301,L]
RewriteRule ^/.well-known/caldav /remote.php/dav/ [R=301,L]

解决 “HTTP的请求头 “Strict-Transport-Security” 未设置为至少 “15552000” 秒。为了提高安全性,建议参照security tips ↗中的说明启用HSTS。”

开启 header 模块

sudo a2enmod headers

编辑文件 /etc/apache2/sites-enabled/000-default-le-ssl.conf ,在 Nextcloud 域名所在单元内添加

 Header always set Strict-Transport-Security "max-age=63072000;" 

10 参考

  1. Nextcloud Admin Manual
  2. Error during first install for a linux beginner
  3. 解决nextcloud警告:“内存缓存未配置”
标签:

发表评论

电子邮件地址不会被公开。 必填项已用*标注