Tại sao lại là Fedora và Nextcloud vào lúc 2 giờ sáng?
Đồng hồ điểm 2 giờ sáng, mình nhận được thông báo Google Drive sắp chạm ngưỡng 15GB miễn phí. Thay vì móc hầu bao trả tiền hàng tháng, mình quyết định tận dụng con VPS Fedora Server đang chạy ở nhà. Mình đã gắn bó với Fedora làm máy dev chính hơn 2 năm. Tốc độ cập nhật package của nó thực sự ấn tượng.
Với Nextcloud, việc chạy trên một distro “máu mặt” về bảo mật như Fedora giúp mình yên tâm hơn hẳn. Bạn không chỉ đơn thuần lưu file, mà đang phơi dữ liệu cá nhân ra internet. Nhiều người thường chọn Ubuntu cho nhẹ đầu. Tuy nhiên, Fedora mang lại trải nghiệm khác biệt: Package luôn mới (PHP 8.3, MariaDB 10.11) và lớp giáp SELinux cực kỳ chặt chẽ. Nếu bạn ưu tiên sự an toàn thay vì chỉ muốn “chạy được là xong”, đây chính là lựa chọn số một.
Bước 1: Thiết lập MariaDB và PHP 8.x
Trước hết, hãy cập nhật toàn bộ hệ thống. Fedora đẩy package mới liên tục, nên đừng bỏ qua bước này để tránh xung đột phiên bản.
sudo dnf update -y
sudo dnf install -y nginx mariadb-server mariadb php-fpm php-mysqlnd php-gd php-xml php-mbstring php-json php-intl php-pecl-apcu php-opcache php-process php-zip
Cài xong, bạn hãy kích hoạt MariaDB. Đừng bao giờ để database trống mật khẩu root trên môi trường production. Hãy chạy lệnh bảo mật ngay lập tức.
sudo systemctl enable --now mariadb
sudo mysql_secure_installation
Giờ là lúc tạo “nhà” cho dữ liệu. Hãy thay your_password bằng một chuỗi ký tự phức tạp để tránh bị brute-force:
sudo mysql -u root -p
CREATE DATABASE nextcloud CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
CREATE USER 'nextclouduser'@'localhost' IDENTIFIED BY 'your_password';
GRANT ALL PRIVILEGES ON nextcloud.* TO 'nextclouduser'@'localhost';
FLUSH PRIVILEGES;
EXIT;
Bước 2: Tải và giải nén Nextcloud
Mình thường dùng wget để tải bản ổn định nhất. Nextcloud hiện tại tối ưu rất tốt cho PHP 8.x, giúp tốc độ phản hồi giao diện nhanh hơn khoảng 20% so với các bản cũ.
cd /var/www/html
sudo wget https://download.nextcloud.com/server/releases/latest.zip
sudo unzip latest.zip
sudo chown -R apache:apache nextcloud
sudo rm latest.zip
Có một điểm trừ nhỏ trên Fedora: Nginx chạy dưới user nginx, nhưng PHP-FPM mặc định lại dùng user apache. Để hệ thống vận hành trơn tru, mình sẽ phân quyền cho apache và chỉnh Nginx chạy cùng group ở bước sau.
Bước 3: Cấu hình Nginx – Luồng gió mới cho hiệu suất
Hãy tạo một file cấu hình riêng thay vì sửa trực tiếp vào nginx.conf. Cách làm này giúp bạn quản lý nhiều website trên cùng một server dễ dàng hơn.
sudo nano /etc/nginx/conf.d/nextcloud.conf
Dán đoạn cấu hình tối ưu dưới đây vào. Lưu ý thay your_domain.com thành tên miền thật của bạn:
server {
listen 80;
server_name your_domain.com;
root /var/www/html/nextcloud/;
index index.php index.html;
client_max_body_size 512M; # Tăng giới hạn để upload file lớn
client_body_timeout 300s;
fastcgi_buffers 64 4K;
add_header Referrer-Policy "no-referrer" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-Frame-Options "SAMEORIGIN" always;
location / {
rewrite ^ /index.php;
}
location ~ ^\/(?:index|remote|public|cron|core\/ajax\/update|status|ocs\/v[12]|settings\/apps\/handler|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_pass unix:/run/php-fpm/www.sock;
}
location ~ ^\/(?:updater|oc[ms]-provider)(?:$|\/) {
try_files $uri/ =404;
index index.php;
}
location ~* \.(?:css|js|woff2?|svg|gif|map)$ {
add_header Cache-Control "public, max-age=15778463";
access_log off;
}
}
Bước 4: Chỉnh SELinux và Firewalld – Đừng tắt nó đi!
Nhiều hướng dẫn trên mạng thường bảo bạn gõ setenforce 0 để sửa lỗi nhanh. Đừng làm thế! SELinux là chốt chặn cuối cùng nếu Nginx bị hacker khai thác. Thay vì tắt nó, hãy cấp quyền đúng để nó bảo vệ bạn.
# Cho phép Nginx ghi dữ liệu vào các folder quan trọng
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 restorecon -Rv /var/www/html/nextcloud/
# Cho phép Nginx kết nối mạng để tải app từ store
sudo setsebool -P httpd_can_network_connect on
Mở port trên Firewalld để thế giới bên ngoài có thể truy cập:
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload
Bước 5: SSL Let’s Encrypt và tối ưu cuối cùng
Không có SSL, mật khẩu của bạn sẽ bay lơ lửng trên mạng dưới dạng văn bản thuần túy. Chúng ta sẽ dùng Certbot để lấy chứng chỉ miễn phí chỉ trong 30 giây:
sudo dnf install -y certbot python3-certbot-nginx
sudo certbot --nginx -d your_domain.com
Sau đó, mở file /etc/php-fpm.d/www.conf. Kiểm tra và đảm bảo các dòng sau khớp với cấu hình Nginx:
user = apache
group = apache
listen.owner = nginx
listen.group = nginx
Khởi động lại toàn bộ dịch vụ để áp dụng thay đổi:
sudo systemctl enable --now nginx php-fpm
Kiểm tra & Vận hành
Truy cập vào tên miền của bạn, giao diện Nextcloud sẽ chào đón bạn. Nhập thông tin database đã tạo ở Bước 1 để hoàn tất. Khi đã vào được Dashboard, bạn cần xử lý ngay hai việc sau:
- Cấu hình Cron: Nextcloud cần dọn dẹp file rác định kỳ. Hãy thêm dòng này vào crontab của user
apachebằng lệnhsudo crontab -u apache -e:
*/5 * * * * php -f /var/www/html/nextcloud/cron.php
- Tăng Memory Limit: Nếu hệ thống báo thiếu RAM, hãy sửa file
/etc/php.ini. Tìmmemory_limitvà nâng lên 512M hoặc 1G nếu bạn có nhiều ảnh.
Cảm giác nhìn thấy những tấm ảnh từ điện thoại tự động đồng bộ lên server riêng thực sự rất tuyệt vời. Fedora có thể hơi khó tính lúc đầu với SELinux. Tuy nhiên, một khi đã làm chủ được nó, bạn đang sở hữu một pháo đài dữ liệu cực kỳ vững chắc.
Nếu gặp lỗi 500 hoặc 403, bạn đừng hoảng loạn. Hãy kiểm tra log ngay bằng lệnh tail -f /var/log/nginx/error.log. Đa phần lỗi trên Fedora chỉ xoay quanh việc phân quyền hoặc SELinux chưa nhận đúng context mà thôi.

