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

Ansibleを使用してDockerにNextcloudをデプロイする

概要

この記事では、Ansibleを使用してDockerにNextcloudをデプロイする方法について説明します。この手順の目的は、Ansibleプレイブックを使用してDockerでのNextcloudのデプロイプロセスを自動化することです。

ansibleを使用してnextcloudをdockerに正常にデプロイするには、最初に構成するためのいくつかの要件があります(前提条件に以下にリストされています)

前提条件

  • ターゲットホストマシンにDockerがインストールされて実行されている(DockerのインストールはAnsibleで自動化することもできます– POSTへのリンク)
  • Ansiblehostsファイルに事前設定されたログインパラメータを使用してリモートホストでSSHアクセスを有効にする
  • Ansibleがクライアントマシン(お使いのマシン)にインストールされています
  • ターゲットマシンにAnsible用のPythonおよびPythondockerモジュールをインストールしました
  • ローカルマシンにPythonをインストールしました

Ansible用のPythonDockerモジュールをインストールする

ほとんどのLinuxディストリビューションにはPython3がプリインストールされていますが、他のディストリビューションでは、Ansibleが使用するPythonDockerモジュールが欠落している可能性があります。モジュールが見つからないか見つからないというエラーが表示された場合にわかります。以下のエラーの画像例:

上記のモジュールは、実際にはPythonがDockerと連携するために使用するDockerSDKです。 Python Dockerモジュールをインストールする最も簡単な方法は、「pip」ツールを使用することです。 「pip」ツールがない場合は、簡単にインストールしてから、PythonDockerモジュールをインストールできます。

 Debian / Ubuntusudo apt install python3-pipFedorasudo dnf install python3-pipCentOS / RedHatsudo yum python3-pip 

pipをインストールしたら、コマンドを実行してdockermoduleをインストールします。

pip3インストールドッカー

万が一、AnsibleでPythonモジュールが見つからないというエラーが発生した場合は、hostsファイルにpythonインタープリター変数を追加してください。ほとんどの場合、「/ usr / bin/python3」のいずれかにあります。 または「/usr/ lib /python3」

エラーは次のようになります:

hostsファイルのインタプリタ変数は次のようになります。

 ansible_python_interpreter =/ usr / bin / python3 

ログインパラメータを使用してhostsファイルにhostsを書き留めます

最初のステップ– Ansibleがマシンに到達し、ログインして対話できるように、hostsファイルに必要なパラメーターを追加します。

 sudo nano / etc / ansible / hosts 

hostsファイルで、次のようなパラメータを追加します。

リモートホストに必要なパラメータを追加したら、ファイルを保存して終了します。

DockerにNextcloudをデプロイするためのAnsibleプレイブック

この導入では、次のプレイブックを使用します。

 ----ホスト:docker vars:db_volume:mariadb nextcloud:nextcloudタスク:-名前:MariaDBサーバーのデプロイdocker_container:イメージ:mariadb名前:mariadbボリューム:-"{{db_volume}}:/ var / lib / mysql "env:MYSQL_ROOT_PASSWORD:somerootpassword MYSQL_PASSWORD:somemysqlpassword MYSQL_DATABASE:db MYSQL_USER:mysqluser --name:Deploy Nextcloud docker_container:image:nextcloud name:nextcloud restart_policy:always Ports:-" 8080:80 "links:-" {{db_volume}}:/ var / lib / mysql "ボリューム:-" {{nextcloud}}:/ var / www / html "env:MYSQL_PASSWORD:somemysqlpassword MYSQL_DATABASE:db MYSQL_USER:mysqluser MYSQL_HOST:mariadb 

コピーしてください。

プレイブックの内訳:

 ホスト:docker  //dockerグループにあるマシンホストのみをターゲットにする変数
  vars:  db_volume:mariadb   nextcloud:nextcloud//[オプション] 各コンテナに定義された変数。これらはホスト上のボリュームを設定するために使用され、コンテナ名と一致します。
 タスク://  MariaDBコンテナー(コンテナー形式のMariaDBデータベースサーバー)をデプロイするタスクを定義しました。タスクは、DockerハブからMariaDBの公式Dockerイメージをプルダウンし、名前コンテナー名 "mariadb"を設定し、データベースストレージ用にホストマシンに永続ボリュームを設定します。-名前:MariaDBサーバーをデプロイする//  タスク名docker_container://  Ansibleが使用するDocker関数image:mariadb //  プルダウンするDockerイメージ名前:mariadb //  コンテナ名を指定しますボリューム:-"{{db_volume}}:/ var / lib / mysql" //  永続ストレージ用のホストマシン上のボリュームを指定します
  env://  ルートパスワード、管理者ユーザーパスワード、データベース名、MariaDBサーバー上の新しいユーザーのユーザー名などのデータベースのパラメーターを定義する環境変数 MYSQL_ROOT_PASSWORD:somerootpassword//MySQLルートパスワード  MYSQL_PASSWORD:somemysqlpassword //  Nextcloudで使用されるMySQL管理者/標準ユーザーパスワードMYSQL_DATABASE:db //  MySQLデータベース名MYSQL_USER:mysqluser //  Nextcloudが使用する管理者/標準ユーザーのユーザー名
