GNU/Linux >> Linux の 問題 >  >> Panels >> Docker

LinuxサーバーにDockerを使用してNextcloudをインストールする方法

Nextcloudは、セルフホストのGoogleドライブまたはDropboxの代替手段に最適なソリューションです。

なぜNextcloudを使うべきなのかはお話ししません。代わりに、Dockerコンテナを使用してNextcloudサーバーをインストールする方法を紹介します。

このチュートリアルでは、Ngnixリバースプロキシの設定を使用して、SSLを使用してNextcloudインスタンスをデプロイできるようにします。このように、NextcloudデプロイメントURLはHTTPSを使用し、ファイルを安全に転送します。

チュートリアルの終わりに向けて、Nextcloudの展開の労力を減らすためのLinodeクラウドユーザー向けのヒントをいくつか紹介します。

Linode |開発者向けの独立したオープンクラウド私たちの使命は、クラウドコンピューティングをシンプルで手頃な価格で、すべての人が利用できるようにすることでイノベーションを加速することです。 Linode 前提条件

先に進む前に、いくつかのことに注意する必要があります。必要なものは次のとおりです:

  • 物理サーバー、仮想マシン、またはクラウドサーバーのいずれかのLinuxサーバー。
  • DockerとDockerComposeがインストールされています Linuxサーバー上。ヘルプが必要な場合は、UbuntuおよびCentOSのdockerインストールガイドに従ってください。同様に、UbuntuとCentOSでdocker-composeのインストールチュートリアルに従うことができます。
  • DockerとDockerComposeに関するある程度の知識があると便利です。
  • ドメイン名。この展開は、Linuxハンドブックの他のすべての展開と同様に、HTTPSを使用した実際のドメイン名で行われます。
  • そこには多くの動きがあるため、シェルおよびLinuxコマンドの経験があります。
  • SendgridなどのSMTPサービスへのアクセス。メール通知の送信、パスワードのリセットなどに必要になります。
  • 時間と忍耐。
リバースプロキシでのDockerを使用したNextcloudサーバーのデプロイ

手順を1つずつ見ていきましょう。

ステップ1:リバースプロキシを設定する

リバースプロキシを使用すると、同じサーバーに複数のWebサービスをデプロイできます。 SSL用のコンテナを暗号化する必要があるため、これはオプションではありません。

Ngnixリバースプロキシを設定する方法は2つあります。

Linodeを使用していない場合は、Dockerでnginx-reverse-proxyを設定する方法に関する私の記事を読んでください。

複数のDockerアプリでNginxリバースプロキシを使用する方法NginxリバースプロキシとDockerコンテナーを使用して、同じサーバーに複数のWebサービスをデプロイする方法を学びます。 Linux HandbookDebdut Chakraborty

Linodeを使用している場合は、reverse-proxy-jwilder StackScriptを使用して、すべてがすでに設定されているサーバーを簡単にデプロイすることをお勧めします。

リバースプロキシの展開は、リバースプロキシの設定を妨げることなくWebサービスを再起動または更新できるように、別の作成ファイルを使用して実行する必要があります。

パブリックGitHubリポジトリに作成ファイルをすでに準備しました。これはリバースプロキシの展開に関する詳細な記事ではないため、作成ファイルの詳細については説明しません。

gitのいずれかを使用できます 、またはwget ファイルをダウンロードします。 gitを使用する場合 、リポジトリ全体のクローンを作成します:

git clone https://github.com/linuxhandbook/tutorial-snippets && \
	cd tutorial-snippets/Reverse_Proxy

それ以外の場合は、必要なファイルをダウンロードしてください:

mkdir -p ~/Reverse_Proxy && cd ~/Reverse_Proxy
for file in max_upload_size.conf env.example docker-compose.yaml; do
	wget https://raw.githubusercontent.com/linuxhandbook/tutorial-snippets/main/Reverse_Proxy/${file}
done

ここには3つのファイルがあります:

  • env.example:名前を.envに変更し、DEFAULT_EMAILの値を変更します メールに
  • max_upload_size.conf:このファイルを使用すると、最大1 GBのサイズ(デフォルトは2 MB)のファイルをアップロードできます。
  • docker-compose.yaml:それらすべての中で最大のもの。次の段落で簡単に説明します。

netという名前のDockerネットワークを作成します 。これはdocker-compose.yamlファイルで使用されます。

docker network create net

docker-composeファイルは次のようになります:

最後に、コンテナを展開します

docker-compose up -d

展開が成功すると、このリバースプロキシをホストしているサーバーのIPアドレスにアクセスしようとすると、503を取得する必要があります。大丈夫。まだWebサービスを実行していません。

