Cách cài đặt và cấu hình Nextcloud trên Fedora 32

theanh

Administrator
Nhân viên
Nextcloud là phần mềm mã nguồn mở để lưu trữ và đồng bộ dữ liệu của bạn trên nhiều thiết bị. Bạn có thể coi nó như bản sao Dropbox của riêng bạn. Nhưng ngoài việc lưu trữ tệp, nó còn cung cấp các tính năng bổ sung như Lịch, Danh bạ, Nhiệm vụ theo lịch trình, phát trực tuyến phương tiện, v.v.

Nextcloud cung cấp các ứng dụng cho Windows, Linux, MacOS và các ứng dụng di động cho Android và iOS mà bạn có thể sử dụng để đồng bộ tệp trên nhiều thiết bị khác nhau của mình.

Trong hướng dẫn này, chúng ta sẽ tìm hiểu cách cài đặt và cấu hình Nextcloud trên máy chủ chạy Fedora 32. Chúng tôi cũng sẽ cài đặt máy chủ web Nginx cùng với PHP 7.4 và MariaDB

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


  • Máy chủ chạy Fedora 32.

  • Người dùng sudo không phải root.

  • Đảm bảo mọi thứ đã được cập nhật.
Mã:
$ sudo dnf update
[*]
Các gói thiết yếu.
Mã:
$ sudo dnf install wget curl bzip2 nano unzip policycoreutils-python-utils -y
Một số gói này có thể đã có trên hệ thống của bạn.

Cấu hình tường lửa​

Bước đầu tiên là cấu hình tường lửa. Máy chủ Fedora đi kèm với tường lửa Firewalld được cài đặt sẵn.

Kiểm tra xem tường lửa có đang chạy không.
Mã:
$ sudo firewall-cmd --staterunning
Kiểm tra các dịch vụ/cổng hiện được phép.
Mã:
$ sudo firewall-cmd --permanent --list-services
Nó sẽ hiển thị đầu ra sau.
Mã:
dhcpv6-client mdns ssh
Cho phép HTTP và HTTPS ports.
Mã:
$ sudo firewall-cmd --permanent --add-service=http$ sudo firewall-cmd --permanent --add-service=https
Kiểm tra lại trạng thái của tường lửa.
Mã:
$ sudo firewall-cmd --permanent --list-services
Bạn sẽ thấy kết quả tương tự.
Mã:
dhcpv6-client http https mdns ssh
Tải lại Tường lửa.
Mã:
$ sudo systemctl reload firewalld

Cài đặt PHP​

Theo mặc định, Fedora 32 đi kèm với PHP 7.4 nhưng để có kho lưu trữ PHP được cập nhật, chúng tôi sẽ thêm kho lưu trữ REMI.

Cài đặt kho lưu trữ REMI, đây là kho lưu trữ chính thức của Fedora để cài đặt Các gói PHP.
Mã:
$ sudo dnf -y install https://rpms.remirepo.net/fedora/remi-release-32.rpm
Bật kho lưu trữ remi và tắt kho lưu trữ remi-modular. Điều này cho phép kho lưu trữ cần thiết để cài đặt các gói PHP 7.4.
Mã:
$ sudo dnf config-manager --set-enabled remi$ sudo dnf config-manager --set-disabled remi-modular
Cài đặt PHP 7.4 cùng với một số gói bổ sung.
Mã:
$ sudo dnf install php-fpm php-cli php-gd php-mbstring php-intl php-mysqlnd php-imagick php-zip php-json php-process php-xml php-bcmath php-gmp php-ftp php-smbclient php-opcache
Kiểm tra xem PHP có hoạt động chính xác không.
Mã:
$ php --versionPHP 7.4.11 (cli) (xây dựng: 29 tháng 9 năm 2020 10:17:06) ( NTS )Bản quyền (c) The PHP GroupZend Engine v3.4.0, Bản quyền (c) Zend Technologies với Zend OPcache v7.4.11, Bản quyền (c), của Zend Technologies

