重要: 这是一个稳定的版本. 让我们知道你所喜欢和不喜欢的东西。 我们将会修改bug和错误,并且定期更新所有章节。
注意: 我们已经更新这本书支持到Laravel 5.2了。
目前,我们只是在我们本地的私人机器上工作。我们必须将我们的代码部署到托管服务或者服务器上才能让别人访问我们的应用。有许多方法可以让你的应用程序被世界上其他人看到!
在本章中,我将会告诉你怎么使用最常用的方法部署你的laravel应用程序:
将你的代码部署到公共代码托管服务
使用DigitalOcean公司的服务部署你的应用
如果发现了更好的方法,随便告诉下我们呗。我将在本书中更新讨论其他方法。
要部署一个Laravel应用,你应该按照下面几步来实现:
创建一个不同的文件结构。(如果你使用共享的主机)
安装你的web服务器(如果你使用的是服务器或者云服务,比如DigitalOcean, Linode等等)
上传你的应用到你的主机/服务器。
给你的文件赋予合适的权限。
给你的应用创建数据库。
从根本上来说,你的Laravel应用只是PHP应用程序,这意味着你可以直接上传到任何支持的共享主机,当然它们也会运行的很好。
然而,Laravel并不是设计成可以在共享主机服务上工作的。因此,你将需要做一些额外的配置。我不建议你使用这种方法,但是选择权在你手上。
这里有很多非常受欢迎的web主机服务可供你使用:
Host Gator
GoDaddy
Blue Host
但是请注意每个web主机服务需要不同的配置,记住你需要找到一个方法并且花费额外的时间让你的Laravel应用正常运行起来。
首先,假设你有一个新Laravel应用而你的home文件夹是:
/home/content/learninglaravel/public_html
现在,跟着下面的步骤:
你需要创建一个和public_html文件夹同级的文件夹。这个文件夹将会包含你的Laravel应用。因为它是和你的public_html目录同级的,所以其他人不能访问它。这个可以使应用更安全。
使用FTP客户端(比如Filezilla, Transmit, CuteFTP等等)上传你的Laravel应用,但是公共目录暂时不要上传哦
将public目录上传到public_html目录。
干得好!现在打开index.php文件然后修改两个路径:
require __DIR__.'/../bootstrap/autoload.php';
和
$app = require_once __DIR__.'/../bootstrap/app.php';
最后一步,前往public_html文件夹然后修改.htaccess文件(如果你还没有,那就创建一个呗):
RewriteEngine On
RewriteCond %{REQUEST_URI} !^public
RewriteRule ^(.*)$ public/$1 [L]
搞定了,现在试试访问你网站的URL吧! (www.yourdomain.com).你应该会看到一个laravel欢迎页面。
你已经成功部署你的Laravel应用了!
注意: 请注意你的应用在共享主机上有可能不能正常工作,而且还存在安全隐患。Laravel本身就不是设计在共享主机上工作的。
DigitalOcean是世界上最好的云服务提供商之一。仅需每个月$5就可以享受他们最便宜的SSD云服务器。超过450,000开发者使用了DigitalOcean来部署他们的应用!
DigitalOcean也是我最喜欢的主机解决方案。性能真是炒鸡牛X!
在本节中,我将会告诉你怎么在Ubuntu 14.04 LTS VPS. (Ubuntu 14.04 Long Term Support Virtual Private Server)上的Nginx服务器下安装Laravel.
我为什么选择Ubuntu 14.04呢?虽然Ubuntu有很多更新的版本(14.10, 15.04等), 但是14.04是一个长期受支持的版本,这就意味着我们可以接收更新和支持至少五年。
另外,你可以每个月多花$10来使用Laravel Forge来安装VPS并配置你所需要的事情。
首先,你需要在DigitalOcean上注册一个新账户。你可以通过以下链接获取 10∗∗优惠,这意味着你可以使用他们∗∗ 5云服务器的服务两个月哦。
https://www.digitalocean.com/?refcode=5f7e95cb014e
注意: 你需要提供你的信用卡或者Paypal来激活你的账户。
在你的账户被激活后,你将会需要创建一个“droplet”云服务器。点击Create Droplet按钮或者跳往:
https://cloud.digitalocean.com/droplets/new
按照下列步骤:
给你的Droplet命名(比如,learninglaravel).
选择你想要的droplet大小和地区。
在Select Image小节中,确认选择Ubuntu 14.04 x64.
跳过其他设置。
点击“Create Droplet”来创建你第一个云服务器!
等待几秒。。。
喜大普奔!你已经有了一个新的Ubuntu VPS了!
从你的注册的邮箱里获取username和password, 你需要用他们来访问你的服务器。
Droplet Name: learninglaravel
IP Address: 128.199.206.121
Username: root
Password: yourPassword
太棒了!现在你可以通过Terminal或者Git Bash运行一下命令来访问你的新服务器:
ssh [email protected]
你第一次登陆的时候,会提示你change the password. 再次输入目前的Unix密码,然后输入你的new password更改它。
最后,运行以下命令来检查和更新当前包到最新版本:
apt-get update && apt-get upgrade
我们已经准备安装Nginx和其他包!
安装Nginx炒鸡简单,只要运行以下命令就OK了:
sudo apt-get install nginx
如果需要你确认时,输入y并按下Return(windows上的Enter)键。
搞定了!现在你可以使用IP地址来访问你的Nginx服务器:
http://128.199.206.121
注意: 当然你的IP地址肯定和我的不一样。
注意: 在本书中我们使用的是MySQL,因此我将会安装MySQL,你也可以安装其他数据库。
作为开始,我们需要安装MySQL来存储我的数据。运行以下命令:
sudo apt-get install mysql-server
一直输入Y.如果需要你给root用户输入一个新密码,那就输入一个密码。
接下来,你需要告诉MySQL来为你配置数据库并运行一个安全脚本来确认你的设置是安全的:
sudo mysql_install_db
sudo mysql_secure_installation
如果程序再次询问你的root用户密码,请输入n (no).
其他的都选择Yes.
你将会看到以下信息:
All done! If you've completed all of the above steps, your MySQL
installation should now be secure.
Thanks for using MySQL!
干得漂亮!你已经安装了MySQL.下一节我们将会安装PHP.
Nginx默认不包含PHP,因此你必须安装PHP和其他运行Laravel所需要的包。运行以下命令:
apt-get install php5-fpm php5-cli php5-mcrypt git php5-mysql
如果程序询问你,选择Y (yes).
这下你应该成功安装PHP了。
还有一件事要做,我们需要更改设置让PHP更安全,打开php.ini文件:
sudo nano /etc/php5/fpm/php.ini
找到(文件末尾):
;cgi.fix_pathinfo=1
你可以使用Ctrl + V快速跳到下一页。 取消注释并且更改为0
cgi.fix_pathinfo=0
完成后,按住Ctrl + X, 输入Y来保存文件。按下Return (或者 Enter)退出编辑。
通过这个设置,你已经告诉PHP你不想它在找不到你想要得文件时找个最近的文件来代替。如果你不更改,这就是一个存在的安全隐患。
接着,我们需要编辑服务器块 (又名虚拟主机)文件,打开它:
sudo nano /etc/nginx/sites-available/default
找到:
root /usr/share/nginx/html;
这是你Laravel应用的路径,你至今还没有Laravel应用,但是我们先将之改为:
root /var/www/learninglaravel.net/html;
找到:
index index.html index.htm;
更改为:
index index.php index.html index.htm;
找到:
location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
try_files $uri $uri/ =404;
# Uncomment to enable naxsi on this location
# include /etc/nginx/naxsi.rules
}
在下面添加:
location ~ \.php$ {
try_files $uri /index.php =404;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
保存文件然后退出。
因为我们还没有/var/www/learninglaravel.net/html 文件夹,先创建它呗。
sudo mkdir -p /var/www/learninglaravel.net/html
确认给了这个文件夹合适的权限:
sudo chown -R www-data:www-data /var/www/learninglaravel.net/html
sudo chmod 755 /var/www
现在,创建一个名为index.html的测试文件来测试我们的配置:
sudo nano /var/www/learninglaravel.net/html/index.html
以下是文件内容:
Learning Laravel
Learning Laravel test page.
最后,重启PHP和Nginx:
service php5-fpm restart
service nginx restart
现在当你通过IP地址访问你的网站,你将会看到:
既然我们已经依次搞定了所需要的事情,我们接下来安装Composer并使用它来下载Laravel安装器!
如果你在512MB的droplets上安装Laravel,你最好在Ubuntu上添加一个文件交换区来防止内存溢出。
dd if=/dev/zero of=/swapfile bs=1024 count=512k
mkswap /swapfile
swapon /swapfile
注意: 如果你重启了服务器,你必须再次添加文件交换区。
运行以下简单的命令来安装Composer:
curl -sS https://getcomposer.org/installer | php
接下来,我们将会使用Composer来下载Laravel安装器:
composer global require "laravel/installer=~1.1"
如果你阅读了Laravel文档,你也许看到如下信息:
“确认将~/.composer/vendor/bin目录放置在你路径中,这样才能让你的Laravel可执行文件可以在你的系统定位。”
好了,运行以下命令:
export PATH="$PATH:~/.composer/vendor/bin"
source ~/.bashrc
完成后,我们终于到了期待的最后一步了: 安装Laravel!
我们将会把我们的Laravel应用放置在/var/www/learninglaravel.net/目录下。输入以下命令跳转到该目录下:
cd /var/www/learninglaravel.net/
该是安装Laravel的时候了:
laravel new laravel
这是一个相当标准的过程。我希望你理解了我们之前做过的步骤。如果你还没有理解,再回去读读第一章。
到现在,我们已经在/var/www/learninglaravel.net/laravel目录下安装了我们的Laravel应用。
一旦上面那一步完成了,我们应该给这些文件夹合适的权限:
chown -R www-data /var/www/learninglaravel.net/laravel/storage
chmod -R 775 /var/www/learninglaravel.net/laravel/public
chmod -R 0777 /var/www/learninglaravel.net/laravel/storage
chgrp -R www-data /var/www/learninglaravel.net/laravel/public
chmod -R 775 /var/www/learninglaravel.net/laravel/storage
以上命令将会实现上面的功能。
最后一步,再次编辑服务器块文件:
sudo nano /etc/nginx/sites-available/default
找到:
root /var/www/learninglaravel.net/html;
更改为:
root /var/www/learninglaravel.net/laravel/public;
重启Nginx:
service nginx restart
跳转到浏览器并访问你的Laravel应用:
现在你的应用就已经闪亮登场了!
如果你看见这个错误:
Whoops, looks like something went wrong.
No supported encrypter found. The cipher and / or key length are invalid.
这是Laravel5.1的bug.有时候,你的应用并没有正确的程序密钥(这个密钥是安装Laravel时自动生成的)
你需要运行以下命令来解决这个bug:
php artisan key:generate
php artisan config:clear
最后,重启你的Nginx服务器:
service nginx restart
我知道这个流程有一点复杂。好事就是你可以给你的VPS生成一个快照,稍后你可以恢复它。当你有新项目,你不需要重启启动!所有的事情只需要双击就OK了!
要生成快照,首先关闭你的服务器:
shutdown -h now
现在,前往DigitalOcean控制面板。找到你的droplet,点击 Snapshots按钮来访问快照小节。
输入名字来生成快照!之后你可以使用从快照恢复功能来恢复你的VPS。
Tip 1:
如果你有域名并且想要和你的网站联系起来,打开服务器块文件,编辑如下行:
server_name localhost;
修改为:
server_name yourDomain.com;
现在你可以通过你的域名访问你的网站。
Tip 2:
你也可以使用FTP(上传,下载文件等)来访问你的服务器,使用如下信息就可以访问了:
Host: IP address or your domain
User: root
Password: your password
Port: 22
可喜可贺啊!现在你已经知道怎么部署你的Laravel应用了!
希望你喜欢这一章。
如果你想要学习更多关于Laravel的知识,看看我们的书吧 Laravel 5 Cookbook !
再次感谢你的支持!愿你万事如意!