Skip to content

vag-up/docker-nodejs-worker-queue

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

DockerコンテナベースのBullMQジョブキューシステム

BullMQ による Producer/Consumer 実装サンプル

このプロジェクトは、BullMQ を使用した非同期ジョブキューシステムの実装例です。 Dockerコンテナを使用して Producer(ジョブ投入)と Consumer(ジョブ処理)を分離し、Redis を介した本格的なジョブキュー処理を実演します。

Vagrant + Ansible により Ubuntu 24.04 上に Docker 環境を自動構築し、すぐに BullMQ の動作を試すことができます。

アーキテクチャ概要

Client → nginx → nodejs (Producer) → Redis (BullMQ) → worker (Consumer)
  • nodejs コンテナ (Producer): HTTP API でジョブを受け付け、Redis キューに投入
  • worker コンテナ (Consumer): バックグラウンドでジョブを取得・処理
  • redis コンテナ: BullMQ のジョブキューを管理

環境構成

  • OS: Ubuntu 24.04 (bento/ubuntu-24.04)
  • Docker: geerlingguy.docker ロールによるインストール
  • ジョブキュー: BullMQ v5 (Node.js v24 + TypeScript)
  • タイムゾーン: Asia/Tokyo
  • SSL/TLS: 自己署名証明書によるHTTPS接続

Dockerコンテナ構成

コンテナ 役割 説明
nodejs Producer Node.js v24 - HTTP API でジョブを受け付け BullMQ に投入
worker Consumer Node.js v24 - BullMQ からジョブを取得して非同期処理
redis Queue Store BullMQ のジョブキュー・状態管理
nginx Reverse Proxy リバースプロキシ/Webサーバー(HTTPS対応)
mariadb Database データベースサーバー(必要に応じて利用)

BullMQ ジョブキューの動作フロー

  1. クライアントが HTTP リクエストでジョブを投入
  2. Producer (nodejs) が BullMQ Queue にジョブを追加
  3. Redis にジョブデータが永続化
  4. Consumer (worker) がジョブを検知して取得
  5. バックグラウンドで処理を実行
  6. 処理結果を記録

詳細な実装は playbooks/app/README.md を参照してください。

前提条件

  • VirtualBox がインストールされていること
  • Vagrant がインストールされていること
  • 十分なメモリ(最低2GB)と空きディスク容量があること

ディレクトリ構成

.
├── README.md             # このファイル
├── Vagrantfile           # Vagrant設定ファイル
└── playbooks/            # Ansibleプレイブック
    ├── main.yml              # メインプレイブック
    ├── requirements.yml      # 必要なロールの定義
    ├── app/                  # BullMQ ジョブキューアプリケーション
    │   ├── package.json          # 依存関係定義(BullMQ, Express等)
    │   ├── tsconfig.json         # TypeScript設定
    │   ├── README.md             # BullMQ実装の詳細説明
    │   └── src/
    │       ├── main.ts           # Producer - HTTP API でジョブ投入
    │       ├── consumer.ts       # Consumer - バックグラウンド処理
    │       ├── config.ts         # Redis接続設定
    │       └── queue/            # BullMQ キュー定義・実装
    ├── vars/                 # 変数定義
    │   └── main.yml              # メイン変数ファイル
    ├── tasks/                # タスク定義
    │   ├── japanese.yml          # 日本語環境設定
    │   ├── redis.yml             # Redisコンテナ構築(BullMQ用)
    │   ├── mariadb.yml           # MariaDBコンテナ構築
    │   ├── nginx.yml             # Nginxコンテナ構築
    │   ├── nodejs.yml            # Node.jsコンテナ構築(Producer)
    │   ├── worker.yml            # Workerコンテナ構築(Consumer)
    │   └── app.yml               # アプリケーションデプロイ
    └── containers/           # コンテナ設定
        ├── mariadb/              # MariaDB用Dockerfile等
        ├── nginx/                # Nginx用設定ファイル等
        ├── nodejs/               # Node.js用Dockerfile等(Producer/Consumer共通)
        └── redis/                # Redis用Dockerfile等(BullMQ用)

