原文地址: 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
首先用SSH鏈接到你的服務器,Windows 用戶建議使用 SecureCRT 來鏈接,這是一個收費軟件,請自行搜索 破解版 。nginx
安裝 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-8
。redis
接下來安裝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-common
是add-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 ....................省略...........................
安裝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相關的模塊安裝安裝完成。
直接安裝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 多。
.deb
包到你的服務器:wget http://dev.mysql.com/get/mysql-apt-config_0.5.3-1_all.deb
dpkg
命令添加Mysql的源:sudo dpkg -i mysql-apt-config_0.5.3-1_all.deb
注意在添加源的時候,會叫你選擇安裝 MySQL 哪一個應用,這裏選擇 Server 便可,再選擇 MySQL 5.7 後又會回到選擇應用的那個界面,此時選擇 Apply 便可。
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
注意
若是你已經經過 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
重啓數據庫,這樣你的數據會無缺完好(不出意外的話)。
簡單,運行:
sudo apt-get -y install nginx
便可,而後運行curl localhost
查看是否運行成功。你也能夠直接訪問你的IP地址,以下:
sudo vim /etc/php/7.1/fpm/php.ini
輸入/fix_pathinfo
搜索,將cgi.fix_pathinfo=1
改成cgi.fix_pathinfo=0
:
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...
運行:
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
。固然,你也能夠不修改,但必須先後一致,後面會用到這個配置。
運行:
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一致。
若是你尚未/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
,結果以下:
最後!!重啓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
若是你熟悉Let’s Encrypt,能夠跳過了,本教程使用的是免費的,配置更簡單的startssl。
去官網註冊:https://www.startssl.com/, startssl免費仍是很誘惑人的哈:
登陸後以後進去主頁,點擊Validations Wizard,選擇第一項Domain Validation (for SSL certificate),點擊Continue驗證你是不是域名的主人:
而後點擊將驗證信息發送到你的郵箱,輸入驗證碼繼續
驗證成功,startssl認爲你就是域名的全部者,此時進行下一步操做:
點擊Certificates Wizard,選擇第一項:
輸入全部你想要ssl的域名,例如static
子域名,blog
子域名:
複製openssl req -newkey rsa:2048 -keyout yourname.key -out yourname.csr
到你的服務器命令行,:
填寫你的信息:
而後會生成兩個文件:
運行cat lufficc.csr
複製lufficc.csr
的內容到上面的輸入框,點擊Submit:
此時你的證書已經生成功,點擊下載便可下載到本地。
下載完成後解壓,會有四個文件,對應不一樣軟件,這裏咱們只須要Nginx的就行:
點擊startssl的Tool Box下的Decrypt Private Key,輸入lufficc.key
(剛纔命令行生成的.key結尾的文件)文件內容和你剛纔設置的密碼(剛纔命令行設置的密碼),點擊解密
複製解壓後的內容,運行vim lufficc_de.key
生成一個新文件,複製進去解壓後的key,保存。
而後在新建一個目錄/etc/nginx/ssl
,將剛纔的文件放進去,便於統一管理:
其中紅色框框的是要用到文件。
運行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
:
從新加載並重啓nginx:
sudo service nginx reload sudo service nginx restart
測試經過,訪問你的站點,看有沒有加上那把別緻的小綠鎖?
至此,教程結束。最終效果這裏查看。
寫了那麼長的教程,看起來很負責,但只是我囉嗦而已,你把上面的命令一敲,軟件安裝都很簡單,在進行一些簡單的配置便可,若是你熟悉整個流程的話,其實沒有那麼複雜。有問題歡迎在評論指出。
Have a nice day!
注:轉載請註明出處!