Cách cài đặt Nextcloud với Nginx và Let's Encrypt SSL trên Ubuntu 20.04 LTS

theanh

Administrator
Nhân viên
Nextcloud là phần mềm miễn phí (Mã nguồn mở) giống Dropbox, 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, Oracle Database và SQLite.

Để giữ cho các tệp của bạn được đồng bộ hóa giữa Desktop và máy chủ của riêng bạn, 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. Nextcloud không chỉ là bản sao Dropbox, nó còn cung cấp các tính năng bổ sung như Lịch, Danh bạ, Lên lịch tác vụ và phát trực tuyến phương tiện với Ampache, v.v.

Trong hướng dẫn này, chúng tôi sẽ chỉ cho bạn cách cài đặt và cấu hình bản phát hành Nextcloud mới nhất (tại thời điểm viết bài này, bản phát hành mới nhất là 18) trên máy chủ Ubuntu 20.04. Chúng tôi sẽ chạy Nextcloud với máy chủ web Nginx và PHP7.4-FPM và sử dụng máy chủ MariaDB làm hệ thống cơ sở dữ liệu.

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

  • Ubuntu 20.04
  • Quyền root

Những việc chúng tôi sẽ làm​

  1. Cài đặt Nginx Webserver
  2. Cài đặt và cấu hình PHP7.4-FPM
  3. Cài đặt và cấu hình MySQL Server
  4. Tạo SSL Letsencrypt
  5. Tải xuống Nextcloud 18
  6. Cấu hình Nginx Virtual Host cho Nextcloud
  7. Cấu hình tường lửa UFW
  8. Sau khi cài đặt Nextcloud

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

Bước đầu tiên chúng ta sẽ thực hiện trong hướng dẫn nextcloud này là cài đặt máy chủ web Nginx. Chúng tôi sẽ sử dụng máy chủ web Nginx thay vì máy chủ web Apache.

Đăng nhập vào máy chủ và cập nhật kho lưu trữ, sau đó cài đặt máy chủ web Nginx bằng lệnh apt như hiển thị bên dưới.
Mã:
sudo apt update
sudo apt install nginx -y
Sau khi cài đặt hoàn tất, hãy khởi động dịch vụ Nginx và cho phép dịch vụ khởi chạy mỗi lần khởi động hệ thống bằng systemctl.
Mã:
systemctl start nginx
systemctl enable nginx
Dịch vụ Nginx đã hoạt động, hãy kiểm tra bằng lệnh sau command.
Mã:
systemctl status nginx
Và bạn sẽ nhận được kết quả như bên dưới.



Kết quả là máy chủ web Nginx đã được cài đặt trên Ubuntu 20.04.

Bước 2 - Cài đặt và cấu hình PHP7.4-FPM​

Theo mặc định, Ubuntu 20.04 đi kèm với phiên bản mặc định là PHP 7.4.

Cài đặt các gói PHP và PHP-FPM mà Nextcloud cần bằng lệnh apt bên dưới.
Mã:
sudo apt install php-fpm php-curl php-cli php-mysql php-gd php-common php-xml php-json php-intl php-pear php-imagick php-dev php-common php-mbstring php-zip php-soap php-bz2 -y
Sau khi cài đặt hoàn tất, chúng ta sẽ cấu hình Các tệp php.ini cho php-fpm và php-cli.

Đi đến thư mục '/etc/php/7.4'.
Mã:
cd /etc/php/7.4/
Sửa các tệp php.ini cho php-fpm và php-cli bằng vim.
Mã:
vim fpm/php.ini
vim cli/php.ini
Bỏ ghi chú dòng 'date.timezone' và thay đổi giá trị theo múi giờ của riêng bạn.
Mã:
date.timezone = Asia/Jakarta
Bỏ ghi chú dòng 'cgi.fix_pathinfo' và thay đổi giá trị thành '0'.
Mã:
cgi.fix_pathinfo=0
Lưu và thoát.

Tiếp theo, hãy chỉnh sửa cấu hình nhóm php-fpm 'www.conf'.
Mã:
vim fpm/pool.d/www.conf
Bỏ chú thích những dòng bên dưới.
Mã:
env[HOSTNAME] = $HOSTNAMEenv[PATH] = /usr/local/bin:/usr/bin:/binenv[TMP] = /tmpenv[TMPDIR] = /tmpenv[TEMP] = /tmp
Lưu và thoát.

Khởi động lại dịch vụ PHP7.4-FPM và cho phép dịch vụ này khởi chạy mỗi khi khởi động hệ thống.
Mã:
systemctl restart php7.4-fpm
systemctl enable php7.4-fpm