Cấu hình PHP​

Mở tệp /etc/php-fpm.d/www.conf.
Mã:
$ sudo nano /etc/php-fpm.d/www.conf
Chúng ta cần đặt người dùng/nhóm Unix của các quy trình PHP thành nginx. Tìm các dòng user=apachegroup=apache trong tệp và đổi chúng thành nginx.
Mã:
...; Người dùng/nhóm quy trình Unix; Lưu ý: Người dùng là bắt buộc. Nếu nhóm không được thiết lập, nhóm người dùng mặc định; sẽ được sử dụng.; RPM: người dùng apache được chọn để cung cấp quyền truy cập vào cùng thư mục với httpduser = nginx; RPM: Giữ một nhóm được phép ghi vào thư mục nhật ký.group = nginx...
Bỏ ghi chú các biến môi trường PHP bên dưới.
Mã:
env[HOSTNAME] = $HOSTNAMEenv[PATH] = /usr/local/bin:/usr/bin:/binenv[TMP] = /tmpenv[TMPDIR] = /tmpenv[TEMP] = /tmp
Bỏ ghi chú cấu hình opcache ở dòng cuối cùng.
Mã:
php_value[opcache.file_cache] = /var/lib/php/opcache
Lưu tệp bằng cách nhấn Ctrl + X và nhập Y khi được nhắc.

Bây giờ hãy chỉnh sửa cấu hình opcache PHP /etc/php.d/10-opcache.ini.
Mã:
$ sudo nano /etc/php.d/10-opcache.ini
Thay đổi cấu hình như bên dưới.
Mã:
opcache.enable=1opcache.memory_consumption=128opcache.interned_strings_buffer=8opcache.max_accelerated_files=10000opcache.revalidate_freq=1opcache.save_comments=1
Lưu tệp bằng cách nhấn Ctrl + X và nhập Y khi được nhắc.

Chạy các lệnh sau để tăng giới hạn Tải tệp lên và Bộ nhớ cho PHP.
Mã:
$ sudo cp /etc/php.ini /etc/php.ini.bak$ sudo sed -i "s/memory_limit = 128M/memory_limit = 512M/" /etc/php.ini$ sudo sed -i "s/post_max_size = 8M/post_max_size = 100M/" /etc/php.ini$ sudo sed -i "s/upload_max_filesize = 2M/upload_max_filesize = 100M/" /etc/php.ini
Theo mặc định, có 3 tệp trong thư mục /var/lib/php/ có nhóm chủ sở hữu được đặt thành apache, nhưng chúng tôi đang sử dụng Nginx. Vì vậy, chúng ta cần cấp cho người dùng nginx quyền đọc và ghi vào 3 thư mục bằng setfacl.
Mã:
$ sudo setfacl -R -m u:nginx:rwx /var/lib/php/opcache/$ sudo setfacl -R -m u:nginx:rwx /var/lib/php/session/$ sudo setfacl -R -m u:nginx:rwx /var/lib/php/wsdlcache/
Bật và bắt đầu quy trình php-fpm.
Mã:
$ sudo systemctl enable php-fpm$ sudo systemctl start php-fpm

Cài đặt Nginx​

Theo mặc định, Fedora 32 đi kèm với phiên bản ổn định mới nhất của Nginx.

Cài đặt Nginx.
Mã:
$ sudo dnf install nginx -y
Kiểm tra xem nó có hoạt động bình thường không.
Mã:
$ nginx -vPhiên bản nginx: nginx/1.18.0
Khởi động và bật Nginx.
Mã:
$ sudo systemctl start nginx$ sudo systemctl enable nginx
Mở địa chỉ IP của máy chủ trong trình duyệt để xem trang sau. Điều này có nghĩa là Nginx đang hoạt động bình thường.


Cài đặt MariaDB​

MariaDB là một sự thay thế trực tiếp cho MySQL, có nghĩa là các lệnh để chạy và vận hành MariaDB giống như các lệnh dành cho MySQL.

