Cách cài đặt Nextcloud với Nginx và PHP 7.3 trên CentOS 8

theanh

Administrator
Nhân viên
Nextcloud là phần mềm giống dropbox miễn phí (mã nguồn mở), một nhánh của dự án ownCloud. Nextcloud được viết bằng PHP và JavaScript, hỗ trợ nhiều hệ thống cơ sở dữ liệu như MySQL/MariaDB, PostgreSQL, cơ sở dữ liệu Oracle và SQLite.

Để giữ cho các tệp của bạn đồng bộ giữa máy tính để bàn và máy chủ, Nextcloud cung cấp các ứng dụng cho máy tính để bàn Windows, Linux và Mac và một ứng dụng di động cho Android và iOS.

Trong hướng dẫn này, chúng tôi sẽ chỉ cho bạn cách cài đặt Nextcloud 17 với máy chủ web Nginx, PHP 7.3 và cơ sở dữ liệu MariaDB trên máy chủ CentOS 8. Chúng tôi sẽ cài đặt Nextcloud và bảo mật bằng chứng chỉ SSL Let's Encrypt miễn phí.

Điều kiện tiên quyết

Đối với hướng dẫn này, chúng tôi sẽ cài đặt Nextcloud trên máy chủ CentOS 8 với 2GB RAM, 25GB dung lượng trống và 2CPU.

Những gì chúng tôi sẽ làm:
  • Cài đặt máy chủ web Nginx
  • Cài đặt PHP-FPM 7.3
  • Cấu hình PHP-FPM 7.3
  • Cài đặt và cấu hình cơ sở dữ liệu MariaDB
  • Tạo SSL Letsencrypt
  • Tải xuống Nextcloud 17
  • Thiết lập Nginx Virtualhost cho Nextcloud
  • Thiết lập SELinux cho Nextcloud
  • Nextcloud sau khi cài đặt

Bước 1 - Cài đặt Nginx​

Đầu tiên, chúng tôi sẽ cài đặt máy chủ web Nginx đến máy chủ CentOS 8 và mở cổng HTTP và HTTPS trên tường lửa.

Cài đặt Nginx từ kho lưu trữ AppStream bằng lệnh dnf bên dưới.
Mã:
sudo dnf install nginx
Sau khi cài đặt hoàn tất, hãy khởi động dịch vụ nginx và thêm nó vào hệ thống khởi động.
Mã:
systemctl start nginx
systemctl enable nginx
Bây giờ hãy kiểm tra trạng thái dịch vụ nginx bằng lệnh bên dưới.
Mã:
systemctl status nginx
Bạn sẽ nhận được Dịch vụ nginx đang hoạt động trên máy chủ CentOS 8.



Tiếp theo, chúng ta sẽ thêm các dịch vụ HTTP và HTTPS vào firewalld.

Thêm các dịch vụ HTTP và HTTPS vào firewalld bằng lệnh firewall-cmd bên dưới.
Mã:
firewall-cmd --add-service=http --permanent
firewall-cmd --add-service=https --permanent
Sau đó, tải lại các dịch vụ firewalld.
Mã:
firewall-cmd --reload
Kết quả là bạn đã cài đặt thành công máy chủ web Nginx và mở các cổng HTTP và HTTPS trên máy chủ CentOS 8.


Bước 2 - Cài đặt PHP-FPM​

Theo yêu cầu hệ thống Nextcloud, bạn nên sử dụng PHP 7.2 hoặc PHP 7.3 để cài đặt.

Đối với hướng dẫn này, chúng ta sẽ sử dụng PHP 7.3 có thể được cài đặt từ kho lưu trữ REMI.

Trước khi đi sâu hơn, chúng ta sẽ kích hoạt kho lưu trữ 'PowerTools' và thêm kho lưu trữ EPEL và REMI cho máy chủ CentOS 8.

Chạy lệnh dnf bên dưới.
Mã:
sudo dnf config-manager --set-enabled PowerTools
sudo dnf install epel-release
sudo dnf install https://rpms.remirepo.net/enterprise/remi-release-8.rpm
Bây giờ hãy kiểm tra tất cả kho lưu trữ có sẵn trên hệ thống.
Mã:
dnf repolist
Và bạn sẽ nhận được kết quả như bên dưới.



