如何简单的在阿里云centos7.6 64位操作系统上手动搭建LNMP环境(Nginx1.14.2+PHP7.x+mysql5.7)

步骤如下:

开通云服务器

建站首先要有服务器和域名,对于个人使用的小型网站,一台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

HTTPS配置

Nginx/Tengine服务器安装SSL证书

以Nginx标准配置为例,假如证书文件名是a.pem,私钥文件是a.key。

  1. 在Nginx的安装目录下创建cert目录,并且将下载的全部文件拷贝到cert目录中。如果申请证书时是自己创建的CSR文件,请将对应的私钥文件放到cert目录下并且命名为a.key;

  2. 打开 Nginx 安装目录下 conf 目录中的 nginx.conf 文件,找到:
# HTTPS server
# #server {
# listen 443;
# server_name localhost;
# ssl on;
# ssl_certificate cert.pem;
# ssl_certificate_key cert.key;
# ssl_session_timeout 5m;
# ssl_protocols SSLv2 SSLv3 TLSv1;
# ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
# ssl_prefer_server_ciphers on;
# location / {
#
#
#}
#}

    3.将其修改为 (以下属性中ssl开头的属性与证书配置有直接关系,其它属性请结合自己的实际情况复制或调整) 80端口会自动转给443端口,这样就强制使用SSL证书加密了。访问http的时候会自动跳转到https上面。

server {
    listen 80;
    server_name www.52it.club 52it.club;
    return 301 https://$host$request_uri;  
    #或 rewrite ^(.*)$  https://www.52it.club$1 permanent;
}

server {
     listen 443;
     server_name www.52it.club 52it.club;
     root html;
     index index.html index.htm index.php;
     
     ssl on;
     ssl_certificate   cert/a.pem;
     ssl_certificate_key  cert/a.key;
     ssl_session_timeout 5m;
     ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
     ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
     ssl_prefer_server_ciphers on;
     
     location / {
        
     }
     
     location ~ \.php(.*)$ {
         fastcgi_pass   127.0.0.1:9000;
         fastcgi_index  index.php;
         fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
         fastcgi_param  PATH_INFO  $fastcgi_path_info;
         fastcgi_param  PATH_TRANSLATED  $document_root$fastcgi_path_info;
         include        fastcgi_params;
     }
}

猜你喜欢

转载自blog.csdn.net/xia296/article/details/88059946
今日推荐