CentOS7源码安装Lnmp

玩转Linux:常用命令实例指南

文章目录

        • 1.概述Lnmp
        • 2.下载Nginx+Mysql+php源包
        • 3.下载epel扩展库(额外附加的存储库)的repo
        • 4.安装处理编译文件包
        • 5.源码编译nginx1.18
        • 6.配置nginx支持php
        • 7.源码编译mysql5.7
        • 8.设置mysql
        • 9.修改mysql的数据库root密码
        • 10.源码编译php7.3
        • 11.设置php7.3
        • 12.测试配置是否成功
        • 13.解析index.php

1.概述Lnmp

名称 架构信息
Lnmp Linux(CentOS7)+Nginx(1.18)+Mysql(5.7.30)+php(7.3.18)

2.下载Nginx+Mysql+php源包

#下载mysql时,要注意选择是源包下载
CentOS7源码安装Lnmp_第1张图片

#安装下载工具
yum install wget -y

#下载nginx
wget http://nginx.org/download/nginx-1.18.0.tar.gz

#下载mysql
wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.30.tar.gz

#下载php
wget https://www.php.net/distributions/php-7.3.18.tar.gz

下载源包比较慢,建议用迅雷下载

3.下载epel扩展库(额外附加的存储库)的repo

#下载epel
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo

#清除repo链接,才可以自动加载epel的库
yum clean all

4.安装处理编译文件包

#处理编译源文件包
yum install gcc gcc-c++ make cmake  -y

5.源码编译nginx1.18


#安装nginx的依赖包
yum install zlib-devel openssl-devel pcre-devel -y

#解压Nginx源包
tar -zxvf /root/nginx-1.18.0.tar.gz

#创建nginx用户
useradd -s /sbin/nologin -c "Web Nginx" -M  nginx
参数说明:
-s 新帐户的登录shell,/sbin/nologin表示禁止用户登录shell
-c 注释说明
-M 不创建家目录

#查看解压的目录
ls /root/nginx-1.18.0
auto  CHANGES  CHANGES.ru  conf  configure  contrib  html  LICENSE  man  README  src

#切换到上一次历史纪录的路径
cd !$

#查看当前目录
pwd
/root/nginx-1.18.0

#检查编译环境
./configure --prefix=/usr/local/nginx   --user=nginx --group=nginx  --with-http_ssl_module --with-http_realip_module  --with-http_gzip_static_module  --with-pcre   --with-http_stub_status_module --with-http_dav_module --with-http_addition_module --with-http_sub_module --with-http_flv_module --with-http_mp4_module
模块名称 模块说明
--with-cpp_test_module 测试头文件的C ++兼容性
--with-debug 启用调试日志
``–``with-google_perftools_module 允许使用Google Performance工具库
--with-http_addition_module 在响应之前和之后添加文本
--with-http_auth_request_module 根据子请求的结果实现客户端授权
-- with-http_dav_module 使用WebDAV协议启用文件管理自动化
--with-http_degradation_module 当内存大小超过定义的值时,允许返回错误
--with-http_flv_module 为Flash Video(FLV)文件提供伪流服务器端支持
--with-http_geoip_module 启用创建其值取决于客户端IP地址的变量。该模块使用MaxMind GeoIP数据库。要改为作为单独的动态模块进行编译,请将选项更改为–with-http_geoip_module = dynamic
--with-http_gunzip_module 对于不支持_zip_编码方法的客户端,使用Content-Encoding:gzip解压缩响应
--with-http_gzip_static_module 允许发送扩展名为.gz的预压缩文件,而不是常规文件
--with-http_image_filter_module 转换JPEG,GIF和PNG格式的图像。该模块需要LibGD库。要编译为单独的动态模块,请将选项更改为–with-http_image_filter_module=dynamic
--with-http_mp4_module 为MP4文件提供伪流服务器端支持
--with-http_perl_module 用于在Perl中实现位置和变量处理程序,并将Perl调用插入SSI。需要PERL库。要编译为单独的动态模块,请将选项更改为–with-http_perl_module=dynamic
--with-http_random_index_module 处理以斜杠字符(’/’)结尾的请求,并在目录中选择一个随机文件作为索引文件
--with-http_realip_module 将客户端地址更改为在指定的标头字段中发送的地址
--with-http_secure_link_module 用于检查请求的链接的真实性,保护资源免受未经授权的访问,并限制链接的生存时间
-- with-http_slice_module 允许将请求分为多个子请求,每个子请求返回一定范围的响应。提供对大文件的更有效的缓存
--with-http_ssl_module 启用HTTPS支持。需要SSL库,例如OpenSSL
--with-http_stub_status_module 提供对基本状态信息的访问。请注意,NGINX Plus客户不需要此模块,因为它们已经提供了扩展状态指标和交互式仪表板
--with-http_sub_module 通过将一个指定的字符串替换为另一个指定的字符串来修改响应
--with-http_xslt_module 使用一个或多个XSLT样式表转换XML响应。该模块需要Libxml2和XSLT库。要编译为单独的动态模块,请将选项更改为–with-http_xslt_module=dynamic
--with-http_v2_module 启用对HTTP / 2的支持。有关详细信息,请参见NGINX博客上NGINX中的HTTP / 2模块
--with-mail 启用邮件代理功能。要编译为单独的动态模块,请将选项更改为–with-mail=dynamic
--with-mail_ssl_module 提供对邮件代理服务器使用SSL / TLS协议的支持。需要SSL库,例如OpenSSL
--with-stream 启用TCP和UDP代理功能。要编译为单独的动态模块,请将选项更改为–with-stream=dynamic
--with-stream_ssl_module 提供对流代理服务器使用SSL / TLS协议的支持。需要SSL库,例如OpenSSL
--with-threads 使NGINX可以使用线程池。有关详细信息,请参见NGINX Boost Performance 9x中的线程池!在NGINX博客上

参考官方Nginx文档:请点击这里

#编译nginx
make

#安装nginx
make install

#查看安装后的文件
ll /usr/local/nginx/
total 16
drwxr-xr-x. 2 root root 4096 Jun 11 15:24 conf
drwxr-xr-x. 2 root root 4096 Jun 11 15:24 html
drwxr-xr-x. 2 root root 4096 Jun 11 15:24 logs
drwxr-xr-x. 2 root root 4096 Jun 11 15:24 sbin

#赋予所属用户和所属用户组
chown -R nginx:nginx /usr/local/nginx/

6.配置nginx支持php

#复制备份nginx.conf配置
cp /usr/local/nginx/conf/nginx.conf{,.bak}

#编辑nginx配置文件
vi /usr/local/nginx/conf/nginx.conf
user  nginx;		#设置用户
......
location ~ \.php$ {			
            root           html;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  /usr/local/nginx/html$fastcgi_script_name;			#File not found.php模块引导设置这里  
            include        fastcgi_params;
        }
......

#检查配置文件的是否有错误
nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
#查看Nginx配置
grep -vE '#|^$' /usr/local/nginx/conf/nginx.conf
user  nginx;
worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    server {
        listen       80;
        server_name  localhost;
        location / {
            root   html;
            index  index.html index.htm;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
        location ~ \.php$ {
            root           html;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  /usr/local/nginx/html$fastcgi_script_name;
            include        fastcgi_params;
        }
    }
}
grep的参数说明:
-v Not操作,取反的参数
-E And操作,可以同时使用多个正则表达式的参数
-e Or操作,可以-e一个参数使用,例如:grep -ve '#' -e '^$' /usr/local/nginx/conf/nginx.conf同上面的查看是一致的

-v '#' 就是不要查看带有#号的字符
-v '^$' 就是不要查看带有空白符
#编辑nginx.sh文件,设置nginx环境变量
vi /etc/profile.d/nginx.sh
export PATH=/usr/local/nginx/sbin:$PATH
环境变量说明:
/etc/profile		#全局的环境变量,所有用户都加载
/etc/profile.d/		#全局的环境变量,因为在/etc/profile中使用一个for循环语句来调用这些脚本,这个方便管理
~ .bash_profile		#局部的环境变量,只有当前用户加载
~ .bashrc			#这个也是局部的环境变量,只有当前用户加载

#生成环境变量
source /etc/profile.d/nginx.sh

#启动nginx
nginx 

#查看nginx版本
nginx -v
nginx version: nginx/1.18.0

#查看nginx加载的模块
nginx -V
nginx version: nginx/1.18.0
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-39) (GCC) 
built with OpenSSL 1.0.2k-fips  26 Jan 2017
TLS SNI support enabled
configure arguments: --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_ssl_module --with-http_realip_module --with-http_gzip_static_module --with-pcre --with-http_stub_status_module --with-http_dav_module --with-http_addition_module --with-http_sub_module --with-http_flv_module --with-http_mp4_module
#设置nginx开机自动启动
echo '/usr/local/nginx/sbin/nginx' >> /etc/rc.d/rc.local

#赋予权限
chmod +x /etc/rc.d/rc.local

7.源码编译mysql5.7

参考Mysql官方文档,请点击以下链接:
请点击这里

#装了mariadb数据库的先要卸载
yum  remove  mariadb* -y

#安装mysql的依赖包
yum  install bison ncurses-devel -y

#创建一个mysql组
groupadd mysql

#创建一个mysql用户
useradd -s /sbin/nologin -c "mysql data" -r -M -g mysql mysql
参数说明:
-s 新帐户的登录shell,/sbin/nologin表示禁止用户登录shell
-c 注释说明
-M 不创建家目录
--system 或 -r 创建一个系统帐户
-g 新建主组的名称

CentOS7源码安装Lnmp_第2张图片

#下载Boost
wget https://nchc.dl.sourceforge.net/project/boost/boost/1.59.0/boost_1_59_0.tar.gz

#解压Boost
tar -zxvf boost_1_59_0.tar.gz -C /usr/local/
#创建mysql的存放数据的目录和安装目录
mkdir -p /var/lib/mysql/data

#赋予mysql所属用户和所属用户组权限
chown -R mysql:mysql /var/lib/mysql/
#解压mysql源码包
tar -zxvf  /root/mysql-5.7.30-el7-x86_64.tar.gz

#切换到mysql目录
cd  /root/mysql-5.7.30/

#检查mysql编译环境变量
cmake -DCMAKE_INSTALL_PREFIX=/var/lib/mysql \
-DMYSQL_DATADIR=/var/lib/mysql/data \
-DSYSCONFDIR=/etc \
-DWITH_MYISAM_STORAGE_ENGINE=1 \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_MEMORY_STORAGE_ENGINE=1 \
-DWITH_READLINE=1 \
-DMYSQL_UNIX_ADDR=/var/lib/mysql/mysql.sock \
-DMYSQL_TCP_PORT=3306 \
-DENABLED_LOCAL_INFILE=1 \
-DWITH_PARTITION_STORAGE_ENGINE=1 \
-DEXTRA_CHARSETS=all \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DDOWNLOAD_BOOST=1 \
-DWITH_BOOST=/usr/local/boost_1_59_0

#编译mysql
make

#安装mysql
make install

#赋予mysql所属用户和所属用户组权限
chown -R mysql:mysql /var/lib/mysql/
参数名称 参数说明
-DCMAKE_INSTALL_PREFIX 指定MySQL程序的安装目录,默认MySQL使用为/usr/local/mysql
-DMYSQL_DATADIR 指定MySQL 程序的数据存放目录
-DSYSCONFDIR 指定默认my.cnf选项文件目录
-DWITH_XXX_STORAGE_ENGINE 静态编译到 mysql的存储引擎,InnoDB, MyISAM, MERGE, MEMORY以及 CSV 四种引擎默认即被编译至服务器,不需要特别指定
-DWITH_READLINE 使用readline功能
-DMYSQL_UNIX_ADDR 指定unix套接字目录,默认MySQL使用为 /tmp/mysql.sock
-DMYSQL_TCP_PORT 服务端口号,默认端口3306
-DENABLED_LOCAL_INFILE ENABLED_LOCAL_INFILE控制客户端LOCAL功能的默认设置,对于服务器,local_infile系统变量控制服务器端LOCAL功能,默认值为OFF
-DEXTRA_CHARSETS 额外的编码,请使用ALL来编译
-DDEFAULT_CHARSET 默认字符集,默认MySQL使用 latin1(cp1252西欧)字符集
-DDEFAULT_COLLATION 服务器排序规则,默认MySQL使用 latin1_swedish_ci,使用该" show collation "语句确定每个字符集可以使用哪些排序规则
-DDOWNLOAD_BOOST 是否下载Boost库,默认值为OFF
-DWITH_BOOST 指定Boost库目录位置

更详细的参数信息参考mysql官方文档,请点击以下链接:
请点击这里

8.设置mysql

#编辑mysql参数配置
vi /etc/my.cnf
[mysqld]
user=mysql
basedir=/var/lib/mysql
datadir=/var/lib/mysql/data
socket=/var/lib/mysql/mysql.sock
port=3306
character-set-server=utf8
log-error=/var/log/mysqld.log
pid-file=file=/tmp/mysqld.pid

