一步一步教你部署本身的 Laravel 應用程序到服務器

原文地址: here php

在部署本身的博客到 LEMP 環境的時候,遇到了一些小挫折,如今把經驗分享出來,讓你們少走彎路。包括Php7.1安裝與下載,SSL證書申請與配置,Mysql升級到5.7,Nginx服務器的簡單配置。Let's start.html

注:本教程環境:Ubuntu 14.04.4 LTS (GNU/Linux 3.13.0-86-generic x86_64)mysql

安裝 Php 7.1

首先用SSH鏈接到你的服務器,Windows 用戶建議使用 SecureCRT 來鏈接,這是一個收費軟件,請自行搜索 破解版nginx

1. 準備

安裝 Php7.1 以前,要先安裝language-pack-en-base這個包,運行:laravel

sudo apt-get update
sudo apt-get install -y language-pack-en-base

這個包是爲了解決系統不一樣語言之間可能發生的衝突,安裝以後能夠減小許多因語言編碼帶來的問題。其中-y參數代表直接安裝,無需確認。git

安裝完成以後,運行:github

locale-gen en_US.UTF-8

設定語言編碼爲UTF-8redis

接下來安裝Git,Vim,運行:sql

sudo apt-get install git vim

Git 是必備的,你能夠很方便的使用Git來拉取遠程倉庫的代碼,vim是一款強大的編輯器,能夠幫助你修改一些配置文件,如.env文件,若是的你的服務器已經安裝了vim編輯器,能夠忽略。數據庫

進入正題,安裝Php7.1,本教程採用ppa方式安裝php7.1,運行:

sudo apt-get install software-properties-common

software-properties-commonadd-apt-repository所依賴的包,安裝成功後,運行:

sudo LC_ALL=en_US.UTF-8 add-apt-repository ppa:ondrej/php

來添加php7的ppa,注意LC_ALL=en_US.UTF-8參數告訴咱們系統語言爲UTF-8,若是沒有,可能會出現錯誤,如阿里雲的服務器。

安裝完成以後,運行sudo apt-get update更新安裝包,把剛纔添加的包拉取下來。
運行apt-cache search php7.1搜索php7.1開頭的包檢驗是否安裝成功,輸出以下:

root@demo:~# apt-cache search php7.1
php-yaml - YAML-1.1 parser and emitter for PHP
php-apcu - APC User Cache for PHP
php-ssh2 - Bindings for the libssh2 library
php-igbinary - igbinary PHP serializer
php-mailparse - Email message manipulation for PHP
php-libsodium - PHP wrapper for the Sodium cryptographic library
php-propro - propro module for PHP
php-raphf - raphf module for PHP

....................省略...........................

2. 安裝:

安裝php7.1:

sudo apt-get -y install php7.1

安裝成功後運行php -v查看是否安裝成功,成功的話會輸出相似以下信息:

PHP 7.1.0beta2 (cli) ( NTS )
Copyright (c) 1997-2016 The PHP Group
Zend Engine v3.1.0-dev, Copyright (c) 1998-2016 Zend Technologies
    with Zend OPcache v7.1.0beta2, Copyright (c) 1999-2016, by Zend Technologies

安裝php7.1-mysql,這是 Php7.1 與 mysql 的通訊模塊:

sudo apt-get -y install php7.1-mysql

安裝 fpm,這是Nginx 用來解析php文件的:

sudo apt-get install php7.1-fpm

安裝其餘必備模塊:

apt-get install php7.1-curl php7.1-xml php7.1-mcrypt php7.1-json php7.1-gd php7.1-mbstring

至此與php相關的模塊安裝安裝完成。

安裝Mysql

直接安裝Mysql5.7吧,5.7 能夠說是里程碑式的版本,提升了性能,並增長了不少新的特性。特別是新增長的json字段,用過以後你會愛上她的!!

MySQL 開發團隊於 9.12 日宣佈 MySQL 8.0.0 開發里程碑版本(DMR)發佈!可是目前 8.0.0 仍是開發版本,若是你但願體驗和測試最新特性,能夠從 http://dev.mysql.com/download... 下載各個平臺的安裝包。不過,MySQL 軟件包是愈來愈大了,Linux 平臺上的二進制打包後就將近有 1 GB。若是在產品環境中使用,在 8.0 沒有進入穩定版本以前,請繼續使用 5.7 系列,當前最新的版本是 5.7.15 GA 版本——這隻有 600 M 多。

1. 下載.deb包到你的服務器:

wget http://dev.mysql.com/get/mysql-apt-config_0.5.3-1_all.deb

2. 而後使用dpkg命令添加Mysql的源:

sudo dpkg -i mysql-apt-config_0.5.3-1_all.deb

注意在添加源的時候,會叫你選擇安裝 MySQL 哪一個應用,這裏選擇 Server 便可,再選擇 MySQL 5.7 後又會回到選擇應用的那個界面,此時選擇 Apply 便可。

3. 安裝

sudo apt-get update
sudo apt-get install mysql-server

安裝完成以後運行mysql -V查看版本:

root@demo:~# mysql -V
mysql  Ver 14.14 Distrib 5.7.15, for Linux (x86_64) using  EditLine wrapper

4. 注意

若是你已經經過 ppa 的方式安裝了 MySQL 5.6,首先得去掉這個源。

sudo apt-add-repository --remove ppa:ondrej/mysql-5.6
# 若是沒有 apt-add-repository 先安裝上
# sudo apt-get install software-properties-common

而後其它和上面同樣,但最後要運行sudo mysql_upgrade -u root -p 升級數據庫,運行sudo service mysql restart重啓數據庫,這樣你的數據會無缺完好(不出意外的話)

安裝Nginx

簡單,運行:

sudo apt-get -y install nginx

便可,而後運行curl localhost查看是否運行成功。你也能夠直接訪問你的IP地址,以下:

file

配置

1. 配置php:

sudo vim /etc/php/7.1/fpm/php.ini

輸入/fix_pathinfo搜索,將cgi.fix_pathinfo=1改成cgi.fix_pathinfo=0

file

Why ? 假設有以下的 URL:http://phpvim.net/foo.jpg,當訪問 http://phpvim.net/foo.jpg/a.php 時,foo.jpg 將會被執行,若是 foo.jpg 是一個普通文件,那麼 foo.jpg 的內容會被直接顯示出來,可是若是把一段 php 代碼保存爲 foo.jpg,那麼問題就來了,這段代碼就會被直接執行。這對一個 Web 應用來講,所形成的後果無疑是毀滅性的。具體參看:http://www.cnblogs.com/buffer...

2. 編輯fpm的配置文件:

運行:

sudo vim /etc/php/7.1/fpm/pool.d/www.conf

找到listen = /run/php/php7.1-fpm.sock修改成listen = /var/run/php/php7.1-fpm.sock。固然,你也能夠不修改,但必須先後一致,後面會用到這個配置。

file

3. 配置Nginx:

運行:

sudo vim /etc/nginx/sites-available/default

主要是配置server這一部分,最終配置以下:

server {
        listen 80 default_server;
        listen [::]:80 default_server ipv6only=on;

        root /var/www/your-project-name/public;
        index index.php index.html index.htm;

        # Make site accessible from http://localhost/
        server_name lufficc.com www.lufficc.com;

        location / {
                # First attempt to serve request as file, then
                # as directory, then fall back to displaying a 404.
                try_files $uri $uri/ /index.php?$query_string;
                # Uncomment to enable naxsi on this location
                # include /etc/nginx/naxsi.rules
        }
                
        location ~ \.php$ {
                try_files $uri /index.php =404;
                fastcgi_split_path_info ^(.+\.php)(/.+)$;
                fastcgi_pass unix:/var/run/php/php7.1-fpm.sock;
                fastcgi_index index.php;
                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                include fastcgi_params;
        }
}

解釋:

  • root:是你的項目的public目錄,也就是網站的入口

  • index:添加了,index.php,告訴Nginx先解析index.php文件

  • server_name:你的域名,沒有的話填寫localhost

  • location / try_files修改成了try_files $uri $uri/ /index.php?$query_string;

  • location ~ \.php$部分告訴Nginx怎麼解析Php,原封不動複製便可,但注意:fastcgi_pass unix:/var/run/php/php7.1-fpm.sock;的目錄要和fpm的配置文件中的listen一致

4. 建立網站目錄,Laravel項目:

若是你尚未/var/www目錄,運行mkdir /var/www,而後將Nginx的用戶名和用戶組www-data分配給它:

sudo chown -R www-data:www-data

而後進入到/var/www/目錄,cd /var/www/。這個www目錄就是放置你的網站文件的目錄(能夠多個)。

下面以laravel-blog爲例,先clone個人laravel-blog,在/var/www/目錄下運行:

git clone https://github.com/lufficc/laravel-blog.git

這會生成在/var/www/目錄下生成laravel-blog目錄,注意此時上面的Nginx配置的root要和這個一致,當前配置應該是root /var/www/laravel-blog/public;,而再也不是root /var/www/your-project-name/public;

而後composer update,配置.env,數據庫鏈接,沒有安裝Redis的話安裝Redis:apt-get install redis-server

再次給予目錄權限,運行(在/var/www/laravel-blog下面):

sudo chmod -R 775 storage/
sudo chown -R www-data:www-data /var/www/laravel-blog

運行ll,結果以下:
file

最後!!重啓nginx,fpm,訪問你的ip地址,不出意外,安裝成功,部署完成!

sudo service nginx restart
sudo service php7.1-fpm restart

小結

囉嗦了那麼長,其實實際配置起來很簡單,把下面的命令複製,依次運行便可完成大部分的配置,而後再簡單修改一下配置文件便可:

# 安裝php7.1
sudo apt-get update
sudo apt-get install -y language-pack-en-base
locale-gen en_US.UTF-8

sudo apt-get install software-properties-common
sudo LC_ALL=en_US.UTF-8 add-apt-repository ppa:ondrej/php
sudo apt-get update