//これはNextcloudDockerコンテナをデプロイするタスクです。 MariaDBコンテナの場合と同じように、AnsibleはDockerハブから公式のNextcloudイメージをプルダウンします。ここでは、コンテナの再起動ポリシー(コンテナを再起動するタイミング)を指定し、コンテナに公開してホストにバインドするポートの数も設定しました。これにより、ブラウザとhttpプロトコルを介してコンテナにアクセスできるようになります。-name :Nextcloudをデプロイする//  タスク名docker_container://  Ansibleが使用するDocker関数image:nextcloud //  プルダウンするDockerイメージname:nextcloud //  コンテナ名を指定しますrestart_policy:always //  コンテナ再起動の属性を設定ポート:-"8080:80" //  Webブラウザを介してアクセスできるようにコンテナで公開するポートを指定しますリンク:-"{{db_volume}}:/ var / lib / mysql //  Nextcloudがデータベースに接続できるようにMySQLサーバーへのリンクを指定する変数ボリューム:-"{{nextcloud}}:/ var / www / html" //  永続ストレージ用のホストマシン上のボリュームを指定します
 //データベースに接続し、データベースをデータストレージに使用するためにNextcloudが使用するMariaDBデータベースの環境変数。 env:MYSQL_PASSWORD:somemysqlpassword //  使用するNextcloud用のMySQLを指定する変数MYSQL_DATABASE:db //  NextcloudがMYSQL_USERに接続するMySQLデータベース名:mysqluser //  Nextcloudが使用するMySQLユーザーMYSQL_HOST:mariadb //  接続するMySQLデータベースサーバー(以前に設定したDockerコンテナ名)

Ansibleを使用してDockerにNextcloudをデプロイする

プレイブックができたので、実行できます:

 ansible-playbook nextcloud-ansible -l docker 

期待される結果と、コンテナーがデプロイされて実行されているかどうかを確認します。

Nextcloudがブラウザ経由でアクセス可能かどうかを確認してください:

データベースで発生する可能性のある問題に関する小さなメモ:

Nextcloudのアカウントを作成しようとすると、セットアップの完了ページで次のエラーが発生する場合があります:

「InnoDBはROW_FORMAT=COMPRESSEDまたはKEY_BLOCK_SIZEのテーブルの書き込みを拒否します」

これはNextcloudバージョン21以降で発生し始めました。基本的に、NextcloudはデータベースでのInnoDB圧縮をサポートしていません。この回避策は、InnoDB圧縮を無効にするだけで、これを行うには、MariaDB構成のAnsible .yamlファイルに次の構成を追加して、デプロイメントを再実行します。

「コマンド:–transaction-isolation =READ-COMMITTED –binlog-format =ROW –innodb-file-per-table =1 –skip-innodb-read-only-compressed」

完全なMariaDB構成は次のようになります:

タスク:-名前:MariaDBサーバーのデプロイdocker_container:画像:mariadb名前:mariadbコマンド:-transaction-isolation =READ-COMMITTED --binlog-format =ROW --innodb-file-per-table =1- skip-innodb-read-only-compressed volume:-"{{db_volume}}:/ var / lib / mysql" env:MYSQL_ROOT_PASSWORD:somerootpassword MYSQL_PASSWORD:somemysqlpassword MYSQL_DATABASE:db 

この構成を再度実行すると、問題は解決するはずです。

概要

記事を要約すると、Ansibleを使用してDockerにNextcloudを正常にデプロイすることができました。これにより、DockerにNextcloudをデプロイするプロセスが自動化されました。ただし、このプロセスを成功させるには、PythonおよびPythonDockerモジュールを使用してセットアップするためにAnsible環境が必要でした。その後、Nextcloudをデータベースとともにデプロイし、データとファイルがDockerコンテナー内に保存されないようにデータの永続性を備えた、Ansibleプレイブックを作成して実行しました。

お時間をいただきありがとうございます…


Docker
  1. Ansibleを使用したマルチパス仮想マシン

  2. Dockerを使用してRedisでNextcloudをセットアップする

  3. Ansibleを使用してDockerにWordPressをデプロイする

  1. Ansibleを使用してDockerをインストールする方法[Debian/Ubuntu]

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

  3. Dockerを使用してマイクロサービスをデプロイする方法

  1. ランチャーでアプリをデプロイする方法

  2. PostgreSQLをDockerコンテナとしてデプロイする方法

  3. DockerComposeを使用するためのクイックガイド