Skip to content

Commit

Permalink
Merge pull request #25 from fixpoint/azure-aci
Browse files Browse the repository at this point in the history
ACI deployment
  • Loading branch information
fixpoint-hasan authored Oct 15, 2024
2 parents 71aebb4 + d6d0c57 commit 3c54f74
Show file tree
Hide file tree
Showing 6 changed files with 512 additions and 121 deletions.
53 changes: 53 additions & 0 deletions configs/nginx-azure.conf
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
upstream django {
server localhost:8000;
}

# タイムアウトの設定
proxy_connect_timeout 30;
proxy_send_timeout 300;
proxy_read_timeout 300;

server {
# HTTPの80番ポートを指定
listen 80;
server_name 0.0.0.0;
# Specify the default charset
charset utf-8;

# アップロードファイルサイズのチェックを行わない
client_max_body_size 0;

# djangoの静的ファイル(HTML、CSS、Javascriptなど)を管理
location /.static/ {
alias /var/opt/kompira/html/;
}
# 静的ファイルへのアクセス以外は HTTPS にリダイレクト
location / {
return 301 https://$host$request_uri;
}
}

server {
listen 443 ssl;
server_name 0.0.0.0;
# Specify the default charset
charset utf-8;

# アップロードファイルサイズのチェックを行わない
client_max_body_size 0;

ssl_certificate /etc/nginx/ssl/server.crt;
ssl_certificate_key /etc/nginx/ssl/server.key;
# ssl_password_file /etc/nginx/ssl/server.password;

# djangoの静的ファイル(HTML、CSS、Javascriptなど)を管理
location /.static/ {
alias /var/opt/kompira/html/;
}
# プロキシ設定
# 実際はNginxのコンテナにアクセスしてるのをDjangoにアクセスしてるかのようにみせる
location / {
uwsgi_pass django;
include /etc/nginx/uwsgi_params;
}
}
228 changes: 170 additions & 58 deletions ke2/cloud/azureci/README.md
Original file line number Diff line number Diff line change
@@ -1,26 +1,22 @@
# Kompira Enterprise: シンプルで軽量な次世代運用自動化プラットフォーム

このディレクトリには Azure Container Instances (ACI) にデプロイするための Docker Compose ファイルが含まれています。
このディレクトリには Azure Container Instances (ACI) にデプロイするための ARM template ファイルが含まれています。

## 事前準備

作業用の Windows PC を用いて、デプロイ作業を行います。
作業用 PC には、事前に以下の準備が必要です。
デプロイ作業を行うために、以下の準備をしてください。

