天天看點

搭建Laravel API服務

一、伺服器環境

主機 作業系統 Nginx版本 php版本 lumen版本
騰訊雲主機 Centos 7.2 64位 1.14.0 7.1.17 5.6

二、安裝nginx

1、 安裝 nginx 需要先将官網下載下傳的源碼進行編譯,編譯依賴 gcc 環境,如果沒有 gcc 環境,則需要安裝:

2、 安裝 PCRE (Perl Compatible Regular Expressions)庫,PCRE是一個正規表達式庫,nginx 的 http 子產品使用 pcre 來解析正規表達式,是以需要在 linux 上安裝 pcre 庫,pcre-devel 是使用 pcre 開發的一個二次開發庫。nginx也需要此庫。

3、安裝 zlib 庫 —— zlib 庫提供了很多種壓縮和解壓縮的方式, nginx 使用 zlib 對 http 包的内容進行 gzip ,是以需要安裝 zlib 庫:

4、安裝OpenSSL庫。OpenSSL 是一個強大的安全套接字層密碼庫,囊括主要的密碼算法、常用的密鑰和證書封裝管理功能及 SSL 協定,并提供豐富的應用程式供測試或其它目的使用。Nginx 不僅支援 http 協定,還支援 https(即在ssl協定上傳輸http),是以需要安裝 OpenSSL 庫:

5、安裝Nginx到目錄

/usr/local/services

  • 官網下載下傳tar.gz安裝包
  • 使用wget指令下載下傳:

    wget -c https://nginx.org/download/nginx-1.14.0.tar.gz

  • 進入解壓後目錄,編譯安裝:

    ./configure --prefix=/usr/local/services/nginx

    &

    make

    &

    make install

  • 啟動停止nginx:
    • ./nginx

      —— 啟動
    • ./nginx -s stop

      —— 強制停掉nginx程序
    • ./nginx -s quit

      —— 待nginx程序處理完任務後停止
    • ./nginx -s reload

      —— 重新加載配置

然後在浏覽器裡通路 80 端口,如果可以看到如下頁面,表示 Nginx 安裝成功:

搭建Laravel API服務

三、安裝php-fpm

PHP-FPM(FastCGI Process Manager:FastCGI程序管理器),是 FastCGI 的實作,并提供了程序管理的功能。程序包含 master 程序和 worker 程序兩種程序。

  • master 程序隻有一個,負責監聽端口,接收來自 Web Server 的請求,
  • worker 程序則一般有多個(具體數量根據實際需要配置),每個程序内部都嵌入了一個 PHP 解釋器,是 PHP 代碼真正執行的地方。

PHP從 5.3.3 版本開始已經講 php-fpm 納入php源碼核心了,不再是第三方的包,是以不需要另外下載下傳了。隻需要在編譯 php 的時候帶上

--enable-fpm

就可以了。

① 擷取tar.gz安裝包

② 進入解壓後目錄:

./configure --prefix=/usr/local/services/php7 \
--with-openssl \
--with-pcre-regex \
--with-kerberos \
--with-libdir=lib \
--with-libxml-dir \
--with-mysqli=shared,mysqlnd \
--with-pdo-mysql=shared,mysqlnd \
--with-pdo-sqlite \
--with-gd \
--with-iconv \
--with-zlib \
--with-xmlrpc \
--with-xsl \
--with-pear \
--with-gettext \
--with-curl \
--with-png-dir \
--with-jpeg-dir \
--with-freetype-dir \
--with-fpm-user=nginx \
--with-fpm-group=nginx \
--enable-mysqlnd \
--enable-zip \
--enable-inline-optimization \
--enable-shared \
--enable-libxml \
--enable-xml \
--enable-bcmath \
--enable-shmop \
--enable-sysvsem \
--enable-mbregex \
--enable-mbstring \
--enable-ftp \
--enable-gd-native-ttf \
--enable-pcntl \
--enable-sockets \
--enable-soap \
--enable-session \
--enable-opcache \
--enable-fpm \
--enable-maintainer-zts \
--enable-fileinfo
           

執行

./configure

時發現有些庫沒有裝,于是yum安裝了一下庫:

