如何在CentOS 8上使用Nginx和PHP 7.3安裝Nextcloud

如何在CentOS 8上使用Nginx和PHP 7.3安裝Nextcloud

Nextcloud是一款類似於Dropbox的免費(開源)軟件,屬於ownCloud項目的分支.Nextcloud用PHP和JavaScript編寫,它支持許多數據庫系統,例如MySQL / MariaDB,PostgreSQL,Oracle數據庫和SQLite。

為了使您的文件在台式機和服務器之間保持同步,Nextcloud提供了適用於Windows,Linux和Mac台式機的應用程序以及適用於Android和iOS的移動應用程序。

在本教程中,我們向您展示如何在CentOS 8服務器上使用Nginx Web服務器,PHP 7.3和MariaDB數據庫安裝Nextcloud 17.我們將安裝Nextcloud並使用免費的Let’s Encrypt SSL證書對其進行保護。

先決條件

對於本指南,我們將在具有2GB RAM,25GB可用空間和2個CPU的CentOS 8服務器上安裝Nextcloud。

我們將做什麼:

  • 安裝Nginx Web服務器
  • 安裝PHP-FPM 7.3
  • 配置PHP-FPM 7.3
  • 安裝和配置MariaDB數據庫
  • 生成SSL Letsencrypt
  • 下載Nextcloud 17
  • 為Nextcloud設置Nginx Virtualhost
  • 為Nextcloud設置SELinux
  • Nextcloud安裝後

第1步-安裝Nginx

首先,我們將Nginx Web服務器安裝到CentOS 8服務器上,並在firewalld上打開HTTP和HTTPS端口。

使用下面的dnf命令從AppStream存儲庫安裝Nginx。

sudo dnf install nginx

安裝完成後,啟動nginx服務並將其添加到系統引導中。

systemctl start nginxsystemctl enable nginx

現在,使用以下命令檢查nginx服務狀態。

systemctl status nginx

您將在CentOS 8服務器上啟動並運行Nginx服務。

接下來,我們將HTTP和HTTPS服務添加到Firewalld。

使用下面的firewall-cmd命令將HTTP和HTTPS服務添加到firewalld。

firewall-cmd --add-service=http --permanentfirewall-cmd --add-service=https --permanent

之後,重新加載防火牆服務。

firewall-cmd --reload

結果,您已經成功安裝了Nginx Web服務器並在CentOS 8服務器上打開HTTP和HTTPS端口。

配置防火牆

第2步-安裝PHP-FPM

根據Nextcloud系統要求,建議使用PHP 7.2或PHP 7.3進行安裝。

對於本指南,我們將使用可從REMI存儲庫安裝的PHP 7.3。

在繼續之前,我們將啟用“ PowerTools”存儲庫並為CentOS 8服務器添加EPEL和REMI存儲庫。

運行下面的dnf命令。

sudo dnf config-manager --set-enabled PowerToolssudo dnf install epel-releasesudo dnf install https://rpms.remirepo.net/enterprise/remi-release-8.rpm

現在檢查系統上所有可用的存儲庫。

dnf repolist

您將得到如下結果。

檢查DNF存儲庫

您已經啟用了“ PowerTools”存儲庫,並為CentOS 8添加了EPEL和REMI存儲庫。

接下來,我們將啟用PHP 7.3 REMI存儲庫。

檢查所有可用模塊的PHP軟件包。

dnf module list php

現在啟用PHP 7.3 REMI存儲庫模塊。

dnf module enable php:remi-7.3

在CentOS 8中添加Remi存儲庫

之後,使用下面的dnf命令為Nextcloud安裝PHP和PHP-FPM 7.3軟件包。

sudo dnf install php-fpm php-cli php-devel php-gd php-mysqlnd php-pear php-xml php-mbstring php-pdo php-json php-pecl-apcu php-pecl-apcu-devel php-pecl-imagick-devel php-intl php-opcache php-zip

並且您已將PHP和PHP-FPM 7.3安裝到CentOS 8系統。

第3步-配置PHP-FPM 7.3

在此步驟中,我們將為Nextcloud部署設置PHP-FPM。

使用以下命令編輯“ php.ini”配置。

vim /etc/php.ini

取消注釋並按如下所示更改配置。

memory_limit = 512Mdate.timezone = Asia/Jakartacgi.fixpathinfo = 0

保存並關閉。

現在,編輯PHP opcache配置’/etc/php.d/10-opcache.ini’。

vim /etc/php.d/10-opcache.ini

如下更改配置。

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

保存並關閉。

接下來,編輯PHP-FPM配置’/etc/php-fpm.d/www.conf’。

vim /etc/php-fpm.d/www.conf

將“用戶”和“組”更改為“ nginx”。

user = nginxgroup = nginx

如下將“ listen”配置更改為sock文件。

