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

一步部署APache编译安装脚本

接下来我来介绍以下编译安装的好处 

编译安装的优点与缺点

一、优点

  1. 高度可定制

    • 可根据实际需求启用或关闭特性(如 Apache 的模块、MySQL 的引擎等)。

    • 灵活控制编译参数、优化性能(如 --enable-xxx--with-xxx)。

  2. 更高的性能优化

    • 可使用特定的编译器优化选项(如 -O2-march=native)提高程序运行效率。

    • 去除不必要的模块,减小程序体积,提高安全性。

  3. 更好的版本控制

    • 可以安装特定版本的源码,不受系统发行版限制。

    • 更容易应用第三方补丁或进行二次开发。

  4. 适用于最小化系统或特殊环境

    • 在无包管理器的精简系统中,编译是唯一选择。


二、缺点

  1. 耗时长、过程复杂

    • 编译需要较长时间,依赖关系复杂,容易出错。

    • 对于新手不友好,需要一定的Linux和编译基础。

  2. 难以维护和升级

    • 无法像包管理器那样自动升级或回滚版本。

    • 升级新版本通常需要重新编译、替换旧版本,步骤繁琐。

  3. 依赖管理困难

    • 手动解决依赖包和路径问题(如 lib, include 目录)。

    • 安装多个软件可能会导致版本冲突或路径混乱。

  4. 不易统一管理

    • 无法用系统的包管理工具(如 yum, apt)统一管理安装状态。

    • 不易记录和追踪已安装组件及其版本。


三、与其他安装方式对比

安装方式优点缺点
编译安装可定制、优化性能、版本灵活耗时长、难维护、依赖复杂
二进制安装快速部署、直接使用灵活性差、可选组件少、平台依赖性强
包管理器安装易于维护、自动处理依赖、统一管理版本受限于仓库、定制性差、更新节奏由发行版决定

脚本

下面是Apache编译安装的脚本

