このページは機械翻訳によるものです。内容の正確さは保証しておりません。 人力翻訳を依頼する

オープンソース RabbitMQ のデプロイ

更新日時2025-02-18 17:22

RabbitMQ は、Advanced Message Queuing Protocol (AMQP)、Message Queuing Telemetry Transport (MQTT)、Streaming Text Oriented Messaging Protocol (STOMP)、HTTP、WebSockets など、複数のメッセージングプロトコルをサポートするオープンソースのメッセージブローカーです。 RabbitMQ は使いやすく、拡張性が高く、可用性が高いです。 RabbitMQ は、分散システムにおける通信の調整と管理を行い、非同期メッセージングを実装して、システムのデカップリング、スケーラビリティ、同時処理能力、およびフォールトトレランスを向上させます。 RabbitMQ は、安定したパフォーマンス、多様な機能、活発なコミュニティサポートにより、エンタープライズレベルのアプリケーションのメッセージングおよびタスク処理で広く使用されています。このトピックでは、Elastic Compute Service (ECS) インスタンスにオープンソース RabbitMQ をデプロイする方法について説明します。

RabbitMQ のデプロイ

  • 手動デプロイ: この方法は、Linux コマンドの基本的な知識があり、RabbitMQ のカスタムデプロイを実行できるユーザーに適しています。

  • クイックデプロイ: この方法では、RabbitMQ をインストールおよび構成する必要がなくなり、デプロイ時間が大幅に短縮されます。

手動デプロイ
クイック デプロイ

この例では、RabbitMQ の最新バージョンをインストールする方法について説明します。 RabbitMQ の他のバージョンのインストール方法については、「Installing RabbitMQ」を参照してください。

前提条件

次の要件を満たす ECS インスタンスが作成されます。

  • インスタンスには、システムによってパブリック IP アドレスが割り当てられているか、または Elastic IP Address (EIP) が関連付けられています。 詳細については、「EIP」をご参照ください。

  • インスタンスは、Ubuntu 20.04、Ubuntu 22.04、または Debian 11.0 から Debian 12.5 の Debian バージョンを実行しています。

    サポートされているその他のオペレーティングシステムとインストール方法については、「Installing RabbitMQ」を参照してください。

  • ポート 22、80、および 15672 でのトラフィックを許可するために、インスタンスのセキュリティグループにインバウンドルールが追加されます。

    説明

    Message Queue (MQ) ツールを使用して RabbitMQ サーバーに接続するには、ポート 5672 も開く必要があります。

