Skip to content

好的,这是一个从配置好 Ubuntu Server 开始,通过 OpenVPN 访问自建 Nextcloud 的全流程 Markdown 教程。

本教程采用目前社区推荐的最佳实践:

  • 使用自动化脚本安装 OpenVPN:避免手动配置证书和网络规则的复杂性,一键完成部署。
  • 使用 Docker 和 Docker Compose 部署 Nextcloud:隔离运行环境,简化安装、维护和升级过程。

教程:在 Ubuntu 上部署 Nextcloud 并通过 OpenVPN 安全访问#

本教程将引导您完成以下目标:

  1. 在您的 Ubuntu 服务器上安装并配置一个 OpenVPN 服务器。
  2. 使用 Docker 部署一个稳定运行的 Nextcloud 实例(包含数据库和缓存)。
  3. 配置客户端设备,通过 VPN 隧道安全地访问您的私有云盘。

前提条件#

  • 一台已经安装好 Ubuntu Server 20.04/22.04 LTS 的服务器。
  • 拥有服务器的 rootsudo 权限。
  • 服务器拥有一个**静态公网 IP 地址**(或使用 DDNS 将域名指向您的动态公网 IP)。

步骤一:系统更新与准备#

首先,登录到您的服务器,更新软件包列表和已安装的软件。

sudo apt update && sudo apt upgrade -y

安装一些必要的工具软件。

sudo apt install -y curl wget

步骤二:安装并配置 OpenVPN 服务器#

我们将使用一个广受好评的自动化脚本来安装 OpenVPN,它可以处理所有复杂的配置。

  1. 下载安装脚本
    从 GitHub 下载 openvpn-install 脚本。

    curl -O https://raw.githubusercontent.com/angristan/openvpn-install/master/openvpn-install.sh
    
  2. 赋予脚本执行权限

    chmod +x openvpn-install.sh
    
  3. 运行脚本并进行交互式配置
    以 root 权限运行脚本,它会引导您完成一系列配置。

    sudo ./openvpn-install.sh
    

    您将会看到一系列问题,请根据您的实际情况和以下建议进行选择:

    • IP address: 脚本会自动检测您的公网 IP,直接按回车确认即可。
    • Enable IPv6 support: 如果您的网络支持 IPv6,可以选择 y,否则选 n。(选 n 通常没问题)。
    • Port: 使用默认的 1194 端口即可,按回车。
    • Protocol: 使用默认的 UDP 协议,按回车。UDP 速度更快。
    • DNS: 推荐选择 CloudflareGoogle 的 DNS,输入对应的数字后按回车。
    • Enable compression: 选择 n。压缩已被证实存在安全隐患(VORACLE 攻击)。
    • Customize encryption settings: 选择 n。脚本默认的加密设置已经非常安全。

    脚本会自动安装和配置 OpenVPN。完成后,它会提示您创建一个客户端配置文件。

  4. 创建第一个客户端配置文件

    • Client name: 输入一个客户端名称,例如 my-laptopmy-phone,然后按回车。
    • Password protect the client: 您可以选择是否为配置文件添加密码。为了方便,初次可以选 n(不加密),直接导入使用。

    脚本执行完毕后,会在当前目录下生成一个 .ovpn 文件,例如 /root/my-laptop.ovpn这个文件就是客户端连接 VPN 所需的唯一凭证,请务必妥善保管。

    如果您想添加更多用户,只需再次运行 ./openvpn-install.sh 脚本,它会提供添加用户、吊销用户等管理选项。


步骤三:安装 Docker 和 Docker Compose#

Nextcloud 将运行在 Docker 容器中,这让我们无需在主机系统上安装 PHP、Web服务器和数据库。

  1. 安装 Docker
    使用官方的便利脚本来安装 Docker。

    curl -fsSL https://get.docker.com -o get-docker.sh
    sudo sh get-docker.sh
    

    将当前用户添加到 docker 组,这样执行 docker 命令时就不用加 sudo 了。(执行后需要重新登录 shell 才能生效)

    sudo usermod -aG docker $USER
    newgrp docker # 立即生效
    
  2. 安装 Docker Compose
    我们将从 GitHub Release 页面下载 Docker Compose 的二进制文件。

    # 定义版本和目标路径
    COMPOSE_VERSION="v2.27.0" # 您可以去GitHub查看最新版本
    DESTINATION="/usr/local/bin/docker-compose"
    
    # 下载
    sudo curl -L "https://github.com/docker/compose/releases/download/${COMPOSE_VERSION}/docker-compose-$(uname -s)-$(uname -m)" -o $DESTINATION
    
    # 添加执行权限
    sudo chmod +x $DESTINATION
    

    验证安装是否成功:

    docker --version
    docker-compose --version
    

    如果都输出了版本号,说明安装成功。


步骤四:部署 Nextcloud (使用 Docker Compose)#