ステップ2:Nextcloudをデプロイする

ここには2つのコンポーネントがあります。1つはデータベース、もう1つはNextcloud自体、またはフロントエンドと呼びましょう。

バックエンドデータベースの場合、MySQLベースのデータベースはすべて機能します。 MariaDB、特にイメージタグ(またはバージョン)10.5.9を使用します。

Nextcloudには、バージョン21.0.0を使用します。これは、この記事を書いている時点での最新のものです。

したがって、使用される画像は

  • mariadb:10.5.9
  • nextcloud:21.0.0
将来(現在のリファレンスから)このチュートリアルを使用していて、NextcloudとMariaDBのはるかに新しいバージョンがある場合は、それらのバージョンを使用してください。

スケルトンファイル、つまり、composeファイルとenvファイルは、すでにパブリックGitHubリポジトリにアップロードされています。それをダウンロードするか、説明を読みながら書き直すことができます。

ファイルをダウンロードしてから、何が起こっているのかを理解するためにすべてを確認することをお勧めします。すべてを最初から書き直す必要はありません。

GitHubリポジトリ全体のクローンを作成するか、必要なファイルをダウンロードすることができます。

リバースプロキシのデプロイ中に「tutorial-snippets」リポジトリのクローンを作成した場合は、現在のディレクトリをtutorial-snippets/Nextcloudに変更するだけです。 。

動作するgit コマンドは次のとおりです:

git clone https://github.com/linuxhandbook/tutorial-snippets && \
    cd tutorial-snippets/Nextcloud

それ以外の場合は、次のシェルコードを使用して「Nextcloud」という名前のディレクトリを作成し、そこにファイルをダウンロードします。

mkdir -p ~/Nextcloud && cd ~/Nextcloud
for file in env.example docker-compose.yaml; do
    wget https://raw.githubusercontent.com/linuxhandbook/tutorial-snippets/main/Nextcloud/${file}
done

env.exampleをコピーします .envへのファイル 。このファイルは、後で環境変数用に編集します。元のファイルを保持することは、バックアップのためだけであり、他には何もありません。

cp env.example .env

それでは、サービスの定義を見ていきましょう:

1。 NCDatabase

NCDatabase サービスは次のようになります:

NCDatabase:
	image: "mariadb:10.5.9"

	volumes:
		- "NCMariaDB:/var/lib/mysql"

	environment:
		- MYSQL_ROOT_PASSWORD
		- MYSQL_RANDOM_ROOT_PASSWORD
		- MYSQL_DATABASE
		- MYSQL_USER
		- MYSQL_PASSWORD

	restart: "on-failure"
	networks: ["common"]

これはデータベースサービスであり、前述のように、mariadb:10.5.9を使用します その青写真としての画像。

永続ストレージには、NCMariaDBという名前のボリュームを使用しています 、/var/lib/mysqlにマウントされます 、MariaDBがデータを保存する場所。

環境変数は、.envを使用して処理されます ファイル、それについてはすぐに話します。

on-failureが好きです ポリシーを再起動しますが、unless-stoppedを自由に選択できます またはalways 。 Dockerの再起動ポリシーについて詳しく読むことをお勧めします。

common ネットワークはこれとフロントエンドサービスの間で共通であり、これらのコンテナ間で通信が可能であることを確認するためにあります。

環境変数

これはDockerベースのデプロイメントであり、いくつかの環境変数を設定する必要があります。次に、この.envを開きます お気に入りのテキストエディタでファイルを作成し、次のように値の変更を開始します。

MYSQL_ROOT_PASSWORD またはMYSQL_RANDOM_ROOT_PASSWORDMYSQL_RANDOM_ROOT_PASSWORDを設定してください 1に設定するか、MariaDBの強力なルートパスワードを設定します。 opensslを使用する ランダムなパスワードを生成します。

MYSQL_DATABASEMYSQL_USER :いくつかのデフォルトが設定されていますが、必要に応じて変更できます。これらをそれぞれお好みのデータベース名とユーザー名に設定してください。

MYSQL_PASSWORD :ユーザーのパスワード(MYSQL_USER )メインのMariaDBデータベース(MYSQL_DATABASE)にアクセスできます 。

MYSQL_HOST :これはデータベースコンテナのサービス名です。作成ファイルのサービス名を変更しない場合は、そのままにしておきます。

2。 NCFrontend

これはNextcloudフロントエンドサービスです。このサービスは前のサービスと同じくらい簡単です。ご覧ください:

