This article is not available in your language yet.这篇文章暂时没有你所用语言的版本。這篇文章暫時沒有你所用語言的版本。この記事はまだお使いの言語で提供されていません。

Read in切换语言切換語言言語を切り替え English 简体中文 繁體中文 日本語

How to Self-Host Nextcloud with Docker Compose on Ubuntu

In this post, I’ll show you how to use Docker and its Compose plugin to host your own Nextcloud service. We’ll begin with a clean Ubuntu server environment.

Installing Docker using the Official Script

First, ensure that curl is installed on your server.

sudo apt update
sudo apt install curl

Next, we’ll install Docker using the official installation script.

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

To manage Docker as a non-root user (without needing sudo), add your current user to the docker group

# sudo groupadd docker
# it should be done by the script

sudo usermod -aG docker $USER
newgrp docker

Install Nextcloud

First, create a directory to store your Nextcloud data.

mkdir nextcloud
cd nextcloud

Next, create a docker-compose.yml file. Populate it with the following configuration:

services:
  nextcloud-database:
    image: mariadb
    container_name: nextcloud-database
    restart: always
    volumes:
      - ./database:/var/lib/mysql
    environment:
      - MYSQL_ROOT_PASSWORD=<YOUR_PASSWORD_HERE>
      - MYSQL_PASSWORD=<YOUR_PASSWORD_HERE>
      - MYSQL_DATABASE=nextcloud
      - MYSQL_USER=nextcloud

  nextcloud-server:
    image: nextcloud
    container_name: nextcloud-server
    restart: always
    ports:
      - <CHOOSE_A_PORT>:80
    links:
      - nextcloud-database
    volumes:
      - ./server:/var/www/html
    environment:
      - MYSQL_PASSWORD=<YOUR_PASSWORD_HERE>
      - MYSQL_DATABASE=nextcloud
      - MYSQL_USER=nextcloud
      - MYSQL_HOST=nextcloud-database

You need to replace <YOUR_PASSWORD_HERE> with your own strong, unique password, and change <CHOOSE_A_PORT> to the external port on which you want your Nextcloud service to be accessible.

Finally, run the following command to start your Nextcloud service in detached mode:

docker compose up -d

Configuring the Service

First, open your web browser and navigate to http://<YOUR_SERVER_IP>:<THE_PORT_YOU_CONFIGURED> (replacing <YOUR_SERVER_IP> with your server’s IP address and <THE_PORT_YOU_CONFIGURED> with the port you set in the docker-compose.yml file). Follow the on-screen instructions to set up your administrator account.

Next, create a script to handle Nextcloud’s background jobs using cron. The content of the script should be:

#! /bin/bash
sudo docker exec --user www-data nextcloud-server php -f /var/www/html/cron.php

Make the script executable using chmod (replace <YOUR_SCRIPT_NAME>.sh with your actual script filename):

chmod +x <YOUR_SCRIPT_NAME>.sh

Finally, edit your user’s crontab to run this script every 5 minutes (ensure you use the correct path to your script):

crontab -e
# Add this line
*/5 * * * * <PATH_TO_SCRIPT>/<YOUR_SCRIPT>.sh

(Optional) If you are routing traffic to Nextcloud through a reverse proxy (which might be your own HTTP server forwarding requests), you can edit the server/config/config.php file. Adding the following trusted_proxies configuration helps Nextcloud correctly process client information. Adjust the IP ranges if necessary to include your proxy server:

'trusted_proxies' => 
array (
  0 => '10.0.0.0/8',
  1 => '100.64.0.0/10',
  2 => '127.0.0.0/8',
  3 => '172.16.0.0/12',
  4 => '192.168.0.0/16',
),

如何在 Ubuntu 上使用 Docker Compose 自托管 Nextcloud

在本文中,我将演示如何使用 Docker 及其 Compose 插件搭建属于你自己的 Nextcloud 私有云服务。我们将从一个干净的 Ubuntu 服务器环境开始。

使用官方脚本安装 Docker

首先,确保服务器上已安装 curl。

sudo apt update
sudo apt install curl

接下来,使用官方安装脚本安装 Docker。

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

若希望以非 root 用户管理 Docker(无需每次输入 sudo),请将当前用户添加到 docker 用户组:

# sudo groupadd docker
# 安装脚本通常会自动创建该用户组

sudo usermod -aG docker $USER
newgrp docker

安装 Nextcloud

首先,创建一个用于存放 Nextcloud 数据的目录:

mkdir nextcloud
cd nextcloud

接着,创建 docker-compose.yml 文件,并填入以下配置内容:

services:
  nextcloud-database:
    image: mariadb
    container_name: nextcloud-database
    restart: always
    volumes:
      - ./database:/var/lib/mysql
    environment:
      - MYSQL_ROOT_PASSWORD=<YOUR_PASSWORD_HERE>
      - MYSQL_PASSWORD=<YOUR_PASSWORD_HERE>
      - MYSQL_DATABASE=nextcloud
      - MYSQL_USER=nextcloud

  nextcloud-server:
    image: nextcloud
    container_name: nextcloud-server
    restart: always
    ports:
      - <CHOOSE_A_PORT>:80
    links:
      - nextcloud-database
    volumes:
      - ./server:/var/www/html
    environment:
      - MYSQL_PASSWORD=<YOUR_PASSWORD_HERE>
      - MYSQL_DATABASE=nextcloud
      - MYSQL_USER=nextcloud
      - MYSQL_HOST=nextcloud-database

