LNMP 教程有哪些值得推薦?


這是四個東西,得分開說。

1.Linux

入門的話《鳥哥的Linux私房菜》真心是不二的選擇。

如果要提高的話,可以看看Linux內核或者Linux開發方面的書。

2.Nginx

最初的時候,還是能配出環境就可以了,可以直接搜一些配置文檔就行。

如果想深入了解的話,可以看一些官網的資料:nginx documentation

3.MySQL

入門的話,很多PHP的教材裡面就已經帶有MySQL的入門教程了。

深入的話《高性能MySQL》是非常值得閱讀的一本書。

4.PHP

入門的話,隨便找一本書,包括mysql和php的書就行了。

能寫一些功能了之後,推薦認真閱讀PHP的官方文檔:PHP: PHP 手冊

話說,這個組合的核心還是PHP和MySQL,如果不是走運維的路子,Linux和Nginx不需要過於專註的。如果MySQL和PHP都搞定了,倒是可以深入的了解一些~~


LNMP這四件套每個都很博大精深,但如果你不是專業的運維人員,完全沒必要把每個都搞的很清楚。如果只是搭建個人網站,可以使用網上已經有的一鍵腳本,例如軍哥的腳本

LNMP一鍵安裝包

據了解一些公司的生產環境也用軍哥的腳本部署LNMP,足見其腳本真的功能強大又可靠。

不推薦使用各種面板,原因:

一是這些面板經常爆出安全問題,你不想哪天看到自己網站莫名其妙就掛了吧?

二是面板大多都是需要花錢的,而且不便宜哦,不如把這部分成本用來升級VPS。

三是面板本身會佔用伺服器的資源(內存、硬碟空間),造成一定資源浪費。

如果是從零開始的朋友,建議先把Linux的基礎知識學習一下,參考這裡Linux VPS基礎


曾花了兩個月研究LNMP的問題,差點把我折騰屎,我想這幾乎算得上網上最為全面的LNMP教程了,以阿里雲ECS的Centos7.2為例,史上最全的阿里雲ECS部署LNMP+Git+Drush:

LNMP集成環境一鍵安裝一(推薦):https://oneinstack.com/install/

LNMP集成環境一鍵安裝二:https://lnmp.org/install.html

以上的兩種一鍵安裝LNMP集成環境的網站可讓你快速部署你的網站,少了很多麻煩和省了不少時間,而且它們也做的比較全面和科學,不用自己折騰的死去活來,對於一個新手來說非常實用,當然對於老手也實用。不過,如果非要想自己折騰的話,以下我也根據自己以往的經驗和網上的一些教程搗騰出一套不錯的方法,供大家參考及嘗試!

---------------------------------------------------------------

注意,在使用https://oneinstack.com/install/這個網站的方法在本地的Vagrant+VM+Centos上部署的話,可以先在這個網站上把http://aliyun-oss.linuxeye.com/oneinstack-full.tar.gz上的oneinstack-full.tar.gz下載下來,解壓到centos7上的/home/vagrant下載,可以使用FTP上傳到這個文件里,如:

然後執行以下命令(網站上的方法實用阿里雲,本地的話要加上sudo):

sudo yum -y install wget screen curl python #for CentOS/Redhat
cd oneinstack
screen -S oneinstack
sudo ./install.sh

如果出現問題,在終端把root下的文件許可權全改成777:

sudo chmod 777 *

如果還有問題的話:cd ../ 返回一步,再執行

sudo chmod 777 *

做好這些後,應該就可以正常配置了!

---------------------------------------------------------------

對於一個完美主義者來說,做任何事務必盡善盡美,以下的配置是我嘗試過若干失敗及網上其它大牛總結得來,我使用的是以下配置方案搭建的適用於Drupal8.x及Wordpress的CMS網站環境,以下:

Centos7.2 / Nginx1.10.2 / PHP70u / Mariadb101 / Memcache / Opcache / Git / Drush /

---------------------------------------------------------------

先購買阿里雲ECS

配置Centos7.2或者以下版本,我買的是香港的阿里雲ECS,如下:

購買成功後,使用cmder或者Xshell用root賬戶登錄伺服器:ssh root@ip

cat /etc/redhat-release //查看系統版本

顯示:CentOS Linux release 7.2.1511 (Core)

如果覺得主機名實在太長,可自己修改centos的主機名:

hostnamectl set-hostname newname

然後重啟centos:

reboot

然後就成功修改了你的主機名稱!