Theo mặc định, Fedora 32 đi kèm với MariaDB 10.4, đây là phiên bản chúng ta sẽ sử dụng.

Cài đặt máy chủ MariaDB.
Mã:
$ sudo dnf install mariadb-server
Kiểm tra xem MariaDB đã được cài đặt đúng chưa.
Mã:
$ mysql --versionmysql Ver 15.1 Distrib 10.4.14-MariaDB, dành cho Linux (x86_64) bằng trình bao bọc EditLine
Bật và khởi động dịch vụ MariaDB.
Mã:
$ sudo systemctl enable mariadb$ sudo systemctl start mariadb
Chạy lệnh sau để thực hiện cấu hình mặc định như cung cấp mật khẩu gốc, xóa người dùng ẩn danh, không cho phép đăng nhập gốc từ xa và xóa bảng thử nghiệm.
Mã:
$ sudo mysql_secure_installation
Nhấn Enter sẽ chọn tùy chọn mặc định (tùy chọn được viết hoa, trong trường hợp này là Y).
Mã:
Nhập mật khẩu hiện tại cho gốc (enter nếu không có): [NHẤN ENTER]Chuyển sang xác thực unix_socket [C/B] [NHẤN ENTER]Đổi mật khẩu gốc? [C/B] [TRẢ LỜI n]Xóa người dùng ẩn danh? [C/B] [NHẤN ENTER]Không cho phép đăng nhập gốc từ xa? [C/B] [NHẤN ENTER]Xóa cơ sở dữ liệu thử nghiệm và quyền truy cập vào cơ sở dữ liệu đó? [C/B] [NHẤN ENTER]Tải lại bảng đặc quyền ngay bây giờ? [Y/n] [NHẤN ENTER]
Vậy là xong. Lần tới khi bạn muốn đăng nhập vào MySQL, hãy sử dụng lệnh sau
Mã:
$ sudo mysql
Nhập mật khẩu gốc của bạn khi được nhắc.

Cấu hình MariaDB​

Nhập lệnh sau để vào MySQL shell.
Mã:
$ sudo mysql
Tạo người dùng MySQL để xử lý Cơ sở dữ liệu NextCloud.
Mã:
mysql> TẠO NGƯỜI DÙNG 'nextuser'@'localhost' ĐƯỢC XÁC ĐỊNH BỞI 'yourpassword';
Tạo cơ sở dữ liệu NextCloud.
Mã:
mysql> TẠO CƠ SỞ DỮ LIỆU nextcloud BỘ KÝ TỰ utf8mb4 COLLATE utf8mb4_general_ci;
Cấp tất cả các quyền cho cơ sở dữ liệu Nextcloud cho người dùng mà chúng ta đã tạo.
Mã:
mysql> CẤP TẤT CẢ CÁC QUYỀN TRÊN nextcloud.* CHO 'nextuser'@'localhost';
Thoát khỏi MySQL Shell.
Mã:
mysql> thoát

Tải xuống Nextcloud​

Đã đến lúc tải xuống và thiết lập các thư mục Nextcloud.
Mã:
$ wget https://download.nextcloud.com/server/releases/latest.tar.bz2$ tar -jxvf latest.tar.bz2$ sudo mv nextcloud /var/www/html/
Tiếp theo, chúng ta cần tạo một thư mục dữ liệu.
Mã:
$ sudo mkdir /var/www/html/nextcloud/data$ sudo chown -R nginx:nginx /var/www/html/nextcloud

Cài đặt SSL​

Chúng ta sẽ cài đặt SSL bằng dịch vụ Let’s Encrypt.

