從事前端開發已3年有余,越來越發現前端開發要學習的知識已不僅僅是html+css+js那么簡單了,2017年市場上就有了大前端的概念,可以說對前端工程師的要求也越來越高了,從招聘的要求中可以看到熟悉一門后端語言可以說是標配了。由於目前公司用的后台語言是PHP,借此機會充分鍛煉了我的PHP技能。如今不僅要對PHP語言熟悉,還要熟悉公司整個架構,今天我通過在WIN7上安裝的虛擬機上練習了下搭建LNMPA架構,順便做下筆記。
前提准備
需要在官網上下載以下軟件
- CentOS 這里選擇aliyun的鏡像
- Virtual Box 這里選擇5.2.8版本
- xshell5 這里選擇可以免費使用的Home & School user
安裝CentOS系統
- 安裝virtual box虛擬機
- 新建虛擬機電腦,輸入名稱CentOS,然后一直選擇下一步
- 啟動CentOS,選擇啟動盤時,選擇我們下載好的CentOS鏡像文件后,點擊啟動
- 進入安裝界面,選擇Install CentOS 7
- 安裝過程中設置好語言,安裝位置(磁盤分區選擇默認)和網絡(打開以太網連接),設置好后點擊開始安裝
- 安裝過程中設置root密碼及創建用戶,安裝完成后點擊重啟
設置固定ip訪問xshell遠程登錄
網卡設置
網卡設置前先查詢主機的網絡ip
cmd ipconfig /all
分別記下本地連接的ipv4地址、子網掩碼、網關
登錄centos虛擬主機后
cd /etc/sysconfig/network-scripts/
ls
一般第一個就是自己的網卡,我這里是ifcfg-enp0s3
vi ifcfg-enp0s3
添加以下內容
BOOTPROTO="dhcp"//改為"static"
IPADDR="10.0.5.100"//設置為與ipv4地址在同一網段
NETMASK="255.255.0.0"//設置子網掩碼
GATEWAY="10.0.0.1"//設置網關
執行
systemctl restart network.service //重啟網絡
此時測試主機和虛擬機是否可互相ping通
開啟22端口
firewall-cmd --zone=public --add-port=22/tcp --permanent //開啟22端口
systemctl restart firewalld.service //重啟防火牆
設置防火牆允許http服務
firewall-cmd --add-service=http --permanent
firewall-cmd --reload
此時可在xshell上遠程登錄虛擬主機了
ssh username@10.0.5.100
LAMP環境搭建
安裝Apache
sudo yum -y install httpd
安裝完成后,修改配置文件,
vi /etc/httpd/conf/httpd.conf
把 ServerName 前的 # 去掉,並修改為:ServerName 127.0.0.1 並保存
重啟apache
sudo apachectl restart
在主機瀏覽器中輸入10.0.5.100即可看到apache測試頁面(需要開啟80端口)
安裝MySQL
sudo yum -y install mysql mariadb-server
安裝完成后,啟動 MySQL:
sudo systemctl start mariadb.service
接下來開始初始化 MySQL,並按照提示設置 MySQL中的 root 用戶的密碼及其他配置:
sudo mysql_secure_installation
配置如下
Enter current password for root (enter for none) (按回車)
Set root password? [Y/n] (輸入 Y:回車)
New password: (輸入新密碼,回車)
Re-enter new password: (再次輸入新密碼,回車)
Remove anonymous users? [Y/n] (輸入 Y:回車)
Disallow root login remotely? [Y/n] (輸入 Y:回車)
Remove test database and access to it? [Y/n] (輸入 Y:回車)
Reload privilege tables now? [Y/n] (輸入 Y:回車)
登錄mysql
mysql -u root -p
安裝 PHP7
安裝epel
sudo yum -y install epel-release
更換rpm源
sudo rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm
安裝php7.0
sudo yum -y install php70w
安裝結束后,重啟 Apache
sudo apachectl restart
在 Apache 的默認網站目錄添加 phpinfo.php 文件,
vi /var/www/html/phpinfo.php
//添加以下內容
<?php
phpinfo();
?>
設置開機啟動項
systemctl enable httpd.service
systemctl enable mariadb.service
至此,LAMP 環境搭建完成!
LNMP環境搭建
安裝 Nginx
此步驟接上,為了避免沖突,先關閉 Apache: sudo systemctl stop httpd.service
CentOS 官方 rpm 源是沒有 nginx 安裝包的,需要手動添加,
cd /etc/yum.repos.d/
vi nginx.repo
往 nginx.repo 文件里添加如下代碼:
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch
gpgcheck=0
enabled=1
保存后,即可開始安裝 Nginx,
sudo yum -y install nginx
安裝結束后,啟動 Nginx,記得先關閉 Apache
sudo systemctl start nginx.service
此時用瀏覽器訪問10.0.5.100即可看到Welcome to nginx!
安裝PHP-FPM(FastCGI)
sudo yum -y install php-fpm
開啟php-fpm
sudo systemctl start php-fpm.service
編輯 Nginx 的默認配置文件 default.conf
sudo vim /etc/nginx/conf.d/default.conf
把 default.conf 文件中 # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 這一行下面的 # 注釋去掉,並修改 root 后面的目錄為:/usr/share/nginx/html;(此目錄為 Nginx 的默認網站目錄),修改 SCRIPT_FILENAME 后的參數為:$document_root$fastcgi_script_name;
重啟 Nginx, systemctl restart nginx.service
同樣,在 Nginx 的默認網站目錄下添加 phpinfo.php 文件,在瀏覽器中可瀏覽php相關信息
設置開機啟動項
systemctl enable httpd.service
systemctl enable mariadb.service
至此,LNMP 環境搭建完成!
LNMP + Apache 架構配置:Nginx 做前端代理 + Apache 做后端服務
Apache優勢與劣勢
Apache用戶基數大,穩定,兼容性高,在處理動態 php 頁面時,mod_php 模塊也比 php-cgi 模塊更穩定更高效。
Apache過於臃腫以及對靜態文件響應過於緩慢讓很多使用者感到頭疼
Nginx優勢與劣勢
Nginx 對於高並發性能出眾,Proxy 功能強效率高,占用系統資源少
Nginx在處理 php 腳本時需要通過 php-fpm(FastCGI) 解析,而 php-fpm 不夠穩定,經常出現 502 錯誤,生成相對復雜的頁面沒有優勢,反而會使 php-cgi 進程變為僵屍進程。
很多大型的網站都是采用 Nginx 前端 + Apache 后端的服務器架構,這樣可以很好地結合了 Nginx 高並發和靜態頁面高效率以及 Apache 穩定的動態頁面處理特點,再也不用擔心 Nginx 以 FastCGI 模式運行 PHP 時的502問題和 Apache 處理靜態頁面過慢、負載過高的問題。
配置 LNMP + Apache 架構
編輯 Nginx 的默認配置文件
sudo vim /etc/nginx/conf.d/default.conf
注釋掉之前 FastCGI 監聽的配置,並添加Apache對php腳本的監聽
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
location ~ \.php$ {
proxy_pass http://127.0.0.1:8080;
}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ \.php$ {
# root /usr/share/nginx/html;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
# include fastcgi_params;
#}
編輯 Apache 的配置文件
sudo vim /etc/httpd/conf/httpd.conf
找到 Listen 字段,並改為:Listen 127.0.0.1:8080,讓 Apache 來監聽這個端口,修改 Apache 的網站根目錄為:/usr/share/nginx/html,與上述 Nginx 對應的網站目錄保持一致
重啟 Nginx ,Apache 服務,並確保這兩個服務開機自啟:
sudo systemctl restart httpd.service
sudo systemctl restart nginx.service
systemctl enable httpd.service
systemctl enable nginx.service
發現出現 502 Bad Gateway
經查閱相關資料發現是由於開啟了 selinux 服務導致的,關閉 selinux 即可。
sudo vim /etc/selinux/config
SELINUX=disabled
修改保存后,通過 reboot 命令重啟 CentOS 服務器
至此,LNMP + Apache 架構配置完成!可通過瀏覽器查看http://10.0.5.100/phpinfo.php來確認
補充
盡管此時LNMP+Apache架構已搭建完,但是在開發的過程中我們仍舊不方便,因為我們一般都在本地開發,可是如何讓文件在linux服務器上運行呢?我們總不能又在本地搭建一套環境吧,
samba文件伺服器
利用samba就可以解決上面遇到的問題,讓本地開發的代碼用虛擬機中搭建好的環境跑起來,
1.安裝samba
yum install samba -y
- 修改配置文件
cd /etc/samba
cp smb.conf smb.conf.bak 備份一份再說
vim smb.conf 把多余的注釋去掉,增加如下的配置
[global] #---------------------全局設置
workgroup = ranfeng #------------工作組和windows工作組性質一樣
server string = 測試samba %v #-----服務一種描述,可以隨意寫
netbios name = ranfeng #-----這個netbios名,這個現在不重要
security = user #這個是驗證方式,user是密碼登錄,不支持share和server,設置user后加入下面一句話
map to guest = Bad User #
[share]
path = /usr/share/web
available = yes
browseable = yes
public = yes
writable = yes
建立Samba用戶及密碼
useradd sambauser
smbpasswd -a sambauser
啟動服務
smbd start
添加進開機啟動
chkconfig smb on
編輯/etc/selinux/config
將 SELINUX=enforcing 改成 SELINUX=disabled
至此就可以在window上通過磁盤映射將linux上共享的目錄掛載到window上,這樣我們在這個磁盤上所有的修改與創建都在虛擬機linux可以看到
參考文獻
Win7 下 VMware 虛擬機中安裝 CentOS 服務器
CentOS 6.7下 Samba服務器的搭建與配置
https://www.jianshu.com/p/b35f59109c2e