NCFrontend:
	image: "nextcloud:21.0.0"

	volumes: 
	  - "NCData:/var/www/html"

	environment:
		- LETSENCRYPT_HOST
		- VIRTUAL_HOST
		- TRUSTED_PROXIES
		- OVERWRITEPROTOCOL
		- MYSQL_DATABASE
		- MYSQL_USER
		- MYSQL_PASSWORD
		- MYSQL_HOST
		- SMTP_HOST
		- SMTP_PORT
		- SMTP_NAME
		- SMTP_PASSWORD
		- MAIL_FROM_ADDRESS
		- NEXTCLOUD_TRUSTED_DOMAINS
		- NEXTCLOUD_ADMIN_USER
		- NEXTCLOUD_ADMIN_PASSWORD

	depends_on:
		- "NCDatabase"
	networks: ["net", "common"]

使用されている画像はnextcloud:21.0.0です 、前に述べたように、この記事の執筆時点での最新バージョンです。

データを安全に保ち、単純なコンテナの再起動という不幸なイベントでデータを失わないようにするには、データを永続化する必要があります。 Nextcloudはそのデータ/情報を/var/www/htmlに保存します 、したがって、この場所はNCDataという名前のボリュームを使用して永続化されます 。

depends_on 配列は興味深いものです。値、つまり、そこに記載されているサービスが、現在の値が開始する前に最初に展開されることを確認します。

ここでは、接続の問題を回避するために、データベースがNextcloud自体の前に起動していることを確認しています。

コンテナの起動が成功したからといって、コンテナ内の目的のプロセスも正常に起動したとは限らないため、ログにまだいくつかの問題が表示される場合があります。彼らはもっと時間がかかることがあります。この場合、mysqldの起動にはもう少し時間がかかります。そのため、最終的に接続が成功するまで、ログにいくつかのエラーが表示される場合があります。

2つのネットワークがあります。 1つ目はnetです 、これもリバースプロキシ展開の一部でした。リバースプロキシはプロキシされたサービス、つまりNextcloudと通信できる必要があるため、これが必要です。 common ネットワークは、nextcloudとデータベースコンテナが正常に通信できるようにするためのものです。

Docker Composeは、すべてのサービスのデフォルトネットワークをComposeファイルに作成します。ただし、NCFrontendサービスはすでにネットネットワークに接続されているため、Docker Composeはそのデフォルトネットワークを作成しなくなります。そのため、通信を行うには「common」などのカスタムネットワークを作成する必要があります。

環境変数

.envを開きます お気に入りのテキストエディタでファイル(MariaDBに使用したものと同じ)を使用して、次のように値の変更を開始します。

LETSENCRYPT_HOSTVIRTUAL_HOSTNEXTCLOUD_TRUSTED_DOMAINS :これらをNextcloudインスタンスをホストするドメイン/サブドメインに設定します。

TRUSTED_PROXIES :リバースプロキシとこのフロントエンドによって共有されるネットワークのサブネット。次のコマンドを使用してサブネットを取得できます(jqを確認してください) インストールされています)

docker inspect -f '{{ json .IPAM.Config }}' net | jq -r .[].Subnet

OVERWRITEPROTOCOL :overwriteprotocolパラメータは、プロキシのプロトコルを設定するために使用されます。 HTTPSを使用しているため、これをHTTPSに設定します。

SMTP構成はオプションです。この記事では、例としてSendGridを使用します。次の環境変数のより適切な値については、SMTPサーバーのドキュメントを参照してください。

SMTP_HOSTSMTP_PORT :SMTPサーバーのアドレスとそれがリッスンするポート。SendGridの場合はsmtp.sendgrid.net、自動TLSの場合はポート587です。

SMTP_NAMESMTP_PASSWORD :認証用のユーザー名とパスワード。 SendGridの場合、ユーザー名の値は非常に一貫しています。 apikeyです 。パスワードはAPIキーになります。

MAIL_FROM_ADDRESSFromの値 SMTPヘッダー。これを[email protected]のようなものに設定します 。

NEXTCLOUD_ADMIN_USERNEXTCLOUD_ADMIN_PASSWORD :管理ユーザーを初めて作成するためにWeb UIを使用する代わりに、これらの変数を使用して、展開段階で管理ユーザーを作成できます。これらを管理者ユーザーのユーザー名とパスワードに設定します。そのままにしておくと、Nextcloudを初めて起動したときにアカウントを作成するように求められます。

ボリューム

このネットワークには、NCMariaDBという2つの内部ボリュームが定義されています。 MariaDBおよびNCDataの場合 Nextcloudの場合。これらを内部に保持するか外部に保持するかはあなた次第です。

docker-compose down -vを使用すると間違いを犯しやすいため、これらを内部に保持するのは危険だと多くの人が言うでしょう。 コンテナと一緒にボリュームを削除します。同時に、外部ボリュームでは、docker volume pruneを間違える可能性があります すべてのデータを削除します。

