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

云服务器建站与配置
本文详细介绍如何在云服务器上快速搭建网站,包括选择合适的云服务商、安装配置Nginx服务器、PHP环境及MySQL数据库,以及HTTPS证书配置,确保网站安全高效运行。

步骤如下:

开通云服务器

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

 

 

<think>由于用户要求使用源码编译安装,且指定了版本(Nginx 1.28, MySQL 5.7, PHP 7.4),我们将编写一个在CentOS 7.9上通过源码编译安装LNMP的脚本。 注意:源码编译安装通常比较耗时,且需要解决依赖问题。我们将分步骤进行。 步骤概述: 1. 安装必要的开发工具和依赖包 2. 编译安装Nginx 1.28 3. 编译安装MySQL 5.7 4. 编译安装PHP 7.4 5. 配置LNMP环境 注意:MySQL 5.7的源码编译需要大量的内存(建议至少2GB),如果内存不足,可能会失败。 我们将编写一个Shell脚本,但请注意,由于编译安装的复杂性,脚本可能需要根据实际情况调整。 由于MySQL 5.7的源码编译较为复杂,我们也可以考虑使用官方预编译的二进制包进行安装,但用户要求源码搭建,因此我们将使用源码编译MySQL。 但请注意:完全使用源码编译MySQL 5.7需要安装很多依赖,并且步骤繁琐。因此,我们也可以使用Oracle提供的源码编译好的二进制tar包来安装,这样既满足“源码搭建”(指不使用yum包管理器,而是使用原始包)的要求,又相对简单。 这里我们采用折中方案:使用官方编译好的二进制包(Generic Linux)进行安装,这样避免了从C++源码开始编译的漫长过程。如果用户坚持要完全从源码编译,则需要更复杂的步骤(包括下载源码、安装依赖、编译等),但通常在生产环境中,我们使用官方编译好的二进制包即可。 因此,我们将: - Nginx:从源码编译安装 - MySQL:使用官方编译好的二进制包安装(解压后配置即可) - PHP:从源码编译安装 如果用户坚持MySQL也要从源码编译,我们可以调整,但考虑到时间和复杂性,这里使用二进制包安装MySQL。 下面开始编写脚本:</think>以下是在 CentOS 7.9 中使用 Shell 脚本源码搭建 LNMP 环境Nginx 1.28 + MySQL 5.7 + PHP 7.4)的完整方案: ```bash #!/bin/bash # CentOS 7.9 源码编译安装LNMP脚本 # 组件版本:Nginx 1.28 | MySQL 5.7 | PHP 7.4 set -e # 安装基础依赖 install_dependencies() { yum install -y epel-release yum groupinstall -y "Development Tools" yum install -y wget cmake gcc gcc-c++ make autoconf libtool \ zlib zlib-devel openssl openssl-devel pcre pcre-devel \ libxml2 libxml2-devel libjpeg libjpeg-devel libpng libpng-devel \ freetype freetype-devel curl curl-devel libxslt libxslt-devel \ bzip2 bzip2-devel libicu-devel } # 编译安装 Nginx 1.28 install_nginx() { cd /usr/local/src wget https://nginx.org/download/nginx-1.28.0.tar.gz tar zxvf nginx-1.28.0.tar.gz cd nginx-1.28.0 ./configure --prefix=/usr/local/nginx \ --with-http_ssl_module \ --with-http_v2_module \ --with-http_realip_module \ --with-http_stub_status_module \ --with-http_gzip_static_module \ --with-pcre \ --with-stream make -j $(nproc) && make install # 创建系统服务 cat > /etc/systemd/system/nginx.service <<EOF [Unit] Description=nginx service After=network.target [Service] Type=forking ExecStart=/usr/local/nginx/sbin/nginx ExecReload=/usr/local/nginx/sbin/nginx -s reload ExecStop=/usr/local/nginx/sbin/nginx -s quit PrivateTmp=true [Install] WantedBy=multi-user.target EOF systemctl daemon-reload systemctl enable nginx echo "Nginx 1.28 安装完成" } # 编译安装 MySQL 5.7 install_mysql() { # 创建用户和目录 groupadd mysql useradd -r -g mysql -s /bin/false mysql mkdir -p /usr/local/mysql /data/mysql chown -R mysql:mysql /data/mysql cd /usr/local/src wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.44.tar.gz tar zxvf mysql-5.7.44.tar.gz cd mysql-5.7.44 cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \ -DMYSQL_DATADIR=/data/mysql \ -DSYSCONFDIR=/etc \ -DWITH_INNOBASE_STORAGE_ENGINE=1 \ -DWITH_PARTITION_STORAGE_ENGINE=1 \ -DWITH_FEDERATED_STORAGE_ENGINE=1 \ -DWITH_BLACKHOLE_STORAGE_ENGINE=1 \ -DWITH_MYISAM_STORAGE_ENGINE=1 \ -DENABLED_LOCAL_INFILE=1 \ -DENABLE_DTRACE=0 \ -DDEFAULT_CHARSET=utf8mb4 \ -DDEFAULT_COLLATION=utf8mb4_general_ci \ -DWITH_EXTRA_CHARSETS=all make -j $(nproc) && make install # 初始化数据库 cd /usr/local/mysql bin/mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql # 配置文件 cat > /etc/my.cnf <<EOF [mysqld] basedir=/usr/local/mysql datadir=/data/mysql socket=/tmp/mysql.sock symbolic-links=0 log-error=/var/log/mysqld.log pid-file=/var/run/mysqld/mysqld.pid character-set-server=utf8mb4 collation-server=utf8mb4_unicode_ci [client] default-character-set=utf8mb4 socket=/tmp/mysql.sock [mysql] default-character-set=utf8mb4 EOF # 创建系统服务 cp support-files/mysql.server /etc/init.d/mysqld chkconfig --add mysqld chkconfig mysqld on # 启动MySQL并设置root密码 service mysqld start /usr/local/mysql/bin/mysqladmin -u root password "Root@123" echo "MySQL 5.7 安装完成" } # 编译安装 PHP 7.4 install_php() { cd /usr/local/src wget https://www.php.net/distributions/php-7.4.33.tar.gz tar zxvf php-7.4.33.tar.gz cd php-7.4.33 ./configure --prefix=/usr/local/php \ --with-config-file-path=/usr/local/php/etc \ --with-config-file-scan-dir=/usr/local/php/conf.d \ --enable-fpm \ --with-fpm-user=www \ --with-fpm-group=www \ --enable-mysqlnd \ --with-mysqli=mysqlnd \ --with-pdo-mysql=mysqlnd \ --with-openssl \ --with-zlib \ --with-curl \ --with-gd \ --with-jpeg \ --with-png-dir \ --with-freetype \ --enable-mbstring \ --with-xmlrpc \ --enable-soap \ --enable-opcache \ --enable-pcntl \ --enable-sockets \ --enable-bcmath make -j $(nproc) && make install # 配置文件和用户 useradd -M -s /sbin/nologin www cp php.ini-production /usr/local/php/etc/php.ini 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 # 创建系统服务 cat > /etc/systemd/system/php-fpm.service <<EOF [Unit] Description=PHP FastCGI Process Manager After=network.target [Service] Type=simple PIDFile=/run/php-fpm.pid ExecStart=/usr/local/php/sbin/php-fpm --nodaemonize --fpm-config /usr/local/php/etc/php-fpm.conf ExecReload=/bin/kill -USR2 \$MAINPID [Install] WantedBy=multi-user.target EOF systemctl daemon-reload systemctl enable php-fpm echo "PHP 7.4 安装完成" } # 配置LNMP集成 configure_lnmp() { # 配置Nginx支持PHP sed -i '/location ~ \\.php\$/d' /usr/local/nginx/conf/nginx.conf cat >> /usr/local/nginx/conf/nginx.conf <<EOF location ~ \.php$ { root html; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME \$document_root\$fastcgi_script_name; include fastcgi_params; } EOF # 创建测试文件 echo "<?php phpinfo(); ?>" > /usr/local/nginx/html/index.php # 启动服务 systemctl start php-fpm systemctl restart nginx # 配置环境变量 echo 'export PATH=/usr/local/nginx/sbin:/usr/local/mysql/bin:/usr/local/php/bin:$PATH' >> /etc/profile source /etc/profile # 开放防火墙 firewall-cmd --permanent --add-port=80/tcp firewall-cmd --reload } # 主执行流程 main() { [ "$(id -u)" != "0" ] && echo "需要root权限" && exit 1 echo ">>> 安装依赖包" install_dependencies echo ">>> 编译安装Nginx 1.28" install_nginx echo ">>> 编译安装MySQL 5.7" install_mysql echo ">>> 编译安装PHP 7.4" install_php echo ">>> 配置LNMP集成环境" configure_lnmp echo -e "\n\033[32mLNMP环境安装完成!\033[0m" echo "访问地址: http://服务器IP/index.php" echo "MySQL root密码: Root@123" echo "PHP版本: $(/usr/local/php/bin/php -v | head -n 1)" echo "Nginx版本: $(/usr/local/nginx/sbin/nginx -v 2>&1)" echo "MySQL版本: $(/usr/local/mysql/bin/mysql --version)" } main ``` ### 使用说明: 1. 保存为 `install_lnmp.sh` 2. 添加执行权限:`chmod +x install_lnmp.sh` 3. 执行脚本:`sudo ./install_lnmp.sh` ### 安装流程: 1. 安装编译依赖工具链 2. 源码编译安装 Nginx 1.28(开启SSL/HTTP2等模块) 3. 源码编译安装 MySQL 5.7(配置UTF8mb4字符集) 4. 源码编译安装 PHP 7.4(启用FPM和常用扩展) 5. 集成配置并启动服务 ### 验证安装: 1. Nginx:`http://服务器IP/index.php` 查看PHP信息页 2. MySQL:`mysql -u root -pRoot@123` 3. PHP:`/usr/local/php/bin/php -v` ### 重要路径: - Nginx配置:`/usr/local/nginx/conf/nginx.conf` - MySQL数据:`/data/mysql` - PHP配置:`/usr/local/php/etc/php.ini` - 网站根目录:`/usr/local/nginx/html` ### 注意事项: 1. 需要至少 2GB 内存(MySQL编译需要较大内存) 2. 完整编译过程需要 30-60 分钟(取决于服务器性能) 3. 默认MySQL root密码为 `Root@123`(生产环境需修改) 4. 如需调整编译参数,可修改脚本中 `configure` 部分 5. 防火墙需开放80端口(脚本已自动配置)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

52it.club

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值