搭建lnmp_LNMP環境搭建過程
技術標籤:搭建lnmp
ubuntu下安裝PHP,MySql,Nginx過程
一、不採用原始碼安裝
1、找到ubuntu軟體原始檔,調整為國內映象,先更新ubuntu軟體源
[email protected]:~$ cd /etc/apt
[email protected]:/etc/apt$ sudo cp sources.list sources.list.bak (備份預設軟體源資料)
[email protected]:/etc/apt$ sudo vim sources.list (如果沒有vim,使用vi)
將選擇的國內映象源內容替換掉,執行
sudo apt-get update
2、不採用原始碼安裝php
sudo apt-get install php7.0 (此時使用Tab檢視可安裝的軟體)
安裝完之後
php -v 檢視是否安裝成功
配置php.ini
sudo vim /etc/php/7.0/fpm/php.ini
3、不採用原始碼安裝nginx
sudo apt-get install nginx
nginx -v 檢視是否安裝成功
配置nginx的虛擬主機 sudo vim /etc/nginx/sites-available/default
server { listen 80; server_name your_site_name.com; root /usr/share/nginx/html; index index.php index.html; location / { try_files $uri $uri/ =404; } error_page 404 /404.html; error_page 500 502 503 504 /50x.html; location = /50x.html { root /var/www/html; } location ~ .php$ { try_files $uri =404; fastcgi_pass unix:/var/run/php/php7.0-fpm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } }
4、不採用原始碼安裝MySql
sudo apt-get install mysql-server
sudo apt-get install mysql-client
sudo apt install libmysqlclient-dev
安裝過程會提示輸入資料庫的登入名和密碼,按提示輸入即可
如果提示依賴不足,使用以下命令強制安裝依賴
sudo apt-get install -f
5、php專案可能會需要php擴充套件
sudo apt-get install php-xxxxx (需要使用擴充套件,打出部分命令情況下使用Tab獲取安裝即可)
6、在遠端連線ubuntu的情況下,需要安裝openssh-server
sudo apt-get install openssh-server
如果發生需要軟體降級的問題,安裝的時候指定版本號,重新安裝即可
sudo apt-get install openssh-client=1:6.6p1-2ubuntu1
7、開啟服務命令
service nginx start
service mysql start
二、原始碼安裝
1、php原始碼安裝
從PHP: Downloads中下載需要的php版本
ubuntu命令列下載php的原始碼 需要使用wget -O php-7.2.10.tar.gz 加上從官網複製的連結
解壓縮 tar -zxvf xxxxxx.tar.gz
cd 到解壓縮的php目錄下
執行 ./configure --prefix=/usr/local/php --enable-fpm
--enable-mbstring --disable-pdo --with-curl
--disable-debug --disable-rpath
--enable-inline-optimization --with-bz2 --with-zlib --enable-sockets
--enable-sysvsem --enable-sysvshm
--with-mhash --enable-zip --with-pcre-regex --with-mysqli
--with-gd --with-jpeg-dir
可能會遇到依賴的錯誤,如果系統是centos系統
採用yum install 安裝即可
如果遇到以下問題:
configure: error: Please reinstall the BZip2 distributio
yum install bzip2 bzip2-devel 解決
libxml2 configure: error: xml2-config not found. Please check your libxml2 installation.
yum install libxml2-devel 解決
其他問題同理
之後進行make && make install 安裝 php即安裝在--prefix指定的目錄下
將php加入到環境變數
(1)輸入命令export PATH=$PATH:/usr/local/php/bin 對當前會話有效
(2)vi ~/.bash_profile 新增PATH=$PATH:/usr/local/php/bin 對當前使用者有效
(3)vi /etc/profile 新增PATH=$PATH:/usr/local/php/bin 對所有使用者生效
不生效的話 執行source /etc/profile 生效
使用php -v測試是否新增到環境變數
給php新增擴充套件
在php原始碼對應擴充套件目錄下或者下載的擴充套件目錄下,輸入/usr/local/php/bin/phpize
可能提示如下錯誤
Configuring for:
PHP Api Version: 20041225
Zend Module Api No: 20060613
Zend Extension Api No: 220060519
Cannot find autoconf. Please check your autoconf installation and the
$PHP_AUTOCONF environment variable. Then, rerun this script.
centos系統使用
yum install m4
yum install autoconf解決
如果遇到
Make sure that you run '/app/php/bin/phpize' in the top level source directory of the module
解決方法
cp config0.m4 config.m4
然後 ./configure --with-php-config=/usr/local/php/bin/php-config
make && make install
需要修改php.ini檔案
原始碼安裝的php,預設的php.ini檔案位置在/usr/local/php/lib下,但這個目錄下可能不存在php.ini配置檔案,複製原始碼中的php.ini-production 到對應目錄下即可
然後新增extension=xxxxxxx 即可
原始碼安裝有php-fpm的話需要修改的地方
在php安裝目錄下找到etc目錄 複製php-fpm.conf.default 為php-fpm.conf.
進入etc目錄下的php-fpm.d目錄 複製www.conf.default 為 www.conf
設定php.ini, 開啟php配置檔案找到cgi.fix_pathinfo配置項,這一項預設被註釋並且值為1,根據官方文件的說明,這裡為了當檔案不存在時,阻止Nginx將請求傳送到後端的PHP-FPM模組,從而避免惡意指令碼注入的攻擊,所以此項應該去掉註釋並設定為0
2、nginx原始碼安裝
從nignx官網nginx: download中下載需要的版本
gz檔案解壓縮 tar -zxvf xxxx.tar.gz
cd 到nginx目錄下
./configure --prefix=/opt/demo/nginx --with-http_stub_status_module --with-http_ssl_module
如果遇到以下錯誤:
the HTTP rewrite module requires the PCRE library.
執行 yum install pcre-devel
SSL modules require the OpenSSL library
執行 yum install openssl-devel
然後繼續執行
make && make install
如果出現
make[1]: Leaving directory `/usr/local/nginx
有提示,但是nginx已經建立好
使用 /usr/local/nginx/sbin/nginx -t 測試顯示
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
安裝成功
nginx加入到環境變數的方法同上
export PATH=$PATH:/app/nginx/sbin
預設情況下 nginx沒有設定使用者,如果目錄沒有許可權的話,會返回403錯誤
可以新增使用者 和 組 groupadd nginx
useradd -s /sbin/nologin -g nginx nginx
然後在nginx.conf配置檔案中設定 user nginx,並且將目錄許可權設定為755
在配置nginx和php-fpm的時候,如果php-fpm啟動不了,報9000端口占用時候,可以設定監聽檔案
fastcgi_pass unix:/var/run/php-fpm.sock;
然後在php-fpm配置檔案的www.conf中的listen
listen = /var/run/php-fpm.sock
原始碼安裝的nginx和php-fpm設定開機自啟
vim /etc/rc.local
/usr/local/php/sbin/php-fpm
/usr/loca/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
3、nginx、php原始碼安裝設定開機自啟
在原始碼安裝完php之後,修改一下php-fpm的配置檔案
pid = run/php-fpm.pid 程序檔案位置
error_log = log/php-fpm.log 記錄錯誤位置
daemonize = yes 守護程序執行模式
user = www 執行使用者名稱
group = www 執行使用者組
listen = 127.0.0.1:9000 CGI 監聽埠和 IP
pm = static 程序管理器執行模式
pm.max_children = 32 開啟子程序數量
pm.max_requests = 500 子程序重啟閾值
slowlog = log/slow.log 慢查詢日誌
request_slowlog_timeout = 5 慢查詢閾值
request_terminate_timeout = 30 請求超時閾值
pm 有兩中情況 分別是static 和 dynamic 根據情況設定
然後在/etc/init.d目錄下 新建php-fpm檔案,加入如下程式碼,一些配置根據實際情況設定
#!/bin/bash
# php-fpm startup script for the php-fpm
# php-fpm version:5.5.0-alpha6
# chkconfig: - 85 15
# description: php-fpm is very good
# processname: php-fpm
# pidfile: /var/run/php-fpm.pid
# config: /usr/local/php/etc/php-fpm.conf
php_command=/usr/local/php/sbin/php-fpm
php_config=/usr/local/php/etc/php-fpm.conf
php_pid=/usr/local/php/var/run/php-fpm.pid
RETVAL=0
prog="php-fpm"
#start function
php_fpm_start() {
/usr/local/php/sbin/php-fpm
}
start(){
if [ -e $php_pid ]
then
echo "php-fpm already start..."
exit 1
fi
php_fpm_start
}
stop(){
if [ -e $php_pid ]
then
parent_pid=`cat $php_pid`
all_pid=`ps -ef | grep php-fpm | awk '{if('$parent_pid' == $3){print $2}}'`
for pid in $all_pid
do
kill $pid
done
kill $parent_pid
fi
exit 1
}
restart(){
stop
start
}
# See how we were called.
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
stop
start
;;
status)
status $prog
RETVAL=$?
;;
*)
echo $"Usage: $prog {start|stop|restart|status}"
exit 1
esac
exit $RETVAL
nginx自啟配置 在/etc/init.d目錄下新建 nginx檔案
#!/bin/bash
#
# Startup script for Nginx - this script starts and stops the nginx daemon
#
# chkconfig: - 85 15
# description: Nginx is an HTTP(S) server, HTTP(S) reverse proxy and IMAP/POP3 proxy server
# processname: nginx
# config: /usr/local/nginx/conf/nginx.conf
# pidfile: /usr/local/nginx/logs/nginx.pid
# Source function library.
. /etc/rc.d/init.d/functions
# Source networking configuration.
. /etc/sysconfig/network
# Check that networking is up.
[ "$NETWORKING" = "no" ] && exit 0
nginx="/usr/local/nginx/sbin/nginx"
prog=$(basename $nginx)
NGINX_CONF_FILE="/usr/local/nginx/conf/nginx.conf"
[ -f /etc/sysconfig/nginx ] && . /etc/sysconfig/nginx
lockfile=/var/lock/subsys/nginx
start() {
[ -x $nginx ] || exit 5
[ -f $NGINX_CONF_FILE ] || exit 6
echo -n $"Starting $prog: "
daemon $nginx -c $NGINX_CONF_FILE
retval=$?
echo
[ $retval -eq 0 ] && touch $lockfile
return $retval
}
stop() {
echo -n $"Stopping $prog: "
killproc $prog -QUIT
retval=$?
echo
[ $retval -eq 0 ] && rm -f $lockfile
return $retval
}
restart() {
configtest || return $?
stop
sleep 1
start
}
reload() {
configtest || return $?
echo -n $"Reloading $prog: "
killproc $nginx -HUP
RETVAL=$?
echo
}
force_reload() {
restart
}
configtest() {
$nginx -t -c $NGINX_CONF_FILE
}
rh_status() {
status $prog
}
rh_status_q() {
rh_status >/dev/null 2>&1
}
case "$1" in
start)
rh_status_q && exit 0
$1
;;
stop)
rh_status_q || exit 0
$1
;;
restart|configtest)
$1
;;
reload)
rh_status_q || exit 7
$1
;;
force-reload)
force_reload
;;
status)
rh_status
;;
condrestart|try-restart)
rh_status_q || exit 0
;;
*)
echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}"
exit 2
esac
然後,修改檔案許可權,並使用chkconfig 加入自啟動
chmod +x /etc/init.d/php-fpm
chkconfig php-fpm on
chkconfig --list
chmod +x /etc/init.d/nginx
chkconfig nginx on
chkconfig --list
完成後使用以下命令,管理 service命令其實是去/etc/init.d目錄下,去執行相關程式
service php-fpm start
service php-fpm stop
service php-fpm restart
service php-fpm reload
或者
/etc/init.d/php-fpm start
/etc/init.d/php-fpm stop
/etc/init.d/php-fpm restart
/etc/init.d/php-fpm reload
service nginx start
service nginx stop
service nginx restart
service nginx reload
或者
/etc/init.d/nginx start
/etc/init.d/nginx stop
/etc/init.d/nginx restart
/etc/init.d/nginx reload