现在,我们将创建一个 docker-compose.yml 文件来定义 Nextcloud 服务。

  1. 创建 Nextcloud 工作目录
    在这个目录中,我们将存放配置文件和数据。

    mkdir ~/nextcloud
    cd ~/nextcloud
    
  2. 创建 docker-compose.yml 文件
    使用 nanovim 创建并编辑这个文件。

    nano docker-compose.yml
    

    将以下内容**完整地**粘贴到文件中。

    version: '3.8'
    
    services:
      # Nextcloud 主服务
      app:
        image: nextcloud:latest
        container_name: nextcloud_app
        restart: unless-stopped
        ports:
          - "8080:80" # 将服务器的8080端口映射到容器的80端口
        volumes:
          - ./nextcloud:/var/www/html
          - ./apps:/var/www/html/apps
          - ./config:/var/www/html/config
          - ./data:/var/www/html/data
        environment:
          - MYSQL_PASSWORD=your_strong_db_password # <--- !! 修改这里 !! 数据库密码
          - MYSQL_DATABASE=nextcloud
          - MYSQL_USER=nextcloud
          - MYSQL_HOST=db
          - REDIS_HOST=redis
        depends_on:
          - db
          - redis
    
      # MariaDB 数据库服务
      db:
        image: mariadb:10.6
        container_name: nextcloud_db
        restart: unless-stopped
        command: --transaction-isolation=READ-COMMITTED --log-bin=ROW
        volumes:
          - ./db:/var/lib/mysql
        environment:
          - MYSQL_ROOT_PASSWORD=your_strong_root_password # <--- !! 修改这里 !! 数据库root密码
          - MYSQL_PASSWORD=your_strong_db_password       # <--- !! 修改这里 !! 与上面app服务中的密码保持一致
          - MYSQL_DATABASE=nextcloud
          - MYSQL_USER=nextcloud
    
      # Redis 缓存服务 (提升性能)
      redis:
        image: redis:alpine
        container_name: nextcloud_redis
        restart: unless-stopped
    
    volumes:
      nextcloud:
      apps:
      config:
      data:
      db:
    
  3. 重要:修改密码
    在保存文件之前,**务必**将文件中所有 your_strong_..._password 的地方替换为您自己设置的强密码。MYSQL_PASSWORD 的值在 appdb 服务中必须完全相同。

    修改完成后,按 Ctrl + X,然后按 Y,再按回车保存并退出 nano

  4. 启动 Nextcloud 服务
    ~/nextcloud 目录下,执行以下命令来启动所有服务。-d 参数表示在后台运行。

    docker-compose up -d
    

    Docker 会开始拉取镜像并创建容器。这个过程需要几分钟。您可以使用 docker-compose ps 查看服务状态,确保所有服务的 State 都是 Up


步骤五:配置 OpenVPN 客户端#

现在服务器已经准备就绪,我们需要配置您的电脑或手机来连接它。

  1. 获取 .ovpn 配置文件
    您需要将在步骤二中生成的 .ovpn 文件(例如 my-laptop.ovpn)从服务器下载到您的本地设备上。您可以使用 scpFileZilla 或任何其他 SFTP 工具。

    例如,在您的**本地电脑**上打开终端,使用 scp 命令:

    # 将 <server_ip> 和 <user> 替换为您的服务器信息
    scp <user>@<server_ip>:/root/my-laptop.ovpn .
    
  2. 安装 OpenVPN 客户端软件

    • Windows: OpenVPN Connect
    • macOS: Tunnelblick
    • Linux: 使用包管理器安装 openvpn
    • Android/iOS: 在应用商店搜索 "OpenVPN Connect"。
  3. 导入配置并连接
    打开您安装的客户端软件,选择 "Import Profile" (导入配置文件),然后选中您刚刚下载的 .ovpn 文件。导入后,点击 "Connect" (连接) 按钮。

    如果一切顺利,您应该会看到连接成功的日志,您的设备现在已经加入了家庭服务器所在的虚拟局域网。


步骤六:访问并完成 Nextcloud 初始化#

连接 VPN 成功后,您的设备就可以通过服务器的**内网 IP**访问 Nextcloud 了。

  1. 获取服务器的 VPN IP 地址
    在 OpenVPN 的配置中,服务器的 VPN IP 通常是 10.8.0.1

  2. 访问 Nextcloud
    打开您本地设备上的浏览器,在地址栏输入:
    http://10.8.0.1:8080

    您应该能看到 Nextcloud 的初始化页面。

  3. 创建管理员账户

    • 设置您的**管理员用户名**和**密码**。
    • 数据库部分**不要修改**,Docker Compose 已经帮我们自动配置好了。
    • 点击 "安装完成" 按钮。

    初始化过程可能需要一两分钟。完成后,您将被重定向到 Nextcloud 的主界面。

恭喜!您现在拥有一个完全私有、通过安全 VPN 隧道访问的云盘了!


后续步骤与建议#

  • 数据安全: 定期备份 ~/nextcloud 目录下的所有文件,特别是 dbnextcloud 卷,这是您的全部数据!
  • 客户端同步: 下载 Nextcloud 的桌面和移动客户端,输入服务器地址 http://10.8.0.1:8080 和您的账户密码,即可开始同步文件。
  • 添加更多 VPN 用户: 再次运行服务器上的 ./openvpn-install.sh 脚本来管理用户。

Last update: 2025-09-19
Created: 2025-09-19