#!/bin/bash
# Apache 编译安装 + Systemd 管理 脚本
# 作者:PEI
# 时间:20250610# 版本配置
APACHE_VERSION=2.4.62
APR_VERSION=1.7.4
APR_UTIL_VERSION=1.6.3# 安装路径
INSTALL_DIR=/usr/local/apache
SRC_DIR=/usr/local/src# 停止并禁用防火墙
systemctl stop firewalld.service
systemctl disable firewalld.service# 永久禁用 SELinux
sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
setenforce 0# 网络检测
echo "检查网络连接..."
ping -c 2 www.baidu.com > /dev/null 2>&1
if [ $? -ne 0 ]; thenecho "❌ 无网络连接,退出!"exit 1
fi
echo "✅ 网络正常"# 安装依赖
echo "安装依赖包..."
yum -y install gcc make cmake apr-devel apr-util-devel pcre-devel expat-devel openssl-devel wget tar# 下载源码
mkdir -p $SRC_DIR && cd $SRC_DIR
echo "下载 Apache 与 APR..."
wget -c https://archive.apache.org/dist/httpd/httpd-${APACHE_VERSION}.tar.gz
wget -c https://archive.apache.org/dist/apr/apr-${APR_VERSION}.tar.gz
wget -c https://archive.apache.org/dist/apr/apr-util-${APR_UTIL_VERSION}.tar.gz# 解压并整合 APR
echo "📦 解压源码..."
tar xf httpd-${APACHE_VERSION}.tar.gz || { echo "❌ 解压 Apache 失败"; exit 1; }
tar xf apr-${APR_VERSION}.tar.gz || { echo "❌ 解压 APR 失败"; exit 1; }
tar xf apr-util-${APR_UTIL_VERSION}.tar.gz || { echo "❌ 解压 APR-Util 失败"; exit 1; }# 合并 apr 到 httpd 源码
mv apr-${APR_VERSION} httpd-${APACHE_VERSION}/srclib/apr
mv apr-util-${APR_UTIL_VERSION} httpd-${APACHE_VERSION}/srclib/apr-util# 模块选择
echo "请选择要启用的模块(输入数字):"
echo "1) 启用动态模块 (--enable-so)"
echo "2) 启用 SSL 模块 (--enable-ssl)"
echo "3) 启用 CGI 模块 (--enable-cgi)"
echo "4) 启用重写模块 (--enable-rewrite)"
echo "5) 全部启用"
echo "6) 退出"
read -ep "请选择操作 (1-6): " iCONFIGURE_OPTIONS=""
case $i in1) CONFIGURE_OPTIONS="--enable-so" ;;2) CONFIGURE_OPTIONS="--enable-ssl" ;;3) CONFIGURE_OPTIONS="--enable-mime --enable-cgi" ;;  # CGI 依赖 MIME4) CONFIGURE_OPTIONS="--enable-rewrite" ;;5) CONFIGURE_OPTIONS="--enable-so --enable-ssl --enable-mime --enable-cgi --enable-rewrite --enable-charset-lite" ;;6) echo "退出"; exit 0 ;;*) echo "无效选择,退出"; exit 1 ;;
esac# 添加必要模块
CONFIGURE_OPTIONS="$CONFIGURE_OPTIONS --enable-log-config --enable-logio"# 编译安装 Apache
echo "开始编译 Apache..."
cd $SRC_DIR/httpd-${APACHE_VERSION}
./configure --prefix=$INSTALL_DIR --with-included-apr $CONFIGURE_OPTIONS >> /root/apache_build.log 2>&1if [ $? -ne 0 ]; thenecho "❌ 配置失败,查看日志: tail -n 20 /root/apache_build.log"exit 1
fimake -j$(nproc) >> /root/apache_build.log 2>&1
if [ $? -ne 0 ]; thenecho "❌ 编译失败,查看日志: tail -n 20 /root/apache_build.log"exit 1
fimake install >> /root/apache_build.log 2>&1
if [ $? -ne 0 ]; thenecho "❌ 安装失败,查看日志: tail -n 20 /root/apache_build.log"exit 1
fi# 校验配置文件是否生成成功
if [ ! -f "$INSTALL_DIR/bin/httpd" ]; thenecho "❌ 编译失败,未生成 httpd 可执行文件"exit 1
fi# 检查配置语法
$INSTALL_DIR/bin/httpd -t || { echo "❌ Apache 配置语法错误"; exit 1; }# 创建 systemd 服务文件
echo "创建 systemd 服务..."
cat > /etc/systemd/system/httpd.service << EOF
[Unit]
Description=The Apache HTTP Server
After=network.target[Service]
Type=forking
ExecStart=$INSTALL_DIR/bin/apachectl start
ExecReload=$INSTALL_DIR/bin/apachectl graceful
ExecStop=$INSTALL_DIR/bin/apachectl stop
PIDFile=$INSTALL_DIR/logs/httpd.pid
PrivateTmp=true[Install]
WantedBy=multi-user.target
EOF# 解决端口冲突
echo "检查端口冲突..."
if netstat -tuln | grep -q ':80\b'; thenecho "⚠️  80端口被占用,尝试释放..."pkill -9 httpdsystemctl stop nginx 2>/dev/nullsleep 2
fi# 重新加载 systemd 并启动
systemctl daemon-reload
systemctl enable httpd
systemctl restart httpd# 检查服务状态
if systemctl is-active --quiet httpd; thenecho -e "\n✅ Apache 启动成功"echo "访问地址: http://$(curl -s ifconfig.me)"
elseecho -e "\n❌ Apache 启动失败"echo "查看错误日志: tail -n 50 $INSTALL_DIR/logs/error_log"echo "诊断命令: systemctl status httpd"exit 1
fi# 显示状态
echo -e "\n✅ Apache 安装完成,服务状态:"
systemctl status httpd --no-pager

安装流程

以下是 Apache 编译安装步骤的基本流程:
1,下载源代码包:在 Apache 官网或镜像站点上下载最新版本的 Apache 源代码包,解压缩到本地目录中。

2,安装编译工具:为了编译安装 Apache,需要确保系统已经安装了必要的编译工具,如 GCC、make、autoconf 等。可以通过运行以下命令来检查是否已经安装:
go
gcc -v
make -v
autoconf -V

3,配置编译选项:在解压缩后的源代码目录中,运行 ./configure 命令配置编译选项。例如:
javascript
./configure \
    --prefix=/usr/local/apache2 \
    --enable-so \
    --enable-ssl \
    --with-ssl=/usr/local/openssl
