在2019年使用Nginx,MariaDB和PHP7在Arch Linux上安装Nextcloud

在本教程中,我将向您展示如何使用Nginx,MariaDB和PHP7在Arch Linux上设置自己的Nextcloud服务器。 Nextcloud是Dropbox的开源自托管替代方案。 借助Nextcloud,您可以在计算机,平板电脑和智能手机之间同步文件。

先决条件

本教程假定您已经在Arch Linux上安装了LEMP堆栈(Linux,Nginx,MariaDB / MySQL,PHP)。 如果您尚未这样做,请查看以下易于遵循的指南。

  • 在Arch Linux上安装Nginx,MariaDB,PHP7(LEMP)

安装LEMP堆栈后,请返回此处并按照以下说明进行操作。 如果您有Arch Linux服务器,请使用ssh进入服务器。 您也可以使用本地Arch Linux计算机。

步骤1:在Arch Linux上安装Nextcloud服务器

将NextCloud zip存档下载到您的服务器上。 最新版本是NextCloud 16.0.1。 您可能需要更改版本号。 转到https://nextcloud.com/install并单击下载按钮以检出最新版本。 您可以通过以下方式下载zip归档文件: wget 在终端。

sudo pacman -S wget

wget https://download.nextcloud.com/server/releases/nextcloud-16.0.1.zip

安装解压缩并将其解压缩到Nginx Web服务器的文档根目录。 (/usr/share/nginx/)。

sudo pacman -S unzip

sudo unzip nextcloud-16.0.1.zip -d /usr/share/nginx/

然后让Nginx用户(http)成为nextcloud目录的所有者。

sudo chown http:http /usr/share/nginx/nextcloud/ -R

步骤2:在MariaDB中创建数据库和用户

使用以下命令登录MariaDB数据库服务器:

sudo mysql -u root

然后为Nextcloud创建数据库。 本教程为数据库命名 nextcloud。 您可以使用任何喜欢的名称。

create database nextcloud;

创建数据库用户。 同样,您可以为该用户使用您的首选名称。 用您的首选密码替换您的密码。

create user [email protected] identified by 'your-password';

授予该用户所有的权限 nextcloud 数据库。

grant all privileges on nextcloud.* to [email protected] identified by 'your-password';

刷新特权表并退出。

flush privileges;

exit;

步骤3:在MariaDB中启用二进制日志记录

编辑主MariaDB服务器配置文件。

sudo nano /etc/my.cnf.d/server.cnf

将以下两行添加到 [mysqld] 线。

log-bin        = mysql-bin
binlog_format  = mixed

二进制日志的格式必须设置为 mixed。 保存并关闭文件。 然后重新启动MariaDB服务。

sudo systemctl restart mariadb

步骤4:为Nextcloud创建Nginx配置文件

首先,建立一个 conf.d Nginx配置文件的目录。

sudo mkdir /etc/nginx/conf.d

然后为Nextcloud创建一个配置文件。

sudo nano /etc/nginx/conf.d/nextcloud.conf

将以下文本放入文件中。