listen = /run/php-fpm/www.sock

取消注釋下面的PHP環境變量。

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

在最後一行取消注釋opcache配置。

php_value[opcache.file_cache] = /var/lib/php/opcache

保存並關閉。

現在為PHP會話和opcache創建一個新目錄,然後將這些目錄的所有者更改為“ nginx”用戶和組。

mkdir -p /var/lib/php/{session,opcache}chown -R nginx:nginx /var/lib/php/{session,opcache}

您已經完成了Nextcloud安裝的PHP-FPM配置。

啟動PHP-FPM服務並將其添加到系統引導中。

systemctl enable php-fpmsystemctl start php-fpm

配置PHP 7.3

現在檢查PHP-FPM sock文件和服務狀態。

netstat -pl | grep phpsystemctl status php-fpm

您將得到如下結果。

配置PHP-FPM

結果,PHP-FPM在襪子文件“ /run/php-fpm/www.sock”下啟動並運行。

步驟4-安裝和配置MariaDB

在此步驟中,我們將安裝MariaDB數據庫服務器,設置root密碼身份驗證,並為Nextcloud創建新的數據庫和用戶。

使用下面的dnf命令安裝MariaDB數據庫。

sudo dnf install mariadb mariadb-server

安裝完成後,啟動MariaDB服務並將其添加到系統引導中。

systemctl start mariadbsystemctl enable mariadb

MariaDB服務已啟動並正在運行。

配置MariaDB

接下來,我們將使用下面的“ mysql_secure_installation”命令設置根密碼驗證。

mysql_secure_installation

輸入您的根密碼,然後為其餘配置輸入“ Y”。

Set a root password? [Y/n] YRemove anonymous users? [Y/n] YRemove test database and access to it? [Y/n] YReload privilege tables now? [Y/n] Y

並已配置MariaDB根密碼。

現在,使用下面的mysql命令登錄到MySQL shell。

mysql -u root -pTYPE YOUR ROOT PASSWORD

現在,使用以下查詢創建一個新數據庫’nextcloud_db’,並使用密碼’nextcloudpassdb’創建一個新用戶’nextclouduser’。

create database nextcloud_db;create user [email protected] identified by 'nextcloudpassdb';grant all privileges on nextcloud_db.* to [email protected] identified by 'nextcloudpassdb';flush privileges;

您已經為Nextcloud安裝創建了數據庫和用戶。

設置Nextcloud數據庫

步驟4:產生SSL Letsencrypt

在這一步中,我們將使用’certbot’生成SSL letencrypt.SSL證書將用於保護Nextcloud訪問的安全。

使用下面的dnf命令從EPEL存儲庫中安裝certbot。

sudo dnf install certbot

安裝完成後,請使用以下命令為Nextcloud域名生成SSL證書,並確保使用您自己的名稱更改域名和電子郵件地址。

certbot certonly --webroot --webroot-path /usr/share/nginx/html --agree-tos -m [email protected] -d cloud.hakase-labs.io

完成後,所有生成的SSL證書都位於“ /etc/letsencrypt/live/cloud.hakase-labs.io”目錄中。

使用以下命令檢查它。

ls -lah /etc/letsencrypt/live/cloud.hakase-labs.io/

您已經使用certbot工具生成了SSL letencrypt。

步驟5-下載並安裝Nextcloud

在此步驟中,我們將下載最新版本的Nextcloud 17。

在下載nextcloud源代碼之前,請先將zip軟件包安裝到系統中。

sudo dnf install unzip

現在轉到“ / var / www /”目錄,並使用wget命令下載Nextcloud源代碼,如下所示。

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

使用以下命令提取Nextcloud源代碼。

unzip nextcloud-17.0.2.zip

您將獲得一個名為“ nextcloud”的新目錄。

現在為Nextcloud創建一個新的“數據”目錄.“數據”目錄將用於存儲用戶數據。

mkdir -p /var/www/nextcloud/data/

之後,將“ nextcloud”目錄的所有者更改為“ nginx”用戶和組。

sudo chown -R nginx:nginx /var/www/nextcloud

並且您已經將最新的Nextcloud 17下載到了“ / var / www”目錄。

下載NextCloud

第6步-為Nextcloud設置Nginx虛擬主機

下載Nextcloud源代碼後,我們將為Nextcloud設置Nginx虛擬主機。

轉到“ /etc/nginx/conf.d”目錄並創建一個新配置“ nextcloud.conf”。

cd /etc/nginx/conf.d/vim nextcloud.conf

現在,使用您自己的域名和SSL證書路徑進行更改,並將以下配置粘貼到其中。