Bạn đã kích hoạt kho lưu trữ 'PowerTools' và thêm kho lưu trữ EPEL và REMI cho CentOS 8.

Tiếp theo, chúng ta sẽ kích hoạt PHP 7.3 REMI kho lưu trữ.

Kiểm tra tất cả các mô-đun có sẵn cho các gói PHP.
Mã:
dnf module list php
Bây giờ hãy kích hoạt mô-đun của kho lưu trữ PHP 7.3 REMI.
Mã:
dnf module enable php:remi-7.3


Sau đó, cài đặt các gói PHP và PHP-FPM 7.3 cho Nextcloud bằng lệnh dnf bên dưới.
Mã:
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
Và bạn đã cài đặt PHP và PHP-FPM 7.3 vào hệ thống CentOS 8.

Bước 3 - Cấu hình PHP-FPM 7.3​

Trong bước này, chúng ta sẽ thiết lập PHP-FPM để triển khai Nextcloud.

Chỉnh sửa cấu hình 'php.ini' bằng lệnh sau.
Mã:
vim /etc/php.ini
Bỏ chú thích và thay đổi cấu hình như bên dưới.
Mã:
memory_limit = 512M
date.timezone = Asia/Jakarta
cgi.fixpathinfo = 0
Lưu và đóng.

Bây giờ hãy chỉnh sửa cấu hình opcache PHP '/etc/php.d/10-opcache.ini'.
Mã:
vim /etc/php.d/10-opcache.ini
Thay đổi cấu hình như bên dưới.
Mã:
opcache.enable=1
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=10000
opcache.memory_consumption=128
opcache.save_comments=1
opcache.revalidate_freq=1
Lưu và đóng.

Tiếp theo, chỉnh sửa cấu hình PHP-FPM '/etc/php-fpm.d/www.conf'.
Mã:
vim /etc/php-fpm.d/www.conf
Đổi 'user' và 'group' thành 'nginx'.
Mã:
user = nginx
group = nginx
Đổi cấu hình 'listen' thành tệp sock như bên dưới.
Mã:
listen = /run/php-fpm/www.sock
Bỏ chú thích biến môi trường PHP bên dưới.
Mã:
env[HOSTNAME] = $HOSTNAME
env[PATH] = /usr/local/bin:/usr/bin:/bin
env[TMP] = /tmp
env[TMPDIR] = /tmp
env[TEMP] = /tmp
Bỏ chú thích cấu hình opcache ở dòng cuối cùng.
Mã:
php_value[opcache.file_cache] = /var/lib/php/opcache
Lưu và đóng.

Bây giờ hãy tạo một thư mục mới cho phiên PHP và opcache, sau đó thay đổi chủ sở hữu của các thư mục đó thành người dùng và nhóm 'nginx'.
Mã:
mkdir -p /var/lib/php/{session,opcache}
chown -R nginx:nginx /var/lib/php/{session,opcache}
Và bạn đã hoàn tất cấu hình PHP-FPM để cài đặt Nextcloud.

Khởi động dịch vụ PHP-FPM và thêm nó vào hệ thống khởi động.
Mã:
systemctl enable php-fpm
systemctl start php-fpm


Bây giờ hãy kiểm tra tệp sock PHP-FPM và trạng thái dịch vụ.
Mã:
netstat -pl | grep php
systemctl status php-fpm
Và bạn sẽ nhận được kết quả như bên dưới.



Kết quả là, PHP-FPM đã chạy và hoạt động trong tệp sock '/run/php-fpm/www.sock'.

Bước 4 - Cài đặt và cấu hình MariaDB​

Trong bước này, chúng ta sẽ cài đặt máy chủ cơ sở dữ liệu MariaDB, thiết lập xác thực mật khẩu gốc và tạo cơ sở dữ liệu và người dùng mới cho Nextcloud.

Cài đặt cơ sở dữ liệu MariaDB bằng lệnh dnf bên dưới.
Mã:
sudo dnf install mariadb mariadb-server
Sau khi cài đặt hoàn tất, hãy khởi động dịch vụ MariaDB và thêm dịch vụ này vào hệ thống khởi động.
Mã:
systemctl start mariadb
systemctl enable mariadb
Và dịch vụ MariaDB đã hoạt động và đang chạy.