sudo apt-get -y install php7.1
sudo apt-get -y install php7.1-mysql
sudo apt-get install php7.1-fpm

apt-get install php7.1-curl php7.1-xml php7.1-mcrypt php7.1-json php7.1-gd php7.1-mbstring

# 安裝mysql5.7
wget http://dev.mysql.com/get/mysql-apt-config_0.5.3-1_all.deb
sudo dpkg -i mysql-apt-config_0.5.3-1_all.deb
sudo apt-get update
sudo apt-get install mysql-server

# 安裝nginx
sudo apt-get -y install nginx

Https(對這個沒要求的能夠不看

若是你熟悉Let’s Encrypt,能夠跳過了,本教程使用的是免費的,配置更簡單的startssl。

去官網註冊:https://www.startssl.com/, startssl免費仍是很誘惑人的哈:
file

1. 驗證

登陸後以後進去主頁,點擊Validations Wizard,選擇第一項Domain Validation (for SSL certificate),點擊Continue驗證你是不是域名的主人:

file

file

而後點擊將驗證信息發送到你的郵箱,輸入驗證碼繼續

file

驗證成功,startssl認爲你就是域名的全部者,此時進行下一步操做:
file

2. 選擇域名

點擊Certificates Wizard,選擇第一項:

file

輸入全部你想要ssl的域名,例如static子域名,blog子域名:

file

3.生成 CSR (Certificate Signing Request ) key:

複製openssl req -newkey rsa:2048 -keyout yourname.key -out yourname.csr到你的服務器命令行,:

file

填寫你的信息:

file

而後會生成兩個文件:

file

運行cat lufficc.csr複製lufficc.csr的內容到上面的輸入框,點擊Submit:

file

此時你的證書已經生成功,點擊下載便可下載到本地。

file

下載完成後解壓,會有四個文件,對應不一樣軟件,這裏咱們只須要Nginx的就行:

file

file

4. 解密私鑰

點擊startssl的Tool Box下的Decrypt Private Key,輸入lufficc.key(剛纔命令行生成的.key結尾的文件)文件內容和你剛纔設置的密碼(剛纔命令行設置的密碼),點擊解密

file

複製解壓後的內容,運行vim lufficc_de.key生成一個新文件,複製進去解壓後的key,保存。
而後在新建一個目錄/etc/nginx/ssl,將剛纔的文件放進去,便於統一管理:
file

其中紅色框框的是要用到文件。

5. 配置Nginx

運行sudo vim /etc/nginx/sites-available/default,翻到最下面註釋掉的HTTPS server,最終配置以下:

server {
        listen 443;
        server_name lufficc.com www.lufficc.com;

        root /var/www/your-project-name/public;
        index index.php index.html index.htm;

        ssl on;
        ssl_certificate /etc/nginx/ssl/1_lufficc.com_bundle.crt;
        ssl_certificate_key /etc/nginx/ssl/lufficc_de.key;

        ssl_protocols              TLSv1 TLSv1.1 TLSv1.2;
        ssl_prefer_server_ciphers  on;
        ssl_session_cache    shared:SSL:10m;
        ssl_session_timeout  24h;


        location / {
                try_files $uri $uri/ /index.php?$query_string;
        }

        location ~ \.php$ {
                try_files $uri /index.php =404;
                fastcgi_split_path_info ^(.+\.php)(/.+)$;
                fastcgi_pass unix:/var/run/php/php7.1-fpm.sock;
                fastcgi_index index.php;
                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                include fastcgi_params;
        }

和http配置基本同樣,區別是

ssl on;
        ssl_certificate /etc/nginx/ssl/1_lufficc.com_bundle.crt;
        ssl_certificate_key /etc/nginx/ssl/lufficc_de.key;

要和你的目錄一致。接下來在80端口的http server中添加跳轉,return 301 https://lufficc.com;這樣當別人用http 協議訪問你的站點時,會自動調轉到https,以下:

server {
        listen 80 default_server;
        listen [::]:80 default_server ipv6only=on;

        root /var/www/laravel/public;
        index index.php index.html index.htm;

        # Make site accessible from http://localhost/
        server_name lufficc.com www.lufficc.com *.lufficc.com;
        return      301 https://lufficc.com;

        location / {
                # First attempt to serve request as file, then
                # as directory, then fall back to displaying a 404.
                try_files $uri $uri/ /index.php?$query_string;
                                
 ....................省略...........................

最後,測試一行nginx的配置是否正確,運行sudo service nginx configtest

file

從新加載並重啓nginx:

sudo service nginx reload
sudo service nginx restart

測試經過,訪問你的站點,看有沒有加上那把別緻的小綠鎖?

file

至此,教程結束。最終效果這裏查看。

結語

寫了那麼長的教程,看起來很負責,但只是我囉嗦而已,你把上面的命令一敲,軟件安裝都很簡單,在進行一些簡單的配置便可,若是你熟悉整個流程的話,其實沒有那麼複雜。有問題歡迎在評論指出。

Have a nice day!

注:轉載請註明出處!

相關文章
相關標籤/搜索