源码编译构建LAMP
Apache
起源
- 源于A Patchy Server,著名的开源Web服务软件
- 1995年时,发布Apache服务程序的1.0版本
- 由Apache软件基金会(ASF)负责维护
- 最新的名称为“Apache HTTP Server”
- 官方站点:http://httpd.apache.org/
主要特点
- 开发源代码/跨平台应用
- 支持多种网页编程语言
- 模块化涉及、运行稳定、良好的安全性
软件版本
- 1.X
- 目前最高版本是1.3
- 向下兼容较好,但缺乏一些较新功能
- 2.X
- 目前最高版本是2.4
- 具有更多的功能特性
- 与1.X相比,配置管理风格存在较大差异
编译安装httpd服务器
优点
- 具有较大自由度,功能可以定制
- 可以及时获得最新的软件版本
- 普遍吧适用于大多数Linux版本,便于移植使用
获得Apache服务器的源码包
- 参考地址:http://httpd.apache.orrg/download.cgi
安装httpd服务器步骤
准备工作
rpm -qa httpd #检查是否已安装httpd
yum -y install apr-util-devel pcre-devel gcc* #使用yum安装运行环境#gcc 基于gnu的c语言编译器
源码编译和安装
解包
下载并解压httpd源码包
配置
进入解压后的http包中,使用
./configure --prefix=/usr/local/httpd --enable-so --enable-rewrite --enable-charset-lite --enable-cgi
//指定安装路径、启用字符集支持等
prefix:指定安装路径
命令中的so指的是DSO,功能是动态共享目标
rewrite重写 charset字符集 cgi通用网关接口
编译及安装
make && make install
确认安装结果
使用ls命令查看安装目录下的文件
[root@localhost ~]# ls /usr/local/httpd/
bin cgi-bin error icons logs manual
build conf htdocs include man modules
优化执行路径
ln -s /usr/local/httpd/bin/* /usr/local/bin/
这样在执行相关命令时就可以之间使用“httpd -v”,而不再需要输入冗长的路径
添加httpd系统服务
进入该路径vim /usr/local/httpd/conf/httpd.conf,设置ServerName(为了解决运行时的提示
在/lib/systemd/system下创建一个httpd.service,并在其中添加以下代码
[Unit]Description=my httpdAfter=network.target[Service]Type=forkingPIDFile=/usr/local/httpd/logs/httpd.pidExecStart=/usr/local/httpd/bin/apachectl $OPTIONSExecReload=/bin/kill -HUP $MAINPID[Install]WantedBy=multi-user.target
添加完成后使用systemctl daemon-reload,使systemd读取可运行命令
httpd服务器的基本配置
1.确认网站名称、IP地址
在客户机的/etc/hosts中为主机的IP添加内容
192.168.10.101 www.kgc.com
2.配置并启动httpd服务
(1)配置httpd服务
[root@localhost conf]# vim httpd.conf
ServerName www.kgc.com[root@localhost conf]# apachectl -t //对配置内容进行语法检查,若是没有错误,则会显示“Syntax OK”
(2)启动httpd服务
由于前面已经将httpd服务添加到系统服务,所以可以使用systemd启动
[root@localhost conf]# systemctl start httpd
(3)部署网页文档
在httpd安装路径下的htdocs目录,http提供了一个名为index.html的测试网页,作为网站的默认首页
[root@localhost conf]# cat /usr/local/httpd/htdocs/index.html
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> //设定字符集编码。没有这一行若文本中有文字则会显示乱码
<title>无标题文档</title>
</head>
<body>
<h1>你好</h1>
</body>
</html>
(4)在客户机中访问Web站点
在客户机的网页浏览器中,可以通过域名或IP访问httpd浏览器
构建虚拟主机
(单个主机运行多个站点
编辑httpd主配置文件,加载独立的配置文件
[root@localhost ]# vim /usr/local/httpd/conf/httpd.conf
…………
Include conf/extra/httpd-vhosts.conf
基于主机名的虚拟主机
mkdir -p /var/www/htmll/accpcom
mkdir -p /var/www/htmll/benetcom
echo "www.accp.com">/var/www/html/accpcom/index.html
echo "www.benet.com">/var/www/html/benetcom/index.html
为虚拟机准备网页文档
[root@localhost conf]# vim /usr/local/httpd/conf/extra/httpd.vhosts.conf
<VirtualHost *:80>ServerAdmin webmaster@dummy-host.example.comDocumentRoot "/var/www/html/benetcom"ServerName www.benet.comErrorLog "logs/www.benet.com-error_log"CustomLog "logs/www.benet.com-access_log" common
</VirtualHost><VirtualHost *:80>ServerAdmin webmaster@dummy-host2.example.comDocumentRoot "/var/www/html/accpcom/"ServerName www.accp.comErrorLog "logs/www.accp.com-error_log"CustomLog "logs/www.accp.com-access_log" common
</VirtualHost><Directory "/var/www/html">Require all granted
</Directory>
配置完成后,在虚拟机中使用不同的域名来访问
基于IP的虚拟主机
在基于域名的虚拟主机的基础上进行修改
[root@localhost conf]# vim /usr/local/httpd/conf/extra/httpd.vhosts.conf
<VirtualHost 192.168.10.210:80> //将*改为固定的IPServerAdmin webmaster@dummy-host.example.comDocumentRoot "/var/www/html/benetcom"ServerName www.benet.comErrorLog "logs/www.benet.com-error_log"CustomLog "logs/www.benet.com-access_log" common
</VirtualHost><VirtualHost 192.168.10.101:80> //将*改为固定的IPServerAdmin webmaster@dummy-host2.example.comDocumentRoot "/var/www/html/accpcom/"ServerName www.accp.comErrorLog "logs/www.accp.com-error_log"CustomLog "logs/www.accp.com-access_log" common
</VirtualHost><Directory "/var/www/html">Require all granted
</Directory>
为服务器添加一个虚拟网卡
[root@localhost extra]# cp /etc/sysconfig/network-scripts/ifcfg-ens33 /etc/sysconfig/network-scripts/ifcfg-ens33:0
[root@localhost extra]# cat /etc/sysconfig/network-scripts/ifcfg-ens33:0
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
IPADDR=192.168.10.210
NETMASK=255.255.255.0
GATEWAY=192.168.10.254
DNS1=114.114.114.114
DN2=8.8.8.8
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33:0
#UUID=126dd06e-b440-4252-8cbd-41912905145e
DEVICE=ens33:0
ONBOOT=yes
基于端口的虚拟主机
继续基于IP的虚拟主机的配置进行修改
监听80和8080端口
[root@localhost conf]# vim /usr/local/httpd/conf/extra/httpd.vhosts.conf
<VirtualHost 192.168.10.101:80> //将*改为固定的IPServerAdmin webmaster@dummy-host.example.comDocumentRoot "/var/www/html/benetcom"ServerName www.benet.comErrorLog "logs/www.benet.com-error_log"CustomLog "logs/www.benet.com-access_log" common
</VirtualHost><VirtualHost 192.168.10.101:8080> //将*改为固定的IPServerAdmin webmaster@dummy-host2.example.comDocumentRoot "/var/www/html/accpcom/"ServerName www.accp.comErrorLog "logs/www.accp.com-error_log"CustomLog "logs/www.accp.com-access_log" common
</VirtualHost><Directory "/var/www/html">Require all granted
</Directory>Listen 80
listen 8080
然后在主机中分别访问192.168.10.101:80 和 192.168.10.101:8080
MySql的编译安装
准备工作
下载并解压源码包
使用yum下载ncurses-devel autoconf 和cmake
yum -y install ncurses-devel autoconf cmake
添加一个不可登录没有家目录的用户
useradd -M -s /sbin/nologin mysql
源码包的编译和安装
使用cmake进行编译
cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DSYSCONFDIR=/etc -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_EXTRA_CHARSETS=all
DCMAKE_INSTALL_PREFIX 指定安装路径
DSYSCONFDIR 指定配置文件路径
DDEFAULT_CHARSET 默认字符集
DDEFAULT_COLLATION 默认字符集校对规则
DWITH_EXTRA_CHARSETS 其他字符集
make && make install编译并安装
安装后的其他调整
对数据库安装目录设置权限
chown -R mysql:mysql mysql/
删除系统生成的mariadb配置文件
rm -rf /etc/my.cnf
复制MySQL源码包下的support-files目录下的my-default.cnf文件到/etc下
cp my-default.cnf /etc/my.cnf
初始化
运行/usr/local/mysql/scripts/下的mysql_install_db以初始化
./mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data/
设置环境变量
编辑/etc/profile在最后添加export PATH=$PATH:/usr/local/mysql/bin
启动并访问mysql服务
复制mysql源码包/support-files/mysql.server 到/etc/init.d/下的mysqld
然后为其添加执行权限,使用chkconfig --add mysqld把服务添加为系统服务
mysql -uroot进入mysql,此时mysql没有密码
>set password=password("pwd123")
>exit
再次进入就需要输入密码
mysql -uroot -ppwd123 [已存在的数据库]
构建PHP运行环境
准备工作
使用ali的yum仓库下载软件包
依赖包
yum -y install zlib-devel libxml2 libxml2-devel
扩展工具库
yum -y install libmcrypt libmcrypt-devel mcrypt mhash
编译并安装PHP
下载并解压php源码包
cd进入源码包
使用./configure --prefix=/usr/local/php5 --with-mcrypt --with-apxs2=/usr/local/httpd/bin/apxs --with-mysql=/usr/local/mysql --with-mysqli=/usr/local/mysql/bin/mysql_config --with-config-file-path=/usr/local/php5 --enable-mbstring
prefix:安装路径
--with-mcrypt:加载数据加密等扩展工具支持
--with-apxs2:设置apache HTTP Server提供的apxs模块支持程序的安装位置
--with-mysql:设置MySQL数据库服务程序的安装位置
--with-mysqli: 扩展mysql集
--with-config-file-path:设置PHP配置为保护php.ini存放为孩子
--enable-mbstring: 启用多字节字符串功能
编译及安装make && make install
设置LAMP组件环境
安装好PHP软件包后,php.ini不会自动创建,需要去软件包中复制模板
cp php.ini-development /usr/local/php5/php.ini
使用vim编辑器修改其中的内容
default_charset="UTF-8" #取消注释
short_open_tag=On #修改值
extension=php_mysqli.ddl #取消注释
添加ZendGuardLoader优化模块
解压并进入zend-loader-php包
cp ZendGuardLoader.so /usr/local/php5/lib/php
vim /usr/local/php/php.ini
在[PHP]下面添加
zend_extension=/usr/local/php5/lib/php/ZendGuardLoader.so
zend_loader.enable=1
修改httpd的主配置文件
添加LoadModule php_module modules/libphp5.so
AddType application/x-httpd-php
在 DirectoryIndex index.html 后面追加 index.php
重启服务更新配置
测试LAMP
测试网页是否能正常显示
在 /usr/local/httpd/htdocs/目录下添加test1.php
<?php
phpinfo( ); #PHP程序的版本好、配置命令、运行变量相关信息
?>
测试PHP网页是否能够访问MySql数据库
在 /usr/local/httpd/htdocs/目录下添加test2.php
<?php
$link=mysqli_connect('localhost','root','pwd123');
if($link) echo "恭喜你,数据库连接成功啦!!";
mysqli_close($link);
?>
测试LAMP架构应用实例
解压并复制到网站目录
建立配置文件,进入到网站目录下的包目录
最后使用主机测试即可
相关文章:

源码编译构建LAMP
Apache 起源 源于A Patchy Server,著名的开源Web服务软件1995年时,发布Apache服务程序的1.0版本由Apache软件基金会(ASF)负责维护最新的名称为“Apache HTTP Server”官方站点:http://httpd.apache.org/ 主要特点 开发源代码/…...

搜索是门艺术,大神都是这样找资源
以下所有资源均可在星云导航找到,网站地址:https://www.xygalaxy.com/ 浏览器搜索高级用法 1、排除干扰,指定关键词 1.1、排除指定关键字 格式:关键字1 -关键字2比如搜索:星云导航,不想要CSDN的内容 星…...

【设计模式深度剖析】【5】【行为型】【迭代器模式】
👈️上一篇:策略模式 | 下一篇:中介者模式👉️ 设计模式-专栏👈️ 文章目录 迭代器模式定义英文原话直译如何理解呢? 迭代器模式的角色1. Iterator(迭代器)2. ConcreteIterator(具体迭代器…...

怎么更快捷的修改图片大小?压缩图片jpg、png、gif的快捷方法
jpg作为最常用的一种图片格式,在遇到图片太大问题时,该如何操作能够快速在压缩图片jpg的大小呢?图片太大无法上传时目前常见的一个使用问题,只有将图片处理到合适的大小才可以正常在平台上传使用,一般情况下想要快速解…...

Shell脚本 if语句
条件测试: $? 返回码 判断命令或者脚本是否执行成功(最近的一条) 0 true 为真就是成功 成立 非0 false 失败或者异常 test命令 可以进行条件测试 然后根据的是返回值来判断条件是否成立。 -e 测试目录或者文件是否存在 exist -d 测试…...

集合查询-并(UNION)集运算、交(INTERSECT)集运算、差(EXCEPT)集运算
一、概述 集合查询是对两个SELECT语句的查询结果进行再进行处理的查询 二、条件 1、两个SELECT语句的查询结果必须是属性列数目相同 2、两个SELECT语句的查询结果必须是对应位置上的属性列必须是相同的数据类型 三、并(UNION)运算 1、语法格式: SELECT 语句1…...

常用的bit位操作
//判断某1位是1还是0 #ifndef GET_BIT #define BIT_IS_1(value,bitpos) (((value)&(1<<(bitpos)))>>(bitpos)) #endif //读取指定位置bit位的值 #ifndef GET_BIT #define GET_BIT(value,bitpos) ((value)&(1<<(bitpos))) #endif //取反指定位置bit位…...

自动控制原理【期末复习】(二)
无人机上桨之后可以在调试架上先调试: 1.根轨迹的绘制 /// 前面针对的是时域分析,下面针对频域分析: 2.波特图 3.奈维斯特图绘制 1.奈氏稳定判据 2.对数稳定判据 3.相位裕度和幅值裕度...

机器学习——集成学习和梯度提升决策树
集成学习 不同的算法都可以对解决同一个问题,但是可能准确率不同,集成学习就是不同算法按照某种组合来解决问题,使得准确率提升。 那怎么组合算法呢? 自举聚合算法**(bagging)** 顾名思义是 自举聚合 自举…...

MYSQL 查看SQL执行计划
一、explain explain select id,db,user,host,command,time,state,info from information_schema.processlist order by time desc; id: 查询的标记,可以查看不同查询的执行顺序。 select_type: 查询的类型,如SIMPLE、SUBQUERY、PRIMARY等。 table: …...

ARM-V9 RME(Realm Management Extension)系统架构之系统安全能力的MPAM
安全之安全(security)博客目录导读 关于RME的MPAM变化的完整定义见在《Arm Architecture Reference Manual Supplement, Memory System Resource Partitioning and Monitoring (MPAM), for A-profile architecture》中详细说明。 实现RME的处理元件(PE)能够生成一个2位的MPAM_…...

cuda 架构设置
import torch torch.cuda.get_device_capability(0) 添加cmake options: -DCMAKE_CUDA_ARCHITECTURES86 -DCMAKE_CUDA_COMPILER/usr/local/cuda-11.8/bin/nvcc cmake工程出现“CMAKE_CUDA_ARCHITECTURES must be non-empty if set.“的解决方法_failed to detec…...

基于 Vue 3 封装一个 ECharts 图表组件
在前端开发中,数据可视化是展示数据的重要方式之一。ECharts 是一个强大的开源可视化库,能够帮助我们轻松地创建各种图表。本文将介绍如何在 Vue 3 项目中使用 ECharts 封装一个图表组件。 代码 <template><div ref"chartRef" styl…...

LeetCode 算法: 旋转图像c++
原题链接🔗: 旋转图像 难度:中等⭐️⭐️ 题目 给定一个 n n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。 你必须在 原地 旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图…...

Java Android 静态内部类 以及优雅实现单例模式/避免handler内存泄漏
前言 Java 中的静态内部类(Static Nested Class)是定义在另一个类里面的一个静态类。它和普通的内部类有些区别,主要是静态内部类不需要依赖于外部类的实例就可以被创建和访问。这种类的特性使得它非常适合用来作为辅助类,用于支持外部类的功能。 特点以及使用场景 静态内…...

Flink协调器Coordinator及自定义Operator
Flink协调器Coordinator及自定义Operator 最近的项目开发过程中,使用到了Flink中的协调器以及自定义算子相关的内容,本篇文章主要介绍Flink中的协调器是什么,如何用,以及协调器与算子间的交互。 协调器Coordinator Flink中的协调…...

C调用C++中的类
文章目录 测试代码 测试代码 在C语言中调用C类,需要遵循几个步骤: 在C代码中,确保C类的函数是extern “C”,这样可以防止名称修饰(name mangling)。 使用头文件声明C类的公共接口,并且为这个…...

NFTScan 正式上线 Sei NFTScan 浏览器和 NFT API 数据服务
2024 年 6 月 12 号,NFTScan 团队正式对外发布了 Sei NFTScan 浏览器,将为 Sei 生态的 NFT 开发者和用户提供简洁高效的 NFT 数据搜索查询服务。NFTScan 作为全球领先的 NFT 数据基础设施服务商,Sei 是继 Bitcoin、Ethereum、BNBChain、Polyg…...

2024年高考:计算机相关专业前景分析与选择建议
2024年高考结束,面对计算机专业是否仍具有吸引力的讨论,本文将从行业趋势、就业市场、个人兴趣与能力、专业选择建议等多个角度进行深入分析,以帮助考生和家长做出明智的决策。 文章目录 一、行业趋势与就业市场1. 计算机行业的发展与变革2. …...

SQL聚合函数---汇总数据
此篇文章内容均来自与mysql必知必会教材,后期有衍生会继续更新、补充知识体系结构 文章目录 SQL聚集函数表:AGV()count()根据需求可以进行组合处理 max()min()max()、min()、avg()组…...

webpack5新特性
webpack5新特性 持久化缓存资源模块moduleIds & chunkIds的优化更智能的tree shakingnodeJs的polyfill脚本被移除支持生成e6/es2015的代码SplitChunk和模块大小Module Federation 持久化缓存 缓存生成的webpack模块和chunk,来改善构建速度cache 会在开发模式被设置成 ty…...

java单体服务自定义锁名称工具类
需求: 操作员能够对自己权限下的用户数据进行数据填充,但是不同操作员之间可能会有重复的用户数据,为了避免操作员覆盖数据或者重复操作数据,应该在操作用户数据时加锁,要求加的这一把锁必须是细粒度的锁,…...

整理好了!2024年最常见 20 道并发编程面试题(四)
上一篇地址:整理好了!2024年最常见 20 道并发编程面试题(三)-CSDN博客 七、请解释什么是条件变量(Condition Variable)以及它的用途。 条件变量是一种同步机制,用于在多线程编程中协调线程间的…...

持续交付一
一、 你的项目依赖的 jQuery 版本是 1.0.0 ,Bootstrap 依赖的版本是 1.1.0,而 Chosen 依赖的版本是 1.2.0,看上去都是小版本不一致,一开始并没有发现任何问题,但是如果到后期发现不兼容,可能就为时已晚了。…...

基于 Python 解析 XML 文件并将数据存储到 MongoDB 数据库
1. 问题背景 在软件开发中,我们经常需要处理各种格式的数据。XML 是一种常用的数据交换格式,它可以存储和传输结构化数据。很多网站会提供 XML 格式的数据接口,以便其他系统可以方便地获取数据。 我们有这样一个需求:我们需要从…...

Interview preparation--案例加密后数据的模糊查询
加密数据的模糊查询实现方案 我们知道加密后的数据对模糊查询不是很友好,本篇就针对加密数据模糊查询这个问题来展开讲一讲实现的思路,希望对大家有所启发。为了数据安全我们在开发过程中经常会对重要的数据进行加密存储,常见的有࿱…...

一个简单的R语言数据分析案例
在R语言中,数据分析可以涵盖广泛的领域,包括描述性统计、探索性数据分析、假设检验、数据可视化、机器学习等。以下是一个简单的R语言数据分析案例,该案例将涵盖数据导入、数据清洗、描述性统计、数据可视化以及一个简单的预测模型。 案例&a…...

springCloudAlibaba之分布式事务组件---seata
Seata Sea学习分布式事务Seata二阶段提交协议AT模式TCC模式 Seata服务搭建Seata Server(事务协调者TC)环境搭建seata服务搭建-db数据源seata服务搭建-nacos启动seata服务 分布式事务代码搭建-client端搭建接入微服务应用 Sea学习 事务:事务是…...

无公网IP与服务器完成企业微信网页应用开发远程调试详细流程
文章目录 前言1. Windows安装Cpolar2. 创建Cpolar域名3. 创建企业微信应用4. 定义回调本地接口5. 回调和可信域名接口校验6. 设置固定Cpolar域名7. 使用固定域名校验 前言 本文主要介绍如何在企业微信开发者中心通过使用内网穿透工具提供的公网域名成功验证回调本地接口服务! …...

CSS 字体颜色渐变
CSS 字体颜色渐变 css 代码: 注意:background: linear-gradient(属性),属性可以调整方向 例如:to bottom 上下结构,to right 左右结构font-family: DIN, DIN;font-weight: normal;font-size: 22px;color:…...