server {
    listen 80;
    server_name nextcloud.your-domain.com;

    # Add headers to serve security related headers
    add_header X-Content-Type-Options nosniff;
    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;

    # Path to the root of your installation
    root /usr/share/nginx/nextcloud/;

    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;
    }

    location ~ /.well-known/acme-challenge {
      allow all;
    }

    # set max upload size
    client_max_body_size 512M;
    fastcgi_buffers 64 4K;

    # Disable gzip to avoid the removal of the ETag header
    gzip off;

    # Uncomment if your server is build with the ngx_pagespeed module
    # This module is currently not supported.
    #pagespeed 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)/ {
       deny all;
    }
    location ~ ^/(?:.|autotest|occ|issue|indie|db_|console) {
       deny all;
     }

    location ~ ^/(?:index|remote|public|cron|core/ajax/update|status|ocs/v[12]|updater/.+|ocs-provider/.+|core/templates/40[34]).php(?:$|/) {
       include fastcgi_params;
       fastcgi_split_path_info ^(.+.php)(/.*)$;
       fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
       fastcgi_param PATH_INFO $fastcgi_path_info;
       #Avoid sending the security headers twice
       fastcgi_param modHeadersAvailable true;
       fastcgi_param front_controller_active true;
       fastcgi_pass unix:/run/php-fpm/php-fpm.sock;
       fastcgi_intercept_errors on;
       fastcgi_request_buffering off;
    }

    location ~ ^/(?:updater|ocs-provider)(?:$|/) {
       try_files $uri/ =404;
       index index.php;
    }

    # Adding the cache control header for js and css files
    # Make sure it is BELOW the PHP block
    location ~* .(?:css|js)$ {
        try_files $uri /index.php$uri$is_args$args;
        add_header Cache-Control "public, max-age=7200";
        # Add headers to serve security related headers (It is intended to
        # have those duplicated to the ones above)        
        add_header X-Content-Type-Options nosniff;
        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;
        # Optional: Don't log access to assets
        access_log off;
   }

   location ~* .(?:svg|gif|png|html|ttf|woff|ico|jpg|jpeg)$ {
        try_files $uri /index.php$uri$is_args$args;
        # Optional: Don't log access to other assets
        access_log off;
   }
}

将红色文本替换为您的实际数据。 如果要在家用计算机上设置Nextcloud,则输入服务器名称的私有IP地址,例如:

server_name 192.168.1.105

接下来,编辑 /etc/nginx/nginx.conf 文件

sudo nano /etc/nginx/nginx.conf

将以下行添加到 http 部分,以便加载单个Nginx配置文件。