1. Docker Desktop for Windows のインストール
以下のリンクを参考に作業用の Windows PC に Docker Desktop をインストールします。
1. Azure CLI のインストール:
[Azure CLI インストールガイド](https://learn.microsoft.com/ja-jp/cli/azure/install-azure-cli) を参考に、お使いの OS に Azure CLI をインストールします。


https://docs.docker.jp/docker-for-windows/install.html
2. ke2-docker リポジトリのファイル一式を取得:
https://github.com/fixpoint/ke2-docker から、Code -> Download ZIP を選択し、
ke2-docker リポジトリのファイル一式を取得して、作業用 PC の適当なディレクトリに展開します。

2. Azure CLI のインストール
以下のリンクを参考に作業用の Windows PC に Azure CLI をインストールします。

https://learn.microsoft.com/ja-jp/cli/azure/install-azure-cli

3. ke-docker リポジトリのファイル一式を取得
https://github.com/fixpoint/ke-docker から、Code -> Download ZIP を選択し、
ke-docker リポジトリのファイル一式を取得して、作業用 PC の適当なディレクトリに
展開します。
3. Docker のインストール (オプショナル):
SSL (self-signed) 証明書の生成を行なうためには Docker が必要です。
[Docker インストールガイド](https://docs.docker.com/engine/install/) を参考に、お使いの OS に Docker をインストールします。

## デプロイ手順

Expand Down Expand Up @@ -49,7 +45,7 @@ az login

そのために、アカウントのサブスクリプションの一覧を確認します。
```
az account show
az account list --output table
```
以下のコマンドで、必要に応じてサブスクリプションを切り替えることができます。
```
Expand Down Expand Up @@ -92,95 +88,211 @@ azure.extensions からPGCRYPTO の拡張を有効にしておきます。
■ kompira データベースの作成
PostgreSQL サーバ上に kompira という名称でデータベースを作成しておきます。

#### 共有ファイルボリュームの作成する

#### Azureコンテクストの作成と切替え
Azure Container Instances で必要となる共有ファイルボリュームを以下の名称で作成しておきます。

以降の Docker コマンドでの作業のために、Azure コンテクストを作成して、コンテクストを切り替えます。
- kompira-var: /var/opt/kompira のマウント用
- kompira-nginx-conf: nginx の conf ファイル用
- rabbitmq-conf: RabbitMQ 設定ファイル用
- ssl-cert: SSL・CA 証明書用

※ ファイル共有名に使用できるのは、小文字、数字、ハイフンのみです。
ファイル共有名の先頭と末尾にはアルファベットまたは数字を使用する必要があります。
2 つの連続するハイフンを含めることはできません。

以下のコマンドを実行します。

Docker コマンドで Azure にログインします。
```
docker login azure
az storage share-rm create \
--resource-group KE20RG \
--storage-account ke20storage \
--name kompira-var
az storage share-rm create \
--resource-group KE20RG \
--storage-account ke20storage \
--name kompira-nginx-conf
az storage share-rm create \
--resource-group KE20RG \
--storage-account ke20storage \
--name rabbitmq-conf
az storage share-rm create \
--resource-group KE20RG \
--storage-account ke20storage \
--name ssl-cert
```

次にACIコンテクストを作成します。
(ここではコンテクスト名として keacicontext を使用していますが、任意の名前でかまいません)
#### 証明書ファイルのアップロード手順

SSL (self-signed) 証明書の生成を行なうために、以下のコマンドを実行します。

```
docker context create aci keacicontext --resource-group KE20RG --subscription-id <サブスクリプションID>
$ cd ke2/cloud/azureci
$ ../../../scripts/create-cert.sh
```
作成された SSL 証明書は ssl ディレクトリに保存されます。

※ 本番環境では、証明書認証局(CA)から証明書を取得してください。

作成した ssl-cert 共有ボリュームに以下のコマンドを使用して証明書ファイルをアップロードします。

ACIコンテクストを切り替えます。
```
docker context use keacicontext
az storage file upload --account-name ke20storage -s ssl-cert --source <サーバー証明書のローカルパス> -p server.crt
az storage file upload --account-name ke20storage -s ssl-cert --source <サーバーキーのローカルパス> -p server.key
az storage file upload --account-name ke20storage -s ssl-cert --source <CA 証明書のローカルパス> -p local-ca.crt
```

#### 共有ファイルボリュームの作成する
注意: `<サーバー証明書のローカルパス>`, `<サーバーキーのローカルパス>`, および `<CA 証明書のローカルパス>` は、それぞれの証明書ファイルが保存されているローカルパスに置き換えてください。

Docker compose で必要となる共有ファイルボリュームを以下の名称で作成しておきます。
Azure ポータルにログインして、ke20storage ストレージアカウントのファイル共有 kompira-nginx-conf に移動し、
画面上からアップロードすることも可能です。

- kompira-var: /var/opt/kompira のマウント用
- kompira-nginx-conf: nginx の conf ファイル用

※ ファイル共有名に使用できるのは、小文字、数字、ハイフンのみです。
ファイル共有名の先頭と末尾にはアルファベットまたは数字を使用する必要があります。
2 つの連続するハイフンを含めることはできません。
#### Nginx の conf ファイルのアップロード

以下のコマンドを実行します。
Nginx の conf ファイルを kompira-nginx-conf ボリュームに default.conf という名称でアップロードします。

Azure CLI の以下のコマンドで ke2-docker に含まれる Nginx の conf ファイルをアップロードします。

```
docker volume create kompira-var --storage-account ke20storage
docker volume create kompira-nginx-conf --storage-account ke20storage
cd .\ke2-docker
az storage file upload --account-name ke20storage -s kompira-nginx-conf --source ./configs/nginx-azure.conf -p default.conf
```
#### Nginx の conf ファイルのアップロード

Nginx の conf ファイルを kompira-nginx-conf ボリュームに default.conf という名称でアップロードします。
Azure ポータルにログインして、ke20storage ストレージアカウントのファイル共有 kompira-nginx-conf に移動し、
画面上からアップロードすることも可能です。


Azure CLI の以下のコマンドで ke-docker に含まれる Nginx の conf ファイルをアップロードします。
#### RabbitMQ の conf ファイルのアップロード

以下のコマンドを使用して、RabbitMQ の conf ファイルを rabbitmq-conf ボリュームにアップロードします。

```
cd .\ke-docker
az storage file upload --account-name ke20storage -s kompira-nginx-conf --source .\configs\nginx-default.conf -p default.conf
cd .\ke2-docker
az storage file upload --account-name ke20storage -s rabbitmq-conf --source ./configs/rabbitmq-auth.conf -p 20-auth.conf
az storage file upload --account-name ke20storage -s rabbitmq-conf --source ./configs/rabbitmq-ssl.conf -p 30-ssl.conf
```

Azure ポータルにログインして、ke20storage ストレージアカウントのファイル共有 kompira-nginx-conf に移動し、
画面上からアップロードすることも可能です。

### Docker compose 実行

ke-docker からダウンロードしたファイル一式に含まれる ke-docker/azureci/docker-compose.yml を使用して、
Docker compose を実行します。
### アプリケーションを ACI にデプロイ

ke2-docker/ke2/cloud/azureci ディレクトリ上で Azure CLI を使用して ARM テンプレート aci-deployment.json をデプロイします。

以下の環境変数を設定しておく必要があります
aci-parameters.json ファイルを使用して必要な値を設定します。以下のフィールドを更新します

- DATABASE_URL: postgresql への接続URLを指定します
- STORAGE_ACCOUNT_NAME: Azureのストレージアカウント名を指定します
- `<database-url>`: `pgsql://<PostgreSQLユーザ名>:<PostgreSQLパスワード>@postgresql-for-ke.postgres.database.azure.com:5432/kompira`
注意: <PostgreSQLユーザ名> および <PostgreSQLユーザのパスワード> は、実際のユーザー名とパスワードに置き換えてください。
- `<storage-account-name>`: `ke20storage` (作成するリソースの名前は適宜変更してください)
- `<storage-account-key>`: 取得したストレージアカウントキー

PowerShell上で、以下のコマンドを実行します
ストレージアカウントキーは以下のコマンドを使用して取得できます

```
$Env:DATABASE_URL = "pgsql://<PostgreSQLユーザ名>:<PostgreSQLユーザのパスワード>@postgresql-for-ke.postgres.database.azure.com:5432/kompira"
$Env:STORAGE_ACCOUNT_NAME = "ke20storage"
az storage account keys list --resource-group KE20RG --account-name ke20storage --output table
```

#### システムの起動

ke-docker/azureci ディレクトリ上で docker compose up を実行します
ke2-docker/ke2/cloud/azureci ディレクトリ上で Azure CLI を使用して ARM テンプレートのデプロイ
```
> cd .\ke-docker\azureci\
> docker compose up
> cd ./ke2-docker/ke2/cloud/azureci
> az deployment group create \
--resource-group KE20RG \
--template-file aci-deployment.json \
--parameters @aci-parameters.json
```

Azure ポータルの KE20RG リソースグループの配下に、azureci コンテナインスタンスが作成されるので、
そこから、各コンテナの状態を確認することができます。
azureci コンテナインスタンスの Public IP アドレスにブラウザから HTTP アクセスすると、
Kompira Enterprise のログイン画面が表示されるので、ログインすることができます。
azureci コンテナインスタンスの Public IP アドレスにブラウザから HTTP・HTTPS アクセスすると、Kompira Enterprise のログイン画面が表示されるので、ログインすることができます。

デプロイ時にパラメータをオーバーライドすることも可能です。
```
az deployment group create \
--resource-group KE20RG \
--template-file aci-deployment.json \
--parameters @aci-parameters.json \
--parameters databaseUrl=<database-url> \
--parameters storageAccountName=<storage-account-name> \
--parameters storageAccountKey=<storage-account-key>
```

オーバーライドできるパラメータは以下のとおりです。

- imageTag: イメージのタグ(デフォルト: "latest")
- timezone: タイムゾーン(デフォルト: "Asia/Tokyo")
- dnsNameLabel: DNS 名ラベル(デフォルト: 空)。
DNS 名ラベルを追加する場合、`<dnsNameLabel>`.japaneast.azurecontainer.io にブラウザからアクセスできます。
- databaseUrl: データベースの接続 URL
形式:pgsql://<ユーザ名>:<パスワード>@<アドレス>:<ポート番号>/<データベース名>
- storageAccountName: ストレージアカウント名
- storageAccountKey: ストレージアカウントキー

#### コンテナログの確認

特定のコンテナのログを確認するには、以下のコマンドを実行します。

■ コンテナ名
- kompira
- kengine
- jobmngrd
- redis
- rabbitmq
- nginx


```
az container logs --resource-group KE20RG --name azureci --container-name <コンテナ名>
```

#### コンテナへのシェルアクセス

#### システムの削除
特定のコンテナにシェルアクセスするには、以下のコマンドを実行します。

```
az container exec --resource-group KE20RG --name azureci --container-name <コンテナ名> --exec-command /bin/sh
```

#### システムの削除・停止

以下でコンテナを削除します。
```
docker compose down
az deployment group delete --resource-group KE20RG --name azureci
```

コンテナを削除ではなく停止・起動・再起動したい場合は、以下のコマンドも利用できます。

停止:
```
az container stop --resource-group KE20RG --name azureci
```

※ ACI の docker context では、stop は未サポートです。コンテナを削除ではなく停止したい場合は、
Azure ポータルの azureci コンテナインスタンスの画面から停止してください。
起動:
```
az container start --resource-group KE20RG --name azureci
```

再起動:
```
az container restart --resource-group KE20RG --name azureci
```

#### 料金プラン
このデプロイメントでは、以下のスペックを使用します。
vCPU リソース:4 コア
メモリ:16GB
OS: Linux
SKU: Standard

プランについては、[このリンクをご参照ください。](https://azure.microsoft.com/en-us/pricing/details/container-instances/)

Loading

0 comments on commit 3c54f74

Please sign in to comment.