怎么在CentOS7中使用Nginx和PHP7-FPM安裝Nextcloud

先決條件

  1. 64 位的 centos 7

  2. 服務器的 root 權限

步驟 1 – 在 centos 7 中安裝 nginxphp7-fpm

在開始安裝 nginx 和 php7-fpm 之前,我們還學要先添加 epel 包的倉庫源。使用如下命令:

yum?-y?install?epel-release

現在開始從 epel 倉庫來安裝 nginx:

yum?-y?install?nginx

然后我們還需要為 php7-fpm 添加另外一個倉庫。互聯網中有很個遠程倉庫提供了 php 7 系列包,我在這里使用的是 webtatic。

添加 php7-fpm webtatic 倉庫:

rpm?-uvh?https://mirror.webtatic.com/yum/el7/webtatic-release.rpm

然后就是安裝 php7-fpm 以及 nextcloud 需要的一些包。

復制代碼?代碼如下:

yum -y install php70w-fpm php70w-cli php70w-gd php70w-mcrypt php70w-mysql php70w-pear php70w-xml php70w-mbstring php70w-pdo php70w-json php70w-pecl-apcu php70w-pecl-apcu-devel

最后,從服務器終端里查看 php 的版本號,以便驗證 php 是否正確安裝。

php?-v

步驟 2 – 配置 php7-fpm

在這一個步驟中,我們將配置 php-fpm 與 nginx 協同運行。php7-fpm 將使用?nginx?用戶來運行,并監聽?9000?端口。

使用 vim 編輯默認的 php7-fpm 配置文件。

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

在第 8 行和第 10行,user?和?group?賦值為?nginx。

user?=?nginx group?=?nginx

在第 22 行,確保 php-fpm 運行在指定端口。

listen?=?127.0.0.1:9000

取消第 366-370 行的注釋,啟用 php-fpm 的系統環境變量。

env[hostname]?=?$hostname env[path]?=?/usr/local/bin:/usr/bin:/bin env[tmp]?=?/tmp env[tmpdir]?=?/tmp env[temp]?=?/tmp

保存文件并退出 vim 編輯器。

下一步,就是在?/var/lib/?目錄下創建一個新的文件夾?Session,并將其擁有者變更為?nginx?用戶。

mkdir?-p?/var/lib/php/session chown?nginx:nginx?-r?/var/lib/php/session/

然后啟動 php-fpm 和 nginx,并且將它們設置為隨開機啟動的服務。

sudo?systemctl?start?php-fpm sudo?systemctl?start?nginx sudo?systemctl?enable?php-fpm sudo?systemctl?enable?nginx

php7-fpm 配置完成

步驟 3 – 安裝和配置 mariadb

我這里使用 mariadb 作為 nextcloud 的數據庫。可以直接使用?yum?命令從 centos 默認遠程倉庫中安裝?mariadb-server?包。

yum?-y?install?mariadb?mariadb-server

啟動 mariadb,并將其添加到隨系統啟動的服務中去。

systemctl?start?mariadb systemctl?enable?mariadb

現在開始配置 mariadb 的 root 用戶密碼。

mysql_secure_installation

鍵入?y?,然后設置 mariadb 的 root 密碼。

set?root?password??[y/n]?y new?password: re-enter?new?password: remove?anonymous?users??[y/n]?y disallow?root?login?remotely??[y/n]?y remove?test?database?and?access?to?it??[y/n]?y reload?privilege?tables?now??[y/n]?y

這樣就設置好了密碼,現在登錄到 mysql shell 并為 nextcloud 創建一個新的數據庫和用戶。這里我創建名為?nextcloud_db?的數據庫以及名為?nextclouduser?的用戶,用戶密碼為?nextclouduser@?。當然了,要給你自己的系統選用一個更安全的密碼。

mysql?-u?root?-p

輸入 mariadb 的 root 密碼,即可登錄 mysql shell。

輸入以下 mysql 查詢語句來創建新的數據庫和用戶。

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

nextcloud_db?數據庫和?nextclouduser?數據庫用戶創建完成

步驟 4 – 為 nextcloud 生成一個自簽名 ssl 證書

在教程中,我會讓客戶端以 https 連接來運行 nextcloud。你可以使用諸如 let’s encrypt 等免費 ssl 證書,或者是自己創建自簽名 (self signed) ssl 證書。這里我使用 openssl 來創建自己的自簽名 ssl 證書。

為 ssl 文件創建新目錄:

mkdir?-p?/etc/nginx/cert/

如下,使用 openssl 生成一個新的 ssl 證書。

復制代碼?代碼如下:

openssl req -new -x509 -days 365 -nodes -out /etc/nginx/cert/nextcloud.crt -keyout /etc/nginx/cert/nextcloud.key

最后使用 chmod 命令將所有證書文件的權限設置為 600。