upstream php-handler { #server 127.0.0.1:9000; server unix:/run/php-fpm/www.sock;}server { listen 80; listen [::]:80; server_name cloud.hakase-labs.io; # enforce https return 301 https://$server_name:443$request_uri;}server { listen 443 ssl http2; listen [::]:443 ssl http2; server_name cloud.hakase-labs.io; # Use Mozilla's guidelines for SSL/TLS settings # https://mozilla.github.io/server-side-tls/ssl-config-generator/ # NOTE: some settings below might be redundant ssl_certificate /etc/ssl/nginx/fullchain.pem; ssl_certificate_key /etc/ssl/nginx/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=15768000; includeSubDomains; preload;" always; # # 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 Referrer-Policy "no-referrer" always; add_header X-Content-Type-Options "nosniff" always; add_header X-Download-Options "noopen" always; add_header X-Frame-Options "SAMEORIGIN" always; add_header X-Permitted-Cross-Domain-Policies "none" always; add_header X-Robots-Tag "none" always; add_header X-XSS-Protection "1; mode=block" always; # Remove X-Powered-By, which is an information leak fastcgi_hide_header X-Powered-By; # 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; # The following rule is only needed for the Social app. # Uncomment it if you're planning to use this app. #rewrite ^/.well-known/webfinger /public.php?service=webfinger last; location = /.well-known/carddav { return 301 $scheme://$host:$server_port/remote.php/dav; } location = /.well-known/caldav { return 301 $scheme://$host:$server_port/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; } 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/.+|oc[ms]-provider/.+).php(?:$|/) { fastcgi_split_path_info ^(.+?.php)(/.*|)$; set $path_info $fastcgi_path_info; try_files $fastcgi_script_name =404; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param PATH_INFO $path_info; fastcgi_param HTTPS on; # Avoid sending the security headers twice fastcgi_param modHeadersAvailable true; # Enable pretty urls fastcgi_param front_controller_active true; fastcgi_pass php-handler; fastcgi_intercept_errors on; fastcgi_request_buffering off; } location ~ ^/(?:updater|oc[ms]-provider)(?:$|/) { try_files $uri/ =404; index index.php; } # Adding the cache control header for js, css and map files # Make sure it is BELOW the PHP block location ~ .(?:css|js|woff2?|svg|gif|map)$ { try_files $uri /index.php$request_uri; 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;" always; # # 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 Referrer-Policy "no-referrer" always; add_header X-Content-Type-Options "nosniff" always; add_header X-Download-Options "noopen" always; add_header X-Frame-Options "SAMEORIGIN" always; add_header X-Permitted-Cross-Domain-Policies "none" always; add_header X-Robots-Tag "none" always; add_header X-XSS-Protection "1; mode=block" always; # Optional: Don't log access to assets access_log off; } location ~ .(?:png|html|ttf|ico|jpg|jpeg|bcmap)$ { try_files $uri /index.php$request_uri; # Optional: Don't log access to other assets access_log off; }}

保存並關閉。

之後,測試Nginx配置並重新啟動Nginx服務,並確保沒有錯誤。

nginx -tsystemctl restart nginx

現在,Nginx服務將在系統上打開一個新的HTTPS端口,使用以下命令對其進行檢查。

netstat -plntu

您將得到如下結果。

為Nextcloud配置Nginx

結果,您為Nextcloud添加了Nginx虛擬主機配置,並在其之上啟用了安全HTTPS。

第7步-為Nextcloud設置SELinux

在本教程中,我們將以’enforcing’模式使用SELinux,並將為Nextcloud安裝設置SELinux。

使用下面的dnf命令安裝SELinux管理工具。

sudo dnf install policycoreutils-python-utils

現在,以root用戶身份在服務器上執行以下命令。

semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/nextcloud/data(/.*)?'semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/nextcloud/config(/.*)?'semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/nextcloud/apps(/.*)?'semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/nextcloud/assets(/.*)?'semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/nextcloud/.htaccess'semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/nextcloud/.user.ini'restorecon -Rv '/var/www/nextcloud/'

至此,Nextcloud的SELinux配置已經完成。

為Nextcloud配置SELinux

步驟8-Nextcloud安裝嚮導

現在打開您的Web瀏覽器,然後在地址欄上鍵入您的Nextcloud域名。

https://cloud.hakase-labs.io/

現在,您將獲得如下的Nextcloud安裝頁面。

Nextcloud Web安裝程序

輸入您的管理員用戶和密碼,然後選擇“ MySQL / MariaDB”作為您的數據庫,然後輸入有關您在頂部創建的數據庫的詳細信息。

現在單擊“完成設置”按鈕,安裝將開始。

安裝完成後,您將獲得如下所示的Nextcloud儀錶板。

CentOS 8上的NextCloud

因此,您已經在CentOS 8服務器上成功將最新的Nextcloud 17與Nginx Web服務器,PHP-FPM 7.3和MariaDB數據庫一起安裝。

參考資料

Sidebar