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サービスへのアクセス。メール通知の送信、パスワードのリセットなどに必要になります。
- 時間と忍耐。
手順を1つずつ見ていきましょう。
ステップ1:リバースプロキシを設定する
リバースプロキシを使用すると、同じサーバーに複数のWebサービスをデプロイできます。 SSL用のコンテナを暗号化する必要があるため、これはオプションではありません。
Ngnixリバースプロキシを設定する方法は2つあります。
Linodeを使用していない場合は、Dockerでnginx-reverse-proxyを設定する方法に関する私の記事を読んでください。
複数のDockerアプリでNginxリバースプロキシを使用する方法NginxリバースプロキシとDockerコンテナーを使用して、同じサーバーに複数のWebサービスをデプロイする方法を学びます。 Linux HandbookDebdut ChakrabortyLinodeを使用している場合は、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
スケルトンファイル、つまり、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_PASSWORD
:MYSQL_RANDOM_ROOT_PASSWORD
を設定してください 1に設定するか、MariaDBの強力なルートパスワードを設定します。 openssl
を使用する ランダムなパスワードを生成します。
MYSQL_DATABASE
&MYSQL_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とデータベースコンテナが正常に通信できるようにするためのものです。
環境変数
.env
を開きます お気に入りのテキストエディタでファイル(MariaDBに使用したものと同じ)を使用して、次のように値の変更を開始します。
LETSENCRYPT_HOST
、VIRTUAL_HOST
&NEXTCLOUD_TRUSTED_DOMAINS
:これらをNextcloudインスタンスをホストするドメイン/サブドメインに設定します。
TRUSTED_PROXIES
:リバースプロキシとこのフロントエンドによって共有されるネットワークのサブネット。次のコマンドを使用してサブネットを取得できます(jq
を確認してください) インストールされています)
docker inspect -f '{{ json .IPAM.Config }}' net | jq -r .[].Subnet
OVERWRITEPROTOCOL
:overwriteprotocolパラメータは、プロキシのプロトコルを設定するために使用されます。 HTTPSを使用しているため、これをHTTPSに設定します。
SMTP_HOST
&SMTP_PORT
:SMTPサーバーのアドレスとそれがリッスンするポート。SendGridの場合はsmtp.sendgrid.net、自動TLSの場合はポート587です。
SMTP_NAME
&SMTP_PASSWORD
:認証用のユーザー名とパスワード。 SendGridの場合、ユーザー名の値は非常に一貫しています。 apikey
です 。パスワードはAPIキーになります。
MAIL_FROM_ADDRESS
:From
の値 SMTPヘッダー。これを[email protected]
のようなものに設定します 。
NEXTCLOUD_ADMIN_USER
&NEXTCLOUD_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サーバーのインストールに役立つことを願っています。ご質問やご提案がございましたら、コメント欄でお知らせください。喜んでお手伝いさせていただきます。