在現如今互聯網世界中,以web應用程序作為核心的軟件服務越來越流行。其中,laravel框架作為php語言的一個優秀開發框架,不僅具有高效的性能,而且還擁有友好的開發體驗、豐富的開源 community、強大的 orm 和遷移系統等一系列優點。而laravel在后臺開發中,最近也逐漸流行起了前后端分離的開發模式。本篇文章將介紹如何使用 laravel 實現前后端分離部署。
一、什么是前后端分離
前后端分離是一種新的 Web 應用程序開發方式,該方式從技術實現上將前端和后端完全分離。前端程序負責生成界面,并與服務器通信獲取數據,后臺程序則負責業務邏輯的處理和數據庫的訪問。
這種方式有很多好處。首先,它可以提高前后端開發的效率。前端和后端開發人員可以并行開發,減少了互相間的依賴;其次,它可以提高應用程序的性能。由于前端和后端服務可以分別進行部署和擴容,所以系統的整體性能可以得到很好的提升。另外,這種方式可以讓前端和后端開發人員都可以盡可能地專注于各自的領域,提高代碼質量和可維護性。
二、Laravel 前后端分離的實現
在 Laravel 開發中,前后端分離的實現需要使用到一些前端框架。其中,我們可以使用 Vue.JS、React 或 angular 等主流框架來作為前端的開發方案。在 Laravel 中,我們可以使用以下兩種方式來實現前后端的分離。
- 創建一個新的前端項目
我們可以先創建一個獨立的前端項目,再以 API 的方式與 Laravel 后端進行交互。這種模式下,Laravel 只負責后端數據API接口的編寫,前端使用 ajax 或 Fetch API 的方式來請求后端的數據接口。前端和后端的代碼可以分別進行在不同的服務器或端口進行部署。
這種方式的優點是前端和后端的分離度非常高,開發人員可以充分發揮各自的優勢,同時也能夠提高應用程序的性能。還可以運用一些現代前端框架和工具,提升開發效率和開發體驗。
下面是一個簡單的示例來演示這種方式的實現。我們以 Laravel 為后端,vue.js 為前端為例:
1.1 創建一個新的 Laravel 項目
首先,我們需要在命令行中創建一個新的 Laravel 項目:
composer create-project --prefer-dist laravel/laravel blog
1.2 創建一個新的 Vue.js 項目
接下來,我們需要創建一個新的 Vue.js 項目:
1.3 配置 Laravel 和 Vue.js
接下來,我們需要配置 routes/api.php 文件來響應 Vue.js 前端的請求。
Route::get('/todos', function () { return AppTodo::all(); });
在 frontend/src/App.vue 中,我們可以使用 Axios 或任何其他 AJAX 庫來獲取后端 API。在這個示例中,我們將使用 Axios 庫。
<template> <div class="todo-list"> <div class="todo" v-for="todo in todos" :key="todo.id"> <input type="checkbox" :checked="todo.completed" @change="toggle(todo)"> <label>{{ todo.title }}</label> </div> </div> </template> <script> import axios from 'axios' export default { data () { return { todos: [] } }, created () { axios.get('/api/todos') .then(response => { this.todos = response.data }) .catch(error => { console.log(error) }) }, methods: { toggle (todo) { todo.completed = !todo.completed axios.put('/api/todos/' + todo.id, todo) .then(response => {}) .catch(error => { console.log(error) }) } } } </script>
在 frontend/config/index.js 中,我們可以將 Vue.js 前端設置為使用與 Laravel 后端不同的端口。然后,我們可以運行并訪問這個應用程序。
php artisan serve --port=8000 cd frontend npm start
- 使用 Laravel Mix 打包前端項目
另一個方式是將前端代碼和 Laravel 后臺代碼打包到同一個項目中進行部署,這種模式下 Laravel Mix 作為工具用于構建前端應用程序。Laravel Mix 是一個簡化了 Webpack 的構建工具,可以讓我們輕松地打包前端資源。
這種方式的優點是前后端代碼會打包成一個整體,方便部署和維護。我們可以使用類似于 npm run dev 和 npm run build 的命令來編譯前端代碼,并將編譯結果放在 Laravel 的 public 目錄中,這樣我們就可以通過瀏覽器直接訪問應用程序了。
下面是一個簡單的示例來演示這種方式的實現:
2.1 創建一個新的 Laravel 項目
首先,我們需要在命令行中創建一個新的 Laravel 項目:
composer create-project --prefer-dist laravel/laravel blog
2.2 安裝 node.js 和 NPM
在接下來的步驟中,我們需要安裝 Node.js 和 NPM。
在 ubuntu 中,可以使用以下命令安裝:
sudo apt-get install nodejs sudo apt-get install npm
2.3 在 Laravel 中安裝 Laravel Mix
然后,我們需要安裝 Laravel Mix:
npm install --save-dev laravel-mix
然后,我們需要執行以下命令來生成 webpack.mix.js 配置文件:
node_modules/.bin/mix
2.4 編寫前端代碼
接下來,我們需要編寫前端代碼。例如,我們可以在 resources/assets/js/app.js 文件中編寫一些 JavaScript 代碼。以下是一個簡單的示例:
"use strict"; window.Vue = require('vue'); Vue.component('example-component', require('./components/ExampleComponent.vue')); const app = new Vue({ el: '#app' });
2.5 編寫前端資源
我們可以把前端的資源文件放在 resources/assets 目錄下。例如,我們可以在 resources/assets/sass/app.scss 中編寫一些 CSS 樣式。
html, body { height: 100%; margin: 0; } #app { display: flex; align-items: center; justify-content: center; height: 100%; } .title { font-size: 24px; text-align: center; }
2.6 配置 Laravel Mix
我們需要在 webpack.mix.js 文件中配置 Laravel Mix。例如,我們可以使用 .sass() 方法來生成 CSS 文件,并使用 .js() 方法來生成 JavaScript 文件:
const mix = require('laravel-mix'); mix.js('resources/assets/js/app.js', 'public/js') .sass('resources/assets/sass/app.scss', 'public/css');
2.7 編譯前端資源
接下來,我們可以運行以下命令來編譯前端資源:
npm run dev
或
npm run watch
這樣,我們就可以在瀏覽器中看到我們的應用程序了。
- 部署應用程序
無論我們使用哪種方式來實現前后端分離,最終都需要進行部署。我們可以使用第三方工具如 jenkins、Capistrano 和 docker Compose 等來自動化部署。這里介紹一種基于 nginx + PHP-FPM + mysql 的部署方式。
3.1 安裝服務
首先,我們需要安裝 NGINX、PHP-FPM 和 MySQL。我們可以使用以下命令在 Ubuntu 中進行安裝:
sudo apt-get install nginx sudo apt-get install mysql-server sudo apt-get install php-fpm
3.2 配置 NGINX
接下來,我們需要配置 NGINX。我們可以在 /etc/nginx/sites-available 目錄下創建一個新的配置文件。以下是配置文件的示例:
server { listen 80; server_name yourdomain.com; root /var/www/public; index index.php; location / { try_files $uri $uri/ /index.php?$query_string; } location ~ /. { deny all; } location ~ .php$ { fastcgi_pass unix:/run/php/php7.4-fpm.sock; fastcgi_split_path_info ^(.+.php)(/.+)$; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param PATH_INFO $fastcgi_path_info; internal; } }
我們需要將我們的代碼放置在 /var/www/public 目錄中。例如,我們使用前兩種方式中的第一種方式,代碼存放在了一個 獨立的前端項目 中。我們可以使用以下命令將編譯好的前端代碼復制到 /var/www/public 目錄中:
cp -r /path/to/frontend/dist/* /var/www/public
3.3 配置 MySQL
接下來,我們需要配置 MySQL。我們可以使用以下命令進行安全設置:
sudo mysql_secure_installation
然后,我們可以創建一個新的 MySQL 數據庫:
CREATE DATABASE dbname CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; CREATE USER 'dbuser'@'localhost' IDENTIFIED BY 'dbpassword'; GRANT ALL PRIVILEGES ON dbname.* TO 'dbuser'@'localhost';
在 Laravel 的 .env 配置文件中,我們需要進行如下數據庫配置:
DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=dbname DB_USERNAME=dbuser DB_PASSWORD=dbpassword
3.4 執行數據庫遷移
接下來,我們需要執行 Laravel 數據庫遷移,并進行一些初始化操作:
php artisan migrate php artisan db:seed php artisan key:generate
3.5 重啟服務
最后,我們需要重啟 NGINX 和 PHP-FPM 服務,使配置生效:
sudo systemctl restart nginx sudo systemctl restart php7.4-fpm
至此,我們可以通過瀏覽器訪問我們的應用程序,Laravel 前后端分離部署就完成了。
三、結論
本文介紹了使用 Laravel 實現前后端分離部署的兩種方式:創建一個新的前端項目和使用 Laravel Mix 打包前端項目兩種方式。當然,對于前端開發人員來說,也可以選擇自己熟悉的框架、編程語言來進行前端開發,只需要遵循前后端分離的原則即可。總之,Laravel 的靈活性使得它可以與許多現代前端框架和工具配合使用,讓開發人員可以更自由地選擇適合自己的開發方式。