Nextcloud私有网盘搭建:把数据掌握在自己手里

3 阅读4分钟

Nextcloud私有网盘搭建:把数据掌握在自己手里

引言

百度网盘限速、阿里云盘也开始收费、各种云服务的数据安全问题频发...是时候搭建一个自己的私有网盘了!

Nextcloud 是开源圈里最受欢迎的私有云盘方案,功能强大到你根本用不完——文件同步、在线预览、协同办公、甚至还能搭个在线笔记。而且数据完全在自己服务器上,隐私有保障。

今天手把手教你在 Ubuntu 22.04 LTS 上搭建 Nextcloud,告别那些坑爹的限速和审查。

准备工作

服务器选择

Nextcloud 对硬件要求主要看存储和并发访问量,普通个人使用建议:

  • CPU:1-2核
  • 内存:2G 以上(官方推荐至少 4G,不过 2G 也够用)
  • 硬盘:根据你的存储需求来,建议搭配大容量数据盘
  • 系统:Ubuntu 22.04 LTS
  • 带宽:至少 5Mbps

我用的是 雨云 的服务器,搭配了他们的高防云盘做数据存储,稳定性一直不错。感兴趣可以看看:雨云服务器

环境说明

我们将使用 LNMP 环境(Linux + Nginx + MySQL + PHP)来部署 Nextcloud。这是目前最主流的 Web 服务架构,性能和稳定性都有保障。

更新系统

apt update && apt upgrade -y

主体步骤

1. 安装 Nginx

apt install -y nginx
systemctl start nginx
systemctl enable nginx

验证安装:

nginx -v

2. 安装 MySQL

apt install -y mysql-server
systemctl start mysql
systemctl enable mysql

初始化 MySQL,设置 root 密码:

mysql_secure_installation

创建 Nextcloud 专用数据库:

mysql -u root -p

在 MySQL 命令行中执行:

CREATE DATABASE nextcloud CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
CREATE USER 'nextcloud'@'localhost' IDENTIFIED BY '你的强密码';
GRANT ALL PRIVILEGES ON nextcloud.* TO 'nextcloud'@'localhost';
FLUSH PRIVILEGES;
EXIT;

3. 安装 PHP 8.1

Nextcloud 官方推荐 PHP 8.1,我们用 Ondrej 的 PPA 源安装:

apt install -y software-properties-common
add-apt-repository ppa:ondrej/php
apt update
apt install -y php8.1-fpm php8.1-mysql php8.1-xml php8.1-mbstring php8.1-curl php8.1-zip php8.1-gd php8.1-intl php8.1-bz2 php8.1-imagick php8.1-apcu php8.1-redis

安装常用扩展:

apt install -y libmagickcore-6.q16-6-extra unzip redis-server

4. 配置 PHP

编辑 PHP-FPM 配置文件:

nano /etc/php/8.1/fpm/pool.d/www.conf

找到并修改以下内容:

listen = /run/php/php8.1-fpm.sock
pm.max_children = 50
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 35
pm.max_requests = 500

设置 APCu 缓存:

nano /etc/php/8.1/fpm/php.ini

添加:

apc.enable_cli = 1
apc.shm_size = 256M

重启 PHP-FPM:

systemctl restart php8.1-fpm

5. 下载 Nextcloud

cd /var/www
wget https://download.nextcloud.com/server/releases/nextcloud-28.0.4.zip
unzip nextcloud-28.0.4.zip
rm nextcloud-28.0.4.zip
chown -R www-data:www-data /var/www/nextcloud

6. 配置 Nginx

创建 Nextcloud 的 Nginx 配置文件:

nano /etc/nginx/sites-available/nextcloud

写入:

upstream php-handler {
    server unix:/run/php/php8.1-fpm.sock;
}

