如何簡單的在阿里雲centos7.6 64位作業系統上手動搭建LNMP環境(Nginx1.14.2+PHP7.x+mysql5.7)

52it.club發表於2019-03-01

步驟如下:

開通雲伺服器

建站首先要有伺服器和域名,對於個人使用的小型網站,一臺1核CPU|2G記憶體|1M頻寬|40G系統盤的雲伺服器ECS例項即可滿足需要。目前國內主流雲服務提供商為阿里雲騰訊雲。

這裡展示以阿里雲為例,騰訊雲也是大同小異的,如何開通雲伺服器這裡略過,見“如何快速搭建自己獨立的個人部落格?”文章有詳情介紹;

Nginx最新版本下載安裝如下:

一、yum方式安裝最新Nginx:

  1)、安裝前準備:

 sudo yum install yum-utils

  2)、 要設定yum儲存庫,請建立名為/etc/yum.repos.d/nginx.repo的檔案,其中包含以下內容:

[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key

[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key

預設情況下,使用穩定nginx包的儲存庫。如果要使用主線nginx包,請執行以下命令:

sudo yum-config-manager --enable nginx-mainline

3)、開始yum 安裝

sudo yum install nginx

  4)、啟動nginx服務

  systemctl start nginx

   5)、配置
預設的配置檔案在 /etc/nginx 路徑下,使用該配置已經可以正確地執行nginx;如需要自定義,修改其下的 nginx.conf 等檔案即可。至此yum安裝介紹完成!可以訪問你伺服器公網IP試試,能否訪問?如看到如下截圖說明安裝執行成功

二、原始碼下載及安裝:

安裝前準備,如系統已經存在跳過:

1)、安裝make:yum -y install gcc automake autoconf libtool make

2)、安裝g++:yum install gcc gcc-c++

3)、安裝pcre和pcre-devel:yum install -y pcre pcre-devel

4)、安裝zlib zlib提供了很多壓縮和解方式,nginx需要zlib對http進行gzip:yum install -y zlib zlib-devel

5)、安裝openssl openssl是一個安全套接字層密碼庫,nginx要支援https,需要使用openssl:yum install -y openssl openssl-devel

1、這裡我們下載最新最穩定版本1.14.2:

wget http://nginx.org/download/nginx-1.14.2.tar.gz 

2、解壓壓縮包:

tar zxvf nginx-1.14.2.tar.gz

3、進入目錄

cd nginx-1.14.2

修改原始碼(這部分可選)原始碼修改Nginx版本資訊為wavefar,去掉版本號;對Nginx已一個簡單的隱私保護作用;

vim src/core/nginx.h

#define nginx_version      1014002
#define NGINX_VERSION      ""
#define NGINX_VER          "wavefar/1.0" NGINX_VERSION

#ifdef NGX_BUILD
#define NGINX_VER_BUILD    NGINX_VER " (" NGX_BUILD ")"
#else
#define NGINX_VER_BUILD    NGINX_VER
#endif

#define NGINX_VAR          "NGINX"
#define NGX_OLDPID_EXT     ".oldbin"

4、預編譯及配置

./configure --prefix=/usr --sbin-path=/usr/sbin/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --pid-path=/var/run/nginx/nginx.pid --lock-path=/var/lock/nginx.lock --user=nginx --group=nginx --with-http_ssl_module --with-http_flv_module --with-http_gzip_static_module --http-log-path=/var/log/nginx/access.log --http-client-body-temp-path=/var/tem/nginx/client --http-proxy-temp-path=/var/tem/nginx/proxy --http-fastcgi-temp-path=/var/tem/nginx/fcgi --with-http_stub_status_module

5、安裝

make && make install

6、建立開機啟動命令指令碼檔案(可選)

vim /etc/init.d/nginx

插入如下內容:

#!/bin/sh
#
# 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:      /etc/nginx/nginx.conf
# config:      /etc/sysconfig/nginx
# pidfile:     /var/run/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/sbin/nginx" #對應編譯安裝時的sbin-path
	prog=$(basename $nginx)

	NGINX_CONF_FILE="/etc/nginx/nginx.conf"

	[ -f /etc/sysconfig/nginx ] && . /etc/sysconfig/nginx

	lockfile=/var/lock/subsys/nginx

	make_dirs() {
	   # make required directories
	   user=`$nginx -V 2>&1 | grep "configure arguments:" | sed 's/[^*]*--user=\([^ ]*\).*/\1/g' -`
	   if [ -z "`grep $user /etc/passwd`" ]; then
		   useradd -M -s /bin/nologin $user
	   fi
	   options=`$nginx -V 2>&1 | grep 'configure arguments:'`
	   for opt in $options; do
		   if [ `echo $opt | grep '.*-temp-path'` ]; then
			   value=`echo $opt | cut -d "=" -f 2`
			   if [ ! -d "$value" ]; then
				   # echo "creating" $value
				   mkdir -p $value && chown -R $user $value
			   fi
		   fi
	   done
	}

	start() {
		[ -x $nginx ] || exit 5
		[ -f $NGINX_CONF_FILE ] || exit 6
		make_dirs
		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 

設定所有人都有對這個啟動指令碼nginx檔案的執行許可權:chmod a+x /etc/init.d/nginx

把nginx加入系統服務中:chkconfig --add nginx

如果出現 [emerg] mkdir() “/var/temp/nginx/client” failed (2: No such file or directory) 錯誤 執行

sudo mkdir -p /var/tem/nginx/client

檢查nginx配置是否成功:nginx -t 

常用啟動、重啟、暫停命令:nginx、nginx -s relod、nginx -s stop

如果您正在執行防火牆,請執行以下命令以允許HTTP和HTTPS通訊:

 sudo firewall-cmd --permanent --zone=public --add-service=http 
 sudo firewall-cmd --permanent --zone=public --add-service=https
 sudo firewall-cmd --reload

至此Nginx伺服器配置完成。

PHP7.x版本安裝:

一、yum源安裝php:

1)、安裝 EPEL 軟體包:

$ sudo yum install epel-release

2)、安裝 remi 源:

$ sudo yum install http://rpms.remirepo.net/enterprise/remi-release-7.rpm

3)、安裝 yum 擴充套件包:

$ sudo yum install yum-utils

4)、啟用 remi 倉庫:

$ sudo yum-config-manager --enable remi-php72

$ sudo yum update

5)、安裝 PHP 服務

$ sudo yum install php72

輸入 php72 -v 檢視安裝結果

6)、安裝 php-fpm 和一些其他擴充套件模組:

$ sudo yum install php72-php-fpm php72-php-gd php72-php-json php72-php-mbstring php72-php-mysqlnd php72-php-xml php72-php-xmlrpc php72-php-opcache

可以通過PHP -m 檢視已安裝模組

7)、設定開機自啟

$ sudo systemctl enable php72-php-fpm.service

8)、常用 php-fpm 命令

# 開啟服務 $ sudo systemctl start php72-php-fpm.service

# 停止服務 $ sudo systemctl stop php72-php-fpm.service

# 檢視狀態 $ sudo systemctl status php72-php-fpm.service

二、原始碼安裝PHP:

安裝前準備:

1)、安裝php所需要的依賴,如已經安裝可跳過:

    yum install gcc
    yum install libxml2
    yum install libxml2-devel -y
    yum install openssl openssl-devel -y
    yum -y install curl-devel 
    yum install libjpeg.x86_64 libpng.x86_64 freetype.x86_64 libjpeg-devel.x86_64 libpng-devel.x86_64 freetype-devel.x86_64 -y
    yum install bzip2-devel.x86_64 -y
    yum install libXpm-devel -y
    yum install gmp-devel -y
    yum install -y icu libicu libicu-devel
    yum  install  php-mcrypt  libmcrypt  libmcrypt-devel -y
    yum install  postgresql-devel -y
    yum install libxslt-devel -y
    yum -y install libjpeg-devel

1、選擇需要的php版本並下載php原始碼,這裡我下載最新穩定版本7.3.2:

wget http://cn2.php.net/get/php-7.3.2.tar.gz/from/this/mirror -O php-7.3.2.tar.gz  #下載並重名為php-7.3.2.tar.gz

2、解壓並進入解壓目錄:

tar -xzxvf php-7.3.2.tar.gz
cd php-7.3.2


3、設定編譯需要載入的模組:


