Как использовать 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.