Để làm được điều đó, hãy cài đặt Certbot.
Mã:
$ sudo dnf install certbot
Dừng Nginx vì nó sẽ can thiệp vào quá trình Certbot.
Mã:
$ sudo systemctl stop nginx
Tạo chứng chỉ. Chúng tôi cũng tạo chứng chỉ DHParams.
Mã:
$ export LDOMAIN="nextcloud.example.com"$ export LEMAIL="[emailprotected]"$ sudo certbot certonly --standalone -d $LDOMAIN --preferred-challenges http --agree-tos -n -m $LEMAIL --keep-until-expiring$ sudo systemctl start nginx$ sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048
Chúng tôi cũng cần thiết lập một công việc cron để tự động gia hạn SSL. Để mở trình soạn thảo crontab, hãy chạy lệnh sau
Mã:
$ sudo EDITOR=nano crontab -e
Lệnh trên mở Crontab bằng trình soạn thảo Nano thay vì trình soạn thảo Vim mặc định.

Dán dòng sau vào cuối.
Mã:
25 2 * * * /usr/bin/certbot renew --quiet --pre-hook “systemctl stop nginx” --post-hook “systemctl start nginx”
Công việc cron trên sẽ chạy certbot lúc 2:25 sáng hàng ngày. Bạn có thể thay đổi thành bất kỳ thứ gì bạn muốn.

Lưu tệp bằng cách nhấn Ctrl + X và nhập Y khi được nhắc.

Cấu hình SELinux/Quyền​

SELinux cần được cấu hình để Nextcloud hoạt động trên Fedora. Nhập các lệnh sau để biết các thiết lập SELinux cơ bản có thể hoạt động với mọi người.

Hãy đảm bảo điều chỉnh đường dẫn tệp nếu chúng khác nhau trong trường hợp của bạn.
Mã:
$ sudo semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/html/nextcloud/data(/.*)?'$ sudo semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/html/nextcloud/config(/.*)?'$ sudo semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/html/nextcloud/apps(/.*)?'$ sudo semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/html/nextcloud/.user.ini'$ sudo semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/html/nextcloud/3rdparty/aws/aws-sdk-php/src/data/logs(/.*)?'$ sudo restorecon -Rv '/var/www/html/nextcloud/'
Để bật cập nhật thông qua giao diện web của Nextcloud, hãy chạy lệnh sau.
Mã:
$ sudo setsebool -P httpd_unified on

Cấu hình Nginx cho Nextcloud​

Tiếp theo, chúng ta cần cấu hình Nginx để lưu trữ Nextcloud.

Với mục đích của chúng ta, Nextcloud sẽ được lưu trữ tại miền http://nextcloud.example.com,