格式化數據盤-----------------------------

系統盤存放centos7環境,數據盤存放網站程序等

df -h //查看磁碟情況,無法看到數據盤
fdisk -l //查看所有盤

---------------------------------------------------------------

若您執行fdisk -l命令,發現沒有 /dev/xvdb 標明您的雲服務無數據盤,那麼您無需進行掛載及分區,跳過這一步直接部署LNMP即可(阿里雲ECS在購買的過程中會有掛載數據盤的鏈接,如果你的網站數據很小,可以不用買,系統盤就像是Windows的C盤即系統盤,而數據盤就相當於你Windows下的D盤通常系統盤用來存放系統,如果你的網站數據不是很大的話你也可以把程序和資料庫放在系統盤,如果網站數據大,就要掛載數據盤。我的網站文件多,資料庫不是很大,我把資料庫放在系統盤,網站文件例如主程序代碼,圖片,JS都放在數據盤)

fdisk -S 56 /dev/xvdb

---------------------------------------------------------------

依次輸入「n」,「p」「1」,兩次回車,「wq」,fdisk -l 命令可以看到,新的分區xvdb1已經建立完成了。

mkfs.ext3 /dev/xvdb1 // 命令對新分區進行格式化
echo "/dev/xvdb1 /mnt ext3 defaults 0 0" &>&> /etc/fstab //寫入新分區信息
cat /etc/fstab //命令查看,出現以下信息就表示寫入成功
mount -a //命令掛載新分區
df -h //命令查看,出現以下信息就說明掛載成功,可以開始使用新的分區了。

---------------------------------------------------------------

以上做完之後就可以配置LNMP環境了。注意!以下安裝配置過程中,最好使用管理員許可權,在前面加上sudo

---------------------------------------------------------------

安裝IUS倉庫------------------------------

連接成功後,安裝IUS倉庫,這樣才能用yum去安裝比較新的軟體包,獲取地址:https://ius.io/GettingStarted

cat /etc/redhat-release //查看系統版本
sudo yum install https://centos7.iuscommunity.org/ius-release.rpm -y //安裝
yum repolist //查看倉庫列表

安裝nginx--------------------------------

sudo yum install nginx -y //安裝nginx
sudo systemctl start nginx //啟動nginx
sudo systemctl enable nginx //開機自啟動

打開瀏覽器輸入IP ,出現nginx說明成功

sudo systemctl reload nginx //重啟

如果nginx出現問題,可以先啟動,再重啟:

sudo systemctl start nginx
sudo systemctl reload nginx

安裝mariaDB-----------------------------

資料庫消耗大量的內容,至少2G的內存伺服器

sudo yum search mariadb //搜索版本
sudo yum install mariadb101u-server -y //提示有衝突,先刪除原來的資源
sudo yum remove mariadb-libs -y //刪除原來的資源
sudo yum install mariadb101u-server mariadb101u -y //重新執行安裝

啟動資料庫【如果資料庫出錯,網站打不開(The website encountered an unexpected error. Please try again later.),也可以使用以下兩段命令重啟資料庫試試】

sudo systemctl start mariadb //啟動
sudo systemctl enable mariadb //開機自啟動

執行安全配置,密碼設為root,回答問題全「y」(這個方法也適用於當資料庫打不開時,出現登錄報錯:「ERROR 1045 (28000)」或者其它錯誤時,如果用了以下命令,可能會刪除之前的資料庫,得重新導入資料庫文件)設置root密碼,一直按Y,第一個提示輸入root資料庫的密碼,默認為空,回車

mysql_secure_installation
mysql -u root -p //測試
mysql --version //查看版本相關信息
mysql -u root -p db &< db.sql //導入資料庫(將資料庫文件db.sql導入到db資料庫中,得先用FTP把db.sql上傳到當前目錄里) mysqldump -u root -p db &> db.sql //導出資料庫(導出的資料庫文件就在當前目錄里)

進入資料庫常用命令-----------------------------------------

mysql -u root -p //進入資料庫
create database xxx; //創建資料庫
show databases; //查看資料庫
drop database xxx; //刪除資料庫
exit //退出資料庫
mysqladmin -uroot password "yourpassword" //更改root密碼
mysql -uroot -p -h192.168.137.10 -P3306 //遠程登陸資料庫
use xxx; //進入某個資料庫
show tables; //列出資料庫中的表
desc slow_log; //查看某個表全部欄位
show create table slow_logG; //顯示建表語句
select user(); //查看當前用戶
select database(); //查看當前所在資料庫
create database db1 charset utf8; //創建資料庫指定字符集
create table t1 (`id` int(4), `name` char(40)); //創建新表
select version(); //查看資料庫版本

安裝PHP--------------------------------

sudo yum search php //搜索安裝對應版本
sudo yum install php70u-fpm -y //安裝,或者安裝其它版本的PHP如php56u-fpm
sudo yum install php70u-fpm php70u-cli php70u-xml php70u-gd php70u-mysqlnd php70u-pdo php70u-mcrypt php70u-mbstring php70u-json -y //安裝擴展
sudo systemctl start php-fpm //啟動
sudo systemctl enable php-fpm //開機自啟
sudo systemctl reload php-fpm //重新載入
php -v //查看版本
rpm -qa | grep php //查看所有已安裝的PHP文件

安裝memcached--------------------------

啟用memcache後,性能就會有極大的改善

sudo yum search php | grep memcached //搜索memcache
sudo yum install php70u-pecl-memcached //安裝php70u-pecl-memcached
sudo systemctl reload php-fpm //重啟PHP
sudo systemctl enable memcached //開機自啟動
service memcached start //啟動
netstat -tunpl //查看進程是否開啟

安裝opcache-----------------------------

opcache是 php 的一個擴展,安裝後可提升性能,opcache不需要在php.ini中寫,安裝完默認開啟。安裝drupal或者其它CMS時,遇到沒有opcache會無法安裝,參考寧皓網這個教程:https://ninghao.net/video/3588

sudo yum search php | grep opcache //搜索opcache
sudo yum install php70u-opcache -y //需要php70u-opcache ,因為它跟我現在的環境裡面使用的 php 是一個版本的
sudo systemctl reload php-fpm //重新載入php-fpm
sudo systemctl restart php-fpm //重啟php-fpm

修改PHP配置-----------------------------

cd /etc 找到php.ini文件,修改以下幾點,使PHP與Drupal更好的結合

;加大頁面執行時間php.ini中的默認值是30 (秒)

max_execution_time = 300

post_max_size = 200M

upload_max_filesize = 200M

;內存的1/4這裡必須注意,設置太多會崩潰,因為還有其他程序要用內存,查看內存:free 或者top

memory_limit = 512M

;tmp是伺服器根目錄777許可權,drupal cc all後查看drupal是否還提示上傳未知錯誤

upload_tmp_dir = tmp

;中國時區設置

date.timezone = PRC

改好後保存再重啟

sudo systemctl reload php-fpm //重新載入

優化Nginx配置----------------------------

cd /etc/nginx 找到nginx.conf文件,實行優化,以2核CPU為例,1核CPU不要用

user nginx;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;

worker_processes 2;
worker_rlimit_nofile 204800;
worker_cpu_affinity 00000001 00000010;
events {
use epoll;
worker_connections 204800;
}

http {
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 /var/log/nginx/access.log main;

charset utf-8;
server_names_hash_bucket_size 128;
client_header_buffer_size 2k;
large_client_header_buffers 4 4k;
client_max_body_size 8m;
sendfile on;
tcp_nopush on;
keepalive_timeout 60;
fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
fastcgi_buffer_size 4k;
fastcgi_buffers 8 4k;
fastcgi_busy_buffers_size 8k;
fastcgi_temp_file_write_size 8k;
fastcgi_cache_valid 200 302 1h;
fastcgi_cache_valid 301 1d;
fastcgi_cache_valid any 1m;
fastcgi_cache_min_uses 1;
fastcgi_cache_use_stale error timeout invalid_header http_500;
open_file_cache max=204800 inactive=20s;
open_file_cache_min_uses 1;
open_file_cache_valid 30s;
tcp_nodelay on;
gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_http_version 1.0;
gzip_comp_level 2;
gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png font/ttf font/otf image/svg+xml;
gzip_vary on;

include /etc/nginx/mime.types;
default_type application/octet-stream;

include /etc/nginx/conf.d/.conf;

server {
listen 80 default_server;
listen [::]:80 default_server;
server_name _;
root /usr/share/nginx/html;

# Load configuration files for the default server block.
include /etc/nginx/default.d/.conf;

location / {
}
location ~* ^.+.(ico|gif|jpg|jpeg|png)$ {
access_log off;
expires 30d;
}
location ~* ^.+.(css|js|txt|xml|swf|wav)$ {
access_log off;
expires 24h;
}
location ~* ^.+.(html|htm)$ {
expires 1h;
}
error_page 404 /404.html;
location = /40x.html {
}

error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
}

再建立.conf主機配置------------------------------------------------

cd /etc/nginx/conf.d 新建web.conf文件,第一個location為網站靜態配置,第二個location是讓nginx處理php

server{
listen 80;
server_name www.sskoo.com sskoo.com;
root /home/sskoo;
index index.php index.html;

location / {
index index.php index.html;
try_files $uri $uri/ /index.php?$query_string;
}
location ~ .php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi.conf;
}
}

創建對應的網站目錄------------------------

ssh @ip 到伺服器後,使用 cd ../ 查看centos7的相關目錄,能看到如下目錄:

bin dev home lib64 media opt root sbin sys usr

boot etc lib lost+found mnt proc run srv tmp var

建議把你的網站放到home或者mnt的下面,以home為例:

sudo mkdir -p /home/mysite
sudo chmod 755 mysite //讀取許可權,否則網站訪問不了php許可權

然後你就可以把你的網站文件放到mysite里,再重啟相關服務,沒問題的話,網站就可以打開了

sudo systemctl reload php-fpm
sudo systemctl reload nginx

---------------------------------------------------------------

================================================================

所有配置文件信息路徑

php.ini: /etc/php.ini
ssh: /etc/ssh/sshd_config
nginx: /etc/nginx/nginx.conf
php-fpm: /etc/php-fpm.d/www.conf
mariadb:/etc/my.cnf.d/mariadb-server.cnf
網站綁定域名目錄配置文件:/etc/nginx/conf.d/web.conf

================================================================

安裝Composer----------------------------

參考:https://ninghao.net/video/1700#info https://www.drupal.org/node/2366283

先安裝composer依賴的php插件,如果之前在安裝php插件時安裝過就不用再安裝了

sudo yum install php70u-cli -y

第一種方法使用包管理來安裝:

curl -S https://getcomposer.org/installer | php

第二種方法安裝,打開https://getcomposer.org/download/ 打開複製Command-line installation下的代碼,再ssh@ip後鍵入,輸入以下所有命令行回車,環境符合就會安裝成功:

php -r "copy("https://getcomposer.org/installer", "composer-setup.php");"
php -r "if (hash_file("SHA384", "composer-setup.php") === "669656bab3166a7aff8a7506b8cb2d1c292f042046c5a994c43155c0be6190fa0355160742ab2e1c88d40d5be660b410") { echo "Installer verified"; } else { echo "Installer corrupt"; unlink("composer-setup.php"); } echo PHP_EOL;"
php composer-setup.php
php -r "unlink("composer-setup.php");"

ls查看,會看到下載一個composer.phar文件,輸入:php composer.phar會出現一些幫助信息。如果你想在伺服器的任何地方去使用的話需要去設置一下,把composer.phar 這個文件放在系統的環境變數裡面的某個目錄裡面,全局使用!

echo $PATH //查看環境變數路徑
sudo mv composer.phar /usr/local/bin/composer //好了後可以直接輸入 composer 可以看到很多信息表明成功!
vi ~/.bash_profile

追加到PATH後面

原:PATH=$PATH:$HOME/bin

新:PATH=$PATH:$HOME/bin:$HOME/.composer/vendor/bin

讓文件生效:

source ~/.bash_profile

安裝Git---------------------------------

yum search git
sudo yum install git2u -y //安裝
sudo yum remove git-core -y //若有提示衝突,刪除衝突的包再執行安裝
git config --global user.name "feng" //告訴Git你是誰
git config --global user.email "54370478@qq.com" //告訴Git你的 Email

安裝Drush-------------------------------

安裝drush,確定安裝composer和git之後

第一種安裝drush方法,這種方法下載很快,但不知為什麼配置很難成功,可以參考下下。把 Github 上的代碼 clone 到 /usr/local/src/drush 這個目錄下面:

git clone https://github.com/drush-ops/drush.git /usr/local/src/drush

然後 cd 到這個目錄:

cd /usr/local/src/drush

用 composer 安裝一下:

composer install

然後再系統的環境變數創建一個 drush 的快捷方式,可以使用 ln -s。這裡 -s 參數就是 symbolic 的簡稱,也就是所謂的「軟鏈接」。它的特點在於可以連接目錄。

ln -s /usr/local/src/drush/drush /usr/bin/drush

第二種安裝drush方法,這種方法慢且不用安裝GIT,但實用在ECS上!