include /etc/nginx/conf.d/*.conf;

像这样:

http {
   include /etc/nginx/conf.d/*.conf;

   include mime.types;
   default_type application/octet-stream;

.....

保存并关闭文件。 然后测试Nginx配置。

sudo nginx -t

如果测试成功,请重新加载Nginx以使更改生效。

sudo systemctl reload nginx

步骤5:安装并启用PHP模块

Nextcloud要求 mysqlgdzipintlcurl 要启用的模块才能正常工作。 mysql 先前的LEMP教程中已经安装了该模块。 现在,使用以下命令安装gd和intl模块:

sudo pacman -S php-gd php-intl

然后编辑 php.ini 文件。

sudo nano /etc/php/php.ini

找到以下6行(大约900行存在)。 删除分号以启用这6个模块。

;extension=mysqli     
;extension=pdo_mysql
;extension=gd 
;extension=intl
;extension=zip
;extension=curl

您还可以运行以下6个命令在Arch Linux上启用这些扩展,因此不必打开文件并找到6行。 的 sed 文本编辑器将搜索和替换文本,而无需打开文件。

sudo sed -i 's/;extension=mysqli/extension=mysqli/g' /etc/php/php.ini
sudo sed -i 's/;extension=pdo_mysql/extension=pdo_mysql/g' /etc/php/php.ini
sudo sed -i 's/;extension=gd/extension=gd/g' /etc/php/php.ini
sudo sed -i 's/;extension=zip/extension=zip/g' /etc/php/php.ini
sudo sed -i 's/;extension=curl/extension=curl/g' /etc/php/php.ini
sudo sed -i 's/;extension=intl/extension=intl/g' /etc/php/php.ini

保存并关闭文件。 然后重新加载php-fpm进程以使更改生效。

sudo systemctl reload php-fpm

Nextcloud Web安装程序

现在,在浏览器地址栏中,键入

nextcloud.your-domain.com

访问Nextcloud Web安装程序。 如果要在本地Arch Linux计算机上安装,请键入您的专用IP地址,例如 192.168.1.105。 您将看到以下内容。

您需要创建一个管理帐户并将NextCloud服务与MariaDB数据库连接。 输入您先前创建的数据库用户名,密码和数据库名称。 完成后,您的Nextcloud服务器已准备就绪。

nextcloud-server-on-arch-linux

如果使用的是远程Arch Linux服务器,建议您在完成Web浏览器中的安装之前安装SSL / TLS证书,以防止恶意嗅探。

从“让我们加密”获取免费的SSL证书

在远程服务器上,此步骤是必需的,因为您要确保Nextcloud用户名和密码不会被恶意人员窃听。 如果要在家用计算机上设置Nextcloud,请跳过此步骤。

首先,我们需要安装 证书机器人 客户端和Nginx插件(可在Arch Linux社区存储库中找到)。

sudo pacman -S certbot certbot-nginx

然后使用Nginx插件为Nginx Web服务器获取并安装证书,如下所示。

sudo certbot --nginx --agree-tos --redirect --staple-ocsp --email your-email-address -d nextcloud.your-domain.com

我假设您正在使用像next这样的域名cloud.your-domain.com 访问ownCloud Web界面。 在运行上述命令之前,还需要将域名指向DNS中的服务器IP。

获取并安装证书后,重新加载Nginx。

sudo systemctl reload nginx

自动续订TLS证书

建议自动续订“加密TLS”证书。 我们可以通过cron工作实现这一目标。 首先在Arch Linux上安装cronie。

sudo pacman -S cronie

启动cron守护程序。

sudo systemctl start cronie

在系统启动时启用自动启动。

sudo systemctl enable cronie

然后编辑root用户的crontab文件。

sudo crontab -e

将以下行放入文件中,该文件将尝试每天更新一次证书。

@daily certbot renew --quiet

保存并关闭文件。

配置OPcache以提高性能

OPcache通过缓存预编译的字节码可以提高PHP应用程序的性能。 默认情况下,Arch Linux上未启用OPcache。 要启用它,请打开 php.ini 文件。

sudo nano /etc/php/php.ini

找到以下行。

;zend_extension=opcache

删除分号,以便可以启用OPcache扩展(也称为模块)。 保存并关闭文件。 然后重新加载PHP-FPM。

sudo systemctl reload php-fpm

现在,您可以使用以下命令检查已启用的模块。

php -m

默认情况下,php.ini文件中的所有opcache设置都会被注释掉。 为了获得最佳性能,建议使用以下设置。

opcache.enable=1
opcache.enable_cli=1
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=10000
opcache.memory_consumption=128
opcache.save_comments=1
opcache.revalidate_freq=1

进行这些更改之后。 保存并关闭文件。 并重新加载PHP-FPM

sudo systemctl reload php-fpm

增加上传文件大小限制

Nginx设置的默认最大上传文件大小限制为1MB。 要允许将大文件上传到您的NextCloud服务器,请编辑NextCloud的Nginx配置文件。

sudo nano /etc/nginx/conf.d/nextcloud.conf

我们已经在此文件中设置了最大文件大小,如

client_max_body_size 512M;

您可以根据需要更改它,例如1G。

client_max_body_size 1024M;

保存并关闭文件。 然后重新加载Nginx以使更改生效。

sudo systemctl reload nginx

PHP还设置了上传文件大小的限制。 上载的默认最大文件大小为2MB。 要增加上传大小限制,请编辑PHP配置文件。

sudo nano /etc/php/php.ini

找到以下行:

upload_max_filesize = 2M

如下更改值:

upload_max_filesize = 1024M

保存并关闭文件。 然后重新启动PHP-FPM。

sudo systemctl restart php-fpm

增加PHP内存限制

默认的PHP内存限制为128MB。 NextCloud建议使用512MB,以获得更好的性能。 要更改PHP内存限制,请编辑 php.ini 文件。

sudo nano /etc/php/php.ini

找到以下行。 (第404行)

memory_limit = 128M

更改值。

memory_limit = 512M

保存并关闭文件。 或者,您可以运行以下命令来更改值,而无需手动打开文件。

sudo sed -i 's/memory_limit = 128M/memory_limit = 512M/g' /etc/php/php.ini

然后重新加载 PHP-FPM 服务使更改生效。

sudo systemctl reload php-fpm

为NextCloud配置Redis缓存

如果您转到NextCloud 设定 -> 概观 页面上,您可能会看到以下警告:

No memory cache has been configured. To enhance your performance please configure a memcache if available.

我们将通过使用Redis为nextCloud启用内存缓存。 运行以下命令从Arch Linux系统信息库安装Redis服务器。

sudo pacman -S redis

您可以使用以下方法检查版本:

redis-server -v

样本输出:

Redis server v=5.0.6 sha=00000000:0 malloc=jemalloc-5.2.1 bits=64 build=862f233732e771fd

启动Redis。

sudo systemctl start redis

使用以下命令在引导时启用自动启动。

sudo systemctl enable redis

为了将Redis配置为nextCloud的缓存,我们需要安装PHP扩展以与Redis接口。

sudo pacman -S php-redis

现在,我们需要启用PHP igbinary和redis扩展。 转到 /etc/php/conf.d/ 目录,打开 igbinary.ini 文件并删除分号以启用igbinary扩展。

extension=igbinary.so

同时打开 redis.ini 文件并删除分号以启用redis扩展。

extension=redis

然后重新启动PHP-FPM。

sudo systemctl restart php-fpm

检查扩展名是否已启用。

php --ri redis

输出:

redis

Redis Support => enabled
Redis Version => 5.0.2
Available serializers => php, json, igbinary
Available compression => lzf

Directive => Local Value => Master Value
redis.arrays.algorithm => no value => no value
redis.arrays.auth => no value => no value
redis.arrays.autorehash => 0 => 0
redis.arrays.connecttimeout => 0 => 0
redis.arrays.distributor => no value => no value
redis.arrays.functions => no value => no value
redis.arrays.hosts => no value => no value
redis.arrays.index => 0 => 0
redis.arrays.lazyconnect => 0 => 0
redis.arrays.names => no value => no value
redis.arrays.pconnect => 0 => 0
redis.arrays.previous => no value => no value
redis.arrays.readtimeout => 0 => 0
redis.arrays.retryinterval => 0 => 0
redis.arrays.consistent => 0 => 0
redis.clusters.cache_slots => 0 => 0
redis.clusters.auth => no value => no value
redis.clusters.persistent => 0 => 0
redis.clusters.read_timeout => 0 => 0
redis.clusters.seeds => no value => no value
redis.clusters.timeout => 0 => 0
redis.pconnect.pooling_enabled => 1 => 1
redis.pconnect.connection_limit => 0 => 0
redis.session.locking_enabled => 0 => 0
redis.session.lock_expire => 0 => 0
redis.session.lock_retries => 10 => 10
redis.session.lock_wait_time => 2000 => 2000

我们可以看到Redis扩展已启用。 接下来,编辑NextCloud配置文件。

sudo nano /usr/share/nginx/nextcloud/config/config.php

将以下行添加到 ); 线。

'memcache.distributed' => 'OCMemcacheRedis',
'memcache.local' => 'OCMemcacheRedis',
'memcache.locking' => 'OCMemcacheRedis',
'redis' => array(
     'host' => 'localhost',
     'port' => 6379,
     ),

nextcloud arch linux redis内存缓存

保存并关闭文件。 然后重新启动Nginx和PHP-FPM。

sudo systemctl restart nginx php-fpm

现在再次进入nextCloud管理页面,有关内存缓存的警告应该消失了。

包起来

恭喜! 您已使用Nginx,MariaDB和PHP7在Arch Linux上成功设置了NextCloud个人云存储。 与往常一样,如果您发现此帖子有用,请订阅我们的免费新闻通讯,或在Google +,Twitter或我们的Facebook页面上关注我们。 感谢造访!

Sidebar