Thiết lập các thư mục nơi các khối máy chủ sẽ tồn tại.
Mã:
$ sudo mkdir /etc/nginx/sites-available$ sudo mkdir /etc/nginx/sites-enabled
Mở Tệp /etc/nginx/nginx.conf để chỉnh sửa.
Mã:
$ sudo nano /etc/nginx/nginx.conf
Dán các dòng sau sau dòng include /etc/nginx/conf.d/*.conf
Mã:
include /etc/nginx/sites-enabled/*.conf;server_names_hash_bucket_size 64;
Nhấn Ctrl + X để đóng trình soạn thảo và nhấn Y khi được nhắc lưu tệp.

Tạo tệp /etc/nginx/sites-available/nextcloud.conf bằng trình soạn thảo Nano.
Mã:
$ sudo nano /etc/nginx/sites-available/nextcloud.conf
Dán mã sau vào trình soạn thảo. Đảm bảo thay thế tên miền mẫu bằng tên miền thực của bạn trước khi dán.
Mã:
upstream php-handler { #server 127.0.0.1:9000; server unix:/run/php-fpm/www.sock;}server { lắng nghe 80; lắng nghe [::]:80; server_name nextcloud.example.com; # thực thi https trả về 301 https://$server_name:443$request_uri;}server { lắng nghe 443 ssl http2; lắng nghe [::]:443 ssl http2; server_name nextcloud.example.com; access_log /var/log/nginx/nextcloud.access.log; error_log /var/log/nginx/nextcloud.error.log; # 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ể là thừa ssl_certificate /etc/letsencrypt/live/nextcloud.example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/nextcloud.example.com/privkey.pem; ssl_protocols TLSv1.2 TLSv1.3; ssl_session_timeout 1d; ssl_session_cache shared:MozSSL:10m; # khoảng 40000 phiên ssl_session_tickets tắt; ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384; ssl_prefer_server_ciphers tắt; ssl_dhparam /etc/ssl/certs/dhparam.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;" luôn luôn; # # 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" always; add_header X-XSS-Protection "1; mode=block" always; # Xóa X-Powered-By, đây là một lỗ hổng rò rỉ thông tin fastcgi_hide_header X-Powered-By; # Đường dẫn đến thư mục gốc của thư mục cài đặt của bạn /var/www/html/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 100M; 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 đã hết hạn không có bộ nhớ đệm không lưu trữ riêng tư không có bản sửa đổi cuối cùng không có xác thực thẻ; 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; } vị trí ~ ^\/(?: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\/.+|.+\/richdocumentscode\/proxy)\.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à map # Đảm bảo rằng tiêu đề này Ở DƯỚI 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"; 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; # 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|mp4|webm)$ { 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; }}
Nhấn Ctrl + X để đóng trình soạn thảo và nhấn Y khi được nhắc lưu tệp.

Kích hoạt tệp cấu hình này bằng cách liên kết tệp đến thư mục sites-enabled.
Mã:
$ sudo ln -s /etc/nginx/sites-available/nextcloud.conf /etc/nginx/sites-enabled/
Kiểm tra cấu hình Nginx.
Mã:
$ sudo nginx -t
Tải lại dịch vụ Nginx nếu mọi thứ ổn.
Mã:
$ sudo systemctl reload nginx

Cài đặt Nextcloud​

Có hai cách để cấu hình Nextcloud - thông qua dòng lệnh hoặc thông qua giao diện đồ họa. Chúng tôi sẽ chọn phương pháp dòng lệnh.

Nhập thư mục Nextcloud.
Mã:
$ cd /var/www/html/nextcloud
Chạy lệnh sau để cài đặt Nextcloud.
Mã:
$ sudo -u nginx php occ maintenance:install --database "mysql" --database-name "nextcloud" --database-user "nextuser" --database-pass "yourpassword" --admin-user "admin" --admin-pass "password"
Lệnh này được chạy dưới dạng người dùng nginx vì nó có quyền ghi vào thư mục Nextcloud.

Tiếp theo, chúng ta cần thêm tên miền của mình vào danh sách tên miền đáng tin cậy. Mở tệp /var/www/html/nextcloud/config/config.php.
Mã:
$ sudo nano config/config.php
Thay đổi Giá trị của biến trusted_domains bằng cách thêm địa chỉ IP Máy chủ và tên miền Nextcloud nextcloud.example.com của bạn vào đó để bạn có thể truy cập cài đặt từ tên miền của mình.
Mã:
'trusted_domains' => array ( 0 => 'localhost', 1 => '167.172.35.56', 2 => 'nextcloud.example.com', ),
Nhấn Ctrl + X để đóng trình chỉnh sửa và nhấn Y khi được nhắc lưu tệp.

Khởi chạy cài đặt Nextcloud của bạn bằng cách mở https://nextcloud.example.com trong trình duyệt của bạn và bạn sẽ thấy màn hình sau.



Nhập Chi tiết đăng nhập quản trị của bạn. Cuộn qua các biểu ngữ Nextcloud giới thiệu, đặt vị trí thời tiết và trạng thái của bạn và chọn một hình nền và khi hoàn tất, bạn sẽ thấy một màn hình tương tự.


Kết luận​

Như vậy là kết thúc hướng dẫn cài đặt Nextcloud trên máy chủ Fedora 32 của chúng tôi. Nếu bạn có bất kỳ câu hỏi nào, hãy đăng chúng trong phần bình luận bên dưới.
 
Back
Bên trên