Laravel 5 App on Linux Server 上的共享主机
默认情况下,Laravel 项目的 public
文件夹公开了应用程序的内容,任何人都可以从任何地方请求该应用程序的内容,其他应用程序代码对于没有适当权限的任何人来说是不可见的或无法访问的。
在你的开发机器上开发应用程序之后,需要将其推送到生产服务器,以便可以从任何地方通过互联网访问 - 对吧?
对于大多数应用程序/网站,首选是使用托管服务提供商(如 GoDaddy,HostGator 等)的共享托管包,主要是因为成本低。
注意 :你可以要求你的提供商手动更改 document_root ,因此你只需将 Laravel 应用程序上传到服务器(通过 FTP),请求将 root 更改为 {app} / public ,你应该做得很好。
但是,这样的共享主机软件包在终端访问和文件权限方面确实存在限制。默认情况下,必须将其应用/代码上传到其共享主机帐户上的 public_html
文件夹。
因此,如果你想将 Laravel 项目上传到共享主机帐户,你会怎么做?你应该将整个应用程序(文件夹)上传到共享主机帐户的 public_html
文件夹吗? - 肯定没有
因为 public_html
文件夹中的所有内容都可以“公开地,即任何人”访问,这将是一个很大的安全风险。
将项目上传到共享主机帐户的步骤 - Laravel 方式
步骤 1
在与 public_html
文件夹相同的级别上创建一个名为 laravel(或任何你喜欢的任何内容)的文件夹。
Eg:
/
|--var
|---www
|----laravel //create this folder in your shared hosting account
|----public_html
|----log
步骤 2
从 laravel
文件夹(在服务器主机 - 共享主机帐户)上的 laravel 项目(在开发机器上)复制除 public
文件夹之外的所有内容。
你可以使用:
- C-panel:这将是最慢的选择
- FTP 客户端:像 FileZilla 一样连接到你的共享主机帐户,并通过 FTP 上传传输你的文件和文件夹
- 映射网络驱动器:你还可以在开发计算机上创建映射的网络驱动器,以使用“ ftp:// your-domain-name ”作为网络地址连接到共享主机帐户的根文件夹。
步骤 3
打开 laravel 项目的 public
文件夹(在开发机器上),复制所有内容并粘贴到 public_html
文件夹(在服务器主机上 - 共享主机帐户)。
步骤 4
现在打开共享主机帐户(在 cpanel 编辑器或任何其他连接的编辑器中)的 public_html
文件夹中的 index.php
文件,并且:
更改:
require __DIR__.'/../bootstrap/autoload.php';
至:
require __DIR__.'/../laravel/bootstrap/autoload.php';
并改变:
$app = require_once __DIR__.'/../bootstrap/app.php';
至:
$app = require_once __DIR__.'/../laravel/bootstrap/app.php';
保存并关闭
步骤 5
现在转到 laravel
文件夹(在共享主机帐户 - 服务器上)并打开 server.php
文件
更改
require_once __DIR__.'/public/index.php';
至:
require_once __DIR__.'../public_html/index.php';
保存并关闭
步骤 6
设置 laravel/storage
文件夹的文件权限(递归)以及共享主机帐户中的所有文件,子文件夹和文件 - 服务器到 777
。
注意: 小心 linux 中的文件权限,它们就像双刃剑,如果使用不当,它们可能会使你的应用容易受到攻击。要了解 Linux 文件权限,你可以阅读 https://www.linux.com/learn/tutorials/309527-understanding-linux-file-permissions
第 7 步
由于本地/开发服务器的 .env
文件被 git 忽略,因此它应该被忽略,因为它包含所有环境变量,包括 APP_KEY,并且不应该通过将其推入存储库来公开它。你还可以看到 .gitignore
文件中提到了 .env
,因此它不会将其上传到存储库。
完成上述所有步骤后,在 laravel 文件夹中创建一个 .env
文件,并将你使用的所有环境变量从本地/开发服务器的 .env
文件添加到生产服务器的 .env
文件中。
甚至在 laravel 应用程序的 config 文件夹中也有像 app.php
,database.php
这样的配置文件,它在 env()
的第二个参数中默认定义了这些变量,但是不对这些文件中的值进行硬编码,因为它会影响用户的配置文件。拉你的存储库。所以建议手动创建 .env
文件!
另外 laravel 提供了 .env-example
文件,你可以将其用作参考。
而已。
现在,当你访问使用服务器配置为域的 URL 时,你的 laravel 应用程序应该像在 localhost - development 机器上一样工作,同时应用程序代码仍然是安全的,没有适当文件权限的任何人都无法访问。