当前位置: 首页 > news >正文

源码编译构建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架构应用实例
解压并复制到网站目录
建立配置文件,进入到网站目录下的包目录
最后使用主机测试即可

http://www.lryc.cn/news/371386.html

相关文章:

  • 搜索是门艺术,大神都是这样找资源
  • 【设计模式深度剖析】【5】【行为型】【迭代器模式】
  • 怎么更快捷的修改图片大小?压缩图片jpg、png、gif的快捷方法
  • Shell脚本 if语句
  • 集合查询-并(UNION)集运算、交(INTERSECT)集运算、差(EXCEPT)集运算
  • 常用的bit位操作
  • 自动控制原理【期末复习】(二)
  • 机器学习——集成学习和梯度提升决策树
  • MYSQL 查看SQL执行计划
  • ARM-V9 RME(Realm Management Extension)系统架构之系统安全能力的MPAM
  • cuda 架构设置
  • 基于 Vue 3 封装一个 ECharts 图表组件
  • LeetCode 算法: 旋转图像c++
  • Java Android 静态内部类 以及优雅实现单例模式/避免handler内存泄漏
  • Flink协调器Coordinator及自定义Operator
  • C调用C++中的类
  • NFTScan 正式上线 Sei NFTScan 浏览器和 NFT API 数据服务
  • 2024年高考:计算机相关专业前景分析与选择建议
  • SQL聚合函数---汇总数据
  • webpack5新特性
  • java单体服务自定义锁名称工具类
  • 整理好了!2024年最常见 20 道并发编程面试题(四)
  • 持续交付一
  • 基于 Python 解析 XML 文件并将数据存储到 MongoDB 数据库
  • Interview preparation--案例加密后数据的模糊查询
  • 一个简单的R语言数据分析案例
  • springCloudAlibaba之分布式事务组件---seata
  • 无公网IP与服务器完成企业微信网页应用开发远程调试详细流程
  • CSS 字体颜色渐变
  • 【机器学习】基于CTC模型的语音转换可编辑文本研究