Развернуть Laravel с Dokku
Я не могу понять, как правильно его развернуть.
Что я хочу сделать?
- Весь мой проект Laravel должен быть в bitbucket (также здесь есть Dockerfile для локального развертывания);
- Когда я внедряю с помощью dokku, он должен развернуть мой проект Laravel из bitbucket и запустить команды приложения laravel: migrate, seed и так далее.
Что сейчас происходит?
Dokku строит мое приложение Laravel из bitbucket и загружает Docerfile. Итак, я добавил в Dockerfile что-то вроде этого в конце:
Докер COPY / id_docker /home/docker/.ssh/id_rsa
COPY docker / id_docker.pub /home/docker/.ssh/id_rsa.pub
Докер COPY / known_hosts /home/docker/.ssh/known_hosts
RUN eval "$ (ssh-agent)" && ssh-agent -s
RUN if [ "$BUILD_ENV" = "production" ]; затем cd $APP_HOME && git clone git@bitbucket.org:laravel.git; фи
RUN if [ "$BUILD_ENV" = "production" ]; затем cd $APP_HOME/laravel && composer install; фи
RUN if [ "$BUILD_ENV" = "production" ]; затем cd $APP_HOME/laravel && cp .env.example .env; фи
RUN if [ "$BUILD_ENV" = "production" ]; затем cd $APP_HOME/laravel && php artisan key:generate; фи
Но я знаю, что так не должно быть;D
Поэтому мне нужна помощь, как я могу ее развернуть? Я должен использовать Дженкинс или, может быть, существуют файлы Dokku что-то вроде Pecilfile или...?
1 ответ
Хорошо, что я решил:
Прежде всего это файл app.json. Когда сборка завершается, сборка из Dockerfile выполняется предварительно и после развертывания.
{ "name": "laravel", "description": "laravel app on Dokku/Heroku.", "keywords": [ "laravel", "dokku", "heroku" ], "scripts": { "dokku": { "predeploy": "dokku/predeploy.sh", "postdeploy": "dokku/postdeploy.sh" } } }
Папка dokku находится в корневом каталоге проекта.
!!!!!ВАЖНЫЙ!!!!!! - Что-то не так, тогда в beforeploy.sh при запуске composer install. Laravel может изменить что-то на сервере или в плохом файле.env. Так что он собирается из Dockerfile и устанавливает deps для композиторов. Затем dokku ждет 10 секунд, чтобы проверить, нормально ли работает контейнер, но он не работает, как и не печатает ошибку.;/
- Следующее, что я сделал. Создан Dockerfile с основным изображением для laravel;
- Создал init.sh для dokku для запуска php artisan migrate, seed,.env и так далее;
- Создан rebuild.sh для перекомпоновки образа dokku и выполнения действий, которые необходимо выполнять при каждой сборке;
Так что, если вы знаете, что может быть неправильно для app.json, пожалуйста, напишите в комментариях:)
---- РЕДАКТИРОВАТЬ 2018-10-20 ----
Прямо сейчас у меня хорошие новости. Наконец-то я знаю, что не так. По умолчанию dokku имеет ENTRYPOINT для init.sh, и этот файл в моем проекте Docker не существует. Поэтому важно указать ENTRYPOINT для Dockerfile. В моем случае это:
ENTRYPOINT [""]
CMD ["dumb-init", "php", "src/tokara-auto-laravel/artisan", "serve", "--host", "0.0.0.0", "--port", "8000"]
И не забудьте создать файл app.json. Если в Dockerfile вы указали не WORKDIR по умолчанию, вы можете написать что-то вроде этого в вашем Dockerfile:
WORKDIR /home/docker
COPY app.json /home/docker
COPY dokku /home/docker/dokku
И мой app.json:
{
"name": "laravel",
"description": Llaravel app on Dokku/Heroku.",
"keywords": [
"laravel",
"dokku",
"heroku"
],
"scripts": {
"dokku": {
"predeploy": "/home/docker/dokku/predeploy.sh",
"postdeploy": "/home/docker/dokku/postdeploy.sh"
}
}
}