这篇友链文章详细介绍了 Nextcloud 私有云基于 LAMP 的部署方法,之前曾经部署过 Owncloud,但是嫌备份太麻烦,后来转向 Oneindex 这样的和网盘对接的云盘项目
建议初学且没有搭建其他网站需要的朋友使用 LAMP 环境,无需配置伪静态。好久不用 Apache,现在看感觉十分生疏,mark 备用
=====================================================
现在百度云盘的限速会经常导致在备份数据的时候,传的上去,下不下来。与其花钱买 VIP 不如自己搭建属于自己的私有云。 本文介绍在 Linux 上部署 Nextcloud 网络硬盘 。有需求的可以配合 nps 进行内网穿透, 实现在外网的访问。
- 检查环境
- 创建数据库
- 修改 Apache 运行用户
- 外部存储
- PHP 设置
- 使用 Redis 进行缓存
- Cron
- URL 美化
- 其他
- 参考
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 外部存储
除了在初始化服务器时指定的存储空间外,使用其他空间都需使用 外部存储 功能。需要注意,修改的是管理中的存储空间,而不是个人中的存储空间。
至此已经实现了全部功能,后面是对性能的优化。
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-server
和 php-redis
。安装完成后系统会自动启动服务。CentOS/Fedora 系统安装 redis
和 php-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' => 'OCMemcacheRedis',
'memcache.locking' => 'OCMemcacheRedis',
'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
为了使用 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]
如果没有做这个重定向, Nextcloud 后台会警告
您的网页服务器未正确设置以解析“/.well-known/caldav”。更多信息请参见文档。 您的网页服务器未正确设置以解析“/.well-known/carddav”。更多信息请参见文档。