[mysql]
socket=/var/lib/mysql/mysql.sock

[client]
socket=/var/lib/mysql/mysql.sock
#设置mysql的环境变量
vi /etc/profile.d/mysql.sh
export PATH=/var/lib/mysql/bin:$PATH

#生效mysql的环境变量
source /etc/profile.d/mysql.sh

#复制启动脚本
cp /var/lib/mysql/support-files/mysql.server /etc/init.d/mysqld

#赋予权限
chmod +x /etc/init.d/mysqld 
#设置开机mysql自动启动
echo '/var/lib/mysql/bin/mysqld &' >> /etc/rc.d/rc.local

#赋予权限
chmod +x /etc/rc.d/rc.local
#初始化数据
mysqld --user=mysql --initialize-insecure --basedir=/var/lib/mysql  --datadir=/var/lib/mysql/data

#赋予mysql所属用户和所属用户组权限
chown -R mysql:mysql /var/log/mysqld.log
#用/var/lib/mysql/bin/mysqld的二进制文件启动mysql
mysqld &
#查看mysql状态
/etc/init.d/mysqld status

注意:如果需要重新初始化数据

#停掉mysql
/etc/init.d/mysqld stop

#删除初始化数据的所有文件
rm  -rf /var/lib/mysql/data/*

#重新初始化数据
mysqld --user=mysql --initialize-insecure --basedir=/var/lib/mysql  --datadir=/var/lib/mysql/data

9.修改mysql的数据库root密码

#登录mysql数据库
mysql
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> 

#修改root数据库密码
mysql> set password for root@localhost=password('123456');
Query OK, 0 rows affected, 1 warning (0.00 sec)

#刷新权限
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

#退出数据库
mysql> exit
Bye

#测试密码是否修改成功
mysql -u root -p123456
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

10.源码编译php7.3

#卸载之前安装的php
yum remove php* -y

#安装php依赖包
yum  install libmcrypt-devel  libxml2-devel  curl-devel  libjpeg-devel  libpng-devel freetype-devel  -y

#下载cmake
wget http://github.com/Kitware/CMake/releases/download/v3.18.0-rc1/cmake-3.18.0-rc1.tar.gz

#卸载之前安装的cmake
yum remove cmake -y

#解压cmake
tar -zxvf /root/cmake-3.18.0-rc1.tar.gz 

#切换到cmake目录下
cd /root/cmake-3.18.0-rc1

#检查cmake的编译环境变量
./configure --prefix=/usr/local/cmake

#编译cmake和安装cmake
make && make install

#设置cmake的环境变量
vi /etc/profile.d/cmake.sh
export PATH=/usr/local/cmake/bin:$PATH

#生成cmake的环境变量
source /etc/profile.d/cmake

#查看cmake版本信息
cmake --version
cmake version 3.18.0-rc1

CMake suite maintained and supported by Kitware (kitware.com/cmake).
#下载libzip
wget https://libzip.org/download/libzip-1.7.1.tar.gz

#卸载之前安装过的libzip
yum remove libzip -y

#解压libzip
tar -zxvf  /root/libzip-1.7.1.tar.gz

#切换到解压的libzip目录下
cd /root/libzip-1.7.1

#检查libzip环境变量
cmake 

#编译libzip和安装libzip
make && make install
#添加搜索路径到配置文件
echo '/usr/local/lib64
/usr/local/lib
/usr/lib
/usr/lib64'>>/etc/ld.so.confl

#更新配置
ldconfig -v
#解压php7.3源码
tar -zxvf /root/php-7.3.18.tar.gz

#切换到php目录下
cd /root/php-7.3.18

#检查php7.3的环境变量
./configure --prefix=/usr/local/php \
--with-config-file-path=/usr/local/php/ \
--with-mysqli=mysqlnd \
--with-pdo-mysql=mysqlnd \
--with-iconv-dir \
--with-freetype-dir \
--with-jpeg-dir \
--with-png-dir \
--with-zlib \
--with-libxml-dir=/usr \
--with-gd \
--with-curl \
--with-openssl \
--with-mhash \
--with-gettext \
--with-xmlrpc \
--without-pear \
--enable-fpm \
--enable-xml \
--enable-bcmath \
--enable-shmop \
--enable-sysvsem \
--enable-inline-optimization \
--enable-mbregex \
--enable-mbstring \
--enable-ftp \
--enable-pcntl \
--enable-sockets \
--enable-zip \
--enable-soap \
--enable-maintainer-zts \
--disable-fileinfo \
--disable-rpath 
#编译php7.3
make

#安装php7.3
make install
参数名称 参数说明
--prefix 指定安装的路径
--with-config-file-path 设置 php.ini 的搜索路径
--with-mysqli mysqli 扩展技术不仅可以调用 MySQL 的存储过程、处理MySQL 事务,而且还可以使访问数据库工作变得更加稳定,是一个数据库驱动
--with-pdo-mysql PDO提供了PHP应用程序层API接口,而mysqlnd,libmysql则负责与mysql server进行网络协议交互(它并不提供php应用程序层API功能)
--with-iconv-dir 支持iconv函数,这个函数的作用就是字符编码强制转换
--with-freetype-dir 打开对 freetype 字体库的支持
--with-jpeg-dir 打开对 jpeg 图片的支持
--with-png-dir 打开对 png 图片的支持
--with-zlib 打开 zlib 库的支持,实现 GZIP 压缩输出
--with-libxml-dir 打开 libxml2 库的支持 ,libxml 是一个用来解析 XML 文档的函数库
--with-gd 打开 gd 库的支持,是 php 处理图形的扩展库, GD 库提供 了
--with-curl 打开 curl 浏览工具的支持
--with-openssl 打开 ssl 支持
--with-mhash 支持 mhash 算法扩展
--with-gettext 打开gnu 的gettext 支持,编码库用到
--with-xmlrpc 打开 xml rpc 的 c 语言
--without-pear 禁用pear
--enable-fpm CGI 方式安装的启动程序,php-fpm 服务
--enable-xml 支持 xml 文档
--enable-bcmath 打开图片大小调整,用到 zabbix 监控的时候用到了这个模块
--enable-shmop shmop 共享内存操作函数,可以与 c/c++ 通讯
--enable-sysvsem 加上上面 shmop ,这样就使得你的 PHP 系统可以处理相关的 IPC 函数(活动在内核级别)
--enable-inline-optimization 优化线程
--enable-mbregex 支持多字节正则表达式
--enable-mbstring 多字节,字符串的支持
--enable-ftp 打开ftp的支持
--enable-pcntl freeTDS 需要用到的, pcntl 扩展可以支持 php 的多线程操
--enable-sockets 打开 sockets 支持
--enable-zip 打开对 zip 的支持
--enable-soap 扩展库通过 soap 协议实现了客户端与服务器端的数据交互操
--enable-maintainer-zts 启用线程安全
--disable-fileinfo 关闭掉它是因为,经编译安装的时候服务器内存必须要大于1G
--disable-rpath 关闭额外的运行库文件

11.设置php7.3

#复制php.ini到编译安装后的目录下
cp /root/php-7.3.18/php.ini-production /usr/local/php/php.ini

#复制php-fpm。conf的配置文件
cp  /usr/local/php/etc/php-fpm.d/www.conf.default  /usr/local/php/etc/php-fpm.conf

#配置用户和用户组为nginx
vi /usr/local/php/etc/php-fpm.conf
......
user = nginx
group = nginx
......
#设置php的环境变量
vi /etc/profile.d/php.sh
export PATH=/usr/local/php/bin:$PATH

#生效php的环境变量
source /etc/profile.d/php.sh

#查看php的版本
php -v
PHP 7.3.18 (cli) (built: Jun 15 2020 17:34:12) ( ZTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.3.18, Copyright (c) 1998-2018 Zend Technologies
#复制php-fpm的启动脚本
cp /root/php-7.3.18/sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm

#赋予执行的权限
chmod +x /etc/init.d/php-fpm

#设置开机自动启动php-fpm
chkconfig php-fpm on

#启动php-fpm
/etc/init.d/php-fpm start

12.测试配置是否成功

echo "" > /usr/local/nginx/html/index.php

#用浏览器,打开IP/index.php
CentOS7源码安装Lnmp_第3张图片

13.解析index.php

#配置nginx的nginx.conf
vi /usr/local/nginx/conf/nginx.conf
......
 location / {
            root   html;
            index index.php index.html index.htm;
        }
......

#重新加载nginx
nginx -s reload

#用浏览器,打开IP就行了
CentOS7源码安装Lnmp_第4张图片

你可能感兴趣的:(Nginx的学习,nginx,运维,服务器)