手順

  1. RabbitMQ をデプロイする ECS インスタンスに接続します。

    詳細については、「Workbench を使用して SSH 経由で Linux インスタンスに接続する」をご参照ください。

  2. RabbitMQ をインストールします。

    1. 基本的な RabbitMQ 依存関係をインストールします。

      sudo apt-get install curl gnupg apt-transport-https -y
    2. RabbitMQ と Erlang の GNU Privacy Guard (GPG) 公開鍵をダウンロードし、公開鍵情報をオペレーティングシステムの信頼キーリングに追加します。

      curl -1sLf "https://keys.openpgp.org/vks/v1/by-fingerprint/0A9AF2115F4687BD29803A206B73A36E6026DFCA" | sudo gpg --dearmor | sudo tee /usr/share/keyrings/com.rabbitmq.team.gpg > /dev/null
      curl -1sLf https://github.com/rabbitmq/signing-keys/releases/download/3.0/cloudsmith.rabbitmq-erlang.E495BB49CC4BBE5B.key | sudo gpg --dearmor | sudo tee /usr/share/keyrings/rabbitmq.E495BB49CC4BBE5B.gpg > /dev/null
      curl -1sLf https://github.com/rabbitmq/signing-keys/releases/download/3.0/cloudsmith.rabbitmq-server.9F4587F226208342.key | sudo gpg --dearmor | sudo tee /usr/share/keyrings/rabbitmq.9F4587F226208342.gpg > /dev/null
    3. RabbitMQ と Erlang の公式 Advanced Packaging Tool (APT) リポジトリを /etc/apt/sources.list.d/rabbitmq.list ファイルに追加します。

      sudo tee /etc/apt/sources.list.d/rabbitmq.list <<EOF
      deb [signed-by=/usr/share/keyrings/rabbitmq.E495BB49CC4BBE5B.gpg] https://ppa1.novemberain.com/rabbitmq/rabbitmq-erlang/deb/ubuntu jammy main
      deb-src [signed-by=/usr/share/keyrings/rabbitmq.E495BB49CC4BBE5B.gpg] https://ppa1.novemberain.com/rabbitmq/rabbitmq-erlang/deb/ubuntu jammy main
      deb [signed-by=/usr/share/keyrings/rabbitmq.E495BB49CC4BBE5B.gpg] https://ppa2.novemberain.com/rabbitmq/rabbitmq-erlang/deb/ubuntu jammy main
      deb-src [signed-by=/usr/share/keyrings/rabbitmq.E495BB49CC4BBE5B.gpg] https://ppa2.novemberain.com/rabbitmq/rabbitmq-erlang/deb/ubuntu jammy main
      deb [signed-by=/usr/share/keyrings/rabbitmq.9F4587F226208342.gpg] https://ppa1.novemberain.com/rabbitmq/rabbitmq-server/deb/ubuntu jammy main
      deb-src [signed-by=/usr/share/keyrings/rabbitmq.9F4587F226208342.gpg] https://ppa1.novemberain.com/rabbitmq/rabbitmq-server/deb/ubuntu jammy main
      deb [signed-by=/usr/share/keyrings/rabbitmq.9F4587F226208342.gpg] https://ppa2.novemberain.com/rabbitmq/rabbitmq-server/deb/ubuntu jammy main
      deb-src [signed-by=/usr/share/keyrings/rabbitmq.9F4587F226208342.gpg] https://ppa2.novemberain.com/rabbitmq/rabbitmq-server/deb/ubuntu jammy main
      EOF
    4. ローカルパッケージインデックスを更新します。

      sudo apt-get update -y
    5. Erlang 関連のパッケージをインストールします。

      sudo apt-get install -y erlang-base \
                              erlang-asn1 erlang-crypto erlang-eldap erlang-ftp erlang-inets \
                              erlang-mnesia erlang-os-mon erlang-parsetools erlang-public-key \
                              erlang-runtime-tools erlang-snmp erlang-ssl \
                              erlang-syntax-tools erlang-tftp erlang-tools erlang-xmerl
    6. RabbitMQ をインストールします。

      sudo apt-get install rabbitmq-server -y --fix-missing
  3. RabbitMQ を構成します。

    1. インスタンスの起動時に RabbitMQ が起動するように構成し、RabbitMQ を起動します。

      sudo systemctl enable rabbitmq-server
      sudo systemctl start rabbitmq-server
    2. セキュリティを確保するために、次のコマンドを実行して RabbitMQ のデフォルトアカウントを削除することをお勧めします。

      RabbitMQ のデフォルトのユーザー名とパスワードはどちらも guest です。

      sudo rabbitmqctl delete_user guest
    3. RabbitMQ 管理者ユーザーを作成します。

      1. ユーザーを作成します。

        sudo rabbitmqctl add_user <Username> <Password>

        <Username> パラメーターと <Password> パラメーターを指定します。

      2. 新しいユーザーを管理者として設定します。

        sudo rabbitmqctl set_user_tags <Username> administrator
      3. 新しいユーザーにすべての権限を付与します。

        sudo rabbitmqctl set_permissions -p / <Username> ".*" ".*" ".*"
  4. RabbitMQ を起動し、オープンソース RabbitMQ コンソールに移動します。

    sudo rabbitmq-plugins enable rabbitmq_management
Alibaba Cloud Marketplace イメージを使用して RabbitMQ をデプロイする
Terraform を使用して RabbitMQ をデプロイする

