从 docker 中初始化 Laravel Passport

问题描述 投票:0回答:2

我正在对我们的开发环境进行 Docker 化。该应用程序包括一个公开 REST API 的 Laravel 应用程序。身份验证是通过 Laravel Passport 完成的。

由于这仅适用于开发人员,因此我正在安装 Composer 依赖项、设置应用程序加密密钥、迁移数据库并在运行时设置护照密钥。除了护照钥匙之外,一切都已正确初始化。无论我如何尝试解决这个问题,我最终都会遇到以下错误:

fpm_1 |在 CryptKey.php 第 45 行:

fpm_1 |

fpm_1 | 密钥路径“file:///var/www/html/storage/oauth-public.key”不存在或

fpm_1 | 不可读

这是我的 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 dockerfile (./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 在构建时将 Composer 安装到容器中。

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 "$@"

当我在 .zshrc 中导出 $UID 和 $GID 时,我的用户在 fpm 容器内正确映射。注释掉 init-app.sh 中的 Passport:install 行,以便让容器正确启动,我可以通过运行 docker exec -it php artisan Passport:install 来生成密钥。但是让容器处理它失败了。

laravel docker laravel-passport
2个回答
0
投票

事实证明,我的数据库播种者之一以某种方式需要密钥存在。在我调查时,我通过交换说明(播种和护照密钥安装)解决了问题


0
投票

你能帮我解决这个话题吗?

当我在 docker Passport 上部署 laravel 项目时,客户端令牌未经授权。

© www.soinside.com 2019 - 2024. All rights reserved.