【问题标题】:The stream or file \"/var/www/html/storage/logs/laravel.log\" could not be opened in append mode... Permission denied. gcp "Cloud run"流或文件 \"/var/www/html/storage/logs/laravel.log\" 无法以附加模式打开...权限被拒绝。 gcp“云运行”
【发布时间】:2021-11-15 18:07:50
【问题描述】:

来自 php:8.0-apache-buster

#安装所有系统依赖并启用PHP模块 运行 apt-get update && apt-get install -y
libpq-开发
libzip-开发
&& rm -r /var/lib/apt/lists/*
&& docker-php-ext-install
pdo_pgsql
pgsql
拉链

#安装作曲家 运行 curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/bin/ --filename=composer

#将apache的uid和gid更改为docker用户uid/gid 运行 usermod -u 1000 www-data && groupmod -g 1000 www-data

#将 web_root 更改为 laravel /var/www/html/public 文件夹 运行 sed -i -e "s/html/html/public/g" /etc/apache2/sites-enabled/000-default.conf

启用 apache 模块重写

运行 a2enmod 重写

#复制源文件并运行composer 复制 。 /var/www/html

安装所有 PHP 依赖项

运行 cd /var/www/html

运行 composer install --no-interaction

运行作曲家更新

运行作曲家转储自动加载 #更改我们应用程序的所有权 运行 chown -R www-data:www-data /var/www/html/storage

运行 chown -R www-data:www-data /var/www/html

运行 chown -R www-data:www-data /var/www/html/bootstrap/cache

运行 chmod -R 755 /var/www/html/storage

运行 chmod -R 777 引导

运行 chmod -R 777 /var/www/html

入口点 ["/var/www/html/docker-entrypoint.sh"]

这些是我在 dockerfile 中添加的上述命令,以避免权限错误
但问题是当我在本地系统中运行这个 dockerfile 时,它​​适用于应用程序 但是当我在云运行上部署并在我的应用程序中输入错误的登录信息时,它给了我这个错误“”消息“:”流或文件“/var/www/html/storage/logs/laravel.log”不能以附加模式打开:无法打开流:权限被拒绝"," 所以我相信dockerfile没有问题,可能是cloud run的配置有问题。我不知道

apache2.conf

<Directory />
        Options FollowSymLinks
        AllowOverride All
        Require all denied
</Directory>
<Directory /usr/share>
        AllowOverride All
        Require all granted
</Directory>
<Directory /var/www/html>
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
</Directory>

000-default.conf

<VirtualHost *:80>

  ServerAdmin webmaster@localhost
  DocumentRoot /var/www/html/public/

  <Directory /var/www/html/>
    AllowOverride All
    Require all granted
  </Directory>

  ErrorLog ${APACHE_LOG_DIR}/error.log
  CustomLog ${APACHE_LOG_DIR}/access.log combined

</VirtualHost>

【问题讨论】:

  • 在变量和秘密下添加 APP_DEBUG=true 和 APP_KEY 应该可以工作
  • 编辑您的问题并在 apache2.conf 中为 laravel/public 条目显示 条目。如果您没有,请添加一个。 Laravel 需要 AllowOverride All
  • 我已经更新了我的问题,请查看更改为 AllowOverride All 但仍然是同样的问题
  • 您也没有 html/public
  • 始终尝试阅读文档以了解此类详细信息。 apache2.conf

标签: laravel google-cloud-platform dockerfile devops google-cloud-run


【解决方案1】:

在项目目录的根目录中尝试以下命令。

find . -type d -print0 |xargs -0 chmod 755

find . -type f -print0 |xargs -0 chmod 644

你也可以尝试关注

nginx.dockerfile

FROM nginx:stable-alpine

ADD ./nginx/nginx.conf /etc/nginx/
ADD ./nginx/default.conf /etc/nginx/conf.d/

RUN mkdir -p /var/www/html
RUN addgroup -g 1000 laravel && adduser -G laravel -g laravel -s /bin/sh -D laravel
RUN chown laravel:laravel /var/www/html

php.dockerfile

FROM php:7.4-fpm

ADD ./php/www.conf /usr/local/etc/php-fpm.d/

RUN apt update && apt install -y curl libonig-dev libxml2-dev unzip zlib1g-dev libpng-dev zip libzip-dev && rm -rf /var/lib/apt/lists/*
RUN addgroup --gid 1000 laravel && adduser --ingroup  laravel --gecos laravel --shell /bin/sh --disabled-password laravel
RUN mkdir -p /var/www/html
RUN chown laravel:laravel /var/www/html

WORKDIR /var/www/html

RUN docker-php-ext-install pdo pdo_mysql gd zip bcmath mbstring exif pcntl

【讨论】:

  • 感谢您的回复!但正如我所说,我正在运行云运行服务,所以我无法 ssh 用于生产的服务器,但我在执行到我的本地运行容器后将这些命令应用于 /var/www/html,这些命令成功运行,作为响应,我什么也没提供
  • 在 dockerfile chmod g+w storage/logs 中授予组对 /storage/logs/ 的写入权限
  • 我已经更新了我的问题请查看添加的 Docker 文件
  • 我已经更新了答案,看看这是否可以帮助你。我附上了 nginx.dockerfile 和 php.dockerfile 的样本
【解决方案2】:

感谢所有帮助过我的人 该问题已得到修复。 在我的 laravel 目录中,每个文件夹的所有者都是 www-data 除了 /logs 所以我单独添加了命令来更改 /logs 的所有者

【讨论】:

    猜你喜欢
    • 2021-06-26
    • 2022-11-30
    • 2021-10-03
    • 2021-10-03
    • 2018-05-06
    • 2018-10-03
    • 2020-06-16
    • 2018-07-08
    • 2021-02-09
    相关资源
    最近更新 更多