【问题标题】:deploying a laravel site on ubuntu 22.04 server在 ubuntu 22.04 服务器上部署 laravel 站点
【发布时间】:2022-09-27 09:55:43
【问题描述】:

我正在尝试使用 LEMP 堆栈在数字海洋上的 Ubuntu 22.04 服务器上部署我的 laravel 应用程序... 所以我已经安装了 Linux、Nginx、所有 PHP 依赖项并配置了数据库并添加了一个新用户。这是我的 /sites-available/zili-zala.com 的样子

server {
    listen 80;
    server_name zili-zala.com www.zili-zala.com;
    root /var/www/zili-zala.com/public;

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

    index index.html index.htm index.php;

    charset utf-8;

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

    location = /favicon.ico { access_log off; log_not_found off; }
    location = /robots.txt  { access_log off; log_not_found off; }


    location ~ \\.php$ {
        fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
        include fastcgi_params;
    }

    location ~ /\\.(?!well-known).* {
        deny all;
    }
}

这是我的 .env 的样子

APP_NAME=soko
APP_ENV=production
APP_KEY=****
APP_DEBUG=true
APP_URL=example.com

LOG_CHANNEL=stack
LOG_DEPRECATIONS_CHANNEL=null
LOG_LEVEL=debug

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=mydatabase
DB_USERNAME=myusername
DB_PASSWORD=mypassword

我已经授予服务器用户对存储和缓存文件夹的写入权限。我还将符号链接添加到启用站点的文件中。但是当我进入浏览器时,我得到一个空白屏幕。我仍然不知道发生了什么。任何帮助将不胜感激。

  • 调试的第一步是,备份 laravel 的 index.php 文件,并拥有一个 index.php 文件,其中包含一个 echo 语句或 phpinfo() 以确保服务器配置良好并执行index.php 文件。如果你能做到这一点,那么下一步将是调试应用程序。但在此之前尝试一下。同时检查 nginx 日志。
  • 您是否设置了 DNS 以将您的域名指向您的服务器?
  • 白页可能意味着发生了内部服务器错误(如果关闭显示错误,您将得到一个空白页,它应该在生产服务器上)并且内部服务器错误基本上可以意味着任何事情。检查您的网络服务器错误日志,看看那里是否有任何 PHP 错误。
  • 顺便说一句,您意识到通过发布该 .env 文件,您已经向整个互联网提供了您的网站地址,包括您的数据库凭据和您的应用程序密钥。绝不共享凭据等敏感信息,您应该总是在某处发布代码时屏蔽/删除它们。您应该尽快更改服务器上的用户名/密码/应用程序密钥。
  • 即使您编辑了问题,任何人都可以阅读revision history,因此您仍然需要更改凭据。另外,在那之前有几个人已经看过这个问题。一旦您不小心在网上(或其他任何地方)泄露了凭据,就认为它们是不安全的。

标签: php laravel digital-ocean ubuntu-22.04


【解决方案1】:

我想到的是在一个 droplet 上托管两个不同的域。即www.website1.com和www.website2.com。但在数字海洋上,似乎要么不可能,要么极其困难。并且有充分的理由,因为如果一个人能够在一个 droplet 上托管无数不同的域,那么为什么要购买任何其他的 droplet?相反,人们可能只是在升级他们的液滴,这对企业不利,因为回头客是让企业保持活力的人。 (这只是我的假设)

但是如果找到解决方法。在您的数字海洋账户的 A 记录上,您可以添加另一个 A 记录。 说你的域名,或者第一个A记录是website1.com。您可以为 www 添加一个 Cname(用于子域)。这样 www 条目也被接受,即www.website.com。最后,您可以添加另一个 A 记录,例如 ww1,这样现在对第二个域的请求就可以重定向到 ww1.website.com。当提示输入别名时,您只需添加“@”符号,它将自动填写主域。本质上,域 b 指向域 a,域 a 现在指向服务器。这是缺少的,因为套接字文件不知道要指向哪个 IP 地址。如果有更好的方法来做到这一点,那么我全神贯注。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-06
    • 2022-10-06
    • 1970-01-01
    • 2022-12-10
    • 1970-01-01
    • 2016-11-27
    相关资源
    最近更新 更多