概要
GCPでDocker版AWXの構築方法を残したいと思います。
AWXを使うことで、Ansibleで課題だったセキュリティの問題(権限に合わせたPlaybookの実行、秘密鍵の保管、実行記録)を多く解決してくれます。
事前準備
- GCPのデプロイ先の環境(メモリ4G以上)
メモリが4G以上でなければ、OOM killer に殺される可能性が高いです。
目次
- コンテナ環境の準備
- PIP Ansibleインストール
- AWXインストール
- GCP 遠隔からの疎通に向けた任意ポート開放
- web接続
コンテナ環境の準備
まず初めにDockerをインストールします。
インストール方法は公式リポジトリを使ってインストールします。
手順は公式ドキュメントの通りです。
https://docs.docker.com/engine/install/centos/
sudo yum install -y yum-utils
sudo yum-config-manager --disable docker-ce-nightly \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
リポジトリ登録ができたらdockerをインストール
sudo yum install docker-ce docker-ce-cli containerd.io
インストールが完了したらDockerソケットを起動します。
sudo systemctl enable --now docker.socket
sudo systemctl status docker.socket
dockerの作動確認
sudo docker info
最初に書いたバージョンが確認できます。
Client:
Context: default
Debug Mode: false
Plugins:
app: Docker App (Docker Inc., v0.9.1-beta3)
buildx: Build with BuildKit (Docker Inc., v0.6.1-docker)
scan: Docker Scan (Docker Inc., v0.8.0)
Server:
Containers: 0
Running: 0
Paused: 0
Stopped: 0
Images: 0
Server Version: 20.10.8
次にDocker-composeをインストールします。
こちらも公式手順の通りです。
https://docs.docker.com/compose/install/
sudo curl -L "https://github.com/docker/compose/releases/download/1.27.3/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
インストールしたファイルにシンボリックリンクを張ります。
sudo chmod +x /usr/local/bin/docker-compose
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
バージョン確認
docker-compose version
バージョンが確認できます。
docker-compose version 1.29.2, build unknown
docker-py version: 5.0.2
CPython version: 3.9.6
OpenSSL version: OpenSSL 1.1.1k FIPS 25 Mar 2021
sudo実行権限を持つAWXインストールユーザーをdockerグループに追加する。
sudo gpasswd -a daath docker
PIP Ansibleインストール
次にAnsibleをインストールします。RHEL8系では専用のリポジトリをインストールしてAnsibleインストールする方法もありますが、今回は、PIPでのインストールにします。
CentOS Stream8ではデフォルトでPythonが入っていませんので今回は3.9をインストールします。
python3 -V
### 3.9がインストールされています。
Python 3.9.6
PIP3でAnsibleインストール、このとき合わせてSElinuxの制御パッケージもインストールしておきます。これがないとAWXビルド途中でエラーとなります。
それではインストールします。
sudo pip3 install ansible selinux
インストールしたAnsibleのバージョンを確認
ansible --version
ansible [core 2.11.5]
config file = None
configured module search path = ['/home/daath/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
ansible python module location = /usr/local/lib/python3.9/site-packages/ansible
ansible collection location = /home/daath/.ansible/collections:/usr/share/ansible/collections
executable location = /usr/local/bin/ansible
python version = 3.9.6 (default, Aug 25 2021, 16:22:38) [GCC 8.5.0 20210514 (Red Hat 8.5.0-3)]
jinja version = 3.0.1
libyaml = True
AWXインストール
下準備が完了したのでAWXをインストールします。
AWXリポジトリをクローンで取得
git clone -b 19.3.0 https://github.com/ansible/awx.git
2022/05/20時点の最新バージョンになります。
ブランチバージョンは、Gitサイトを確認してください
https://github.com/ansible/awx/releases?
クローンしたディレクトリ内へ移動
ls -l
cd ~/awx/
補足:AWX各種設定を変更する場合は以下のファイルを使用します。
主にデータベースのパスワード設定など
vi ~/awx/tools/docker-compose/inventory
同一の環境であれば5〜10分くらいでビルドが完了します。
ビルドが完了するとansible/awx_devel、ローカルイメージキャッシュにイメージが作成されます。
docker imagesコマンドを使用して確認します。
docker images
以下のようにイメージが作成されている
REPOSITORY TAG IMAGE ID CREATED SIZE
quay.io/awx/awx_devel HEAD 03eaa84b348f About a minute ago 2.11 GB
AWXを実行する
コンテナを起動します
make docker-compose COMPOSE_UP_OPTS=-d
Web接続
ビルドしてコンテナを起動させただけではWeb接続できません。
まずはUIをクリーンアップしてビルドします。
Makefileを編集し、--forceを通過しビルドを可能にします。
vim Makefile
awx/ui/node_modules:
NODE_OPTIONS=--max-old-space-size=6144 $(NPM_BIN) --prefix awx/ui --loglevel verbose --force ci
ビルドを開始
docker exec tools_awx_1 make clean-ui ui-devel
Reactの最新バージョンが異なると警告がでますが、無視してもAWXは動きます。
コンパイル前のファイルがないと警告が出ますが、無視してもAWXは動きます。
次に管理ユーザーの作成
AWXにログインする前に、管理者ユーザーを作成する必要があります。
docker exec -ti tools_awx_1 awx-manage createsuperuser
実行すると以下のようにユーザー名、メールアドレスパスワードを入力していきます。
Username (leave blank to use 'awx'): masahiro
Email address: masahiro@example.jp
Password:
Password (again):
Superuser created successfully.
ファイヤーウォールを解放、WebUIは8043TCPポートに接続されているようです。
sudo firewall-cmd --add-port=8043/tcp
GCPに関して遠隔からの疎通に向けた任意ポートの開放します。
以下のサイトを参考に ポート8043を開放してください。
https://www.mtioutput.com/entry/googlecloud-port-open
ブラウザで接続を確認する。
https://{AWXサーバIPもしくはFQDN}:8043
接続が確認できたらファイヤーウォールを永久設定へ
sudo firewall-cmd --runtime-to-permanent
以上でAWX構築が完了となります。
参考サイト
https://note.com/koya0316/n/n2cd9ac1cf5dd
https://www.mtioutput.com/entry/googlecloud-port-open