IPアドレス設定

仮想マシンには固定IPアドレス 192.168.33.10 が設定されます。 必要に応じて Vagrantfileconfig.vm.network の設定を変更してください。

起動手順

  1. リポジトリをクローンする
  2. 以下のコマンドを実行してVirtualBox上に環境を構築
vagrant up

接続方法

環境構築後、以下のいずれかの方法で仮想マシンに接続できます。

  1. Vagrantから接続:
vagrant ssh
  1. SSHで直接接続:

※デフォルトパスワード: vagrant

rootユーザーへの切り替え

接続後、以下のコマンドでrootユーザーに切り替えることができます。

sudo su -

Dockerコンテナの確認

環境構築後、仮想マシン内で以下のコマンドでコンテナの状態を確認できます。

docker ps                    # 実行中のコンテナ一覧
docker logs nodejs           # Producer - ジョブ投入ログ
docker logs worker           # Consumer - ジョブ処理ログ
docker logs redis            # BullMQ キューストアのログ
docker logs nginx            # リバースプロキシのログ
docker logs mariadb          # データベースのログ

データベース設定

MariaDBの初期設定は以下の通りです(playbooks/vars/main.yml で変更可能):

項目
rootパスワード root_password
データベース名 sample-db
ユーザー名 sample_user
パスワード sample_password

カスタマイズ

  • playbooks/vars/main.yml を編集することで、コンテナ名やDB設定を変更できます
  • playbooks/main.yml を編集することで、追加のパッケージやタスクを追加できます
  • Vagrantfilevb.memory を編集して、仮想マシンのメモリ割り当てを変更できます

SSL/HTTPS接続

この環境では、NginxがHTTPS(ポート443)でリッスンし、自己署名SSL証明書を使用してセキュアな接続を提供します。

HTTPからHTTPSへの自動リダイレクト

HTTPポート(80)へのアクセスは自動的にHTTPS(443)にリダイレクトされます。

ブラウザからのアクセス時の注意

自己署名証明書を使用しているため、ブラウザで初回アクセス時に「安全ではありません」という警告が表示されます。 これは開発環境では正常な動作です。以下の手順で続行できます:

  1. ブラウザで https://192.168.33.10 にアクセス
  2. 「詳細設定」または「Advanced」をクリック
  3. 「安全ではないページに移動」または「Proceed to 192.168.33.10 (unsafe)」をクリック

BullMQ アプリケーション

playbooks/app ディレクトリに Express + BullMQ + TypeScript を使用した Producer/Consumer サンプルが含まれています。

主な機能

  • Producer: HTTP API エンドポイントでジョブを受け付け
  • Consumer: バックグラウンドでジョブを非同期処理
  • TypeScript: 型安全な実装
  • 美しい UI: テスト用 Web インターフェース

使用方法

ブラウザからジョブを投入:

http://192.168.33.10/

美しいUIのテストページが表示され、メッセージを入力して BullMQ ジョブキューの動作をテストできます。

ログでジョブ処理を確認:

vagrant ssh

# Producer(ジョブ投入)のログ
docker logs -f nodejs

# Consumer(ジョブ処理)のログ
docker logs -f worker

リアルタイムでジョブの投入と処理の様子を確認できます。

独自の BullMQ アプリケーションを使用する場合

playbooks/app ディレクトリの内容を置き換えるか、以下の要件を満たすアプリケーションを配置してください:

  • package.jsonstart スクリプトが定義されていること
  • ポート 3000 でリッスンすること
  • pnpm を使用すること
  • BullMQ の接続先として環境変数 REDIS_HOST を使用すること

トラブルシューティング

ネットワーク接続の問題

ネットワーク設定に問題が発生した場合は、Vagrantfile の IPアドレスを 使用環境に合わせて変更してください。

仮想マシンの起動に失敗する場合

VirtualBoxの設定や競合を確認し、必要に応じてVirtualBoxを再起動してください。

プロビジョニングを再実行する場合

vagrant provision

About

Make Node.js worker platform with BullMQ job queue system

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors