service:rabbitmq
Различия
Показаны различия между двумя версиями страницы.
Следующая версия | Предыдущая версия | ||
service:rabbitmq [24.08.2023 14:33] – создано viacheslav | service:rabbitmq [30.07.2024 19:21] (текущий) – внешнее изменение 127.0.0.1 | ||
---|---|---|---|
Строка 1: | Строка 1: | ||
+ | ====== RabbitMQ ====== | ||
+ | Пароль указан в переменных Гитлаба и хэшируется при сборке. В definitions.json указаны слова-маркеры, | ||
+ | <file yaml .gitlab-ci.yml> | ||
+ | stages: | ||
+ | - build | ||
+ | - deploy | ||
+ | |||
+ | variables: | ||
+ | IMAGE_DEV: $CI_REGISTRY_IMAGE/ | ||
+ | IMAGE_STAGE: | ||
+ | IMAGE_PROD: $CI_REGISTRY_IMAGE/ | ||
+ | VERSION: 1.0.$CI_PIPELINE_ID | ||
+ | DOCKER_HOST: | ||
+ | |||
+ | before_script: | ||
+ | - eval $(ssh-agent -s) | ||
+ | - cat $SSH_PRIVATE_KEY | tr -d ' | ||
+ | - sed -i '/ | ||
+ | - echo " | ||
+ | |||
+ | # Task templates | ||
+ | |||
+ | .build: | ||
+ | stage: build | ||
+ | tags: | ||
+ | - shell | ||
+ | variables: | ||
+ | IMAGE_NAME: "" | ||
+ | DEPLOY_HOST: | ||
+ | RABBITMQ_USER: | ||
+ | RABBITMQ_PASS: | ||
+ | script: | ||
+ | - RABBITMQ_PASS_HASH=`docker run --rm --name rabbit-hash-gen rabbitmq: | ||
+ | - sed -i " | ||
+ | - sed -i " | ||
+ | - docker build -t $IMAGE_NAME: | ||
+ | - docker push $IMAGE_NAME: | ||
+ | - docker tag $IMAGE_NAME: | ||
+ | - docker push $IMAGE_NAME: | ||
+ | |||
+ | .deploy: | ||
+ | stage: deploy | ||
+ | tags: | ||
+ | - docker | ||
+ | image: docker:cli | ||
+ | variables: | ||
+ | STACK: "" | ||
+ | IMAGE_NAME: "" | ||
+ | NETWORK: "" | ||
+ | DEPLOY_HOST: | ||
+ | RABBITMQ_STORAGE: | ||
+ | RABBITMQ_PORT: | ||
+ | RABBITMQ_ADMIN_PORT: | ||
+ | script: | ||
+ | - docker pull $IMAGE_NAME: | ||
+ | - docker stack rm $STACK | ||
+ | - docker network create --driver=overlay --scope=swarm $NETWORK || true | ||
+ | - docker stack deploy -c ./ | ||
+ | |||
+ | # Build | ||
+ | |||
+ | build_dev: | ||
+ | extends: .build | ||
+ | rules: | ||
+ | - if: $CI_COMMIT_BRANCH == " | ||
+ | - if: $BUILD == " | ||
+ | variables: | ||
+ | IMAGE_NAME: $IMAGE_DEV | ||
+ | DEPLOY_HOST: | ||
+ | RABBITMQ_USER: | ||
+ | RABBITMQ_PASS: | ||
+ | |||
+ | # build_stage: | ||
+ | # build_prod: | ||
+ | |||
+ | # Deploy | ||
+ | |||
+ | deploy_dev: | ||
+ | extends: .deploy | ||
+ | rules: | ||
+ | - if: $CI_COMMIT_BRANCH == " | ||
+ | - if: $BUILD == " | ||
+ | - if: $DEPLOY == " | ||
+ | variables: | ||
+ | VERSION: latest | ||
+ | variables: | ||
+ | STACK: rabbitmq_dev | ||
+ | IMAGE_NAME: $IMAGE_DEV | ||
+ | NETWORK: ${STACK} | ||
+ | DEPLOY_HOST: | ||
+ | RABBITMQ_STORAGE: | ||
+ | RABBITMQ_PORT: | ||
+ | RABBITMQ_ADMIN_PORT: | ||
+ | environment: | ||
+ | name: dev | ||
+ | url: https:// | ||
+ | |||
+ | # deploy_stage: | ||
+ | # deploy_prod: | ||
+ | |||
+ | </ | ||
+ | |||
+ | # Админка через TLS (порт 15671) | ||
+ | <file yaml docker-compose.yml> | ||
+ | version: " | ||
+ | services: | ||
+ | rabbitmq: | ||
+ | image: ${IMAGE_NAME}: | ||
+ | hostname: rabbitmq | ||
+ | healthcheck: | ||
+ | test: [" | ||
+ | ports: | ||
+ | - ${RABBITMQ_PORT}: | ||
+ | - ${RABBITMQ_ADMIN_PORT}: | ||
+ | volumes: | ||
+ | - ${RABBITMQ_STORAGE}:/ | ||
+ | networks: | ||
+ | - rabbitmq | ||
+ | |||
+ | networks: | ||
+ | rabbitmq: | ||
+ | external: true | ||
+ | name: ${NETWORK} | ||
+ | </ | ||
+ | |||
+ | В Докерфайле генерится сертификат для шифрования канала к админке | ||
+ | <file bash Dockerfile> | ||
+ | FROM rabbitmq: | ||
+ | |||
+ | COPY --chown=rabbitmq: | ||
+ | COPY --chown=rabbitmq: | ||
+ | |||
+ | RUN \ | ||
+ | mkdir -p -m 700 / | ||
+ | cd / | ||
+ | openssl genrsa -out ca.key 2048 && \ | ||
+ | openssl req -new -x509 -days 36500 -key ca.key -subj "/ | ||
+ | openssl req -newkey rsa:2048 -nodes -keyout rabbitmq.key -subj "/ | ||
+ | openssl x509 -req -extfile <(printf " | ||
+ | chown -R rabbitmq: | ||
+ | </ | ||
+ | |||
+ | <file bash rabbitmq.conf> | ||
+ | load_definitions | ||
+ | |||
+ | # https:// | ||
+ | management.ssl.port | ||
+ | management.ssl.cacertfile | ||
+ | management.ssl.certfile | ||
+ | management.ssl.keyfile | ||
+ | </ | ||
+ | |||
+ | definitions.json (часть) | ||
+ | <file json definitions.json> | ||
+ | { | ||
+ | " | ||
+ | { | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | } | ||
+ | ], | ||
+ | " | ||
+ | { | ||
+ | " | ||
+ | } | ||
+ | ], | ||
+ | " | ||
+ | { | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | } | ||
+ | ], | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | { | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | } | ||
+ | }, | ||
+ | </ | ||
+ | |||
+ | ===== Очередь пустая после перезапуска RabbitMQ ===== | ||
+ | In the class of your producer **you should set delivery mode to “2” which is “persistent”.**\\ | ||
+ | You can do that using '' | ||
+ | Once you’ve extended your producer class with '' | ||
+ | Now even after a restart the messages are still int the queue, ready to be consumed. | ||
+ | |||
+ | https:// | ||