请将 <YOUR_PASSWORD_HERE> 替换为你自己的高强度独立密码,并将 <CHOOSE_A_PORT> 替换为你希望外部访问 Nextcloud 服务时使用的端口号。

最后,运行以下命令在后台启动 Nextcloud 服务:

docker compose up -d

配置服务

首先,打开浏览器并访问 http://<YOUR_SERVER_IP>:<THE_PORT_YOU_CONFIGURED>(将 <YOUR_SERVER_IP> 替换为你的服务器 IP 地址,将 <THE_PORT_YOU_CONFIGURED> 替换为你在 docker-compose.yml 中设置的端口)。按照页面上的提示完成管理员账户的初始化设置。

接下来,创建一个脚本,用于通过 cron 定期执行 Nextcloud 的后台任务。脚本内容如下:

#! /bin/bash
sudo docker exec --user www-data nextcloud-server php -f /var/www/html/cron.php

使用 chmod 赋予脚本可执行权限(将 <YOUR_SCRIPT_NAME>.sh 替换为你的实际脚本文件名):

chmod +x <YOUR_SCRIPT_NAME>.sh

最后,编辑当前用户的 crontab,让该脚本每 5 分钟运行一次(请确保填写正确的脚本路径):

crontab -e
# 添加以下行
*/5 * * * * <PATH_TO_SCRIPT>/<YOUR_SCRIPT>.sh

(可选)如果你通过反向代理(例如转发请求的 HTTP 服务器)访问 Nextcloud,可以编辑 server/config/config.php 文件。添加以下 trusted_proxies 配置有助于 Nextcloud 正确识别客户端信息(请根据实际情况调整 IP 网段以包含你的代理服务器):

'trusted_proxies' => 
array (
  0 => '10.0.0.0/8',
  1 => '100.64.0.0/10',
  2 => '127.0.0.0/8',
  3 => '172.16.0.0/12',
  4 => '192.168.0.0/16',
),

如何在 Ubuntu 上使用 Docker Compose 自架 Nextcloud

在本文中,我將示範如何使用 Docker 及其 Compose 外掛程式架設屬於你自己的 Nextcloud 私有雲服務。我們將從一個乾淨的 Ubuntu 伺服器環境開始。

使用官方指令碼安裝 Docker

首先,確保伺服器上已安裝 curl。

sudo apt update
sudo apt install curl

接下來,使用官方安裝指令碼安裝 Docker。

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

若希望以非 root 使用者管理 Docker(無需每次輸入 sudo),請將目前使用者加入 docker 群組:

# sudo groupadd docker
# 安裝指令碼通常會自動建立該群組

sudo usermod -aG docker $USER
newgrp docker

安裝 Nextcloud

首先,建立一個用於存放 Nextcloud 資料的目錄:

mkdir nextcloud
cd nextcloud

接著,建立 docker-compose.yml 檔案,並填入以下設定內容:

services:
  nextcloud-database:
    image: mariadb
    container_name: nextcloud-database
    restart: always
    volumes:
      - ./database:/var/lib/mysql
    environment:
      - MYSQL_ROOT_PASSWORD=<YOUR_PASSWORD_HERE>
      - MYSQL_PASSWORD=<YOUR_PASSWORD_HERE>
      - MYSQL_DATABASE=nextcloud
      - MYSQL_USER=nextcloud

  nextcloud-server:
    image: nextcloud
    container_name: nextcloud-server
    restart: always
    ports:
      - <CHOOSE_A_PORT>:80
    links:
      - nextcloud-database
    volumes:
      - ./server:/var/www/html
    environment:
      - MYSQL_PASSWORD=<YOUR_PASSWORD_HERE>
      - MYSQL_DATABASE=nextcloud
      - MYSQL_USER=nextcloud
      - MYSQL_HOST=nextcloud-database

請將 <YOUR_PASSWORD_HERE> 替換為你自己的高強度獨立密碼,並將 <CHOOSE_A_PORT> 替換為你希望外部存取 Nextcloud 服務時使用的連接埠號。

最後,執行以下指令在背景啟動 Nextcloud 服務:

docker compose up -d

設定服務

首先,開啟瀏覽器並前往 http://<YOUR_SERVER_IP>:<THE_PORT_YOU_CONFIGURED>(將 <YOUR_SERVER_IP> 替換為你的伺服器 IP 位址,將 <THE_PORT_YOU_CONFIGURED> 替換為你在 docker-compose.yml 中設定的連接埠)。按照畫面上的指示完成管理員帳號的初始化設定。

接下來,建立一個指令碼,用於透過 cron 定期執行 Nextcloud 的背景工作。指令碼內容如下:

#! /bin/bash
sudo docker exec --user www-data nextcloud-server php -f /var/www/html/cron.php

