Dựng Nextcloud tự host trên VPS Linux với Nginx

Vì sao nên tự host Nextcloud?
Bạn đã lỡ tay xóa nhầm file quan trọng trên Google Drive lần nào chưa? Hay lo ngại về quyền riêng tư khi lưu dữ liệu trên đám mây công cộng? Nextcloud là giải pháp self-hosted thay thế Dropbox, Google Drive, OneDrive, bạn toàn quyền kiểm soát dữ liệu, không bị giới hạn dung lượng ẩn, không bị lock-in. Bài viết này hướng dẫn bạn dựng Nextcloud tự host trên VPS Linux với stack Nginx, PHP 8.3, MariaDB và Redis, chạy trên Ubuntu 24.04 LTS.
Yêu cầu trước khi bắt đầu
- VPS chạy Ubuntu 24.04 LTS (bạn có thể thuê VPS Linux từ các nhà cung cấp trong nước, nên chọn gói có NVMe SSD và IPv4 riêng để đảm bảo tốc độ truy cập từ Việt Nam).
- User
sudonon-root (tạo bằng lệnhadduservà thêm vào groupsudo). - Tên miền (domain) trỏ A record tới IP VPS, Nextcloud yêu cầu truy cập HTTPS.
- Cổng 80 và 443 mở trên firewall (ufw hoặc nftables).
Bước 1, Cài đặt Nginx, PHP 8.3 và MariaDB
Đầu tiên, cập nhật hệ thống:
sudo apt update && sudo apt upgrade -y
Cài Nginx và PHP 8.3 cùng các module cần thiết:
sudo apt install nginx php8.3 php8.3-fpm php8.3-cli php8.3-{mysql,curl,gd,intl,bcmath,mbstring,xml,zip,imagick,common,gmp,bz2} -y
Cài MariaDB server:
sudo apt install mariadb-server mariadb-client -y
Sau cài, chạy script bảo mật cơ bản cho MariaDB: sudo mysql_secure_installation (đặt password root, xoá user anonymous, disallow root login từ xa).
Verify
sudo systemctl status nginx php8.3-fpm mariadb
# Output: active (running) cho cả 3 service
Bước 2, Tạo database cho Nextcloud
Kết nối MariaDB và tạo database + user riêng:
sudo mysql -u root -p
CREATE DATABASE nextcloud CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
CREATE USER 'ncuser'@'localhost' IDENTIFIED BY 'MatKhauManh_2025';
GRANT ALL PRIVILEGES ON nextcloud.* TO 'ncuser'@'localhost';
FLUSH PRIVILEGES;
EXIT;
Lưu ý: Đổi MatKhauManh_2025 thành mật khẩu thật, ghi lại để dùng ở bước cài web.
Bước 3, Tải và giải nén Nextcloud
Tải bản mới nhất từ trang chủ:
cd /tmp
wget https://download.nextcloud.com/server/releases/latest.tar.bz2
wget https://download.nextcloud.com/server/releases/latest.tar.bz2.sha256
sha256sum --check latest.tar.bz2.sha256
sudo tar -xjf latest.tar.bz2 -C /var/www/
sudo chown -R www-data:www-data /var/www/nextcloud
Verify
ls -la /var/www/nextcloud/
# Thư mục chứa index.php, config/ ...
Bước 4, Cấu hình Nginx làm reverse proxy cho Nextcloud
Tạo file cấu hình Nginx:
sudo nano /etc/nginx/sites-available/nextcloud.conf
Nội dung (thay nextcloud.example.com bằng domain thật của bạn):
upstream php-handler {
server unix:/run/php/php8.3-fpm.sock;
}
server {
listen 80;
server_name nextcloud.example.com;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl http2;
server_name nextcloud.example.com;
ssl_certificate /etc/letsencrypt/live/nextcloud.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/nextcloud.example.com/privkey.pem;
root /var/www/nextcloud;
index index.php index.html /index.php$request_uri;
location / {
try_files $uri $uri/ /index.php$request_uri;
}
location ~ \.php$ {
include fastcgi_params;
fastcgi_pass php-handler;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
location ~ \.css$ {
add_header Cache-Control "public, max-age=86400";
}
location ~ \.js$ {
add_header Cache-Control "public, max-age=86400";
}
location ~ \.(?:svg|gif|png|html|ttf|woff|ico|jpg|jpeg)$ {
add_header Cache-Control "public, max-age=86400";
try_files $uri /index.php$request_uri;
}
location ~ ^/(?:build|tests|config|lib|3rdparty|templates|data)/ {
deny all;
}
location ~ ^/(?:\.|autotest|occ|issue|indie|db_|console) {
deny all;
}
}
Chú ý: Nếu chưa có SSL, dùng bước 5 trước, hoặc tạm thời dùng listen 80; không redirect (nhưng không khuyến khích cho production).
Kích hoạt site và kiểm tra:
sudo ln -s /etc/nginx/sites-available/nextcloud.conf /etc/nginx/sites-enabled/
sudo nginx -t # phải output "test is successful"
sudo systemctl reload nginx
Bước 5, Cài SSL Let's Encrypt với Certbot
sudo apt install certbot python3-certbot-nginx -y
sudo certbot --nginx -d nextcloud.example.com
Làm theo hướng dẫn: nhập email, chấp nhận điều khoản, chọn redirect 80→443.
Verify
sudo certbot certificates # kiểm tra ngày hết hạn
Bước 6, Hoàn tất cài đặt Nextcloud qua Web UI
Mở trình duyệt truy cập https://nextcloud.example.com. Nhập:
- Username & password admin (tự tạo).
- Database: chọn MySQL/MariaDB, nhập
localhost, userncuser, password đã tạo, databasenextcloud.
Sau khi click "Install", đợi vài phút. Nếu gặp lỗi, kiểm tra bước 7.
Bước 7, Xử lý lỗi thường gặp
| Lỗi / Cảnh báo | Nguyên nhân & cách fix |
|---|---|
| Lỗi "Can't write into config directory" | Permission sai: chạy sudo chown -R www-data:www-data /var/www/nextcloud |
| "PHP module imagick not available" (cảnh báo) | Cài thêm sudo apt install php8.3-imagick && sudo systemctl restart php8.3-fpm |
| "Your Data directory is invalid" | Thư mục data phải nằm ngoài nextcloud root hoặc set đúng quyền: sudo mkdir /var/www/nextcloud_data && sudo chown www-data:www-data /var/www/nextcloud_data |
| Lỗi "502 Bad Gateway" | PHP-FPM chưa chạy hoặc socket sai: sudo systemctl status php8.3-fpm và kiểm tra upstream trong Nginx config |
Bước 8, Tối ưu hiệu năng với Redis cache
Cài Redis:
sudo apt install redis-server php8.3-redis -y
Thêm vào file /var/www/nextcloud/config/config.php (trước dấu );):
'memcache.local' => '\OC\Memcache\Redis',
'redis' => [
'host' => 'localhost',
'port' => 6379,
],
Restart PHP & Redis: sudo systemctl restart php8.3-fpm redis-server.
Verify
Vào Nextcloud > Settings > System > kiểm tra "Redis" hiện ở mục Memory Caching.
Câu hỏi thường gặp
Nextcloud có miễn phí không?
Nextcloud là phần mềm mã nguồn mở hoàn toàn miễn phí, bạn chỉ trả tiền cho VPS và tên miền. Nếu bạn muốn thuê VPS giá rẻ tại Việt Nam với NVMe và băng thông trong nước không giới hạn, có thể tham khảo thueVPS.
Cần cấu hình VPS thế nào để chạy Nextcloud mượt?
Với 2-5 người dùng, VPS 2GB RAM, 2 vCPU là đủ. Nếu nhiều hơn, nâng lên 4GB + Redis cache. Hãy dùng VPS Linux với Ubuntu 24.04 là tối ưu nhất.
Có thể dùng Apache thay Nginx không?
Có, nhưng Nginx nhẹ hơn, xử lý concurrent tốt hơn. Hướng dẫn này dùng Nginx, nếu bạn muốn Apache, cần điều chỉnh file .htaccess tương ứng.
Làm sao backup Nextcloud?
Backup thư mục /var/www/nextcloud + database: sudo mysqldump -u ncuser -p nextcloud > backup.sql. Dùng cron job hàng ngày. Một số nhà cung cấp VPS có tính năng snapshot tự động, hãy chọn bảng giá VPS có support snapshot.
Tại sao tốc độ upload chậm?
Kiểm tra băng thông VPS (thường VPS trong nước tốc độ cao hơn). Cấu hình PHP: tăng upload_max_filesize và post_max_size trong /etc/php/8.3/fpm/php.ini.
Nextcloud có thể thay thế hoàn toàn Google Drive không?
Được, nếu bạn chỉ cần đồng bộ file, lịch, contacts, chat cơ bản. Nextcloud có app desktop cho Windows/Mac/Linux và app mobile. Tuy nhiên, không có AI search, realtime co-editing (cần Collabora Online riêng).
Bài viết liên quan
- Cách cài Docker trên VPS Ubuntu chi tiết từ A đến Z
- Hướng dẫn cài PostgreSQL và tối ưu trên VPS
- Tối ưu Nginx cho traffic cao, worker, gzip, buffer, cache
- Benchmark hiệu năng VPS với fio, sysbench, iperf3