其中,--prefix 指定安装路径,--enable-so 启用动态模块支持,--enable-ssl 启用 SSL/TLS 支持,--with-ssl 指定 OpenSSL 的安装路径。
其他选项含义:
--prefix=/usr/local/httpd:指定安装目录为 /usr/local/httpd,这是 Apache HTTP Server 的默认安装目录。
--enable-so:启用动态共享对象(DSO)支持,使得 Apache HTTP Server 可以加载共享库模块。
--enable-rewrite:启用 mod_rewrite 模块,该模块允许在请求 URL 与本地文件系统路径之间进行重写,从而允许 URL 重定向和其他高级 URL 处理。
--enable-charset-lite:启用 mod_charset_lite 模块,该模块提供了字符集转换和处理支持,它使得 Apache HTTP Server 可以在处理响应内容时根据需要自动转换字符集。
--enable-cgi:启用 CGI 支持,使得 Apache HTTP Server 可以执行 CGI 脚本,这是动态生成网页内容的一种常见方式。

4,编译源代码:运行 make 命令编译源代码。如果编译出现错误,需要根据错误提示调整编译选项或解决依赖问题。

5,安装 Apache:运行 make install 命令安装 Apache。安装过程中会将二进制文件、配置文件、文档等文件复制到指定的安装路径中。

6,配置 Apache:编辑 Apache 的配置文件,例如 httpd.conf,根据需要修改服务器的配置选项。

7,启动 Apache:运行 apachectl start 命令启动 Apache。可以通过访问 http://localhost/ 测试 Apache 是否正常工作。如果一切正常,可以将 Apache 设置为开机自启动,以便系统重启后自动启动。
注意:以上步骤仅作为基本参考,实际安装过程可能因为操作系统、Apache 版本、依赖库等因素而有所不同。在安装之前,请务必仔细阅读 Apache 官方文档和相关教程,并根据实际情况进行相应的调整。

 

 

http://www.xdnf.cn/news/14623.html

相关文章:

  • 基于SSM框架+mysql实现的监考安排管理系统[含源码+数据库+项目开发技术手册]
  • 使用VIVADO合并FPGA bit文件和Microblaze elf
  • SQL学习笔记2
  • 【大厂机试题解法笔记】可以组成网络的服务器
  • 使用亮数据网页抓取API自动获取Tiktok数据
  • Windows下安装zookeeper
  • 使用OpenCV实现中文字体渲染与特效处理
  • 单片机常用通信外设特点及通信方式对比表
  • 入门级STM32F103C8T6无人机遥控(原理图)
  • window显示驱动开发—支持 DXGI DDI(二)
  • 具身智能新突破:Gemini Robotics On-Device,让机器人拥有“本地大脑”
  • 【智能协同云图库】智能协同云图库第二弹:用户管理系统后端设计与接口开发
  • 开源流媒体平台安装使用
  • C# WinForm跨平台串口通讯实现
  • 2023年全国青少年信息素养大赛Python 复赛真题——玩石头游戏
  • 战地2042(战地风云)因安全启动(Secure Boot)无法启动的解决方案以及其他常见的启动或闪退问题
  • 自然语言处理入门
  • LT8311EX一款适用于笔记本电脑,扩展坞的usb2.0高速运转芯片,成对使用,延伸长度达120米
  • 第五课:大白话教你用K邻近算法做分类和回归
  • 用vscode破解最新typora1.10.8
  • 鸿蒙应用开发中的状态管理:深入解析AppStorage与LocalStorage
  • PYTHON从入门到实践2-环境配置与字符串打印用法
  • 【网络安全】从IP头部看网络通信:IPv4、IPv6与抓包工具 Wireshark 实战
  • vscode + Jlink 一键调试stm32 单片机程序(windows系统版)
  • ArkTS与仓颉开发语言:鸿蒙编程的双子星
  • 软件工程:从理论到实践,构建可靠软件的艺术与科学
  • 【4目方案】基于海思3403平台开发4目360°全景拼接相机方案
  • 五种 IO 模式的简单介绍 -- 阻塞 IO,非阻塞 IO,信号驱动 IO,IO 多路复用,异步 IO
  • RISC-V三级流水线项目:总体概述和取指模块
  • 基于java SSM的房屋租赁系统设计和实现