server {
    listen 80;
    listen [::]:80;
    server_name your_domain.com;
    return 301 https://$server_name$request_uri;
}

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name your_domain.com;

    ssl_certificate /etc/ssl/certs/ssl-cert-snakeoil.pem;
    ssl_certificate_key /etc/ssl/private/ssl-cert-snakeoil.key;

    add_header Strict-Transport-Security "max-age=15768000; includeSubDomains; preload" always;
    add_header X-Content-Type-Options "nosniff" always;
    add_header X-Frame-Options "SAMEORIGIN" always;
    add_header X-XSS-Protection "1; mode=block" always;

    root /var/www/nextcloud;
    index index.php index.html /index.php$request_uri;

    client_max_body_size 10240M;

    location / {
        rewrite ^ /index.php$request_uri;
    }

    location ~ ^/(?:build|tests|config|lib|3rdparty|templates|data)/ {
        deny all;
    }

    location ~ \.php(?:$|/) {
        fastcgi_split_path_info ^(.+?\.php)(/.*)$;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
        fastcgi_param HTTPS on;
        fastcgi_pass unix:/run/php/php8.1-fpm.sock;
        fastcgi_intercept_errors on;
        fastcgi_request_buffering off;
    }

    location ~ \.(?:css|js|svg|gif|png|html|ttf|woff2?|ico|txt|jpg|jpeg)$ {
        try_files $uri /index.php$request_uri;
        access_log off;
        expires 6M;
        add_header Cache-Control "public, immutable";
    }
}

启用配置:

ln -s /etc/nginx/sites-available/nextcloud /etc/nginx/sites-enabled/
nginx -t
systemctl reload nginx

7. 配置 SSL(可选但强烈推荐)

安装 Certbot 自动证书:

apt install -y certbot python3-certbot-nginx
certbot --nginx -d your_domain.com

8. 配置 Redis 缓存

Nextcloud 官方推荐使用 Redis 作为本地缓存:

systemctl start redis-server
systemctl enable redis-server
nano /var/www/nextcloud/config/config.php

config.php 中添加:

'memcache.local' => '\OC\Memcache\Redis',
'redis' => array(
    'host' => 'localhost',
    'port' => 6379,
),
'memcache.locking' => '\OC\Memcache\Redis',

9. 初始化 Nextcloud

打开浏览器访问你的服务器 IP 或域名,应该能看到 Nextcloud 的安装向导。按照提示填写管理员账号密码和数据库信息。

点击「安装完成」,等待片刻即可进入网盘界面。

10. 配置后台任务

建议使用系统 cron 而不是 Ajax:

crontab -u www-data -e

添加:

*/5  *  *  *  * php -f /var/www/nextcloud/cron.php

在 Nextcloud 管理页面 → 基本设置 → 后台任务,选择「Cron」。

常见问题

Q: 安装时提示「数据目录无效」? A: 确保 Nextcloud 目录和你的数据目录都有正确的权限:chown -R www-data:www-data /var/www/nextcloud

Q: 上传大文件失败? A: 需要修改三处配置:Nginx 的 client_max_body_size、PHP 的 upload_max_filesizepost_max_size,以及 Nextcloud 配置中的文件大小限制。

Q: 访问很慢? A: 建议安装 APCu 和 Redis 缓存,并配置 PHP OPcache。如果在国内使用,可以考虑使用国内镜像源加速应用更新。

Q: 如何升级 Nextcloud? A: 最简单的方式是通过 Web 界面的内置升级功能,或者下载新版本覆盖后手动执行升级命令。

总结

好了,Nextcloud 私有网盘就搭建完成了!相比那些商业网盘,自己的网盘就是香——不限速、不审查、数据完全可控。

搭配官方客户端,可以实现手机照片自动备份、电脑文件同步等功能,体验不比 iCloud 差。而且 Nextcloud 还有丰富的插件生态,可以扩展出在线文档、协作编辑、日历同步等各种功能。

搭建过程中遇到问题欢迎留言,有空再分享 Nextcloud 的进阶配置和插件推荐!