./configure --prefix=/usr/local/php --with-pdo-pgsql --with-zlib-dir --with-freetype-dir --enable-mbstring --with-libxml-dir=/usr --enable-soap --enable-calendar --with-curl --with-mcrypt --with-gd --with-pgsql --disable-rpath --enable-inline-optimization --with-bz2 --with-zlib --enable-sockets --enable-sysvsem --enable-sysvshm --enable-pcntl --enable-mbregex --enable-exif --enable-bcmath --with-mhash --enable-zip --with-pcre-regex --with-pdo-mysql --with-mysqli --with-jpeg-dir=/usr --with-png-dir=/usr --enable-gd-native-ttf --with-openssl --with-fpm-user=www-data --with-fpm-group=www-data --with-libdir=/lib/x86_64-linux-gnu/--enable-ftp --with-gettext --with-xmlrpc --with-xsl --enable-opcache --enable-fpm --with-iconv --with-xpm-dir=/usr

4、編譯並安裝:
make clean && make && make install
5. 複製配置檔案及相應配置:
cp php.ini-development /usr/local/php/lib/php.ini

vim /etc/profile #環境變數配置

PATH=$PATH:/usr/local/php/bin

export PATH

 source /etc/profile
此時php就是全域性命令了,可以通過php -v 檢視php版本資訊或者php -m 看看剛剛編譯載入的模組了

配置PHP-fpm

cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf
 
cp /usr/local/php/etc/php-fpm.d/www.conf.default /usr/local/php/etc/php-fpm.d/www.conf
 
cp /usr/src/php-7.3.2/sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
 
chmod +x /etc/init.d/php-fpm

啟動php-fpm
/etc/init.d/php-fpm start

 (可選)配置php-fpm自啟動,如果存在這個檔案,這步省略
建立php-fpm啟動指令碼

vim /etc/init.d/php-fpm

#!/bin/sh  
# chkconfig:   2345 15 95

# description:  PHP-FPM (FastCGI Process Manager) is an alternative PHP FastCGI implementation \

# with some additional features useful for sites of any size, especially busier sites.
# DateTime: 2016-09-20

# Source function library.  
. /etc/rc.d/init.d/functions  

# Source networking configuration.  
. /etc/sysconfig/network  

# Check that networking is up.  
[ "$NETWORKING" = "no" ] && exit 0  

phpfpm="/usr/local/php/sbin/php-fpm"  
prog=$(basename ${phpfpm})  

lockfile=/var/lock/subsys/phpfpm

start() {  
    [ -x ${phpfpm} ] || exit 5  
    echo -n $"Starting $prog: "  
    daemon ${phpfpm}
    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  
    start  
}  

reload() {  
    configtest || return $?  
    echo -n $"Reloading $prog: "  
    killproc ${phpfpm} -HUP  
    RETVAL=$?  
    echo  
}  

force_reload() {  
    restart  
}  

configtest() {  
  ${phpfpm} -t
}  

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  
        ;;  
    status)  
        rh_status  
        ;;  
    *)  
        echo $"Usage: $0 {start|stop|status|restart|reload|configtest}"  
        exit 2  
esac    
新增到開機啟動項
chkconfig --add php-fpm
此時也可以使用service來啟動php-fpm:
開始/停止命令:service php-fpm start / service php-fpm stop

yum安裝mysql5.7

1)、獲取mysql YUM源
進入mysql官網獲取RPM包下載地址
https://dev.mysql.com/downloads/repo/yum/

右擊 複製連結地址 https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm
得到這個這個就是Yum倉庫的rpm包 其實就是一個下載地址

2)、下載和安裝mysql源

先下載 mysql源安裝包

wget https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm

3)、安裝mysql源

rpm -ivh mysql57-community-release-el7-11.noarch.rpm

4)、線上yum安裝Mysql

yum -y install mysql-community-server

5)、啟動Mysql服務

systemctl start mysqld

(service mysqld start 也行)

6)、設定開機啟動

systemctl enable mysqld
systemctl daemon-reload

7)、修改root本地登入密碼

方法一:mysql安裝完成之後,在/var/log/mysqld.log檔案中給root生成了一個臨時的預設密碼。

[root@localhost ~]# vi /var/log/mysqld.log

這裡的臨時密碼 eMV.R#mWe3ha

[root@localhost ~]# mysql -u root -p

Enter password:

輸入臨時密碼 進入mysql命令列;

mysql> SET PASSWORD = PASSWORD(’ xxx’);

Query OK, 0 rows affected (0.00 sec)

修改密碼為xxx (備註 mysql5.7預設密碼策略要求密碼必須是大小寫字母數字特殊字母的組合,至少8位)

方法二:使用免密碼登入:

1)、mysql配置檔案修改為免密碼登入。
# vim /etc/my.cnf
skip-grant-tables #新增這句話,這時候登入mysql就不需要密碼

