如何在Ubuntu 18.04 LTS上使用Nginx安装Nextcloud

在本教程中,我们将向您展示如何在Ubuntu 18.04服务器上安装和配置最新的Nextcloud 13.0.2版本。我们将运行Nextcloud ...

如何在Ubuntu 18.04 LTS上使用Nginx安装Nextcloud

Nextcloud是一个免费的(开源)类Dropbox软件,是ownCloud项目的一个分支。 Nextcloud是用PHP和JavaScript编写的,它支持许多数据库系统,如MySQL / MariaDB,PostgreSQL,Oracle数据库和SQLite。 为了使您的文件在Desktop和您自己的服务器之间保持同步,Nextcloud为Windows,Linux和Mac桌面提供应用程序,为Android和iOS提供移动应用程序。 Nextcloud不仅仅是一个Dropbox克隆,它还提供日历,联系人,计划任务和带Ampache的流媒体等附加功能。

在本教程中,我们将向您展示如何在Ubuntu 18.04服务器上安装和配置最新的Nextcloud 13.0.2版本。 我们将使用Nginx Web服务器和PHP7.1-FPM运行Nextcloud,并使用MySQL服务器作为数据库系统。

先决条件

  • Ubuntu 18.04
  • Root权限

我们将要做什么?

  1. 安装Nginx Web服务器
  2. 安装和配置PHP7.1-FPM
  3. 安装和配置MySQL服务器
  4. 生成SSL Letsencrypt
  5. 下载Nextcloud 13
  6. 为Nextcloud配置Nginx虚拟主机
  7. UFW防火墙配置
  8. Nextcloud安装后

第1步 - 安装Nginx Web服务器

我们将在nextcloud指南中做的第一步是安装Nginx Web服务器。 我们将使用Nginx Web服务器而不是Apache Web服务器。

登录服务器并更新存储库,然后使用apt命令安装Nginx Web服务器,如下所示。

sudo apt update
sudo apt install nginx -y

安装完成后,启动Nginx服务并使用systemctl每次在系统引导时启动服务。

systemctl start nginx
systemctl enable nginx

Nginx Web服务器已安装在Ubuntu 18.04上。 使用下面的netstat或curl命令检查它。

netstat -plntu
curl -I localhost

Nginx Web服务器现在在标准HTTP端口80上的Ubuntu下运行。

安装Nginx Web服务器

第2步 - 安装和配置PHP7.1-FPM

在本教程中,我们将使用PHP7.1-FPM进行nextcloud。 我们将使用PPA存储库中的PHP7.1-FPM,因此我们需要在系统中添加新的PPA存储库。

安装'software-properties-common'包并通过运行以下命令添加'ondrej PHP'PPA存储库。

sudo apt install software-properties-common -y
sudo add-apt-repository ppa:ondrej/php -y

注意:

在Ubuntu 18.04上,'add-apt-repository'命令将自动更新存储库。

现在使用下面的单个apt命令安装PHP7.1和PHP7.1-FPM以及所需的所有扩展。

sudo apt install php7.1-fpm php7.1-mcrypt php7.1-curl php7.1-cli php7.1-mysql php7.1-gd php7.1-iconv php7.1-xsl php7.1-json php7.1-intl php-pear php-imagick php7.1-dev php7.1-common php7.1-mbstring php7.1-zip php7.1-soap -y

安装完成后,我们将为php-fpm和php-cli配置php.ini文件。

转到'/etc/php/7.1'目录。

cd /etc/php/7.1/

使用vim编辑php-fpm和php-cli的php.ini文件。

vim fpm/php.ini
vim cli/php.ini

取消注释'date.timezone'行并使用您自己的时区更改值。

date.timezone = Asia/Jakarta

取消注释'cgi.fix_pathinfo'行并将值更改为'0'。

cgi.fix_pathinfo=0

保存并退出。

接下来,编辑php-fpm池配置'www.conf'。

vim fpm/pool.d/www.conf

取消注释以下这些行。

env[HOSTNAME] = $HOSTNAME
env[PATH] = /usr/local/bin:/usr/bin:/bin
env[TMP] = /tmp
env[TMPDIR] = /tmp
env[TEMP] = /tmp

保存并退出。

重新启动PHP7.1-FPM服务并使其在每次系统引导时启动。

systemctl restart php7.1-fpm
systemctl enable php7.1-fpm

现在使用netstat命令检查它。

netstat -pl | grep php

你将得到php-fpm现在在袜子文件'/run/php/php7.1-fpm.sock'下运行。