どちらがあなたにとってより安全になるかを決定します。それらを外部にする場合は、作成ファイルを開き、volumesを変更します。 このようなものへの定義:-

volumes:
  NCMariaDB:
    external: true
  NCData:
    external: true

その後、ボリュームを作成します:

NCMariaDBNCDataのボリュームの
for volume in NCMariaDB NCData; do
  docker volume create ${volume}
done
ネットワーク

ここにはあまりありません。 2つのネットワークが定義されていることに気付くでしょう。 1つはフロントエンドとリバースプロキシ用で、もう1つはフロントエンドとバックエンドが通信できるようにするためのものです。

データベースコンテナとnextcloudフロントエンドには「common」という名前の共通ネットワークがあります。これは、これら2つのコンテナが相互に通信できるようにするためのものです。これを内部化すると、データベースコンテナがパブリックインターネットにアクセスできなくなりますが、これからどのような利点が得られるかはわかりません。

それでも、これを実行したい場合は、次のようになります。

networks:
	net:
		external: true
	common:
		internal: true

最後に、Nextcloudをデプロイします

他にやるべきことは何もありません。次のコマンドを実行するだけです

docker-compose up -d

必要なイメージがプルされてからデプロイされます。

デプロイすると、サーバー上で合計4つのコンテナが実行されます。

[email protected]:~$ docker ps -a
CONTAINER ID   IMAGE                                           COMMAND                  CREATED       STATUS       PORTS                                      NAMES
1dce1c7909fe   jrcs/letsencrypt-nginx-proxy-companion:latest   "/bin/bash /app/entr…"   7 hours ago   Up 7 hours                                              reverse_proxy_LetsencryptCompanion_1
d29719999132   jwilder/nginx-proxy:latest                      "/app/docker-entrypo…"   7 hours ago   Up 7 hours   0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp   reverse_proxy_NginxProxy_1
cd719cb2a677   nextcloud:21.0.0                                "/entrypoint.sh apac…"   7 hours ago   Up 7 hours   80/tcp                                     nextcloud_NCFrontend_1
60dff2062aa5   mariadb:10.5.9                                  "docker-entrypoint.s…"   7 hours ago   Up 7 hours   3306/tcp                                   nextcloud_NCDatabase_1

あなたはかもしれません 以前に実行されていたコンテナがあった場合は、より多くのコンテナも実行されます。肝心なのは、このNextcloudデプロイメントは、nginxコンテナー、letsencryptコンパニオンコンテナー、mariadbコンテナー、そして最後に実際のnextcloudコンテナーの4つのコンテナーで構成されているということです。

展開後

これをまとめる前に、展開後に知りたいと思うかもしれない1つの簡単なことを述べたいと思いました。

まずブラウザを開き、このNextcloudインスタンスがホストされているドメイン(VIRTUAL_HOST)に移動します )。作成ファイルを使用して管理者ユーザーを設定しなかった場合は、次のような画面が表示されます

データベース環境変数は共通の.envを介して共有されるため ファイルの場合、ホスト名、ポート、データベースのユーザー名パスワードなどのデータベース情報を要求する、より一般的なWebインストールUIは表示されません。

同様のチェックボックスもそこに表示されます。このチェックボックスをオフにして、後で必要なアプリをアプリリストからインストールすることをお勧めします。

導入後のヒントについては、同僚のAvimanyuが書いたこのすばらしい記事を読んでください:

Nextcloud Dockerインスタンスを管理するための10の役立つヒントDockerでNextcloudインスタンスをセルフホストする際に覚えて、実際に従うためのいくつかの役立つアドバイス! LinuxハンドブックAvimanyuBandyopadhyay

それでおしまい。この詳細なチュートリアルが、Dockerを使用したNextcloudサーバーのインストールに役立つことを願っています。ご質問やご提案がございましたら、コメント欄でお知らせください。喜んでお手伝いさせていただきます。


Docker
  1. ヘッドレスLinuxサーバーにデスクトップ環境をインストールする方法

  2. Ubuntu18.04にNextCloud15をインストールする方法

  3. 仮想化 Linux サーバーのインストール方法

  1. Dockerを使用してOpenVPNサーバーをインストールしてホストする方法

  2. Dockerを使用してWireguardVPNサーバーをインストールする

  3. Dockerを使用してJenkinsをインストールする方法

  1. LinuxにSQLServerをインストールする方法

  2. Ubuntu16.04にNextCloud13をインストールする方法

  3. Nextcloud14をDebian9にインストールする方法