Alibaba Cloud Marketplace のイメージを使用して RabbitMQ をデプロイできます。 これにより、RabbitMQ をインストールおよび構成する必要がなくなり、デプロイ時間が大幅に短縮されます。 Alibaba Cloud Marketplace のイメージ詳細ページの料金タブに表示される価格が適用されます。

  1. Cloud Native MQ for Apache RabbitMQ Powered by Websoft9 をクリックして、イメージ詳細ページに移動します。

    イメージ詳細ページで、イメージ情報とユーザーガイドを入手できます。

  2. [choose Your Plan] をクリックします。

  3. ECS インスタンス購入ページの [カスタム起動] タブで、プロンプトに従って ECS インスタンスを構成して購入します。

    次のパラメーターに注意してください。 ビジネス要件に基づいて他のパラメーターを構成します。 その他のパラメーターについては、「カスタム起動タブでインスタンスを作成する」をご参照ください。

    • [イメージ]: 購入したイメージは、[イメージ] セクションで自動的に選択されます。

    • [パブリック IP アドレス]: [パブリック Ipv4 アドレスを割り当てる] を選択します。

    • [セキュリティグループ]: ポート 22、80、および 15672 でのトラフィックを許可するセキュリティグループのインバウンドルールを構成します。

  4. RabbitMQ サーバーにログインするために使用するユーザー名とパスワードを取得します。

    1. RabbitMQ サーバーに接続します。

      詳細については、「Workbench を使用して SSH 経由で Linux インスタンスに接続する」をご参照ください。

    2. 次のコマンドを実行して、RabbitMQ サーバーにログインするためのユーザー名とパスワードを取得します。

      sudo cat /credentials/password.txt

      次の図に示すコマンド出力が返されます。

      • rabbitmq_user: RabbitMQ サーバーにログインするためのユーザー名。

      • rabbitmq_password: RabbitMQ サーバーにログインするためのパスワード。

      • rabbitmq_gui_port: RabbitMQ の Web サーバーポート。

      • rabbitmq_mq_port: RabbitMQ のリモート接続ポート。

      • rabbitmq_er_port: Erlang での処理間通信のために RabbitMQ サーバーが使用する内部ポート。

      • rabbitmq_mqtt_port: RabbitMQ サーバーが提供する MQTT サービスのリスニングポート。

      image

Terraform は、開発者と O&M チームがクラウドインフラストラクチャの作成、デプロイ、および管理を自動化するのに役立つコードとしてのインフラストラクチャ (IaC) ツールです。 Terraform を使用すると、手動操作や構成を行うことなく、簡単なコードを書いてクラウドインフラストラクチャを定義および構成できます。