Bây giờ hãy kiểm tra dịch vụ PHP-FPM bằng lệnh sau.
Mã:
ss -xa | grep php
systemctl status php7.4-fpm
Và bạn sẽ thấy php-fpm đang hoạt động trong tệp sock '/run/php/php7.4-fpm.sock'.


Bước 3 - Cài đặt và cấu hình Máy chủ MariaDB​

Trong bước này, chúng ta sẽ cài đặt phiên bản MariaDB mới nhất và tạo cơ sở dữ liệu mới cho quá trình cài đặt nextcloud. Các gói MariaDB phiên bản mới nhất có sẵn trên kho lưu trữ theo mặc định.

Cài đặt phiên bản mới nhất của máy chủ MariaDB bằng lệnh apt bên dưới.
Mã:
sudo apt install mariadb-server -y
Sau khi cài đặt hoàn tất, hãy khởi động dịch vụ MariaDB và cho phép dịch vụ này khởi chạy mọi lúc khi khởi động hệ thống.
Mã:
systemctl start mariadb
systemctl enable mariadb
Bây giờ hãy kiểm tra dịch vụ MySQL bằng lệnh sau.
Mã:
systemctl status mariadb


Máy chủ MariaDB đang hoạt động trên Ubuntu 20.04.

Tiếp theo, chúng ta sẽ cấu hình mật khẩu gốc MariaDB bằng lệnh 'mysql_secure_installation'.

Chạy lệnh sau.
Mã:
mysql_secure_installation
Và bạn sẽ được yêu cầu cấu hình một số thông tin của MariaDB Server. Ngoài ra, hãy nhập mật khẩu gốc mới cho MariaDB Server.
Mã:
Nhập mật khẩu hiện tại cho root (nhập nếu không nhập): Nhấn Enter
Đặt mật khẩu gốc? [C/N] C
Xóa người dùng ẩn danh? [C/N] C
Không cho phép đăng nhập gốc từ xa? [C/N] C
Xóa cơ sở dữ liệu thử nghiệm và quyền truy cập vào cơ sở dữ liệu đó? [C/N] C
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 thiết lập.

Tiếp theo, chúng ta sẽ tạo một cơ sở dữ liệu mới để cài đặt nextcloud. Chúng tôi sẽ tạo một cơ sở dữ liệu mới có tên 'nextcloud_db' với người dùng 'nextclouduser' và mật khẩu 'Nextclouduser421@'.

Đăng nhập vào shell MySQL với tư cách là người dùng root bằng lệnh mysql.
Mã:
mysql -u root -p
NHẬP MẬT KHẨU GỐC MYSQL
Bây giờ hãy tạo cơ sở dữ liệu và người dùng với mật khẩu bằng cách chạy các truy vấn MySQL sau.
Mã:
create database nextcloud_db;
create user nextclouduser@localhost được xác định bởi 'Nextclouduser421@';
cấp tất cả các quyền trên nextcloud_db.* cho nextclouduser@localhost được xác định bởi 'Nextclouduser421@';
flush privileges;
Và cơ sở dữ liệu và người dùng mới cho cài đặt nextcloud đã được tạo.



Cài đặt MariaDB và cấu hình cho nextcloud đã hoàn tất.

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

Trong hướng dẫn này, chúng ta sẽ bảo mật nextcloud bằng SSL miễn phí từ Letsencrypt và chúng ta sẽ tạo tệp chứng chỉ bằng công cụ letsencrypt.

Nếu bạn không có tên miền hoặc không cài đặt nextcloud trên máy tính cục bộ, bạn có thể tạo chứng chỉ Tự ký bằng OpenSSL.

Cài đặt công cụ 'letsencrypt' bằng lệnh apt bên dưới.
Mã:
sudo apt install certbot -y
Sau khi cài đặt hoàn tất, hãy dừng dịch vụ nginx.
Mã:
systemctl stop nginx
Tiếp theo, chúng ta sẽ tạo chứng chỉ SSL cho tên miền 'nextcloud.hakase-labs.io' của mình bằng dòng lệnh cerbot. Chạy lệnh bên dưới.
Mã:
certbot certonly --standalone -d cloud.hakase-labs.io
Bạn sẽ được yêu cầu cung cấp địa chỉ email và địa chỉ này được sử dụng để thông báo gia hạn. Đối với thỏa thuận TOS của Letsencrypt, hãy nhập 'A' để đồng ý và đối với địa chỉ email chia sẻ, bạn có thể nhập 'N' để không.



Khi hoàn tất, bạn sẽ nhận được kết quả như hiển thị bên dưới.



