源码编译构建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()组…...
【Python】 -- 趣味代码 - 小恐龙游戏
文章目录 文章目录 00 小恐龙游戏程序设计框架代码结构和功能游戏流程总结01 小恐龙游戏程序设计02 百度网盘地址00 小恐龙游戏程序设计框架 这段代码是一个基于 Pygame 的简易跑酷游戏的完整实现,玩家控制一个角色(龙)躲避障碍物(仙人掌和乌鸦)。以下是代码的详细介绍:…...
【OSG学习笔记】Day 18: 碰撞检测与物理交互
物理引擎(Physics Engine) 物理引擎 是一种通过计算机模拟物理规律(如力学、碰撞、重力、流体动力学等)的软件工具或库。 它的核心目标是在虚拟环境中逼真地模拟物体的运动和交互,广泛应用于 游戏开发、动画制作、虚…...
从零实现富文本编辑器#5-编辑器选区模型的状态结构表达
先前我们总结了浏览器选区模型的交互策略,并且实现了基本的选区操作,还调研了自绘选区的实现。那么相对的,我们还需要设计编辑器的选区表达,也可以称为模型选区。编辑器中应用变更时的操作范围,就是以模型选区为基准来…...
解决Ubuntu22.04 VMware失败的问题 ubuntu入门之二十八
现象1 打开VMware失败 Ubuntu升级之后打开VMware上报需要安装vmmon和vmnet,点击确认后如下提示 最终上报fail 解决方法 内核升级导致,需要在新内核下重新下载编译安装 查看版本 $ vmware -v VMware Workstation 17.5.1 build-23298084$ lsb_release…...
React Native在HarmonyOS 5.0阅读类应用开发中的实践
一、技术选型背景 随着HarmonyOS 5.0对Web兼容层的增强,React Native作为跨平台框架可通过重新编译ArkTS组件实现85%以上的代码复用率。阅读类应用具有UI复杂度低、数据流清晰的特点。 二、核心实现方案 1. 环境配置 (1)使用React Native…...
学校招生小程序源码介绍
基于ThinkPHPFastAdminUniApp开发的学校招生小程序源码,专为学校招生场景量身打造,功能实用且操作便捷。 从技术架构来看,ThinkPHP提供稳定可靠的后台服务,FastAdmin加速开发流程,UniApp则保障小程序在多端有良好的兼…...
《通信之道——从微积分到 5G》读书总结
第1章 绪 论 1.1 这是一本什么样的书 通信技术,说到底就是数学。 那些最基础、最本质的部分。 1.2 什么是通信 通信 发送方 接收方 承载信息的信号 解调出其中承载的信息 信息在发送方那里被加工成信号(调制) 把信息从信号中抽取出来&am…...
如何在网页里填写 PDF 表格?
有时候,你可能希望用户能在你的网站上填写 PDF 表单。然而,这件事并不简单,因为 PDF 并不是一种原生的网页格式。虽然浏览器可以显示 PDF 文件,但原生并不支持编辑或填写它们。更糟的是,如果你想收集表单数据ÿ…...
华硕a豆14 Air香氛版,美学与科技的馨香融合
在快节奏的现代生活中,我们渴望一个能激发创想、愉悦感官的工作与生活伙伴,它不仅是冰冷的科技工具,更能触动我们内心深处的细腻情感。正是在这样的期许下,华硕a豆14 Air香氛版翩然而至,它以一种前所未有的方式&#x…...
C++.OpenGL (20/64)混合(Blending)
混合(Blending) 透明效果核心原理 #mermaid-svg-SWG0UzVfJms7Sm3e {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-icon{fill:#552222;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-text{fill…...