Tiếp theo, chúng ta sẽ thiết lập xác thực mật khẩu gốc bằng lệnh 'mysql_secure_installation' bên dưới.
Mã:
mysql_secure_installation
Nhập mật khẩu gốc của bạn và nhập 'Y' cho phần cấu hình còn lại.
Mã:
Đặt mật khẩu gốc? [Y/n] Y
Xóa người dùng ẩn danh? [Y/n] Y
Xóa cơ sở dữ liệu thử nghiệm và truy cập vào cơ sở dữ liệu đó? [Y/n] Y
Tải lại bảng đặc quyền ngay bây giờ? [Y/n] Y
Và mật khẩu gốc MariaDB đã được cấu hình.

Bây giờ hãy đăng nhập vào shell MySQL bằng lệnh mysql bên dưới.
Mã:
mysql -u root -p
NHẬP MẬT KHẨU GỐC CỦA BẠN
Bây giờ hãy tạo một cơ sở dữ liệu mới 'nextcloud_db' và tạo một người dùng mới 'nextclouduser' với mật khẩu 'nextcloudpassdb' bằng các truy vấn bên dưới.
Mã:
create database nextcloud_db;
create user nextclouduser@localhost defined by 'nextcloudpassdb';
grant all privileges on nextcloud_db.* to nextclouduser@localhost defined by 'nextcloudpassdb';
flush privileges;
Và bạn đã tạo cơ sở dữ liệu và người dùng để cài đặt Nextcloud.


Bước 4 - Tạo SSL Letsencrypt​

Trong Bước này, chúng ta sẽ tạo SSL letsencrypt bằng 'certbot'. Chứng chỉ SSL sẽ được sử dụng để bảo mật quyền truy cập Nextcloud.

Cài đặt certbot từ kho lưu trữ EPEL bằng lệnh dnf bên dưới.
Mã:
sudo dnf install certbot
Sau khi cài đặt hoàn tất, hãy tạo chứng chỉ SSL cho tên miền Nextcloud bằng lệnh bên dưới và đảm bảo thay đổi tên miền và địa chỉ email bằng tên miền và địa chỉ email của riêng bạn.
Mã:
certbot certonly --webroot --webroot-path /usr/share/nginx/html --agree-tos -m [emailprotected] -d cloud.hakase-labs.io
Sau khi hoàn tất, tất cả các chứng chỉ SSL được tạo đều nằm trong thư mục '/etc/letsencrypt/live/cloud.hakase-labs.io'.

Kiểm tra bằng lệnh sau.
Mã:
ls -lah /etc/letsencrypt/live/cloud.hakase-labs.io/
Và bạn đã tạo SSL letsencrypt bằng công cụ certbot.

Bước 5 - Tải xuống và cài đặt Nextcloud​

Trong bước này, chúng ta sẽ tải xuống phiên bản mới nhất của Nextcloud 17.

Trước khi tải xuống mã nguồn nextcloud, hãy cài đặt gói zip vào hệ thống.
Mã:
sudo dnf install unzip
Bây giờ hãy đến thư mục '/var/www/' và tải xuống mã nguồn Nextcloud bằng lệnh wget như bên dưới.
Mã:
cd /var/www/
wget https://download.nextcloud.com/server/releases/nextcloud-17.0.2.zip
Giải nén mã nguồn Nextcloud bằng lệnh bên dưới.
Mã:
unzip nextcloud-17.0.2.zip
Và bạn sẽ nhận được một thư mục mới có tên là 'nextcloud'.

Bây giờ hãy tạo một thư mục 'data' mới cho Nextcloud. Thư mục 'data' sẽ được sử dụng để lưu trữ dữ liệu người dùng.
Mã:
mkdir -p /var/www/nextcloud/data/
Sau đó, hãy thay đổi chủ sở hữu của thư mục 'nextcloud' thành người dùng và nhóm 'nginx'.
Mã:
sudo chown -R nginx:nginx /var/www/nextcloud
Và bạn đã tải xuống Nextcloud 17 mới nhất vào thư mục '/var/www'.


Bước 6 - Thiết lập Nginx Virtual Host cho Nextcloud​

Sau khi tải xuống mã nguồn Nextcloud, chúng ta sẽ thiết lập Nginx virtual host cho Nextcloud.