Các chứng chỉ SSL Letsencrypt cho tên miền netxcloud đã được tạo, tất cả đều nằm trong thư mục '/etc/letsencrypt/live/your-domain'.

Bước 5 - Tải xuống Nextcloud​

Trước khi tải xuống mã nguồn nextcloud, hãy đảm bảo rằng gói giải nén đã được cài đặt trên hệ thống. Nếu bạn không có gói này, hãy cài đặt nó bằng lệnh apt bên dưới.
Mã:
sudo apt install wget unzip zip -y
Bây giờ hãy đến thư mục '/var/www' và tải xuống phiên bản Nextcloud mới nhất bằng lệnh sau.
Mã:
cd /var/www/
wget -q https://download.nextcloud.com/server/releases/latest.zip
Giải nén mã nguồn Nextcloud và bạn sẽ nhận được một thư mục mới 'netxcloud', hãy thay đổi quyền sở hữu thư mục nextcloud thành người dùng 'www-data'.
Mã:
unzip -qq latest.zip
sudo chown -R www-data:www-data /var/www/nextcloud
Kết quả là, Nextcloud đã được tải xuống trong thư mục '/var/www/nextcloud' và đó sẽ là thư mục gốc của web.


Bước 6 - Cấu hình Nginx Virtual Host cho Nextcloud​

Trong bước này, chúng ta sẽ cấu hình nginx virtual host cho nextcloud. Chúng ta sẽ cấu hình nextcloud để chạy dưới kết nối HTTPS và sẽ tự động buộc kết nối HTTP đến kết nối HTTPS an toàn.

Bây giờ hãy đến thư mục '/etc/nginx/sites-available' và tạo một tệp máy chủ ảo mới 'nextcloud'.
Mã:
cd /etc/nginx/sites-available/
vim nextcloud
Ở đó, dán cấu hình máy chủ ảo nextcloud sau.
Mã:
upstream php-handler {
 #server 127.0.0.1:9000;
 server unix:/var/run/php/php7.4-fpm.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ể trùng lặp
 ssl_certificate /etc/letsencrypt/live/cloud.hakase-labs.io/fullchain.pem;
 ssl_certificate_key /etc/letsencrypt/live/cloud.hakase-labs.io/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à thoát.

Bật máy chủ ảo và kiểm tra cấu hình, đảm bảo không có lỗi.
Mã:
ln -s /etc/nginx/sites-available/nextcloud /etc/nginx/sites-enabled/
nginx -t
Bây giờ hãy khởi động lại dịch vụ PHP7.4-FPM và dịch vụ nginx bằng lệnh systemctl bên dưới.
Mã:
systemctl restart nginx
systemctl restart php7.4-fpm
Cấu hình máy chủ ảo Nginx cho nextcloud đã được tạo.


Bước 7 - Cấu hình Tường lửa UFW​

Trong hướng dẫn này, chúng ta sẽ bật tường lửa và sẽ sử dụng tường lửa UFW cho Ubuntu.

Thêm SSH, HTTP và HTTPS vào danh sách tường lửa UFW bằng lệnh bên dưới.
Mã:
for svc in ssh http https
do
ufw allow $svc
done
Sau đó, bật tường lửa UFW và kiểm tra dịch vụ và cổng được phép.
Mã:
ufw enable
ufw status numbered
Và bạn sẽ nhận được cổng HTTP 80 và cổng HTTPS 443 trong danh sách.


Bước 8 - Cài đặt Nextcloud sau​

Mở trình duyệt web của bạn và nhập địa chỉ URL nextcloud.

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

Và bạn sẽ được chuyển hướng đến kết nối HTTPS an toàn.

Ở trang đầu, chúng ta cần tạo người dùng quản trị cho nextcloud, nhập mật khẩu người dùng quản trị. Trên cấu hình 'Thư mục dữ liệu', nhập đường dẫn đầy đủ của thư mục 'dữ liệu' '/var/www/nextcloud/data'.

Cuộn trang xuống cuối và bạn sẽ nhận được cấu hình cơ sở dữ liệu. Nhập thông tin cơ sở dữ liệu mà chúng ta đã tạo ở bước 3, sau đó nhấp vào nút 'Hoàn tất thiết lập'.



Nếu bạn chọn tùy chọn 'Cài đặt ứng dụng được đề xuất', bạn sẽ nhận được trang sau.



Nextcloud đang cài đặt các ứng dụng được đề xuất bổ sung cho bạn.

Và sau khi 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.



Quá trình cài đặt Nextcloud 18 với máy chủ web Nginx và cơ sở dữ liệu MySQL trên Ubuntu 20.04 đã hoàn tất thành công.

Tham khảo​

 
Back
Bên trên