指定安裝8.x版本。使用 composer 在國內下載會比較慢,需要等挺長時間,所以本地安裝很難成功。加上一個--prefer-dist表示我們不想去下載帶版本控制的東西,再加上一個 -vvv可以顯示在安裝過程中的更詳細的信息,最後再加上一個--profile顯示耗費的內存還有時間,composer 會去找出 drush 還有它依賴的東西):完成以後我們可以去看一下,先進入到用戶的主目錄下面:

composer global require drush/drush:8.x --prefer-dist -vvv --profile
ls -la

查看一下這個目錄里的東西,有一個 .config 的目錄,你會看到一個 composer 目錄,再進入到composer這個目錄下地vendor:

cd .config/composer/vendor

在這個目錄裡面,你會看到 composer 下載下來的drush ,還有一些其它的東西,把這個目錄下面的 bin 這個目錄,添加到系統的環境變數裡面,可以去編輯一下主目錄下面的 .bash_profile

vi ~/.bash_profile

進入編輯模式後插入一條代碼:

export PATH="$HOME/.config/composer/vendor/bin:$PATH"

保存並退出後然後再用 source 去執行一下 .bash_profile:

source ~/.bash_profile

再輸入:

drush //有 drush 命令相關的幫助信息說明證明可以去使用 drush 了


LNMP 這四者除了 Linux,其實都不是特別難入門的東西,題主既然會問這個問題,應該是尋找入門的方法,所以推薦買一本《鳥哥的 Linux 私房菜:基礎篇》學習一下 Linux 的基本操作,剩下的應該就很容易學習了。

nginx 推薦《深入理解nginx》,寫的比較深入,不過如果是新人其實網上的教程一大堆,多配置幾遍會的也就基本夠用了;

MySQL/MariaSQL 這二者其實對於你我來說都是一個東西,不過推薦要學的話就學習MariaDB,因為 CentOS7 已經開始替換掉 MySQL 了,作為我們這些小角色當然要跟著大環境走,逆流而上總是阻力重重的。教程的話推薦《高性能 MySQL》;

PHP/Python 這二者我是推薦 Python 的,PHP 雖說容易入門,但是說不上的原因,有些不太喜歡這門語言,所以推薦學習 Python+Django。當然如果你希望用虛擬主機建站,那麼還是要學習 PHP 的,因為支持 Python 的虛擬主機我至今還沒見到(雲引擎除外)。

我最近在寫一些這方面的東西,歡迎關注我的專欄。


學習這些網站搭建的東西,還是自己親自實踐,解決一些疑難雜症才會有更多收穫,推薦一個Linux下輕鬆部署LNMP的安裝包:http://soft.vpser.net/lnmp/lnmp1.1-full.tar.gz

下載下來,解壓運行目錄下的安裝腳本,一個很靠譜的LNMP環境就搞定,可以自己去折騰了,可以去學習這個安裝腳本,會有很多收穫的,然後去看nginx、php-fpm、mysql的配置文件,然後結合一些教程去看那些配置到底意味著什麼,看效果肯定比自己理解靠譜得多,實踐出真知。


LNMP感覺沒有必要看專門的教程了!只要按照官方的使用說明就可以直接操作了!有些問題在「常見問題」里就可以獲得很好的解答的!

吃貨小棧 - 一個吃貨的分享博客明月學習筆記Blog - 明月登樓折騰學習LNMP、LAMP的心得記錄博客,明月登樓的博客 - 草根站長學習、交流、分享!

目前這三個博客都是放在LNMP環境下的!


lnmp想學習的話,你得先從centos系統開始,一般新手都從這個系統開始練習,安裝lnmp、添加域名、虛擬主機、FTP等等,要是你用點功夫,也就幾天時間就會了,教程嘛都差不多,主要是悟性要好,最重要的是找對教程:魏艾斯博客- 美國VPS,便宜VPS推薦,國外VPS評測,VPS優惠碼及VPS新手教程 這樣才能事半功倍


推薦閱讀:

php為什麼要設計成單線程語言?
如何評價知乎幾乎所有PHP相關問題中都出現「PHP是世界上最好的語言」的無關回答的現象?
在日常的網頁開發中,apache的角色是什麼樣的?(如果並不需要將數據上載伺服器的話),為什麼一定要用
PHP初學者應該選擇哪個版本的ThinkPHP?
為什麼http請求要3次握手與4次揮手?

TAG:PHP | MySQL | Linux | Nginx | LNMP |