一步部署APache编译安装脚本

发布于:2025-06-26 ⋅ 阅读:(18) ⋅ 点赞:(0)

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

编译安装的优点与缺点

一、优点

  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 ]; then
    echo "❌ 无网络连接,退出!"
    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): " i

CONFIGURE_OPTIONS=""
case $i in
    1) CONFIGURE_OPTIONS="--enable-so" ;;
    2) CONFIGURE_OPTIONS="--enable-ssl" ;;
    3) CONFIGURE_OPTIONS="--enable-mime --enable-cgi" ;;  # CGI 依赖 MIME
    4) 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>&1

if [ $? -ne 0 ]; then
    echo "❌ 配置失败,查看日志: tail -n 20 /root/apache_build.log"
    exit 1
fi

make -j$(nproc) >> /root/apache_build.log 2>&1
if [ $? -ne 0 ]; then
    echo "❌ 编译失败,查看日志: tail -n 20 /root/apache_build.log"
    exit 1
fi

make install >> /root/apache_build.log 2>&1
if [ $? -ne 0 ]; then
    echo "❌ 安装失败,查看日志: tail -n 20 /root/apache_build.log"
    exit 1
fi

# 校验配置文件是否生成成功
if [ ! -f "$INSTALL_DIR/bin/httpd" ]; then
    echo "❌ 编译失败,未生成 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'; then
    echo "⚠️  80端口被占用,尝试释放..."
    pkill -9 httpd
    systemctl stop nginx 2>/dev/null
    sleep 2
fi

# 重新加载 systemd 并启动
systemctl daemon-reload
systemctl enable httpd
systemctl restart httpd

# 检查服务状态
if systemctl is-active --quiet httpd; then
    echo -e "\n✅ Apache 启动成功"
    echo "访问地址: http://$(curl -s ifconfig.me)"
else
    echo -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 官方文档和相关教程,并根据实际情况进行相应的调整。

 

 


网站公告

今日签到

点亮在社区的每一天
去签到