搭建LNMP服务器

news2024/11/18 9:34:19

一、环境准备

Linux 采用 CentOS7
Nginx 采用 Nginx-1.24.0 安装目录/opt/nginx
Mysql 采用 Mysql-5.7.23 安装目录/opt/mysql
PHP   采用 PHP-7.3.5 安装目录/opt/php

用于测试环境,搭建在虚拟机上,只准备了一台虚拟机,所有服务都搭建在一台虚拟机上。正式环境至少准备两台。

二、搭建CentOS7 虚拟环境

1、配置YUM源

1.1 下载wget命令

yum -y install wget

1.2 备份老的YUM源文件

cd /etc/yum.repos.d/
mkdir bak
mv *.repo bak

1.3 下载阿里云官网CentOS YUM源文件

wget https://mirrors.aliyun.com/repo/Centos-7.repo

1.4 下载阿里云官网Epel YUM源文件

wget https://mirrors.aliyun.com/repo/epel-7.repo

1.5 生成新缓存

# 删除旧的缓存
yum clean all
# 生成新的缓存
yum makecache
# 查看当前使用列表
yum repolist

1.6 安装软件测试

yum -y install bash-completion
yum -y install net-tools
2、关闭Selinux
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
3、检查网络连接状况
ping www.baidu.com

三、搭建Nginx服务

1、下载Nginx需要用到的第三方依赖
yum -y install zlib zlib-devel openssl openssl-devel pcre pcre-devel httpd-tools make gcc gcc-c++

包含:
支持静态资源压缩的gzip lib库
支持URL重写的pcre库
支持HTTPS的openssl
perl开发的依赖库

2、下载Nginx二进制包
wget https://nginx.org/download/nginx-1.24.0.tar.gz
3、解压
tar -zxvf nginx-1.24.0.tar.gz
4、编译三部曲

4.1 创建工作目录

mkdir -p /opt/nginx

4.2 执行编译脚本

# 进入解压目录
cd 解压目录/nginx-1.24.0

# 执行编译脚本
./configure --prefix=/opt/nginx --with-http_ssl_module --with-http_flv_module --with-http_gzip_static_module --with-http_stub_status_module --with-threads --with-file-aio

4.3 编译

make

4.4 安装

make install
5、配置环境变量
ln -s /opt/nginx/sbin/nginx /usr/bin/nginx

# 创建Nginx工作用户
useradd -r -s /sbin/nologin nginx
6、修改Nginx配置文件
vi /opt/nginx/conf/nginx.conf

# 修改配置如下
# 工作用户为nginx
user  nginx;
worker_processes  2;

error_log  logs/error.log;