安装PHP

第3步 - 安装和配置MySQL服务器

在此步骤中,我们将安装最新的MySQL版本并为nextcloud安装创建新数据库。 默认情况下,存储库中提供了最新版本的MySQL软件包。

使用下面的apt命令安装MySQL服务器最新版本。

sudo apt install mysql-server mysql-client -y

安装完成后,启动MySQL服务并使其在系统引导时每次启动。

systemctl start mysql
systemctl enable mysql

现在我们将使用'mysql_secure_installation'命令配置MySQL root密码。

运行以下命令。

mysql_secure_installation

在这个MySQL 5.8版本中,MySQL密码策略有一个安全性改进。 您需要选择密码策略 - 0表示LOW策略,1表示MEDIUM策略,2表示STRONG密码策略。

对于本指南,我们将使用“MEDIUM”密码策略,建议在生产服务器上使用“STRONG”密码策略。

选择数字“1”并按Enter键,然后键入新的MySQL“root”密码。

安装MySQL

Remove anonymous users? (Press y|Y for Yes, any other key for No) : Y
Disallow root login remotely? (Press y|Y for Yes, any other key for No) : Y
Remove test database and access to it? (Press y|Y for Yes, any other key for No) : Y
Reload privilege tables now? (Press y|Y for Yes, any other key for No) : Y

并且已经设置了MySQL root密码。

接下来,我们将为nextcloud安装创建一个新数据库。 我们将使用用户'nextclouduser'和密码' Nextclouduser421@ '创建一个名为'nextcloud_db'的新数据库。

使用mysql命令以root用户身份登录MySQL shell。

mysql -u root -p
TYPE THE MYSQL ROOT PASSWORD

现在通过运行以下MySQL查询来创建具有密码的数据库和用户。

create database nextcloud_db;
create user nextclouduser@localhost identified by 'Nextclouduser421@';
grant all privileges on nextcloud_db.* to nextclouduser@localhost identified by 'Nextclouduser421@';
flush privileges;

并且已创建用于nextcloud安装的新数据库和用户。

配置MySQL数据库

已经完成了对nextcloud的MySQL安装和配置。

第4步 - 生成SSL Letsencrypt

在本教程中,我们将使用Letsencrypt中的免费SSL保护nextcloud,我们将使用letsencrypt工具生成证书文件。

如果您没有域名或在本地计算机上安装nextcloud,则可以使用OpenSSL生成自签名证书。

使用下面的apt命令安装'letsencrypt'工具。

sudo apt install letsencrypt -y

安装完成后,停止nginx服务。

systemctl stop nginx

接下来,我们将使用cerbot命令行为我们的域名“nextcloud.hakase-labs.io”生成SSL证书。 运行以下命令。

certbot certonly --standalone -d nextcloud.hakase-labs.io

系统会要求您输入电子邮件地址,并将其用于续订通知。 对于Letsencrypt TOS协议,输入“A”表示同意,对于共享电子邮件地址,您可以键入“N”表示否。

生成Let加密SSL证书

完成后,您将得到如下所示的结果。

已创建SSL证书

已生成用于netxcloud域名的SSL证书Letsencrypt,它们都位于'/ etc / letsencrypt / live / domain'目录中。

第5步 - 下载Nextcloud

在下载nextcloud源代码之前,请确保在系统上安装了解压缩包。 如果您没有该软件包,请使用下面的apt命令进行安装。

sudo apt install wget unzip zip -y

现在转到'/ var / www'目录并下载nextcloud-13.0.2.zip文件。

cd /var/www/
wget https://download.nextcloud.com/server/releases/nextcloud-13.0.2.zip

提取zip文件,您将获得'nextcloud'目录,然后创建一个新的'data'目录。

unzip nextcloud-13.0.2.zip
mkdir -p nextcloud/data/

现在将'nextcloud'目录的所有者更改为'www-data'用户和组。

chown -R www-data:www-data /var/www/nextcloud/

Nextcloud已下载到'/ var / www / nextcloud'目录下,它将是web根目录。

第6步 - 为Nextcloud配置Nginx虚拟主机

在此步骤中,我们将为nextcloud配置nginx虚拟主机。 我们将配置nextcloud以在HTTPS连接下运行,并将强制HTTP连接自动进入安全HTTPS连接。

现在转到'/ etc / nginx / sites-available'目录并创建一个新的虚拟主机文件'nextcloud'。

cd /etc/nginx/sites-available/
vim nextcloud