yum install libxml2-devel             // error: libxml2 not found
yum install curl-devel                // error: cURL version 7.10.5 or later is required to compile php with cURL support
yum -y install libjpeg-devel          // error: jpeglib.h not found.
yum -y install libpng-devel           // error: png.h not found.
yum install freetype freetype-devel   // error: freetype-config not found.
yum install libxslt libxslt-devel     // error: xslt-config not found. Please reinstall the libxslt >= 1.1.0 distribution
           

配置成功以後,執行

make && make install

安裝。

③ 配置php

修改 php.ini 的内容:

######避免PHP資訊暴露在http頭中
expose_php = Off
######避免暴露php調用mysql的錯誤資訊
display_errors = Off
######在關閉display_errors後開啟PHP錯誤日志
log_errors = On
######錯誤日志路徑
error_log = /usr/local/services/php7/log/php_errors.log

######設定PHP的擴充庫路徑
extension_dir = "/usr/local/services/php7/lib/php/extensions/no-debug-zts-20160303/"
######設定PHP的一些動态庫
zend_extension = opcache.so
extension=amqp.so
extension=redis.so
extension=mongodb.so
extension=swoole.so

######設定PHP的時區
date.timezone = Asia/Shanghai

######開啟opcache
[opcache]
opcache.enable=
opcache.enable_cli=
           

④ 配置 php-fpm

修改 php-fpm.conf 的内容:

######設定錯誤日志的路徑
error_log = /usr/local/php7/log/php-fpm.log
######設定日志級别
log_level = error
######引入www.conf檔案中的配置
include=/usr/local/php7/etc/php-fpm.d/*.conf
           

⑤ 配置www.conf

www.conf

是 php-fpm 程序服務的擴充配置檔案

修改 www.conf 的内容:

######設定使用者和使用者組
user = www
group = www
           

如果不存在則建立使用者&使用者組

groupadd www
useradd -g www www
           

⑥ 啟動php-fpm

可以檢視程序或者9000端口的監聽情況。

四、安裝lumen

Lumen

Laravel

架構的精簡版,可以快速的開發API接口服務。

1、安裝composer

如果提示找不到php,請建軟鍊:

ln -s /usr/local/services/php7/bin/php /usr/bin/php
           

2、建立lumen項目

如果我們要在

/data/project/

目錄下建項目,進入該目錄并切換到

www

使用者(不能用root使用者執行composer指令),執行:

執行成功以後,就在目前目錄下建立了一個叫demo的項目。

3、寫一個最簡單的接口

在檔案

/data/project/demo/routes/web.php

裡添加一個路由:

<?php

$router->get('/', function () use ($router) {
    return $router->app->version();
});


$router->get('getHelloWorld', '[email protected]');   // 添加一個接口
           

在檔案

/data/project/demo/app/Http/Controllers/ExampleController.php

裡添加一個

getHelloWorld

方法:

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class ExampleController extends Controller
{
    /**
     * Create a new controller instance.
     *
     * @return void
     */
    public function __construct()
    {
    }

    // 添加一個方法
    public function getHelloWorld(Request $request) {
        return "hello, lumen";
    }
}
           

到這裡接口就開發完成了

五、配置請求轉發

1、nginx轉發配置

假設我們指定請求的域名為

api.lumen.com

,則當 nginx 收到通過該域名發來的HTTP請求時,将請求轉發到後端的

php-fpm

子產品。

/usr/local/services/nginx/conf

配置目錄下建立一個配置檔案

api.lumen.com.conf

,内容如下:

server {
    listen       ;
    server_name  api.lumen.com;
    root /data/project/demo/public;
    index index.php;

    add_header 'Access-Control-Allow-Credentials' 'true';
    add_header 'Access-Control-Allow-Headers' 'X_forwarded-for,Content-Type';
    add_header 'Access-Control-Allow-Origin' '$http_origin';
    add_header 'Access-Control-Allow-Methods' 'GET,POST';

    location / {
        if ($request_method = 'OPTIONS') {
            return ;
        }
        try_files $uri $uri/ /index.php?$query_string;
    }

    location ~ \.php{
        try_files $uri /index.php =;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass :;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi.conf;
    }
}
           

然後在

nginx.conf

的最後把上面的配置檔案 include 進去:

http {
    ...
    include api.lumen.com.conf;
}
           

重新加載 nginx 配置:

./nginx -s reload
           

2、測試接口

/etc/hosts

裡添加:

請求接口:

[root@VM_104_153_centos conf]# curl "http://api.lumen.com/getHelloWorld"
hello, lumen
           

成功傳回。