Vào thư mục '/etc/nginx/conf.d' và tạo cấu hình mới 'nextcloud.conf'.
Mã:
cd /etc/nginx/conf.d/
vim nextcloud.conf
Bây giờ hãy thay đổi tên miền và đường dẫn chứng chỉ SSL bằng tên miền của riêng bạn và dán cấu hình sau vào đó.
Mã:
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;
 # thực thi https
 return 301 https://$server_name:443$request_uri;
}

server {
 listen 443 ssl http2;
 listen [::]:443 ssl http2;
 server_name cloud.hakase-labs.io;

 # Sử dụng hướng dẫn của Mozilla cho cài đặt SSL/TLS
 # https://mozilla.github.io/server-side-tls/ssl-config-generator/
 # LƯU Ý: một số cài đặt bên dưới có thể thừa
 ssl_certificate /etc/ssl/nginx/fullchain.pem;
 ssl_certificate_key /etc/ssl/nginx/privkey.pem;

 # Thêm tiêu đề để phục vụ tiêu đề liên quan đến bảo mật
 # Trước khi bật tiêu đề Strict-Transport-Security, vui lòng đọc kỹ
 # chủ đề này trước.
 #add_header Strict-Transport-Security "max-age=15768000; includeSubDomains; preload;" always;
 #
 # CẢNH BÁO: Chỉ thêm tùy chọn tải trước sau khi bạn đọc về
 # hậu quả trong https://hstspreload.org/. Tùy chọn này
 # sẽ thêm tên miền vào danh sách được mã hóa cứng được vận chuyển
 # trong tất cả các trình duyệt chính và việc xóa khỏi danh sách này
 # có thể mất vài tháng.
 add_header Referrer-Policy "no-referrer" luôn luôn;
 add_header X-Content-Type-Options "nosniff" luôn luôn;
 add_header X-Download-Options "noopen" luôn luôn;
 add_header X-Frame-Options "SAMEORIGIN" luôn luôn;
 add_header X-Permitted-Cross-Domain-Policies "none" luôn luôn;
 add_header X-Robots-Tag "none" luôn luôn;
 add_header X-XSS-Protection "1; mode=block" luôn luôn;

 # Xóa X-Powered-By, đây là một thông tin rò rỉ
 fastcgi_hide_header X-Powered-By;

 # Đường dẫn đến thư mục gốc của cài đặt của bạn
 root /var/www/nextcloud;

 location = /robots.txt {
 allow all;
 log_not_found off;
 access_log off;
 }

 # Chỉ cần 2 quy tắc sau cho ứng dụng user_webfinger.
 # Bỏ ghi chú nếu bạn định sử dụng ứng dụng này.
 #rewrite ^/.well-known/host-meta /public.php?service=host-meta last;
 #rewrite ^/.well-known/host-meta.json /public.php?service=host-meta-json last;

 # Chỉ cần 2 quy tắc sau cho ứng dụng Mạng xã hội.
 # Bỏ ghi chú nếu bạn định sử dụng ứng dụng này.
 #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;
 }

 # đặt kích thước tải lên tối đa
 client_max_body_size 512M;
 fastcgi_buffers 64 4K;

 # Bật gzip nhưng không xóa tiêu đề ETag
 bật gzip;
 bật gzip_vary;
 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;

 # Bỏ chú thích nếu máy chủ của bạn được xây dựng bằng mô-đun ngx_pagespeed
 # Mô-đun này hiện không được hỗ trợ.
 #pagespeed tắt;

 location / {
 rewrite ^ /index.php;
 }

 location ~ ^\/(?:build|tests|config|lib|bên thứ 3|templates|data)\/ {
 từ chối tất cả;
 }
 vị trí ~ ^\/(?:\.|autotest|occ|issue|indie|db_|console) {
 từ chối tất cả;
 }

 vị trí ~ ^\/(?:index|remote|public|cron|core\/ajax\/update|status|ocs\/v[12]|updater\/.+|oc[ms]-provider\/.+)\.php(?:$|\/) {
 fastcgi_split_path_info ^(.+?\.php)(\/.*|)$;
 đặt $path_info $fastcgi_path_info;
 try_files $fastcgi_script_name =404;
 bao gồm fastcgi_params;
 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
 fastcgi_param PATH_INFO $path_info;
 fastcgi_param HTTPS on;
 # Tránh gửi tiêu đề bảo mật hai lần
 fastcgi_param modHeadersAvailable true;
 # Bật url đẹp
 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;
 }

 # Thêm tiêu đề kiểm soát bộ đệm cho các tệp js, css và bản đồ
 # Đảm bảo rằng nó ở DƯỚI ĐÂY vị trí khối PHP
 ~ \.(?:css|js|woff2?|svg|gif|map)$ {
 try_files $uri /index.php$request_uri;
 add_header Cache-Control "public, max-age=15778463";
 # Thêm tiêu đề để phục vụ các tiêu đề liên quan đến bảo mật (Mục đích là
 # sao chép các tiêu đề đó thành các tiêu đề ở trên)
 # Trước khi bật các tiêu đề Strict-Transport-Security, vui lòng đọc kỹ
 # chủ đề này trước.
 #add_header Strict-Transport-Security "max-age=15768000; includeSubDomains; preload;" luôn luôn;
 #
 # CẢNH BÁO: Chỉ thêm tùy chọn preload sau khi bạn đọc về
 # hậu quả trong https://hstspreload.org/. Tùy chọn này
 # sẽ thêm tên miền vào danh sách được mã hóa cứng được vận chuyển
 # trong tất cả các trình duyệt chính và việc xóa khỏi danh sách này
 # có thể mất vài tháng.
 add_header Referrer-Policy "no-referrer" luôn luôn;
 add_header X-Content-Type-Options "nosniff" luôn luôn;
 add_header X-Download-Options "noopen" luôn luôn;
 add_header X-Frame-Options "SAMEORIGIN" luôn luôn;
 add_header X-Permitted-Cross-Domain-Policies "none" luôn luôn;
 add_header X-Robots-Tag "none" luôn luôn;
 add_header X-XSS-Protection "1; mode=block" always;

 # Tùy chọn: Không ghi nhật ký truy cập vào tài sản
 access_log off;
 }

 location ~ \.(?:png|html|ttf|ico|jpg|jpeg|bcmap)$ {
 try_files $uri /index.php$request_uri;
 # Tùy chọn: Không ghi nhật ký truy cập vào tài sản khác
 access_log off;
 }
}
Lưu và đóng.