在那里,粘贴以下nextcloud虚拟主机配置。

upstream php-handler {
    #server 127.0.0.1:9000;
    server unix:/run/php/php7.1-fpm.sock;
}

server {
    listen 80;
    listen [::]:80;
    server_name nextcloud.hakase-labs.pw;
    # enforce https
    return 301 https://$server_name$request_uri;
}

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name nextcloud.hakase-labs.pw;

    ssl_certificate /etc/letsencrypt/live/nextcloud.hakase-labs.pw/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/nextcloud.hakase-labs.pw/privkey.pem;

    # Add headers to serve security related headers
    # Before enabling Strict-Transport-Security headers please read into this
    # topic first.
    # add_header Strict-Transport-Security "max-age=15552000;
    # includeSubDomains; preload;";
    #
    # WARNING: Only add the preload option once you read about
    # the consequences in https://hstspreload.org/. This option
    # will add the domain to a hardcoded list that is shipped
    # in all major browsers and getting removed from this list
    # could take several months.
    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 /var/www/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;
    }

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

    # Enable gzip but do not remove ETag headers
    gzip on;
    gzip_vary on;
    gzip_comp_level 4;
    gzip_min_length 256;
    gzip_proxied expired no-cache no-store private no_last_modified no_etag auth;
    gzip_types application/atom+xml application/javascript application/json application/ld+json application/manifest+json application/rss+xml application/vnd.geo+json application/vnd.ms-fontobject 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;

    # Uncomment if your server is built with the ngx_pagespeed module
    # This module is currently not supported.
    #pagespeed off;

    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/.+)\.php(?:$|/) {
        fastcgi_split_path_info ^(.+\.php)(/.*)$;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
        fastcgi_param HTTPS on;
        #Avoid sending the security headers twice
        fastcgi_param modHeadersAvailable true;
        fastcgi_param front_controller_active true;
        fastcgi_pass php-handler;
        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|woff|svg|gif)$ {
        try_files $uri /index.php$uri$is_args$args;
        add_header Cache-Control "public, max-age=15778463";
        # Add headers to serve security related headers (It is intended to
        # have those duplicated to the ones above)
        # Before enabling Strict-Transport-Security headers please read into
        # this topic first.
        # add_header Strict-Transport-Security "max-age=15768000; includeSubDomains; preload;";
        #
        # WARNING: Only add the preload option once you read about
        # the consequences in https://hstspreload.org/. This option
        # will add the domain to a hardcoded list that is shipped
        # in all major browsers and getting removed from this list
        # could take several months.
        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 ~ \.(?:png|html|ttf|ico|jpg|jpeg)$ {
        try_files $uri /index.php$uri$is_args$args;
        # Optional: Don't log access to other assets
        access_log off;
    }
}

保存并退出。

启用虚拟主机并测试配置,并确保没有错误。

ln -s /etc/nginx/sites-available/nextcloud /etc/nginx/sites-enabled/
nginx -t

现在使用下面的systemctl命令重启PHP7.1-FPM服务和nginx服务。

systemctl restart nginx
systemctl restart php7.1-fpm

已创建nextcloud的Nginx虚拟主机配置。

为Nextcloud配置Nginx

第7步 - 配置UFW防火墙

在本教程中,我们将打开防火墙,我们将使用UFW防火墙进行Ubuntu。

启用ufw防火墙。

ufw enable

输入“y”并按Enter键启动并启用UFW防火墙。

现在将新的SSH,HTTP和HTTPS添加到UFW防火墙列表中。

ufw allow ssh

ufw allow http
ufw allow https

使用以下命令检查UFW防火墙上的允许列表端口。

ufw status

您将获得HTTP端口80和HTTPS端口443在列表中。

配置UFW防火墙

第8步 - Nextcloud安装后

打开Web浏览器并键入nextcloud URL地址。

http://nextcloud.hakase-labs.io/

您将被重定向到安全的HTTPS连接。

在首页上,我们需要为nextcloud创建管理员用户,输入管理员用户密码。 在“数据文件夹”配置中,键入“data”目录“/ var / www / nextcloud / data”的完整路径。

登录nextCloud

将页面滚动到底部,您将获得数据库配置。 键入我们在第3步中创建的数据库信息,然后单击“完成设置”按钮。

数据库配置

安装完成后,您将获得Nextcloud仪表板,如下所示。

Nextcloud仪表板

在Ubuntu 18.04上使用Nginx Web服务器和MySQL数据库的Nextcloud 13安装已成功完成。

参考