Я занимаюсь докеризацией нашей среды разработки. Приложение состоит, среди прочего, из приложения laravel, предоставляющего REST API. Аутентификация осуществляется через паспорт laravel.
Поскольку это предназначено только для разработчиков, я устанавливаю зависимости композитора, устанавливаю ключ шифрования приложения, мигрирую базы данных и устанавливаю ключи паспорта во время выполнения. Инициализируется все правильно, кроме ключей от паспорта. Как бы я ни пытался подойти к проблеме, я получаю следующую ошибку:
fpm_1 | In CryptKey.php line 45:
fpm_1 |
fpm_1 | Key path "file:///var/www/html/storage/oauth-public.key" does not exist or
fpm_1 | is not readable
Это соответствующая часть моего файла docker-compose.
version: '3'
services:
fpm:
build: ./api/docker/fpm
restart: unless-stopped
volumes:
- ./api:/var/www/html
- /etc/passwd:/etc/passwd
user: "${UID}:${GID}"
Мой файл докеров fpm (./api/docker/fpm/Dockerfile)
FROM php:7.2.6-fpm
COPY ./init-app.sh /usr/local/bin/
COPY ./install-composer.sh /usr/local/bin/
RUN apt-get update && apt-get install -y --no-install-recommends libfreetype6-dev \
libjpeg62-turbo-dev \
libmcrypt-dev libpng-dev \
libzip-dev \
libzip4 \
git \
zip \
wget \
&& apt-get autoremove \
&& apt-get clean \
&& docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ \
&& docker-php-ext-install gd \
&& docker-php-ext-configure zip --with-libzip=/usr/include/ \
&& docker-php-ext-install zip \
&& docker-php-ext-install pdo_mysql \
&& chmod +x /usr/local/bin/init-app.sh \
&& chmod +x /usr/local/bin/install-composer.sh \
&& /usr/local/bin/install-composer.sh \
&& rm /usr/local/bin/install-composer.sh \
&& wget https://raw.githubusercontent.com/vishnubob/wait-for-it/8ed92e8cab83cfed76ff012ed4a36cef74b28096/wait-for-it.sh \
&& chmod +x wait-for-it.sh \
&& mv wait-for-it.sh /usr/local/bin/
ENTRYPOINT [ "/usr/local/bin/init-app.sh" ]
CMD ["php-fpm"]
install-composer.sh устанавливает композитор в контейнер во время сборки.
init-app.sh:
#!/bin/sh
set -e
# Install composer dependencies
composer install
# Copy env file
cp .env.example .env
# Wait for DB to be up
/usr/local/bin/wait-for-it.sh db:3306 -t 0 --strict -- php artisan key:generate && php artisan migrate:refresh --seed
php artisan passport:install
# Run upstream entrypoint
# first arg is `-f` or `--some-option`
if [ "${1#-}" != "$1" ]; then
set -- php-fpm "$@"
fi
exec "$@"
Мой пользователь правильно отображается внутри контейнера fpm, поскольку я экспортирую $ UID и $ GID в .zshrc. Комментируя строку паспорт: установка в моем init-app.sh, чтобы контейнер загружался правильно, я могу сгенерировать ключи, выполнив docker exec -it php artisan паспорт: установить нормально. Но позволить контейнеру справиться с этим не удается.
@Hussein паспорт ремесленника: команда установки находится на новой строке
ага, глупый я: D






Оказывается, один из моих сидеров базы данных каким-то образом требовал наличия ключа. пока исследую, решил проблему, поменяв местами инструкции (установка ключей посева и паспорта)
отсутствует
&&доphp artisan passport:installи во многих местах :)