Как развернуть и запустить пакетную установку, используя docker & ansible ROR? - PullRequest
0 голосов
/ 05 мая 2019

Я развертываю приложение ROR, используя Ansible с Docker, образ Ruby Docker, созданный и отправленный в Docker HUB, Ansible клонировал приложение из частного репозитория на целевой сервер, контейнер докера успешно создан, но не может запустить Команды Ruby, такие как Bundle install, DB Migrate, Rake Task. Эти команды необходимо запускать при развертывании в интерактивном режиме из Ansible Code.

А как запустить приложение после запуска вышеуказанной задачи с единорогом.

Это делается для автоматизации процесса развертывания с использованием Ansible, ранее использовавшего Capistrano, но теперь мы переходим из Capistrano в Ansible.

---
- hosts: Ec2-Instance
  become: true
  tasks:
   - name: Creating Deploy path
     file:
       state: directory
       path: "/var/www/"
  - name: Copying SSH Key | Temp
    copy:
      src: ~/.ssh/id_rsa
      dest: ~/.ssh/id_rsa
      owner: deployer
      group: deployer
      mode: 400
  - name: Cloning a web application to the application path
    git:
      repo: private repo
      version: master
      dest: /var/www/app-path/ 
      accept_hostkey: yes
    register: git
     - name: Remove SSH Key
       shell: "sudo rm -rf ~/.ssh/id_rsa"

  - name: Run Ruby Docker Container
    docker_container:
      name: 'container_name'
      image: 'docker-hub/ruby-2.4.1:0.1'
      tty: yes
      detach: true
      restart: yes # not required. Use with started state to force a matching container to be stopped and restarted.
      interactive: yes # not required. Keep stdin open after a container is launched, even if not attached.
      state: started
      volumes: /var/www/app-path:/var/www/app-path/
      working_dir: /var/www/app-path/
      env:
        gem_path: /var/www/app-path
        gemfile: /var/www/app-path
      bundler:
        deployment_mode: production

Я ожидаю, что Ansible Playbook развернет приложение Ruby on Rails с Docker / Nginx / Unicorn

1 Ответ

0 голосов
/ 05 мая 2019

Ваш playbook не работает, потому что вы указали ниже параметр, который не является допустимым параметром в модуле docker_container ( модуль docker_container

...
bundler:
      deployment_mode: production

Альтернативный подход здесь может быть таким:

создайте сценарий оболочки в /var/www/app-path/install-ror.sh

#!/bin/sh

working_dir=/var/www/app-path/
cd $working_dir

export gem_path=/var/www/app-path
export gemfile=/var/www/app-path

#see https://stackoverflow.com/questions/10912614/rails-bundle-install-production-only 
gem install bundle-only

#install only production modules
bundle-only production

Обновите вашу книгу воспроизведения следующим образом

- name: Run Ruby Docker Container
    docker_container:
        name: 'container_name'
        image: 'docker-hub/ruby-2.4.1:0.1'
        tty: yes
        detach: true
        restart: yes # not required. Use with started state to force a matching container to be stopped and restarted.
        interactive: yes # not required. Keep stdin open after a container is launched, even if not attached.
        state: started
        volumes: /var/www/app-path:/var/www/app-path/
        working_dir: /var/www/app-path/
        command: /var/www/app-path/install-ror.sh

Вы можете следоватьвывод для улучшения этого.

...