要搭建laravel项目,官网上介绍了好几种方式。
这里介绍一套采用composer管理工具安装。
下面我们开始安装composer吧
第一步下载composer并安装,由于并没有翻墙所以采用国内地址安装
[root@localhost ~]# php -r "copy('https://install.phpcomposer.com/installer', 'composer-setup.php');"
[root@localhost ~]# php composer-setup.php
All settings correct for using Composer
Downloading...
Composer (version 1.4.2) successfully installed to: /root/composer.phar
Use it: php composer.phar
[root@localhost ~]# php -r "unlink('composer-setup.php');"
[root@localhost ~]#
上面就是执行了三行命令,下载,安装,卸载安装包
然后我们重新命名一下composer.phar并配置到全局的环境变量,这样可以保证任何地方都可以执行运行composer命令
mv composer.phar /usr/local/bin/composer
默认情况下/usr/local/bin 是用户可执行的目录已经配置在$PATH中了。
接下来,我们开始下载laravel目前最新版本5.4
进入到/data/wwwroot下开始安装项目名称为blog的laravel项目
cd /data/wwwroot
composer create-project --prefer-dist laravel/laravel blog
然后发现根本下载不动,因为是外国的资源,确实比较慢。。。
其实composer也有一个国内的镜像库
执行如下命令,将composer的改为国内镜像库
composer config -g repo.packagist composer https://packagist.phpcomposer.com
再来运行上面的
[root@localhost wwwroot]# composer create-project --prefer-dist laravel/laravel blog
Installing laravel/laravel (v5.4.30)
- Installing laravel/laravel (v5.4.30): Downloading (100%)
Created project in blog
> php -r "file_exists('.env') || copy('.env.example', '.env');"
[Symfony\Component\Process\Exception\RuntimeException]
The Process class relies on proc_open, which is not available on your PHP installation.
create-project [-s|--stability STABILITY] [--prefer-source] [--prefer-dist] [--repository REPOSITORY] [--repository-url REPOSITORY-URL] [--dev] [--no-dev] [--no-custom-installers] [--no-scripts] [--no-progress] [--no-secure-http] [--keep-vcs] [--no-install] [--ignore-platform-reqs] [--] [<package>] [<directory>] [<version>]
[root@localhost wwwroot]#
确实下载速度看起来快了不少,但是,,,报错了。。。经过各种百度,原来是php配置里面不支持proc_open、proc_get_status函数
按照网上的方法在php.ini的disable_functions里面去掉这两个函数就可以了。
disable_functions就是说不支持这个列表里面的方法。
我们试试。
vi /usr/local/php/etc/php.ini
大概在315行我们可以看到了这么一段配置
disable_functions = passthru,exec,system,chroot,chgrp,chown,shell_exec,proc_open,proc_get_status,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,stream_socket_server,fsocket,popen
找到其中的proc_open,proc_get_status 然后删掉保存php.ini 重启php-fpm (service php-fpm restart)
再来继续安装laravel
cd /data/wwwroot 发现下面已经有一个blog的目录,那是之前没有安装完成的半残品,可以rm -rf blog 删掉了
再次执行
composer create-project --prefer-dist laravel/laravel blog
然后我们看到了大概这么一个信息,就表示laravel项目安装完成了。
Writing lock file
Generating autoload files
> Illuminate\Foundation\ComposerScripts::postUpdate
> php artisan optimize
Generating optimized class loader
The compiled services file has been removed.
> php artisan key:generate
Application key [base64:wzp/mutjovUiwMNaaMMswHYwQzPEsOKx1WcYaPaYmms=] set successfully.
[root@localhost wwwroot]#
现在让这个blog跑起来
修改nginx配置,如果你的nginx安装的路径和我不一样就别复制了,修改你自己的安装路径就好。
vi /usr/local/nginx/conf/vhost/blog.conf
内容如下:
server {
listen 80;
server_name blog.com;
root /data/wwwroot/blog/public;
index index.html index.htm index.php;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ [^/]\.php(/|$) {
#fastcgi_pass remote_php_ip:9000;
fastcgi_pass unix:/dev/shm/php-cgi.sock;
fastcgi_index index.php;
include fastcgi.conf;
}
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|flv|mp4|ico)$ {
expires 30d;
access_log off;
}
location ~ .*\.(js|css)?$ {
expires 7d;
access_log off;
}
location ~ /\.ht {
deny all;
}
}
指定了域名:server_name为blog.com
指定了root根目录为:/data/wwwroot/blog/public
增加了laravel的rewrite
location / {
try_files $uri $uri/ /index.php?$query_string;
}
保存之后,重新加载nginx
service nginx reload
由于是虚拟机里面搭建的环境,我们需要在Windows上访问,所以需要在Windows下面配置hosts指向到虚拟机里面的blog.com
在hosts文件中加入 192.168.0.222 blog.com #ip地址为虚拟机ip地址
下面我们在浏览器中输出 blog.com 试试看。。
报错了,一个异常。
(1/1) UnexpectedValueException
The stream or file "/data/wwwroot/blog/storage/logs/laravel.log" could not be opened: failed to open stream: Permission denied
很明显,没有权限。。。因为是拿root的用户创建的laravel,而代理用户是www,两种做法。blog所有文件全部改为www.www 权限 或者 只给storage 777的权限
我们就给storage 777 吧。。
chmod 777 -R storage/
再回头在浏览器blog.com ,哇塞,终于看到了我们久违的laravel欢迎界面。
如果Windows访问不了虚拟机,可能是防火墙挡住了。
centos6.x 运行 service iptables stop
centos7.x 运行 systemctl stop firewalld.service