1.Laravel环境搭建—Mac + Php + Nginx +Laravel

目录

  • 1.1 Mac PHP 升级
  • 1.2 Mac Nginx 安装
  • 1.3 Laravel安装
  • 1.4 打通环境

Mac PHP 升级到7.2

使用brew工具:

第一次安装可以直接以下命令:

    brew search php                    #刷新php版本
    brew install php72                 #安装php7.2稳定版

之前用brew安装过php,需要先卸载之前的php,再执行前文的安装命令:

    brew uninstall php

成功升级完成


php_update_done.png
    从上图可看出成功安装后:
    1. php 相关bin
        php 安装在/usr/local/opt/[email protected]/bin目录下,
        php-fpm 安装在/usr/local/opt/[email protected]/sbin目录下,
        按照上图提示将php相关的bin、sbin目录 export放到source文件中的环境变量中,然后生效文件:”source ~/.zshrc“。
    完成后可通过"php -v"确认新版本是否生效 
    2. php 相关配置文件
        配置文件放在:/usr/local/etc/php/7.2
        php.ini 是 php引擎的配置文件:主要用来控制php的某些功能,比如:错误提示,短标签,上传文件最大值,扩展等等可以通过php.ini文件设置
        php-fpm.conf 是PHP-FPM进程管理器的配置文件

Mac Nginx安装

  1. brew update
  2. brew search nginx //查询要安装的软件是否存在
  3. brew info nginx //此命令可查看当前环境是否安装了nginx,以及nginx的(预)安装信息


    nginx-not-install-info.png
上图可以看出:
    nginx在本地还未安装(Not installed),nginx的来源(From)
    Docroot默认为/usr/local/var/www
    在/usr/local/etc/nginx/nginx.conf配置文件中
    默认端口被配置为8080
    nginx将在/usr/local/etc/nginx/servers/目录中加载所有文件,
    用命令 ‘nginx’ 来启动nginx。
  1. brew install nginx //安装nginx


    image.png
  2. open /usr/local/etc/nginx/ //查看nginx配置目录


    image.png

    nginx.conf 是主要的配置文件,services目录是用来存放不同服务的具体配置的

  3. open /usr/local/Cellar/nginx //nginx的安装目录

  4. 启动nginx,执行:nginx

  5. 浏览器访问localhost:8080 验证
    若出现403


    image.png

    一般是因为:安装的nginx会默认在html(也就是/usr/local/var/www)目录下生成一个欢迎页面文件,而出现上面这种情况就是欢迎页面文件没有生成。
    cat /usr/local/etc/nginx/nginx.conf


    image.png

    通过配置文件我们可以看到其默认的网站根目录为html(即/usr/local/var/www),而默认的索引文件为index.html 和 index.htm,
  cd /usr/local/var/www/     //进入到www目录下
  touch index.html                            //创建一个新的      
  index.html文件
  vim index.html     //编辑该文件,随便来几句html
  :wq 保存信息

重新刷新localhost:8080 可看到你编辑的页面

Laravel安装(5.8)

laravel 对php扩展有一定的要求:

  PHP >= 7.1.3
  PHP OpenSSL 扩展
  PHP PDO 扩展
  PHP Mbstring 扩展
  PHP Tokenizer 扩展
  PHP XML 扩展
  PHP Ctype 扩展
  PHP JSON 扩展
  PHP BCMath 扩展

php在模特步安装的时候,已经加载了这些扩展,可以使用命令查看当前自己环境的支持的扩展

  php -m  //查看当前自己环境的php支持的扩展

Laravel 使用 Composer管理依赖,所以,安装之前确保已经在机器上安装了 Composer

  1. 在终端中执行以下命令下载Composer可执行文件,这会在当前目录下安装
        curl -sS https://getcomposer.org/installer | php
  2. 想全局生效需把composer.phar移到系统/usr/local/bin/目录下:
       mv composer.phar /usr/local/bin/composer

laravel安装

  1. 安装
        composer global require laravel/installer
  2. 将laravel的bin目录增加到PATH中:
        目录:$HOME/.composer/vendor/bin
        vim ~/.zshrc   //打开source文件
        在底部增加:export PATH="$HOME/.composer/vendor/bin:$PATH"  //修改文件
        wq!  //保存
        source  ~/.zshrc  //生效环境信息

安装完成后,只需通过 laravel new 命令即可在当前目录下创建一个新的 Laravel 应用

  laravel new blog
  cd 到blog的目录下:执行 
  php artisan serve   //  访问http://localhost:8000 可查看项目
image.png

image.png

访问连接遇到问题:

1. 访问页面出现500错误
    a. blog 目录权限问题 : chmod -R 775  ./blog
    b. blog的err日志中" No application encryption key has been specified.", 这是由于新生成的代码没有".env"文件导致的:
          cd blog
          mv .env.example .env
          php artisan key:generate

打通环境

上面三步,分别安装了php、nginx、laravel工程,并且实现了使用php启动laravel,下文将介绍如何 将nginx、larave、php打通,我们通过访问nginx的入口调用php引擎解析laravel项目,实现项目的访问。

php配置修改

忘记可通过 php --ini 查看配置路径
1. 修改 php.ini
vim  /usr/local/etc/php/7.2/php.ini
搜索 ;cgi.fix_pathinfo=1 ,改为cgi.fix_pathinfo=0

2. 修改php-fmp配置
vim /usr/local/etc/php/7.2/php-fpm.d/www.conf
将;listen = 127.0.0.1:9000改为listen = /Users/xxx/webserver/var/php-fpm/php-fpm.sock; 
将;listen.owner = nobody改为listen.owner = nobody
将;listen.group = nobody改为listen.group = nobody
将user = apache改为user = nobody
将group = apache改为group = nobody

nginx 配置修改

vim /usr/local/etc/nginx/nginx.conf //忘记可通过brew info nginx查看

user  nobody; // 需要跟php配置中listen.owner,listen.group保持一致
worker_processes  1; //工作进程个数
error_log  /Users/xxx/webserver/nginx_log/error.log; //nginx err日志存储路径,设置成自己的路径
pid        /Users/xxx/webserver/nginx_log/nginx.pid;//nginx 进程pid存储路径,设置成自己的路径

events {
    worker_connections  1024;//最大连接数
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"'; // 日志格式

    access_log  /Users/xxx/webserver/nginx_log/access.log  main; //access日志存储路径,设置成自己的路径

    sendfile        on;
    keepalive_timeout  65;

    server {
        listen       8080;
        server_name  localhost;

        access_log  /Users/xxx/webserver/nginx_log/host.access.log  main; //设置成自己的路径

        root /Users/xxx/webserver/laravel_app/blog/public; //web root目录,设置成laravel项目的public目录
        index index.php;  //入口文件

        location / {  //路由规则
            try_files $uri $uri/ /index.php?$query_string; 
    }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   /Users/xxx/webserver/laravel_app/blog/public;
        }
        location ~ \.php$ {
        fastcgi_pass   unix:/Users/xxx/webserver/var/php-fpm/php-fpm.sock; // fastcgi  设置成自己的php-fpm.sock的存放路径
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;  //fastcgi_param
            include        fastcgi_params;
        }
    }

    include servers/*;
}

重启服务

1.php-fpm启动

  sudo php-fpm //fpm需要root角色启动,否则报错 [17-Jun-2019 08:11:17] ERROR: [pool www] failed to chown() the socket '/Users/xxx/webserver/var/php-fpm/php-fpm.sock': Operation not permitted (1)

  1. nginx 启动
sudo nginx //fpm 使用了root角色启动,生成的sock文件需要同样的权限访问,所以nginx也使用root启动最方便
  1. 访问http://localhost:8080/ 会出现laravel默认工程页面

  2. 其他问题:

问题1:nginx错误日志:2019/06/10 08:26:21 [error] 92105#0: *1 directory index of "/Users/xxx/webserver/laravel_app/blog/public/" is forbidden, client: 127.0.0.1, server: localhost, request: "GET / HTTP/1.1", host: "127.0.0.1:8080"
解决:nginx的目录配置的有问题,查看nginx配置的root目录下是否有 index.php


问题2:php错误日志:2019/06/11 08:30:29 [error] 54823#0: *13 FastCGI sent in stderr: "Unable to open primary script: /scripts/index.php (No such file or directory)" while reading response header from upstream, client: 127.0.0.1, server: localhost, request: "GET / HTTP/1.1", upstream: "fastcgi://unix:/Users/xxx/webserver/var/php-fpm/php-fpm.sock:", host: "127.0.0.1:8080"
解决:
         a. nginx 和 php-fpm 配置需要使用同一个账号(上文中nobody部分) ,并且 php-fmp的目录需要授权给这个账号(chmod -R 777 php-fpm.sock)
         b.nginx 配置问题
         fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name; 需要修改成fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;


问题3:laravel错误日志 :The stream or file "/Users/xxx/webserver/laravel_app/blog/storage/logs/laravel-2019-06-11.log" could not be opened: failed to open stream: Permission denied
解决: laravel 目录没权限  :目录+777 权限

你可能感兴趣的:(1.Laravel环境搭建—Mac + Php + Nginx +Laravel)