手順

  1. [here] をクリックして Terraform Explorer ページに移動し、次の Terraform コードを自動的にロードします。

    完全な Terraform コードを表示する

    provider "alicloud" {
      region = var.region
    }
    
    variable "region" {
      default = "cn-beijing"
    }
    
    variable "common_name" {
      description = "Common name for resources."
      type        = string
      default     = "deploy_rabbitmq_by_tf"
    }
    
    variable "system_disk_category" {
      default     = "cloud_essd"
      description = "The category of the system disk."
    }
    
    variable "instance_password" {
      description = "Server login password, length 8-30, must contain three (Capital letters, lowercase letters, numbers, `~!@#$%^&*_-+=|{}[]:;'<>?,./ Special symbol in)"
      type        = string
      default     = "Test@123456"
    }
    
    variable "image_id" {
      description = "Image of instance. Supported only on Ubuntu."
      type        = string
      default     = "ubuntu_22_04_x64_20G_alibase_20241224.vhd"
    }
    
    variable "instance_type" {
      description = "Instance type."
      type        = string
      default     = "ecs.e-c1m2.large"
    }
    
    variable "access_ip" {
      description = "The IP address you used to access the ECS."
      type        = string
      default     = "0.0.0.0/0"
    }
    
    variable "rabbitmq_user_name" {
      description = "Create a new user for RabbitMQ."
      type        = string
      default     = "rabbitmq@new_user"
    }
    
    variable "rabbitmq_user_password" {
      description = "Password for a new RabbitMQ user."
      type        = string
      default     = "rabbitmq@pw12345"
    }
    
    # Query the zones that match the specified conditions.
    data "alicloud_zones" "default" {
      available_disk_category     = var.system_disk_category
      available_resource_creation = "VSwitch"
      available_instance_type     = var.instance_type
    }
    
    resource "alicloud_vpc" "rabbitmq_vpc" {
      vpc_name   = "${var.common_name}-vpc"
      cidr_block = "192.168.0.0/16"
    }
    
    resource "alicloud_vswitch" "rabbitmq_vsw" {
      vpc_id       = alicloud_vpc.rabbitmq_vpc.id
      vswitch_name = "${var.common_name}-vsw"
      cidr_block   = "192.168.0.0/24"
      zone_id      = data.alicloud_zones.default.zones.0.id
    }
    
    resource "alicloud_security_group" "rabbitmq_sg" {
      security_group_name = "${var.common_name}-sg"
      vpc_id              = alicloud_vpc.rabbitmq_vpc.id
    }
    
    resource "alicloud_security_group_rule" "allow_tcp_22" {
      type              = "ingress"
      ip_protocol       = "tcp"
      nic_type          = "intranet"
      policy            = "accept"
      port_range        = "22/22"
      priority          = 1
      security_group_id = alicloud_security_group.rabbitmq_sg.id
      cidr_ip           = var.access_ip
    }
    
    resource "alicloud_security_group_rule" "allow_tcp_80" {
      type              = "ingress"
      ip_protocol       = "tcp"
      nic_type          = "intranet"
      policy            = "accept"
      port_range        = "80/80"
      priority          = 1
      security_group_id = alicloud_security_group.rabbitmq_sg.id
      cidr_ip           = var.access_ip
    }
    
    resource "alicloud_security_group_rule" "allow_tcp_15672" {
      type              = "ingress"
      ip_protocol       = "tcp"
      nic_type          = "intranet"
      policy            = "accept"
      port_range        = "15672/15672"
      priority          = 1
      security_group_id = alicloud_security_group.rabbitmq_sg.id
      cidr_ip           = var.access_ip
    }
    
    resource "alicloud_security_group_rule" "allow_icmp_all" {
      type              = "ingress"
      ip_protocol       = "icmp"
      nic_type          = "intranet"
      policy            = "accept"
      port_range        = "-1/-1"
      priority          = 1
      security_group_id = alicloud_security_group.rabbitmq_sg.id
      cidr_ip           = "0.0.0.0/0"
    }
    
    resource "alicloud_instance" "rabbitmq_ecs" {
      availability_zone          = data.alicloud_zones.default.zones.0.id
      security_groups            = [alicloud_security_group.rabbitmq_sg.id]
      instance_type              = var.instance_type
      system_disk_category       = var.system_disk_category
      image_id                   = var.image_id
      instance_name              = "${var.common_name}-ecs"
      vswitch_id                 = alicloud_vswitch.rabbitmq_vsw.id
      internet_max_bandwidth_out = 10
      password                   = var.instance_password
    }
    
    locals {
      command_content = <<SHELL
    #!/bin/sh
    
    sudo apt-get install curl gnupg apt-transport-https -y
    
    ## Team RabbitMQ's main signing key
    curl -1sLf "https://keys.openpgp.org/vks/v1/by-fingerprint/0A9AF2115F4687BD29803A206B73A36E6026DFCA" | sudo gpg --dearmor | sudo tee /usr/share/keyrings/com.rabbitmq.team.gpg > /dev/null
    ## Community mirror of Cloudsmith: modern Erlang repository
    curl -1sLf https://github.com/rabbitmq/signing-keys/releases/download/3.0/cloudsmith.rabbitmq-erlang.E495BB49CC4BBE5B.key | sudo gpg --dearmor | sudo tee /usr/share/keyrings/rabbitmq.E495BB49CC4BBE5B.gpg > /dev/null
    ## Community mirror of Cloudsmith: RabbitMQ repository
    curl -1sLf https://github.com/rabbitmq/signing-keys/releases/download/3.0/cloudsmith.rabbitmq-server.9F4587F226208342.key | sudo gpg --dearmor | sudo tee /usr/share/keyrings/rabbitmq.9F4587F226208342.gpg > /dev/null
    
    ## Add apt repositories maintained by Team RabbitMQ
    sudo tee /etc/apt/sources.list.d/rabbitmq.list <<EOF
    ## Provides modern Erlang/OTP releases
    deb [arch=amd64 signed-by=/usr/share/keyrings/rabbitmq.E495BB49CC4BBE5B.gpg] https://ppa1.rabbitmq.com/rabbitmq/rabbitmq-erlang/deb/ubuntu jammy main
    deb-src [signed-by=/usr/share/keyrings/rabbitmq.E495BB49CC4BBE5B.gpg] https://ppa1.rabbitmq.com/rabbitmq/rabbitmq-erlang/deb/ubuntu jammy main
    
    # another mirror for redundancy
    deb [arch=amd64 signed-by=/usr/share/keyrings/rabbitmq.E495BB49CC4BBE5B.gpg] https://ppa2.rabbitmq.com/rabbitmq/rabbitmq-erlang/deb/ubuntu jammy main
    deb-src [signed-by=/usr/share/keyrings/rabbitmq.E495BB49CC4BBE5B.gpg] https://ppa2.rabbitmq.com/rabbitmq/rabbitmq-erlang/deb/ubuntu jammy main
    
    ## Provides RabbitMQ
    deb [arch=amd64 signed-by=/usr/share/keyrings/rabbitmq.9F4587F226208342.gpg] https://ppa1.rabbitmq.com/rabbitmq/rabbitmq-server/deb/ubuntu jammy main
    deb-src [signed-by=/usr/share/keyrings/rabbitmq.9F4587F226208342.gpg] https://ppa1.rabbitmq.com/rabbitmq/rabbitmq-server/deb/ubuntu jammy main
    
    # another mirror for redundancy
    deb [arch=amd64 signed-by=/usr/share/keyrings/rabbitmq.9F4587F226208342.gpg] https://ppa2.rabbitmq.com/rabbitmq/rabbitmq-server/deb/ubuntu jammy main
    deb-src [signed-by=/usr/share/keyrings/rabbitmq.9F4587F226208342.gpg] https://ppa2.rabbitmq.com/rabbitmq/rabbitmq-server/deb/ubuntu jammy main
    EOF
    
    ## Update package indices
    sudo apt-get update -y
    
    ## Install Erlang packages
    sudo apt-get install -y erlang-base \
                            erlang-asn1 erlang-crypto erlang-eldap erlang-ftp erlang-inets \
                            erlang-mnesia erlang-os-mon erlang-parsetools erlang-public-key \
                            erlang-runtime-tools erlang-snmp erlang-ssl \
                            erlang-syntax-tools erlang-tftp erlang-tools erlang-xmerl
    
    ## Install rabbitmq-server and its dependencies
    sudo apt-get install rabbitmq-server -y --fix-missing
    
    sudo systemctl enable rabbitmq-server
    sudo systemctl start rabbitmq-server
    
    sudo rabbitmqctl delete_user guest
    sudo rabbitmqctl add_user ${var.rabbitmq_user_name} ${var.rabbitmq_user_password}
    sudo rabbitmqctl set_user_tags ${var.rabbitmq_user_name} administrator
    sudo rabbitmqctl set_permissions -p / ${var.rabbitmq_user_name} ".*" ".*" ".*"
    sudo rabbitmq-plugins enable rabbitmq_management
    
    SHELL
    }
    
    resource "alicloud_ecs_command" "deploy_rabbitmq" {
      name            = "DeploydRabbitMQ"
      type            = "RunShellScript"
      command_content = base64encode(local.command_content)
      timeout         = 3600
      working_dir     = "/root"
    }
    
    
    resource "alicloud_ecs_invocation" "invocation" {
      instance_id = [alicloud_instance.rabbitmq_ecs.id]
      command_id  = alicloud_ecs_command.deploy_rabbitmq.id
      timeouts {
        create = "5m"
      }
    }
    
    output "rabbitmq-login_url" {
      value = format("http://%s:15672", alicloud_instance.rabbitmq_ecs.public_ip)
    }
  2. デフォルトでは、1 つの Virtual Private Cloud (VPC)、1 つの vSwitch、1 つのセキュリティグループ、および 1 つの従量課金制 ECS インスタンスが cn-beijing リージョンに作成されます。 パラメーター値をビジネス要件に基づいて実際の値に置き換えます。 ECS インスタンスの課金については、「課金概要」を参照してください。

  3. [デバッグの開始] をクリックして、作成するリソースの詳細をプレビューします。 リソース情報が正しい場合は、[計画と適用] をクリックしてリソースを作成します。 タスクステータスが「成功」の場合、デプロイタスクは完了です。

