-1

我在一个带有 Digital Ocean 的 droplet 中有一个 web 系统,这个 droplet 已经安装了 nginx,系统有一个上传文件的选项,这些文件被发送到一个谷歌云存储桶。当我在本地主机中时,文件已正确发送,但已在系统中,我收到状态 500 内部服务器错误。我留下一些截图

系统和错误的图像

也得到了回应

{“消息”:“服务器错误”}

但是当我从 localhost 运行它时

本地主机中的一切都很好

这是我的 GoogleStorageServiceProvider

public function boot()
{
    \Storage::extend('gcs', function($app, $config){

        $storageClient = new StorageClient([
            'projectId' => $config['project_id'],
            'keyFilePath' => $config['key_file'],
        ]);
        $bucket = $storageClient->bucket($config['bucket']);

        $adapter = new GoogleStorageAdapter($storageClient, $bucket);

        return new Filesystem($adapter);
    });
}

这是我的 .env

APP_NAME=Laravel
APP_ENV=production
APP_KEY=MY_KEY
APP_DEBUG=false
APP_URL=http://.com

LOG_CHANNEL=stack

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=database
DB_USERNAME=root
DB_PASSWORD=databasepass

GOOGLE_CLOUD_PROJECT_ID=starlit...
GOOGLE_CLOUD_KEY_FILE=/my-project/credentials.json
GOOGLE_CLOUD_STORAGE_BUCKET=my-bucket
FYLESYSTEM_DRIVER=gcs

BROADCAST_DRIVER=log
CACHE_DRIVER=file
QUEUE_CONNECTION=sync
SESSION_DRIVER=file
SESSION_LIFETIME=120

这是我的 sudo vim /etc/nginx/sites-available/YOUR.DOMAIN.COM 文件

server {
listen 80;
listen [::]:80;

server_name YOUR.DOMAIN.COM;
return 301 https://$server_name$request_uri;
}

server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name YOUR.DOMAIN.COM;
root /var/www/html/first-project/public;

ssl_certificate /etc/letsencrypt/live/YOUR.DOMAIN.COM/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/YOUR.DOMAIN.COM/privkey.pem;

ssl_protocols TLSv1.2;
ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-   SHA512:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384;
ssl_prefer_server_ciphers on;

add_header X-Frame-Options "SAMEORIGIN";
add_header X-XSS-Protection "1; mode=block";
add_header X-Content-Type-Options "nosniff";

index index.php index.html index.htm index.nginx-debian.html;

charset utf-8;

location / {
        try_files $uri $uri/ /index.php?$query_string;
}

location ~ \.php$ {
    include snippets/fastcgi-php.conf;
    fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
}

location ~ /\.ht {
        deny all;
}

location ~ /.well-known {
        allow all;
}
}

知道发生了什么吗?

4

1 回答 1

0

正如@AlecJoy 所说,我必须检查 laravel 日志以获取更多上下文。位于默认文件夹 storage/logs/ 中。在那里我发现了一个错误,上面写着“production.ERROR: class 'Google\Cloud\Storage\StorageClient' not found”所以我使用命令composer install,无法使用它,所以我尝试使用composer update,这给了我一个“mmap()失败:[12]无法分配内存”的错误我正在搜索并找到此命令。此外,我必须在所有命令中使用 sudo。

/bin/dd if=/dev/zero of=/var/swap.1 bs=1M count=1024
/sbin/mkswap /var/swap.1
/sbin/swapon /var/swap.1

之后,我遇到了同样的问题,所以我又去了 Laravel Logs,我发现了这个错误“production.ERROR: Given keyfile path /my-project/credentials.json does not exist”所以我不得不编辑我的 .env文件并给出完整路径“ /var/www/html/my-project/credentials.json ”

于 2019-12-14T16:09:36.193 回答