修改後儲存,重啟mysqld服務:

service mysqld restart 

2、以root身份登入mysql, 輸入密碼的時候直接回車 

mysql -uroot -p #輸入命令回車進入,出現輸入密碼提示直接回車。

mysql> set password for root@localhost= password('12345678');#或 update user set authentication_string=PASSWORD("12345678") where user="root";

mysql> flush privileges;

# service mysqld stop # 停止mysql服務, 恢復mysql配置
# vi /etc/my.cnf
# Disabling symbolic-links is recommended to prevent assorted security risks
# skip-grant-tables # 註釋掉這句話
# service mysqld start # 啟動mysql服務
# mysql -uroot -p # 輸入新密碼登入

8)、設定允許遠端登入(可選)

Mysql預設不允許遠端登入,我們需要設定下,並且防火牆開放3306埠;

mysql> use mysql;
mysql> grant all privileges  on *.* to root@'%' IDENTIFIED by "你的密碼"; #或者改表法:update user set host = '%' where user = 'root';
mysql> flush privileges;
mysql> exit; 

開放3306埠
firewall-cmd --zone=public --add-port=3306/tcp --permanent
(如果防火牆未開啟需要先開啟防火牆:systemctl start firewalld)
重啟防火牆
firewall-cmd --reload
9)、配置預設編碼為utf8(可選)

修改/etc/my.cnf配置檔案,在[mysqld]下新增編碼配置,如下所示:

[mysqld]
character_set_server=utf8
init_connect=‘SET NAMES utf8’
vi /etc/my.cnf

編輯儲存完 重啟mysql服務;
systemctl restart mysqld

10)、MySQL常見錯誤處理

若提示:ERROR 1290 (HY000): The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement       先執行一下flush privileges 在新增使用者

若提示:You must reset your password using ALTER USER statement before executing this statement.

MySQL版本5.7.6版本以前使用者可以使用如下命令:

mysql> SET PASSWORD = PASSWORD('IT520123456'); 
MySQL版本5.7.6版本開始的使用者可以使用如下命令:

mysql> ALTER USER USER() IDENTIFIED BY 'IT520123456';

若出現,Your password does not satisfy the current policy requirements 錯誤提示,說明密碼策略過高導致;把密碼策略改低即可,命令如下:

mysql> set global validate_password_policy=0 

mysql > flush privileges

原因分析:

MySQL版本5.6.6版本起,新增了password_expired功能,它允許設定使用者的過期時間。這個特性已經新增到mysql.user資料表,但是它的預設值是”N”,可以使用ALTER USER語句來修改這個值。

輸入以下命令,將賬號密碼強制到期:

mysql> ALTER USER 'root'@'localhost' PASSWORD EXPIRE;
此時,使用者可以登入到MYSQL伺服器,但是在使用者為設定新密碼之前,不能執行任何命令,就會得到上圖的報錯,修改密碼即可正常執行賬戶許可權內的所有命令。由於此版本密碼過期天數無法通過命令來實現,所以DBA可以通過cron定時器任務來設定MySQL使用者的密碼過期時間。

MySQL 5.7.4版開始,使用者的密碼過期時間這個特性得以改進,可以通過一個全域性變數default_password_lifetime來設定密碼過期的策略,此全域性變數可以設定一個全域性的自動密碼過期策略。可以在MySQL的my.cnf配置檔案中設定一個預設值,這會使得所有MySQL使用者的密碼過期時間都為120天,MySQL會從啟動時開始計算時間。my.cnf配置如下:

[mysqld]
default_password_lifetime=120
如果要設定密碼永不過期,my.cnf配置如下:

[mysqld]
default_password_lifetime=0
如果要為每個具體的使用者賬戶設定單獨的特定值,可以使用以下命令完成(注意:此命令會覆蓋全域性策略),單位是“天”,命令如下:

ALTER USER ‘root’@‘localhost' PASSWORD EXPIRE INTERVAL 250 DAY;
如果讓使用者恢復預設策略,命令如下:

ALTER USER 'root'@'localhost' PASSWORD EXPIRE DEFAULT;
個別使用者為了後期麻煩,會將密碼過期功能禁用,命令如下:

ALTER USER 'root'@'localhost' PASSWORD EXPIRE NEVER;

如想進一步學習請參考官網:https://dev.mysql.com/doc/refman/5.7/en/password-management.html

相關文章