概要
この記事では、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