Sau đó, kiểm tra cấu hình nginx và khởi động lại dịch vụ Nginx. Và đảm bảo không có lỗi nào.
Mã:
nginx -t
systemctl restart nginx
Bây giờ dịch vụ Nginx sẽ mở một cổng HTTPS mới trên hệ thống, hãy kiểm tra bằng lệnh sau.
Mã:
netstat -plntu
Và bạn sẽ nhận được kết quả như bên dưới.



Kết quả là, bạn đã thêm cấu hình máy chủ ảo Nginx cho Nextcloud và bật HTTPS an toàn trên đó.

Bước 7 - Thiết lập SELinux cho Nextcloud​

Đối với hướng dẫn này, chúng tôi sẽ sử dụng SELinux ở chế độ 'thực thi'. Và chúng tôi sẽ thiết lập SELinux cho cài đặt Nextcloud.

Cài đặt công cụ quản lý SELinux bằng lệnh dnf bên dưới.
Mã:
sudo dnf install policycoreutils-python-utils
Bây giờ hãy thực thi lệnh sau với tư cách là root trên máy chủ của bạn.
Mã:
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/'
Và cấu hình SELinux cho Nextcloud đã hoàn tất.


Bước 8 - Trình hướng dẫn cài đặt Nextcloud​

Bây giờ hãy mở trình duyệt web của bạn và nhập tên miền Nextcloud của bạn vào thanh địa chỉ.


Bây giờ bạn sẽ nhận được trang cài đặt Nextcloud như bên dưới.



Nhập tên quản trị viên của bạn người dùng và mật khẩu, sau đó chọn 'MySQL/MariaDB' làm cơ sở dữ liệu của bạn và nhập thông tin chi tiết về cơ sở dữ liệu mà bạn đã tạo ở trên cùng.

Bây giờ hãy nhấp vào nút 'Hoàn tất thiết lập' và quá trình cài đặt sẽ bắt đầu.

Sau khi quá trình cài đặt hoàn tất, bạn sẽ nhận được bảng điều khiển Nextcloud như bên dưới.



Kết quả là bạn đã cài đặt thành công Nextcloud 17 mới nhất với máy chủ web Nginx, PHP-FPM 7.3 và cơ sở dữ liệu MariaDB trên máy chủ CentOS 8.

Tham khảo​

 
Back
Bên trên