Развернуть Laravel с Dokku

Я не могу понять, как правильно его развернуть.

Что я хочу сделать?

  1. Весь мой проект Laravel должен быть в bitbucket (также здесь есть Dockerfile для локального развертывания);
  2. Когда я внедряю с помощью dokku, он должен развернуть мой проект Laravel из bitbucket и запустить команды приложения laravel: migrate, seed и так далее.

Что сейчас происходит?

  1. 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 ответ

Решение

Хорошо, что я решил:

  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 секунд, чтобы проверить, нормально ли работает контейнер, но он не работает, как и не печатает ошибку.;/

  1. Следующее, что я сделал. Создан Dockerfile с основным изображением для laravel;
  2. Создал init.sh для dokku для запуска php artisan migrate, seed,.env и так далее;
  3. Создан 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" } } }

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