Как использовать Deployer с Docker (Laradock)

Я создал новый сервер Digital Ocean с Docker на нем (используя Laradock) и получил мой веб-сайт Laravel, работающий хорошо.

Теперь я хочу автоматизировать мои развертывания с помощью Deployer.

Я думаю, что моя единственная проблема в том, что я не могу запустить Deployer docker exec -it $(docker-compose ps -q php-fpm) bash;, это команда, которую я успешно использую вручную, чтобы войти в соответствующий контейнер Docker (после использования SSH для подключения с моего локального компьютера к серверу Digital Ocean).

Когда Deployer пытается запустить его, я получаю это сообщение об ошибке:

➤ Executing task execphpfpm
[1.5.6.6] > cd /root/laradock && (pwd;)
[1.5.6.6] < /root/laradock
[1.5.6.6] > cd /root/laradock && (docker exec -it $(docker-compose ps -q php-fpm) bash;)
[1.5.6.6] < the input device is not a TTY
➤ Executing task deploy:failed
• done on [1.5.6.6]
✔ Ok [3ms]
➤ Executing task deploy:unlock
[1.5.6.6] > rm -f ~/daily/.dep/deploy.lock
• done on [1.5.6.6]
✔ Ok [188ms]

In Client.php line 99:

  [Deployer\Exception\RuntimeException (1)]
  The command "cd /root/laradock && (docker exec -it $(docker-compose ps -q php-fpm) bash;)" failed.

  Exit Code: 1 (General error)

  Host Name: 1.5.6.6

  ================
  the input device is not a TTY

Вот соответствующие части моего deploy.php:

host('1.5.6.6')
        ->user('root')
        ->identityFile('~/.ssh/id_rsa2018-07-09')
        ->forwardAgent(true)
        ->stage('production')
        ->set('deploy_path', '~/{{application}}');

before('deploy:prepare', 'execphpfpm');

task('execphpfpm', function () {
    cd('/root/laradock');
    run('pwd;');
    run('docker exec -it $(docker-compose ps -q php-fpm) bash;');
    run('pwd');
});

Я уже полтора дня читал бесчисленные статьи и пробовал так много разных вариантов. Например, замена -it флаг с -iили настройка export COMPOSE_INTERACTIVE_NO_CLI=1 или заменить весь docker exec команда с docker-compose exec php-fpm bash;,

Ничего не работает Буду признателен за любые предложения.:-)

Я ожидаю, что мне не хватает чего-то довольно простого. Docker широко используется, и Deployer также кажется популярным. Благодарю.

1 ответ

В моем конкретном случае у меня были отдельные контейнеры для PHP и Composer. Поэтому при развертывании мне не удалось подключиться к контейнеру по SSH.

Итак, я настроил bin/php и bin/composer такие параметры:

set('bin/php', 'docker exec php php');
set('bin/composer', 'docker run --volume={{release_path}}:/app composer');

Обратите внимание, что здесь мы используем exec для стойкого php контейнер, который уже запущен в данный момент и run чтобы запустить новый экземпляр composer контейнер, который остановится после установки зависимостей.

Чтобы использовать Laravel Deployer, вы должны подключиться через ssh напрямую к контейнеру рабочей области.

Вы можете открыть порт ssh контейнера:https://laradock.io/documentation/

Предположим, вы перенаправили SSH-порт 22 контейнера на vm-порт 2222. В этом случае вам необходимо настроить Deployer для использования порта 2222.

Также не забудьте установить правильные безопасные ключи SSH, а не ключи по умолчанию.

Тебе стоит попробовать

docker-compose exec -T php-fpm bash;

Опция -T будет

Отключить псевдо-tty распределение. По умолчанию docker-compose exec выделяет TTY.

Другие вопросы по тегам