如何在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权限
我们将要做什么?
- 安装Nginx Web服务器
- 安装和配置PHP7.1-FPM
- 安装和配置MySQL服务器
- 生成SSL Letsencrypt
- 下载Nextcloud 13
- 为Nextcloud配置Nginx虚拟主机
- UFW防火墙配置
- 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下运行。
第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'下运行。
第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”密码。
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安装的新数据库和用户。
已经完成了对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”表示否。
完成后,您将得到如下所示的结果。
已生成用于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虚拟主机配置。
第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在列表中。
第8步 - Nextcloud安装后
打开Web浏览器并键入nextcloud URL地址。
http://nextcloud.hakase-labs.io/
您将被重定向到安全的HTTPS连接。
在首页上,我们需要为nextcloud创建管理员用户,输入管理员用户密码。 在“数据文件夹”配置中,键入“data”目录“/ var / www / nextcloud / data”的完整路径。
将页面滚动到底部,您将获得数据库配置。 键入我们在第3步中创建的数据库信息,然后单击“完成设置”按钮。
安装完成后,您将获得Nextcloud仪表板,如下所示。
在Ubuntu 18.04上使用Nginx Web服务器和MySQL数据库的Nextcloud 13安装已成功完成。