pid        logs/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    gzip  on;
    # gzip压缩等级,有1-9级,级别越高压缩率越高,但传输时间越久
    gzip_comp_level 4;
    # gzip支持压缩的文件类型
    gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/png image/jpg;
    # nginx支持的gzip版本,默认使用1.0
    gzip_http_version 1.1;
    # 引用extra目录下的配置文件

    include extra/*.conf;

}
7、配置虚拟站点配置文件
mkdir -p /opt/nginx/conf/extra

vi /opt/nginx/conf/extra/test.conf

# 配置如下
server {
    listen  80;
    server_name localhost;
    
    location / {
        root /opt/www/html;
        index index.html;
    }
}
8、编写启动脚本
vi /etc/systemd/system/nginx.service

[Unit]
Description=Nginx server by fortunate
Documentation=man:nginx(8)
After=network.target
After=syslog.target

[Install]
WantedBy=multi-user.target

[Service]
Type=forking
ExecStart=/opt/nginx/sbin/nginx
ExecReload=/opt/nginx/sbin/nginx -s reload
ExecStop=/opt/nginx/sbin/nginx -s stop
PrivateTmp=true
9、启动服务并设置开机自启动
systemctl enable nginx.service
systemctl start nginx.service
10、简单测试

10.1 创建站点目录

mkdir -p /opt/www/html

10.2 编写index.html

echo "welocome to Nginx" > /opt/www/html/index.html

浏览器输入虚拟机IP,查看是否如下

四、搭建MySQL服务

1、删除CentOS自带的mariadb数据库
rpm -qa | grep mariadb

rpm -e mariadb-libs --nodeps
2、下载MySQL二进制安装包
wget https://downloads.mysql.com/archives/get/p/23/file/mysql-5.7.23-el7-x86_64.tar
3、解压
# 解压缩后会有两个tar.gz包
tar -xvf mysql-5.7.23-el7-x86_64.tar

tar -zxvf mysql-5.7.23-el7-x86_64.tar.gz 
4、配置
# 创建工作目录
mv mysql-5.7.23-el7-x86_64/ /opt/mysql

# 创建mysql用户
useradd -r -s /sbin/nologin mysql

# 创建数据和日志存放目录
mkdir -p /opt/mysql/data
mkdir -p /opt/mysql/logs

# 修改权限
chown -R mysql: /opt/mysql/data
chown -R mysql: /opt/mysql/logs

# 创建mysql配置文件
vi /etc/my.cnf

# 服务端配置
[mysqld]
basedir=/opt/mysql/
datadir=/opt/mysql/data/
socket=/tmp/mysql.sock
server_id=1
port=3306
log_error=/opt/mysql/logs/mysql_error.log
character-set-server=utf8mb4  
collation-server=utf8mb4_unicode_ci

# 客户端配置
[mysql]
socket=/tmp/mysql.sock
5、编译MySQL
/opt/mysql/bin/mysqld --initialize-insecure --user=mysql --basedir=/opt/mysql/ --datadir=/opt/mysql/data/
6、配置环境变量
vi /etc/profile

# 最后添加一行配置
PATH="${PATH}:/opt/mysql/bin/"

# 加载配置
source /etc/profile
7、创建启动脚本
vi /etc/systemd/system/mysql.service

[Unit]
Description=MySQL server by fortunate
Documentation=man:mysqld(8)
Documentation=http://dev/mysql.com/doc/refman/en/using-systemd.html
After=network.target
After=syslog.target

[Install]
WantedBy=multi-user.target

[Service]
User=mysql
Group=mysql
ExecStart=/opt/mysql/bin/mysqld --defaults-file=/etc/my.cnf
LimitNOFIL=5000
8、启动服务
# 启动服务
systemctl start mysql.service

# 设置开机自启动
systemctl enable mysql.service
9、简单测试

9.1 登录MySQL

# 首次登录,不需要输入密码,直接回车即可
mysql -uroot -p


Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.23 MySQL Community Server (GPL)

Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.00 sec)

mysql> 

9.2 设置密码

mysqladmin -uroot password "your_password"

五、搭建PHP服务

1、下载PHP所需用到的第三方依赖
yum -y install gcc gcc-c++ make zlib-devel libxml2-devel libjpeg-devel libjpeg-turbo-devel freetype-devel libpng-devel gd-devel libcurl-devel libxslt-devel libxslt-devel

# libicov-devel依赖通过二进制安装
wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.15.tar.gz
# 解压
tar -zxvf libiconv-1.15.tar.gz
# 创建工作目录
mkdir -p /opt/libiconv
# 执行脚本
./configure --prefix=/opt/libiconv
# 编译安装
make && make install
2、下载PHP二进制包
wget http://mirrors.sohu.com/php/php-7.3.5.tar.gz
3、解压
tar -zxvf php-7.3.5.tar.gz

# 创建工作目录
mkdir -p /opt/php
4、编译三部曲
# 执行脚本
./configure --prefix=/opt/php \
 --enable-mysqlnd \
 --with-mysqli=mysqlnd \
 --with-pdo-mysql=mysqlnd \
# libiconv安装目录位置
 --with-iconv-dir=/opt/libiconv \
 --with-jpeg-dir \
 --with-png-dir \
 --with-zlib \
 --with-libxml-dir=/usr \
 --enable-xml \
 --disable-rpath \
 --enable-bcmath \
 --enable-shmop \
 --enable-sysvsem \
 --enable-inline-optimization \
 --with-curl \
 --enable-mbregex \
 --enable-fpm \
 --enable-mbstring \
 --with-gd \
 --with-openssl \
 --with-mhash \
 --enable-pcntl \
 --enable-sockets \
 --with-xmlrpc \
 --enable-soap \
 --enable-short-tags \
 --enable-static \
 --with-xsl \
# 运行Nginx的用户
 --with-fpm-user=nginx \
# 运行Nginx的组
 --with-fpm-group=nginx \
 --enable-ftp \
 --enable-opcache=no

# 编译安装
make && make install
5、配置环境变量
ln -s /opt/php/sbin/php-fpm /usr/bin/php-fpm
6、修改配置
cp /opt/php/etc/php-fpm.conf.default /opt/php/etc/php-fpm.conf
cp /opt/configure/php-7.3.5/php.ini-development /opt/php/lib/php.ini
cp /opt/php/etc/php-fpm.d/www.conf.default /opt/php/etc/php-fpm.d/www.conf

vi /opt/php/etc/php-fpm.conf
# 旧的配置
;pid = run/php-fpm.pid
# 修改为,“;”代表注释,需要删除
pid = /opt/php/php-fpm.pid
7、启动服务
# 编写启动脚本
vi /etc/systemd/system/php-fpm.service

[Unit]
Description=The PHP FastCGI Process Manager
After=syslog.target network.target

[Service]
Type=forking
PIDFile=/opt/php/php-fpm.pid
ExecStart=/opt/php/sbin/php-fpm
ExecStop=/bin/kill -9 php-fpm
ExecReload=/bin/kill -USR2 $MAINPID
PrivateTmp=true

[Install]
WantedBy=multi-user.target

# 启动服务
systemctl start php-fpm.service

# 设置开机自启动
systemctl enable php-fpm.service
8、查看服务是否启动
# 查看进程是否存在
ps -ef | grep php
root      17631      1  0 05:05 ?        00:00:00 php-fpm: master process (/opt/php/etc/php-fpm.conf)
nginx     17632  17631  0 05:05 ?        00:00:00 php-fpm: pool www
nginx     17633  17631  0 05:05 ?        00:00:00 php-fpm: pool www

# 查看端口是否存在
netstat -nptl
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 127.0.0.1:9000          0.0.0.0:*               LISTEN      17631/php-fpm: mast
9、简单测试

9.1 修改nginx配置文件

# 修改配置
vi /opt/nginx/conf/extra/test.conf

server {
    listen  80;
    server_name localhost;

    location / {
        root /opt/www/html;
        index index.html;
    }
# 新增一个location
    location ~ .*\.(php|php5)?$ {
        root /opt/www/php;
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;
        include fastcgi.conf;
    }
}

9.2 重新加载配置

nginx -s reload

9.3 创建php文件

# 创建php目录
mkdir -p /opt/www/php

# 创建index.php
echo "<?php phpinfo();?>" > /opt/www/php/index.php

9.4 浏览器输入IP/index.php

六、LNMP测试

1、测试PHP和MySQL之间的连通性

1.1 编写php文件,连接mysql

vi /opt/www/php/mysql_connect.php

<?php
$link_id=new mysqli('127.0.0.1','root','final12345');
if($link_id->connect_error){
    die("Connection failed: " . $link_id->connect_error);
}

echo "successfully";

$link_id->close();
?>

1.2 浏览器输入IP/mysql_connect.php测试

2、编写简单的学生信息查询页面

2.1 创建数据库

mysql> create database test character set utf8mb4 collate utf8mb4_unicode_ci;

2.2 创建表

use test;
create table student(id int not null, name varchar(30), age int);

2.3 新增数据

mysql> insert into student values(1, "张三", 16);
mysql> insert into student values(2, "李四", 15);
mysql> insert into student values(3, "王五", 16);

2.4 赋予权限

grant all privileges on test.* to 'root'@'%' identified by 'mysql_password' with grant option;

flush privileges;

2.5 编写php脚本

vi /opt/www/php/student.php

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>学生信息首页</title>
<body>
    <h1 align="center">学生信息</h1>
    <form action="" method="post" name="indexf">
        <p align="center"><input type="text" name="sel" /><input type="submit" value="搜索" name="selsub" /></p>
        <table align="center" border="1px" cellspacing="0px" width="800px">
            <tr><th>学号</th><th>姓名</th><th>年龄</th></tr>
            <?php
                $link_id=new mysqli('127.0.0.1','root','final12345','test');
                if($link_id->connect_error){
                   die("Connection failed: " . $link_id->connect_error);
                }
                if (empty($_POST["selsub"])) {
                   $res=mysqli_query($link_id,"select * from student order by id");
                } else {
                   $sel = $_POST["sel"];
                   $res=mysqli_query($link_id,"select * from student where id like '%$sel%'");
                }
                while ($row = mysqli_fetch_array($res)) {
                    echo '<tr>';
                    echo "<td>$row[0]</td><td>$row[1]</td><td>$row[2]</td>";
                    echo '</tr>';
                }
            ?>
        </table>
    </form>
</body>
</head>
</html>

2.6 测试

浏览器输入IP/student.php,得到如下结果,可以跟据id搜索信息

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1687679.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

代码随想录算法训练营第16天 |● 104.二叉树的最大深度 559.n叉树的最大深度 ● 111.二叉树的最小深度 ● 222.完全二叉树的节点个数

文章目录 前言104.二叉树的最大深度思路知识点 方法一 递归法方法二 迭代法 559. n叉树的最大深度111.二叉树的最小深度思路方法一 后向遍历递归法方法二 迭代法 222.完全二叉树的节点个数思路方法一 当成普通二叉树来做方法二 利用完全二叉树的特性 总结 前言 所有的题目一刷…

最简单的,在mac笔记本上安装Unix-v6系统,进行“Unix内核源码剖析”

Unix V6 已经是 1975 年的系统了&#xff0c;但是其源代码拢共只有 1w 行左右&#xff0c;并且使用了 C 语言&#xff08;K & R 之前的标准&#xff09;&#xff0c;还是现代操作系统的鼻祖&#xff0c;所以说是初学者最好的研究对象。 安装模拟器 brew install simh …

U-Mail邮件系统取得多项适配认证,全面支持国产化信创环境

随着信息技术的发展&#xff0c;信息化建设越来越深入到社会各个领域&#xff0c;成为驱动经济社会发展的重要力量。在此背景下&#xff0c;我国正加快构建国家信息安全保障体系&#xff0c;实现自主可控&#xff0c;形成安全可靠的信息技术体系。这正是我们所说的“信创”&…

Mac上安装多版本nodejs 并 随意切换node版本

Mac上安装多版本nodejs 并 随意切换node版本 1. 先查看当前版本2. 说明3. 安装 n 组件4. 根据需要安装其他版本的node4.1 查看node历史版本4.2 安装指定版本的node4.2.1 使用n 组件安装多版本4.2.2 n 组件常用命令 4.3 也可以安装node14 1. 先查看当前版本 如下&#xff1a;no…

26【构图】场景透视 —— 一点透视

1 一点透视更能体现纵深 2 图中的 消失点 透视线 视平线的位置 3 一点透视模型 蓝色的是消失点&#xff0c;根据消失点发射出无数的透视线 在PS中可以用简单的方法画出一点透视的透视线&#xff08;通过多边形工具&#xff09;

电脑视频如何压缩变小 mp4视频太大怎么压缩不影响画质

视频格式是指用于存储、编码、解码和播放数字视频内容的特定文件类型和结构。它定义了视频数据的压缩方式、存储布局以及播放参数&#xff0c;确保不同的设备和软件能够识别并正确处理视频文件。视频格式包括两大部分视频编码格式和容器格式。 视频太大的话有时候上传不了&…

Android Audio基础——AudioFlinger回放录制线程(七)

AndioFlinger 作为 Android 的音频系统引擎,重任之一是负责输入输出流设备的管理及音频流数据的处理传输,这是由回放线程 PlaybackThread 及其派生的子类和录制线程 RecordThread 进行的。 一、基础介绍 1、关系图 ThreadBase:PlaybackThread 和 RecordThread 的基类。 Re…

DDoS攻击的最新动态及市场趋势分析

随着数字化转型的加速和网络连接设备的增加&#xff0c;分布式拒绝服务(Distributed Denial of Service, DDoS)攻击已经成为全球网络安全领域的一大威胁。根据最新的市场研究报告&#xff0c;预计到2028年&#xff0c;DDoS防护软件市场的复合年增长率将达到14%以上&#xff0c;…

工作站虚拟化:RTX A5000的图形工作站实现多用户独立运行Siemens NX 设计软件

一、背景 Siemens NX 是由西门子数字工业软件&#xff08;Siemens Digital Industries Software&#xff09;开发的一款先进的集成计算机辅助设计&#xff08;CAD&#xff09;、计算机辅助制造&#xff08;CAM&#xff09;和计算机辅助工程&#xff08;CAE&#xff09;软件。它…

Linux:Ubuntu修改root密码

Linux&#xff1a;Ubuntu修改root密码 修改默认grub配置文件 rootshanxin:~# vim /etc/default/grub# 主要修改内容如下&#xff1a;GRUB_DEFAULT0 #GRUB_TIMEOUT_STYLEhidden 注释这一行 GRUB_TIMEOUT5 # 将这一行的时间改为5秒进行开启启动的grub文件的复写 rootshanxin:~…

618精选编程书单推荐:优质知识提升你的代码力

前言 在这个快速发展的技术时代&#xff0c;不断学习和提升自己的编程技能是每位程序员的必修课。今天&#xff0c;我为大家精心挑选了一系列编程技术书籍&#xff0c;它们将是你技术成长道路上的宝贵财富。 文章目录 前言编程之路&#xff1a;为何阅读书籍是不可或缺的书籍的…

vue连接mqtt实现收发消息组件超级详细

基本概念&#xff1a; MQTT&#xff08;Message Queuing Telemetry Transport&#xff09;是一种基于发布/订阅模式的轻量级消息传输协议&#xff0c;专为低带宽、高延迟或不稳定的网络环境设计。以下是MQTT实现收发消息的基本原理&#xff1a; 客户端-服务器模型&#xff1a…

清华团队推出免费AI服务:与人类偏好对齐的大型语言模型

在人工智能领域&#xff0c;大型语言模型&#xff08;LLMs&#xff09;的迅猛发展极大地推动了机器在语言理解和生成方面的能力。然而&#xff0c;如何让这些模型更好地与人类偏好和价值观对齐&#xff0c;成为了一个重要而紧迫的课题。为此清华团队推出一项免费服务ChatGLM-RL…

EI会议的最佳论文奖是什么?如何申请?

EI会议的最佳论文奖通常是指在EI&#xff08;工程索引&#xff0c;Engineering Index&#xff09;收录的学术会议中&#xff0c;评选出的表现最优秀的论文奖项。以下是关于该奖项的一些基本信息及申请步骤&#xff1a; 最佳论文奖的含义 评选标准&#xff1a;最佳论文奖通常基…

Java-常见面试题收集(十六)

二十五 RocketMQ 1 消息队列介绍 消息队列&#xff0c;简称 MQ&#xff08;Message Queue&#xff09;&#xff0c;它其实就指消息中间件&#xff0c;当前业界比较流行的开源消息中间件包括&#xff1a;RabbitMQ、RocketMQ、Kafka。&#xff08;一个使用队列来通信的组件&…

【论文笔记】| 蛋白质大模型ProLLaMA

【论文笔记】| 蛋白质大模型ProLLaMA ProLLaMA: A Protein Large Language Model for Multi-Task Protein Language Processing Peking University Theme: Domain Specific LLM Main work&#xff1a; 当前 ProLLM 的固有局限性&#xff1a;&#xff08;i&#xff09;缺乏自然…

【竞技宝】欧洲杯:吉鲁退出法国队,欧洲杯后主动让贤

吉鲁是法国队功勋中锋&#xff0c;为球队立下过赫赫战功。法国队能在2018年拿到久违的世界杯冠军&#xff0c;吉鲁身为主力锋霸功不可没。每当&#xff0c;法国队在比赛中遇到僵局&#xff0c;吉鲁总会站出来&#xff0c;为球队做出应有的贡献。吉鲁在法国队的作用不仅仅体现在…

CPU进入内核,是什么意思?

知乎上有一个问题&#xff1a; 进入内核态究竟是什么意思&#xff1f; 暂且忘记这个问题&#xff0c;让我们从另一个问题出发&#xff0c;一步步引出这个问题的答案。 特权指令问题 现代计算机里面&#xff0c;同时运行了很多程序&#xff0c;比如Office软件、浏览器、QQ、还…

好书推荐|MATLAB科技绘图与数据分析

提升你的数据洞察力&#xff0c;用于精确绘图和分析的高级MATLAB技术 MATLAB科技绘图与数据分析——jd 本书内容 《MATLAB科技绘图与数据分析》结合作者多年的数据分析与科研绘图经验&#xff0c;详细讲解MATLAB在科技图表制作与数据分析中的使用方法与技巧。全书分为3部分&a…

Jetbrains插件AI Assistant,终于用上了

ai assistant激活成功后&#xff0c;如图 ai assistant获取&#xff1a;https://web.52shizhan.cn/activity/ai-assistant 主要功能如下