使用 chmod 賦予指令碼可執行權限(將 <YOUR_SCRIPT_NAME>.sh 替換為你的實際指令碼檔名):

chmod +x <YOUR_SCRIPT_NAME>.sh

最後,編輯目前使用者的 crontab,讓該指令碼每 5 分鐘執行一次(請確保填寫正確的指令碼路徑):

crontab -e
# 新增以下這一行
*/5 * * * * <PATH_TO_SCRIPT>/<YOUR_SCRIPT>.sh

(選用)如果你透過反向代理(例如轉發請求的 HTTP 伺服器)將流量導向 Nextcloud,可以編輯 server/config/config.php 檔案。加入以下 trusted_proxies 設定有助於 Nextcloud 正確處理用戶端資訊(請依實際情況調整 IP 網段以包含你的代理伺服器):

'trusted_proxies' => 
array (
  0 => '10.0.0.0/8',
  1 => '100.64.0.0/10',
  2 => '127.0.0.0/8',
  3 => '172.16.0.0/12',
  4 => '192.168.0.0/16',
),

Ubuntu で Docker Compose を使って Nextcloud をセルフホストする方法

本記事では、Docker と Docker Compose プラグインを使用して、自分専用の Nextcloud サービスをセルフホストする手順を解説します。クリーンな Ubuntu サーバー環境から構築を始めます。

公式スクリプトを使った Docker のインストール

まず、サーバーに curl がインストールされていることを確認します。

sudo apt update
sudo apt install curl

次に、公式インストールスクリプトを使用して Docker をインストールします。

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

非 root ユーザーとして(sudo なしで)Docker を操作できるように、現在のユーザーを docker グループに追加します。

# sudo groupadd docker
# 通常はスクリプトによって作成されます

sudo usermod -aG docker $USER
newgrp docker

Nextcloud のインストール

まず、Nextcloud のデータを保存するためのディレクトリを作成します。

mkdir nextcloud
cd nextcloud

次に、docker-compose.yml ファイルを作成し、以下の設定を記述します。

services:
  nextcloud-database:
    image: mariadb
    container_name: nextcloud-database
    restart: always
    volumes:
      - ./database:/var/lib/mysql
    environment:
      - MYSQL_ROOT_PASSWORD=<YOUR_PASSWORD_HERE>
      - MYSQL_PASSWORD=<YOUR_PASSWORD_HERE>
      - MYSQL_DATABASE=nextcloud
      - MYSQL_USER=nextcloud

  nextcloud-server:
    image: nextcloud
    container_name: nextcloud-server
    restart: always
    ports:
      - <CHOOSE_A_PORT>:80
    links:
      - nextcloud-database
    volumes:
      - ./server:/var/www/html
    environment:
      - MYSQL_PASSWORD=<YOUR_PASSWORD_HERE>
      - MYSQL_DATABASE=nextcloud
      - MYSQL_USER=nextcloud
      - MYSQL_HOST=nextcloud-database

<YOUR_PASSWORD_HERE> は十分に強力で推測されにくい独自のパスワードに置き換え、<CHOOSE_A_PORT> は Nextcloud サービスへ外部からアクセスさせたいポート番号に変更してください。

最後に、以下のコマンドを実行して Nextcloud サービスをバックグラウンド(デタッチモード)で起動します。

docker compose up -d

サービスの設定

まず、Web ブラウザを開き、http://<YOUR_SERVER_IP>:<THE_PORT_YOU_CONFIGURED> にアクセスします(<YOUR_SERVER_IP> はサーバーの IP アドレス、<THE_PORT_YOU_CONFIGURED> は docker-compose.yml で設定したポート番号に置き換えてください)。画面の案内に従って管理者アカウントを作成します。

次に、cron を使って Nextcloud のバックグラウンドジョブを実行するためのスクリプトを作成します。スクリプトの内容は以下のとおりです。

#! /bin/bash
sudo docker exec --user www-data nextcloud-server php -f /var/www/html/cron.php

chmod でスクリプトに実行権限を付与します(<YOUR_SCRIPT_NAME>.sh は実際のスクリプト名に置き換えてください)。

chmod +x <YOUR_SCRIPT_NAME>.sh

最後に、ユーザーの crontab を編集して、このスクリプトが 5 分ごとに実行されるように設定します(スクリプトへの正しいパスを指定してください)。

crontab -e
# 以下の行を追加
*/5 * * * * <PATH_TO_SCRIPT>/<YOUR_SCRIPT>.sh

(任意)リバースプロキシ(リクエストを転送する独自の HTTP サーバーなど)経由で Nextcloud にトラフィックをルーティングしている場合は、server/config/config.php ファイルを編集します。以下の trusted_proxies 設定を追加すると、Nextcloud がクライアント情報を正しく処理できるようになります。プロキシサーバーが含まれるように、必要に応じて IP レンジを調整してください。

'trusted_proxies' => 
array (
  0 => '10.0.0.0/8',
  1 => '100.64.0.0/10',
  2 => '127.0.0.0/8',
  3 => '172.16.0.0/12',
  4 => '192.168.0.0/16',
),