AmazonLinux2 に AWX をインストールする手順をメモしておきます。
環境
今回は以下の環境を構築します。
- ベースは AmazonLinux2
- インスタンスサイズは t2.small
- pyenv で Python 3.7.4 環境を構築
- フロントエンドは Nginx で SSL/TLS を終端させる
構築完了後、各コンポーネントのバージョンは以下になりました。
- Amazon Linux release 2 (Karoo)
- Linux awx.example.com 4.14.128-112.105.amzn2.x86_64 #1 SMP Wed Jun 19 16:53:40 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
- docker-18.06.1ce-10.amzn2.x86_64
- git-2.17.2-2.amzn2.x86_64
- nginx-1.17.1-1.el7.ngx.x86_64
- pyenv 1.2.13
- pip
- ansible 2.8.2
- docker-compose 1.23.2
- pip 19.1.1
- python 3.7.4
インスタンスサイズ
AWX では複数のコンテナを組み合わせて利用することになり、それなりのスペックを要求します。 AWS のインスタンスサイズが t2.micro では SWAP が多発する為、t2.small の利用をお勧めします。
pyenv 環境の構築
pyenv が依存するパッケージをインストールします。
yum -y install \
bzip2-devel \
gcc \
gcc-c++ \
git \
libffi-devel \
make \
openssl-devel \
readline-devel \
sqlite-devel \
zlib-devel
pyenv 自体をインストールします。
curl -L https://raw.githubusercontent.com/pyenv/pyenv-installer/master/bin/pyenv-installer | bash
pyenv が必要とする環境変数を追加し、反映します。
cat << 'EOS' >> ~/.bashrc
export PATH="/root/.pyenv/bin:$PATH"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"
EOS
source ~/.bashrc
Python 3.7.4 のインストール
pyenv で Python 3.7.4 をインストールします。 pyenv install
は Python をビルドするので、完了するまで数分はかかるはずです。
pyenv install 3.7.4
pyenv global 3.7.4
pyenv rehash
pip のアップデート
今後、更に AWX が依存するパッケージや Python モジュールをインストールしていきますが、先んじて pip 自体を最新版にアップデートしておきます。
pip install pip --upgrade
関連パッケージのインストール (docker & git)
AWX をインストールする上で必要になる docker と git をインストールしておきます。
yum -y install \
docker \
git
Docker の自動起動&起動設定
docker を自動起動&起動設定しておきます。
systemctl enable docker
systemctl start docker
Python モジュールのインストール
pip で Ansible と docker-compose をインストールしておきます。 docker-compose はバージョンを指定せず、最新バージョンをインストールしようとすると「別モジュールが依存している requests モジュールのバージョン」と「docker-compose モジュールが要求する requests モジュールのバージョン」が衝突してしまうようで、インストールが出来ません。 そこで docker-compose モジュールはエラー無くインストール出来るバージョン 1.32.2 を指定してインストールします。
pip install ansible
pip install docker-compose~=1.23.2
AWX のインストール
まず、GitHub から clone します。 フロントエンドに Nginx を設置するので、AWX 付属の Web サーバはローカルアドレス (127.0.0.1) を Listen するように変更します。 設定ファイルの修正が完了したら ansible-playbook
でインストールを開始します。
git clone https://github.com/ansible/awx.git
cd ./awx/installer
sed -i -e "s/host_port=80/host_port=127.0.0.01:8080/g" inventory
sed -i -e "s/host_port_ssl=443/host_port_ssl=127.0.0.1:8443/g" inventory
ansible-playbook -i inventory install.yml
インストールが完了しました。 コンテナの状況を確認すると以下のようになっていました。
# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b8fbd71fb87b ansible/awx_task:6.1.0 "/tini -- /bin/sh -c…" 3 minutes ago Up 3 minutes 8052/tcp awx_task
3b2273304754 ansible/awx_web:6.1.0 "/tini -- /bin/sh -c…" 3 minutes ago Up 3 minutes 127.0.0.1:80->8052/tcp awx_web
a7367810eb5b ansible/awx_rabbitmq:3.7.4 "docker-entrypoint.s…" 3 minutes ago Up 3 minutes 4369/tcp, 5671-5672/tcp, 15671-15672/tcp, 25672/tcp awx_rabbitmq
cea6f30759e8 postgres:9.6 "docker-entrypoint.s…" 3 minutes ago Up 3 minutes 5432/tcp awx_postgres
270a611afa0f memcached:alpine "docker-entrypoint.s…" 3 minutes ago Up 3 minutes 11211/tcp awx_memcached
サーバ証明書の用意
今回は AWX のフロントエンドに Nginx を配置し、SSL/TLS サーバ証明書を終端させます。 予め、サーバ証明は任意のディレクトリに用意しておきます。 今回は /etc/letsencrypt/certificates/
へ証明書や秘密鍵をインストールしておきました。
mkdir -p /etc/letsencrypt/certificates/
Nginx
続いて Nginx を構築していきます。
インストール
AmazonLinux 標準リポジトリ上の Nginx はバージョンが低い為、Nginx 公式リポジトリから Nginx をインストールします。 まず、リポジトリの定義ファイルを作成します。 /etc/yum.repos.d/nginx.repo
を以下の内容で新規作成します。
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/mainline/centos/7/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
リポジトリの定義が出来たので、Nginx をインストールします。
yum check-update
yum -y install nginx
SSL/TLS 設定
Nginx で SSL/TLS を終端すべく、/etc/nginx/conf.d/awx.conf
を以下の内容で新規作成します。
upstream awx {
server localhost:8080;
}
server {
listen 80;
server_name awx.example.com;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2;
server_name awx.example.com;
ssl_certificate /etc/letsencrypt/certificates/example.com.crt;
ssl_certificate_key /etc/letsencrypt/certificates/example.com.key;
ssl_protocols TLSv1.1 TLSv1.2;
ssl_ciphers 'ECDH !aNULL !eNULL !SSLv2 !SSLv3';
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
location / {
proxy_pass http://awx;
proxy_redirect http:// https://;
}
}
自動起動&起動
準備が出来たので、Nginx を自動起動&起動設定します。
systemctl enable nginx
systemctl start nginx
AWX へログインする
docker コンテナが起動完了するまで待った後、ブラウザで https://awx.example.com
へアクセスし、以下のような画面が表示されれば AWX のインストールは完了です。
AWX への初期ログイン情報はインストール時に利用した awx/installer/inventory
に定義されていますが、変更していなければ下記です。
項目 | 値 |
---|---|
ユーザ名 | admin |
パスワード | password |
AWX へのログインに成功すると下記のような画面に遷移するはずです。
コメント