オープンソース RabbitMQ コンソールにログインする

  1. オンプレミスのブラウザを開き、アドレスバーに http://<Linux インスタンスのパブリック IP アドレス>:15672 と入力します。

    次の図は、RabbitMQ がインストールされていることを示しています。RabbitMQ登录页

  2. 作成した RabbitMQ 管理者ユーザーのユーザー名とパスワードを入力し、[ログイン] をクリックして、オープンソース RabbitMQ コンソールにアクセスします。

    次の図は、オープンソース RabbitMQ コンソールを示しています。RabbitMQ主页

オープンソース RabbitMQ クラスタを ApsaraMQ for RabbitMQ インスタンスに移行する

メッセージの蓄積やスプリットブレインなどのさまざまな安定性の問題を解決し、高並列性、分散型、および柔軟なスケーリングを実装する場合は、オープンソース RabbitMQ クラスタを ApsaraMQ for RabbitMQ に移行できます。 詳細については、「オープンソース RabbitMQ クラスタを ApsaraMQ for RabbitMQ インスタンスに移行する」をご参照ください。

  • 目次 (1, M)
  • RabbitMQ のデプロイ
  • オープンソース RabbitMQ コンソールにログインする
  • オープンソース RabbitMQ クラスタを ApsaraMQ for RabbitMQ インスタンスに移行する
フィードバック
phone お問い合わせ

Chat now with Alibaba Cloud Customer Service to assist you in finding the right products and services to meet your needs.

alicare alicarealicarealicare