chmod?700?/etc/nginx/cert chmod?600?/etc/nginx/cert/*

步驟 5 – 下載和安裝 nextcloud

我直接使用?wget?命令下載 nextcloud 到服務器上,因此需要先行安裝?wget。此外,還需要安裝?unzip?來進行解壓。使用?yum?命令來安裝這兩個程序。

yum?-y?install?wget?unzip

先進入?/tmp?目錄,然后使用?wget?從官網下載最新的 nextcloud 10。

cd?/tmp wget?https://download.nextcloud.com/server/releases/nextcloud-10.0.2.zip

解壓 nextcloud,并將其移動到?/usr/share/nginx/html/?目錄。

unzip?nextcloud-10.0.2.zip mv?nextcloud/?/usr/share/nginx/html/

下一步,轉到 nginx 的 web 根目錄為 nextcloud 創建一個?data?文件夾。

cd?/usr/share/nginx/html/ mkdir?-p?nextcloud/data/

變更?nextcloud?目錄的擁有者為?nginx?用戶和組。

chown?nginx:nginx?-r?nextcloud/

步驟 6 – 在 nginx 中為 nextcloud 配置虛擬主機

在步驟 5 我們已經下載好了 nextcloud 源碼,并配置好了讓它運行于 nginx 服務器中,但我們還需要為它配置一個虛擬主機。在 nginx 的?conf.d?目錄下創建一個新的虛擬主機配置文件?nextcloud.conf。

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

將以下內容粘貼到虛擬主機配置文件中:

upstream?php-handler?{ ??server?127.0.0.1:9000; ??#server?unix:/var/run/php5-fpm.sock; } server?{ ??listen?80; ??server_name?cloud.nextcloud.co; ??#?enforce?https ??return?301?https://$server_name$request_uri; } server?{ ??listen?443?ssl; ??server_name?cloud.nextcloud.co; ??ssl_certificate?/etc/nginx/cert/nextcloud.crt; ??ssl_certificate_key?/etc/nginx/cert/nextcloud.key; ??#?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;"; ??add_header?x-content-type-options?nosniff; ??add_header?x-frame-options?"sameorigin"; ??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/html/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; ??#?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; ????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)$?{ ????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) ????#?before?enabling?strict-transport-security?headers?please?read?into ????#?this?topic?first. ????add_header?strict-transport-security?"max-age=15768000; ????includesubdomains;?preload;"; ????add_header?x-content-type-options?nosniff; ????add_header?x-frame-options?"sameorigin"; ????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; ??} }

保存文件并退出 vim。

下載測試以下該 nginx 配置文件是否有錯誤,沒有的話就可以重啟服務了。

nginx?-t systemctl?restart?nginx

步驟 7 – 為 nextcloud 配置 selinux 和 firewalld 規則

本教程中,我們將以強制模式運行 selinux,因此需要一個 selinux 管理工具來為 nextcloud 配置 selinux。

使用以下命令安裝 selinux 管理工具。

yum?-y?install?policycoreutils-python

然后以 root 用戶來運行以下命令,以便讓 nextcloud 運行于 selinux 環境之下。如果你是用的其他名稱的目錄,記得將?nextcloud?替換掉。

semanage?fcontext?-a?-t?httpd_sys_rw_content_t?'/usr/share/nginx/html/nextcloud/data(/.*)?' semanage?fcontext?-a?-t?httpd_sys_rw_content_t?'/usr/share/nginx/html/nextcloud/config(/.*)?' semanage?fcontext?-a?-t?httpd_sys_rw_content_t?'/usr/share/nginx/html/nextcloud/apps(/.*)?' semanage?fcontext?-a?-t?httpd_sys_rw_content_t?'/usr/share/nginx/html/nextcloud/assets(/.*)?' semanage?fcontext?-a?-t?httpd_sys_rw_content_t?'/usr/share/nginx/html/nextcloud/.htaccess' semanage?fcontext?-a?-t?httpd_sys_rw_content_t?'/usr/share/nginx/html/nextcloud/.user.ini' restorecon?-rv?'/usr/share/nginx/html/nextcloud/'

接下來,我們要啟用 firewalld 服務,同時為 nextcloud 開啟 http 和 https 端口。

啟動 firewalld 并設置隨系統啟動。

systemctl?start?firewalld systemctl?enable?firewalld

現在使用 firewall-cmd 命令來開啟 http 和 https 端口,然后重新加載防火墻。

firewall-cmd?--permanent?--add-service=http firewall-cmd?--permanent?--add-service=https firewall-cmd?--reload

至此,服務器配置完成。

步驟 8 – nextcloud 安裝

打開你的 web 瀏覽器,輸入你為 nextcloud 設置的域名,我這里設置為 cloud.nextcloud.co,然后會重定向到安全性更好的 https 連接。

設置你的管理員用戶名和密碼,然后輸入數據驗證信息,點擊 ‘完成安裝 (finish setup)’。

? 版權聲明
THE END
喜歡就支持一下吧
點贊14 分享