目录
我们现在所浏览的所有网站,都是有大框架的,通常都是LAMP或者LNMP,当我们环境框架等部署好了,开发人员就可以进行开发。
LAMP或者LNMP其实就是一种网络服务器软件栈组合,L 代表Linux,M 代表MySQL数据库,P 代表php,不同就是 A 和 N ,分别对应的是 Apache 和 Nginx 。
Linux 很简单,就是服务器的系统,在Linux 操作系统上部署Apache或者Nginx 、MySQL、php 等。
在部署之前,我们首先要知道,这些软件栈是什么,有什么作用。
这里我们先说Apache,因为Nginx 东西实在是太多了,可能一整篇都不够写,我需要整理一下,单独拎出来做一篇博客,我们这里就简单介绍一下 Nginx ,顺便和 Apache 做一下对比
MySQL
什么是MySQL
相关专业的同志应该都知道,MySQL 是一个全球使用量非常庞大的开源数据库(相关数据显示,MySQL 在全球最受欢迎的数据库排名中高居第二位,仅次于 Oracle)。几乎任何软件app都离不开数据库,没有数据那软件或者app就只是一个空壳,没有意义。数据库顾名思义就是存放数据的地方。
既然Oracle 是全球最受欢迎的数据库,那么我们 web 开发不使用Oracle数据库呢?最直观的就是,MySQL开源,而Oracle 需要付费购买许可。
而开源带来的结果是MySQL拥有庞大的交流社区,某种角度来说技术相当成熟,很容易找到错误的地方和技术支持,虽然Oracle也有规模不小的社区,但相对来说,使用Oracle的基本上都是大公司或者大型项目,对于一些轻量级项目还是MySQL更为合适。况且,MySQL相对来说更易安装。
编译安装MySQL
接下来咱们讲如何在 centos7(我是centos7)上编译安装MySQL
1.官网下载MySQL压缩包
首先我们进入官网找到我们需要下载的安装包,然后复制下载链接,这个可能有点难找,我直接把链接放在下面,版本不同的也可以根据我的截图找到相应的页面,选择不同的版本
wget https://cdn.mysql.com/archives/mysql-5.7/mysql-5.7.17-linux-glibc2.5-x86_64.tar.gz
下面是截图,进入官网寻找安装包的过程,首先点击官网的下载按钮,来到下载页面
来到下载页面后我们往下翻,找到 MySQL community Downloads
然后选择 MySQL Community Server
点击Archives
然后我们来到下载页面,product version 选择数据库的版本,operating system 选择你所要安装的操作系统,我这里选了个之前经常装的版本5.7.17,建议不要选特别新的,建议不要选最新的,然后操作系统我选的是Linux通用,OSversion 如果是编译安装的话选择 source code,其他的是预编译的二进制发行版,下载rpm 可直接安装
点击下载,我们复制下载链接,在终端上用 wget 进行下载
下载完成!
接下来为了方便操作,我们将压缩包移到 /opt下
2.下载boost安装包(如果有需要的话)
这里注意一下,如果你下载的MySQL版本是5.7-8.0之间的,那么需要额外下载以一个boost压缩包,因为boost作为某些功能的依赖库,例如正则表达式库和容器库在处理全文检索和其他复杂数据处理时提供了支持。
wget 直接下载
两个包都下载完成后进行解包(再次强调,如果是MySQL8以上的版本不需要下载boost)
3.解压
tar zxvf mysql-5.7.17.tar.gz
不要复制,可以补全,所有命令都不要复制,我们下的版本,路径都可能不一样!!
对于boost文件
tar zxvf boost_1_59_0.tar.gz -C /usr/local/
mv /usr/local/boost_1_59_0 /usr/local/boost
即可
解压完成后我们下载相应的依赖工具
4.下载相关依赖工具
yum -y install gcc gcc-c++ ncurses ncurses-devel bison cmake
ncurses -----字符终端下图形互动功能的动态库
ncurses-devel -----ncurses开发包
bison -----语法分析器
cmake -----mysql需要用cmake编译安装
如果下载不了肯定是没有源,配置yum 本地源或者拉一个阿里源 清华源 之类的
配置本地源(我的另一篇博客,虽然没有过多介绍,但有完整的本地源配置过程):
https://blog.youkuaiyun.com/qq_59677536/article/details/139803053?spm=1001.2014.3001.5501
5.创建程序用户管理
useradd -s /sbin/nologin mysql
没什么特殊说明,直接敲上去就好
6.编译
到刚解压完的mysql文件目录下
cmake \ -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \ -DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock \ -DSYSCONFDIR=/etc \ -DSYSTEMD_PID_DIR=/usr/local/mysql \ -DDEFAULT_CHARSET=utf8 \ -DDEFAULT_COLLATION=utf8_general_ci \ -DWITH_EXTRA_CHARSETS=all \ -DWITH_INNOBASE_STORAGE_ENGINE=1 \ -DWITH_ARCHIVE_STORAGE_ENGINE=1 \ -DWITH_BLACKHOLE_STORAGE_ENGINE=1 \ -DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \ -DMYSQL_DATADIR=/usr/local/mysql/data \ -DWITH_BOOST=/usr/local/boost \ -DWITH_SYSTEMD=1
进行编译,编译完成后
make && make install (这需要非常非常多的时间,如果机器配置低的话需要很久)
到这里MySQL已经是编译安装完成了,接下来开始创建数据库
7.数据库初始化
chown -R mysql:mysql /usr/local/mysql/ 更改属主属组
vim /etc/my.cnf
输入一下内容
[client]
port = 3306
default-character-set=utf8
socket=/usr/local/mysql/mysql.sock
[mysql]
port = 3306
default-character-set=utf8
socket=/usr/local/mysql/mysql.sock auto-rehash
[mysqld]
user = mysql
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data
port = 3306
character-set-server=utf8
pid-file = /usr/local/mysql/mysqld.pid
socket=/usr/local/mysql/mysql.sock
bind-address = 0.0.0.0
skip-name-resolve
max_connections=2048
default-storage-engine=INNODB
max_allowed_packet=16M
server-id = 1 sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_AUTO_VALUE_ON_ZERO,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,PIPES_AS_CONCAT,ANSI_QUOTES
保存并退出
echo "PATH=$PATH:/usr/local/mysql/bin" >> /etc/profile
设置环境变量,申明/宣告mysql命令便于系统识别
source /etc/profile
cd到 bin目录下
cd /usr/local/mysql/bin/
输入以下命令,对数据库进行初始化
./mysqld \
--initialize-insecure \
--user=mysql \
--basedir=/usr/local/mysql \
--datadir=/usr/local/mysql/data
cp /usr/local/mysql/usr/lib/systemd/system/mysqld.service /usr/lib/systemd/system/
systemctl daemon-reload ----刷新识别
systemctl start mysqld.service ----开启服务
systemctl enable mysqld ----开机自启动
netstat -anpt | grep 3306 ----查看端口
mysqladmin -u root -p password "123456" -----给root账户设置密码
现在MySQL数据库也创建完成了
接下来直接输入
mysql -u root -p
然后输入创建root账户时设置的密码
show databases; 查看数据库,显示如下,便算是大功告成了
Apache
什么是Apache
Apache通常指的是Apache软件基金会(Apache Software Foundation, ASF)开发的一系列开源软件项目,最著名的就是Apache HTTP Server。它是世界上最流行的Web服务器之一,用于托管和传输网页,可以与多种编程语言进行集成,例如 PHP、Python、Perl 等,不仅可以用于静态网站,还可以支持动态内容的生成,比如使用 CGI 脚本来动态生成网页内容。Apache HTTP Server具有高度的可扩展性和灵活性,可以通过各种模块进行扩展,以满足不同的需求。
Apache 工作模式
Apache HTTP Server支持多种工作模式,这些模式决定了如何处理并发连接,不同的模式适用于不同的场景和需求
prefork 模式
prefork 是 Apache 最早的工作模式,它使用多进程方式来处理请求。每个进程处理一个请求,不同的进程之间是独立的,这种方式避免了线程安全问题,因此一个进程崩溃不会影响其他进程,稳定性较好;但是相应的,性能和资源使用率较低,不适合高并发的场景。
worker 模式
worker 模式使用多线程加多进程的混合模式,每个进程包含多个线程,每个线程处理一个请求,所以相比 prefork 模式,在高并发场景下,有着更好的表现,消耗的内存也更少;但相应的,由于worker模式采用的是多线程处理请求,在高并发环境下,操作系统的线程调度机制可能导致资源竞争、上下文切换开销等问题,进而影响服务器的整体性能。
event 模式
event模式是worker模式的扩展,一个主进程,生成m个子进程,每个子进程负责生个n个线程,每个线程响应一个请求,适合处理大量的长连接请求,占用资源较少,解决了worker模式中,线程占用的问题,缺点是线程安全问题。
Apache 部署
1.下载相关压缩包
直接去官网下载这三个包,传到服务器中,或者使用命令
wget https://downloads.apache.org/apr/apr-1.6.5.tar.gz
wget https://downloads.apache.org/apr/apr-util-1.6.3.tar.gz
wget https://dlcdn.apache.org/httpd/httpd-2.4.62.tar.bz2
2.解压缩
都放在同一个目录下,比如/opt 下,解压缩
tar xf apr-1.6.5.tar.gz
tar xf apr-util-1.6.3.tar.gz
tar xf httpd-2.4.62.tar.bz2
将两个压缩后的包放到 httpd-2.4.62/srclib下,并改名
mv apr-1.6.5 httpd-2.4.62/srclib/apr
mv apr-util-1.6.3 httpd-2.4.62/srclib/apr-util
下载相关依赖工具
yum -y install gcc gcc-c++ make pcre-devel expat-devel perl
3.编译
cd /opt/httpd-2.4.62/
./configure --prefix=/usr/local/httpd --enable-so --enable-rewrite --enable-charset-lite --enable-cgi
看到显示版本号就是完成了,完成之后
make && make install 可以在make后面加上-j x (你的cpu核数)
等待执行完成,做两个软链接,便于系统识别
ln -s /usr/local/httpd/conf/httpd.conf /etc/
ln -s /usr/local/httpd/bin/* /usr/local/bin/
4.配置
vim /lib/systemd/system/httpd.service
全部干掉,替换成以下内容
[Unit]
Description=The Apache HTTP Server
After=network.target
[Service]
Type=forking
PIDFile=/usr/local/httpd/logs/httpd.pid
ExecStart=/usr/local/bin/apachectl $OPTIONS
ExecReload=/bin/kill -HUP $MAINPID
重启httpd 服务
systemctl start httpd.service
紧接着去另外一个配置文件
vim /usr/local/httpd/conf/httpd.conf
197行或者有的是199行,取消注释,改成自己服务器的ip地址
直接保存退出
httpd -t 或者 apachectl -t 检查语法
都 ok 说明apache 服务已经部署成功了
访问以下,ok,成功
PHP
什么是PHP
php是一种广泛使用的开源服务器端脚本语言,通常嵌入在HTML代码中,或者可以与各种Web模板系统、Web内容管理系统和Web框架一起使用。
PHP的主要特点包括:
服务器端执行:PHP脚本在服务器上执行,然后生成HTML页面发送到客户端浏览器。这意味着用户看不到PHP代码,只能看到由PHP生成的页面内容。
跨平台性:PHP可以在几乎所有的操作系统上运行,包括Windows、Linux、macOS等。
数据库支持:PHP支持多种数据库,如MySQL、PostgreSQL、SQLite、Microsoft SQL Server等,方便开发者进行数据库驱动的Web开发。
嵌入性:PHP可以很容易地嵌入到HTML中,允许开发者动态生成网页内容。
广泛的社区和库支持:PHP有一个庞大的社区,并且有大量的现成库和框架(如Laravel、Symfony等)供开发者使用。
编译安装php
和MySQL一样的步骤,直接进入官网下载 php 的包,也可以直接wget,我是有包直接导入解压了
wget https://www.php.net/distributions/php-8.2.0.tar.gz
我的php版本为7.1.24
1.解压
tar zxvf php-7.1.24.tar.gz
2.安装相关依赖包工具等
yum -y install gd libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel curl curl-devel openssl openssl-devel
3.编译
安装相关软件完成后,同样的我们进入解压后的文件目录,进行编译
./configure \
--prefix=/usr/local/php7 \
--with-apxs2=/usr/local/httpd/bin/apxs \
--with-mysql-sock=/usr/local/mysql/mysql.sock \
--with-config-file-path=/usr/local/php7 \
--with-mysqli \
--with-zlib \
--with-curl \
--with-gd \
--with-jpeg-dir \
--with-png-dir \
--with-freetype-dir \
--with-openssl \
--enable-mbstring \
--enable-xml \
--enable-session \
--enable-ftp \
--enable-pdo \
--enable-tokenizer
编译完成后
make && make install
4.修改配置文件
cp /opt/php-7.1.24/php.ini-development /usr/local/php7/php.ini 复制文件模板
vim /usr/local/php7/php.ini
--939行左右,取消注释并修改
date.timezone = Asia/Shanghai
--1170行左右
mysqli.default_socket = /usr/local/mysql/mysql.sock
为可执行程序文件做软链接,便于系统识别
ln -s /usr/local/php7/bin/* /usr/local/bin/
到此php安装配置基本上就结束了,但是还没有算是完全部署成功,我们需要让我们的A或者N 支持php,这里先暂且以Apache为例
vim /etc/httpd.conf
在255行左右添加
<IfModule dir_module>
DirectoryIndex index.html index.php
</IfModule>
392行下面,修改成如下这样
保存退出
创建一个php页面以此来验证
rm -rf /usr/local/httpd/htdocs/index.html
vim /usr/local/httpd/htdocs/index.php
在文件里编辑如下内容
重启httpd服务
访问自己服务器的ip,显示该页面说明php部署完成了
至此,我们一整套LAMP 就部署完成了。
Nginx
本篇就对Nginx 做个简单的了解
Nginx 作为和 Apache 同一级别的web服务,也不能说是同一级别吧,他们俩直接可能就是大巴和轿车的区别,大巴载客多但是跑的慢,轿车跑得快但载客少(事实情况它们的区别可能不止如此,我这里只是打个比方)
什么是 Nginx
了解了Nginx的定位,下面可以说一说,什么是Nginx,它是用来干什么的
Nginx 是一个轻量级 高性能的开源Web服务器和反向代理服务器,主要用来做静态的web资源服务器html,http/https协议的反向代理 ,结合FastCGI /uWSGI/SCGI等协议反向代理动态资源请求 tcp/udp协议的请求转发(反向代理)
Nginx采用异步、非阻塞的事件驱动架构,这使得它能够处理大量并发连接而不会显著增加资源消耗,支持多种负载均衡策略,如轮询、加权轮询、最少连接等,帮助分配流量到不同的后端服务器,以优化资源使用并提高系统的可用性。
Nginx 和 Apache 区别
说了这么多,我们将 Nginx 和 Apache 放在一起对比一下
Nginx是一个甚于事件的Web服务器,Apache是一个基于流程的服务器;
Nginx避免子进程的概念,Apache是基于子进程的;
Nginx在内存消耗和连接方面更好,Apache在内存消耗和连接方面一般;
Nginx的性能和可伸缩性不依赖于硬件,Apache依赖于CPU和内存等硬件;
Nginx支持热部署,Apache不支持热部署;
Nginx对于静态文件处理具有更高效率,Apache相对一般;
Nginx在反向代理场景具有明显优势,Apache相对一般
总结来说
Nginx 相对于 Apache 的优点:
轻量级;高并发,而且在高并发下 Nginx 能保持低资源低消耗高性能;高度模块化的设计,编写模块相对简单;社区活跃。
而 Apache 相对于 Nginx 的优点:
rewrite,比 Nginx 的 rewrite 强大;模块超多,基本想到的都可以找到;少 bug ,Nginx 的 bug 相对较多;相对稳定
一般来说,需要性能的 web 服务,用 Nginx 。如果不需要性能只求稳定,那就 Apache;Nginx 处理动态请求是弱项,一般动态请求要 Apache 去做,Nginx 只适合静态和反向。
Nginx 就介绍这么多,相关内容太多了,之后整理出来应该会继续写 Nginx 的相关详细内容(部署、配置文件、优化等),本篇重点还是LAMP的部署。