LAMP(Linux+Apache+MySQL+PHP)环境介绍、配置、搭建

LAMP(Linux+Apache+MySQL+PHP)环境介绍、配置、搭建

LAMP介绍

LAMP是由Linux, Apache, MySQL, PHP组成的,即把Apache、MySQL以及PHP安装在Linux系统上,组成一个环境来运行PHP的脚本语言。Apache是最常用的Web服务软件,而MySQL是比较小型的数据库软件。三个角色可以安装在一台机器上,也可以分开(但httpd和php要在一起的)
在这里插入图片描述

为什么需要LAMP?

手动逐个编译安装各个组件,需要输入各种命令,且有可能会中途出错。
对于想要成功搭建 LAMP 建站环境来说,可以节约大量时间和精力。

LAMP 有什么优点?

LAMP 是最经典的建站环境之一,风靡世界十几年。
而本脚本只需几个简单交互,选择需要安装的包,即可一路安装,无人值守。

准备工作

yum install -y bzip2 tar net-tools wget expect

安装MySQL:

MySQL介绍

MySQL是一个关系型数据库,由mysql ab公司开发,mysql在2008年被sun公司收购(10亿刀),2009年sun公司被oracle公司收购(74亿刀)

MySQL官网https://www.mysql.com 最新版本5.7GA/8.0DMR

MySQL5.6变化比较大,5.7性能上有很大提升

MySQL安装过程

# 安装必要的软件包
yum -y install gcc gcc-c++ ncurses ncurses-devel bison cmake
# 添加mysql用户,设置不登录
useradd -s /sbin/nologin mysql
# 解压MySQL源码
tar xf /opt/mysql-5.7.17.tar.gz -C /opt
# 解压Boost源码
tar xf /opt/boost_1_59_0.tar.gz -C /usr/local/
# 重命名Boost源码目录
mv -f /usr/local/boost_1_59_0 /usr/local/boost
# 进入MySQL源码目录
cd /opt/mysql-5.7.17 
# 配置MySQL编译选项
cmake \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock \
-DSYSCONFDIR=/etc \
-DSYSTEMD_PID_DIR=/usr/local/mysql \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_EXTRA_CHARSETS=all \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \
-DMYSQL_DATADIR=/usr/local/mysql/data \
-DWITH_BOOST=/usr/local/boost \
-DWITH_SYSTEMD=1
# 使用多核编译并安装
make -j $(nproc) && make install
# 修改MySQL安装目录及配置文件的权限
chown -R mysql:mysql /usr/local/mysql/
chown mysql:mysql /etc/my.cnf
# 将自定义的my.cnf配置文件移动到/etc并修改权限
cp -f /opt/my.cnf /etc/my.cnf
chown -R mysql:mysql /usr/local/mysql/
chown mysql:mysql /etc/my.cnf
# 在环境变量中添加MySQL/bin路径
echo "PATH=$PATH:/usr/local/mysql/bin" >> /etc/profile
source /etc/profile
# 初始化MySQL数据库
cd /usr/local/mysql/bin/
./mysqld \
--initialize-insecure \
--user=mysql \
--basedir=/usr/local/mysql \
--datadir=/usr/local/mysql/data
# 复制MySQL的systemd服务文件
cp -f /usr/local/mysql/usr/lib/systemd/system/mysqld.service /usr/lib/systemd/system/
# 重新加载systemd配置
systemctl daemon-reload
# 启动MySQL服务并设置开机自启动
systemctl start mysqld.service
systemctl enable mysqld
# 检查MySQL服务是否正常运行在3306端口
netstat -anpt | grep 3306

在这里插入图片描述

my.cnf

[client]
port = 3306
default-character-set=utf8
socket=/usr/local/mysql/mysql.sock
[mysql]
port = 3306
default-character-set=utf8
socket=/usr/local/mysql/mysql.sock
auto-rehash
[mysqld]
user = mysql
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data
port = 3306
character-set-server=utf8
pid-file = /usr/local/mysql/mysqld.pid
socket=/usr/local/mysql/mysql.sock
bind-address = 0.0.0.0
skip-name-resolve
max_connections=2048
default-storage-engine=INNODB
max_allowed_packet=16M
server-id = 1
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_AUTO_VALUE_ON_ZERO,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,PIPES_AS_CONCAT,ANSI_QUOTES

mysql设置用户密码脚本

#!/usr/bin/expect
set timeout 30
spawn mysqladmin -u root -p password \"123456\"
expect {
	"*password*" {send "\r"}
}
expect eof

在这里插入图片描述

安装Httpd(Apache)

脚本源代码:

#!/bin/bash

# 安装软件包
function install_packages {
    yum install -y $1
}

# 提取tarball文件并将其解压到/opt目录下
function extract_tarball {
    tar xf $1 -C /opt
}

# 配置并编译安装软件
function configure_and_make {
    cd $1
    ./configure $2
    make -j $(nproc) && make install
}

# 配置Apache,将IP和端口替换为更安全的值
function configure_httpd {
    LOCAL_IP=$(ip addr show ens33 | grep "inet " | awk '{print $2}' | cut -d/ -f1) 
    sed -i "s/Listen 80/Listen $LOCAL_IP:80/g" /usr/local/httpd/conf/httpd.conf
    sed -i "s/#ServerName www.example.com:80/ServerName $LOCAL_IP:80/" /usr/local/httpd/conf/httpd.conf
}

# 启动服务并设置开机自启动
function start_service {
    systemctl daemon-reload
    systemctl start $1.service
    systemctl enable $1
}

# 创建符号链接
function create_symbolic_links {
    local source_path="$1"
    local target_path="$2"

    # 检查是否以root身份运行
    if [ "$(id -u)" -ne 0 ]; then
        echo "必须以root身份运行此脚本。" >&2
        return 1
    fi

    # 遍历源路径下的文件,创建符号链接
    for file in "$source_path"/*
    do
        base=$(basename "$file")
        link_target="$target_path/$base"

        # 检查目标是否已存在
        if [ -L "$link_target" ]; then
            echo "警告:$link_target 已存在,将被覆盖。" >&2
        else
            if [ -e "$file" ]; then
                echo "创建符号链接: $file => $link_target"
                ln -s -T "$file" "$link_target" || { echo "创建链接失败,请检查权限和路径。" >&2; return 1; }
            else
                echo "错误:$file 不存在。" >&2
                return 1
            fi
        fi
    done
}

# 主脚本逻辑开始
extract_tarball "/opt/apr-1.6.2.tar.gz"
extract_tarball "/opt/apr-util-1.6.0.tar.gz"
extract_tarball "/opt/httpd-2.4.29.tar.bz2"
mv /opt/apr-1.6.2 /opt/httpd-2.4.29/srclib/apr
mv /opt/apr-util-1.6.0 /opt/httpd-2.4.29/srclib/apr-util
# 安装编译依赖包
install_packages \
    "gcc gcc-c++ make pcre-devel expat-devel perl"
# 配置并编译安装Apache
configure_and_make "/opt/httpd-2.4.29" \
    "--prefix=/usr/local/httpd \
    --enable-so \
    --enable-rewrite \
    --enable-charset-lite \
    --enable-cgi"

configure_httpd
# 创建必要的符号链接
create_symbolic_links "/usr/local/httpd/conf" "/etc"
create_symbolic_links "/usr/local/httpd/bin" "/usr/local/bin"
# 创建Apache的systemd服务文件
echo '[Unit]
Description=The Apache HTTP
After=network.target
[Service]
Type=forking
PIDFile=/usr/local/httpd/logs/httpd.pid
ExecStart=/usr/local/bin/apachectl $OPTIONS
ExecReload=/bin/kill -HUP $MAINPID
' > /usr/lib/systemd/system/httpd.service
# 启动Apache服务并设置开机自启动
start_service httpd

在这里插入图片描述

安装PHP

#!/bin/bash
# 主脚本,用于环境配置和软件安装

# 安装软件包
#
# 参数:
# $1: 要安装的软件包名称
function install_packages {
    yum install -y $1
}

# 提取tarball文件
#
# 参数:
# $1: 要提取的tarball文件路径
function extract_tarball {
    tar xf $1 -C /opt
}

# 配置并编译软件
#
# 参数:
# $1: 软件源代码目录
# $2: 配置参数
function configure_and_make {
    cd $1
    ./configure $2
    make -j $(nproc) && make install
}
function create_symbolic_links {
    local source_path="$1"
    local target_path="$2"
     # 检查是否以root身份运行
    if [ "$(id -u)" -ne 0 ]; then
        echo "必须以root身份运行此脚本。" >&2
        return 1
    fi

    # 遍历源路径下的文件
    for file in "$source_path"/*
    do
        base=$(basename "$file")
        link_target="$target_path/$base"

        # 检查目标是否已存在
        if [ -L "$link_target" ]; then
            echo "警告:$link_target 已存在,将被覆盖。" >&2
        else
            if [ -e "$file" ]; then
                echo "创建符号链接: $file => $link_target"
                ln -s -T "$file" "$link_target" || { echo "创建链接失败,请检查权限和路径。" >&2; return 1; }
            else
                echo "错误:$file 不存在。" >&2
                return 1
            fi
        fi
    done
# 配置PHP环境
function configure_php {
  # 定义变量
    PHP_INI_SRC=/opt/php-7.1.24/php.ini-development
    PHP_INI_DEST=/usr/local/php7/php.ini
    HTTPD_CONF=/etc/httpd.conf
    HTTPD_HTDICT=/usr/local/httpd/htdocs
    MYSQL_INIT_SH=/opt/mysql_init2.exp
    UNZIP_FILE=/opt/Discuz_X3.4_SC_UTF8.zip
    DIS_DIR=/opt/dis/dir_SC_UTF8/upload
    BBS_DIR=/usr/local/httpd/htdocs/bbs
    # 复制并配置php.ini
    cp -f "$PHP_INI_SRC" "$PHP_INI_DEST"
    sed -i 's/;date.timezone =/date.timezone = Asia\/Shanghai/g' /usr/local/php7/php.ini
    sed -i "s/mysqli.default_socket =/mysqli.default_socket = \/usr\/local\/mysql\/mysql.sock/g" /usr/local/php7/php.ini

    # 配置php命令的符号链接
   

    # 修改httpd.conf以支持PHP
    sed -i 's/DirectoryIndex index.html/DirectoryIndex index.php/g' "$HTTPD_CONF"
    sed -i -e '396a\AddType application/x-httpd-php .php\nAddType application/x-httpd-php-source .phps' "$HTTPD_CONF"

    # 重置index.php并重启httpd服务
    rm -f "$HTTPD_HTDICT/index.html"
    touch "$HTTPD_HTDICT/index.php"
    echo '<?php phpinfo();?>' >"$HTTPD_HTDICT/index.php"
    chmod 644 "$HTTPD_HTDICT/index.php"
    systemctl restart httpd.service

    # 安装unzip,解压Discuz!并配置权限
    sudo yum install unzip -y
    unzip -f "$UNZIP_FILE" -d "$DIS_DIR"
    cp -r /opt/dis/dir_SC_UTF8/upload/ /usr/local/httpd/htdocs/bbs
    chmod 755 "$MYSQL_INIT_SH"
    chmod -R 755 "$DIS_DIR"
    chown -R daemon "$BBS_DIR/config"
    chown -R daemon "$BBS_DIR/data"
    chown -R daemon "$BBS_DIR/uc_client"
    chown -R daemon "$BBS_DIR/uc_server/data"

    # 复制并配置php.ini
    cp -f "$PHP_INI_SRC" "$PHP_INI_DEST"
    sed -i 's/;date.timezone =/date.timezone = Asia\/Shanghai/g' /usr/local/php7/php.ini
    sed -i "s/mysqli.default_socket =/mysqli.default_socket = \/usr\/local\/mysql\/mysql.sock/g" /usr/local/php7/php.ini

    # 配置php命令的符号链接
    create_symbolic_links "/usr/local/php7/bin/*" "/usr/local/bin/"

    # 修改httpd.conf以支持PHP
    sed -i 's/DirectoryIndex index.html/DirectoryIndex index.php/g' "$HTTPD_CONF"
    sed -i -e '396a\AddType application/x-httpd-php .php\nAddType application/x-httpd-php-source .phps' "$HTTPD_CONF"

    # 重置index.php并重启httpd服务
    rm -f "$HTTPD_HTDICT/index.html"
    touch "$HTTPD_HTDICT/index.php"
    echo '<?php phpinfo();?>' > "$HTTPD_HTDICT/index.php"
    chmod 644 "$HTTPD_HTDICT/index.php"
    systemctl restart httpd.service

    # 安装unzip,解压Discuz!并配置权限
    sudo yum install unzip -y
    unzip -f "$UNZIP_FILE" -d "$DIS_DIR"
    cp -r /opt/dis/dir_SC_UTF8/upload/ /usr/local/httpd/htdocs/bbs
    chmod 755 "$MYSQL_INIT_SH"
    chmod -R 755 "$DIS_DIR"
    chown -R daemon "$BBS_DIR/config"
    chown -R daemon "$BBS_DIR/data"
    chown -R daemon "$BBS_DIR/uc_client"
    chown -R daemon "$BBS_DIR/uc_server/data"

    # 确认设置完成
    echo "Setup completed."
}

# 执行PHP安装流程
install_packages \
    "gd libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel curl curl-devel openssl openssl-devel"
extract_tarball "/opt/php-7.1.24.tar.gz"
configure_and_make "/opt/php-7.1.24" \
    "--prefix=/usr/local/php7 \
    --with-apxs2=/usr/local/httpd/bin/apxs \
    --with-mysql-sock=/usr/local/mysql/mysql.sock \
    --with-config-file-path=/usr/local/php7 \
    --with-mysqli \
    --with-zlib \
    --with-curl \
    --with-gd \
    --with-jpeg-dir \
    --with-png-dir \
    --with-freetype-dir \
    --with-openssl \
    --enable-mbstring \
    --enable-xml \
    --enable-session \
    --enable-ftp \
    --enable-pdo \
    --enable-tokenizer"
configure_php
systemctl restart httpd

安装论坛

创建数据库脚本

#!/usr/bin/expect
set timeout 30
set password "123456"
spawn mysql -uroot -p
expect {
	"*password*" {send "$password\r"}
}
expect ">*"
send "CREATE DATABASE bbs;\r"
expect ">*"
send "GRANT all ON bbs.* TO 'bbsuser'@'%' IDENTIFIED BY 'admin123';\r"
expect ">*"
send "flush privileges;\r"
expect ">*"
send "quit\r"
expect eof


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/571620.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

科技赋能无人零售

科技赋能无人零售&#xff0c;使其具备以下独特优势&#xff1a; 1. 全天候无缝服务 &#xff1a;无人零售店依托科技&#xff0c;实现24小时不间断运营&#xff0c;不受人力限制&#xff0c;满足消费者随时购物需求&#xff0c;尤其惠及夜间工作者、夜猫子及急需购物者&…

微前端是如何实现作用域隔离的?

微前端是如何实现作用域隔离的&#xff1f; 一、前言 沙箱&#xff08;Sandbox&#xff09;是一种安全机制&#xff0c;目的是让程序运行在一个相对独立的隔离环境&#xff0c;使其不对外界的程序造成影响&#xff0c;保障系统的安全。作为开发人员&#xff0c;我们经常会同沙…

03-JAVA设计模式-访问者模式

访问者模式 什么是访问者模式 访问者模式&#xff08;Visitor Pattern&#xff09;是软件设计模式中的一种行为模式&#xff0c;它用于将数据结构中的元素与操作这些元素的操作解耦。这种模式使得可以在不修改数据结构的情况下添加新的操作。 在访问者模式中&#xff0c;我们…

PHP+MYSQL多条件选一通用搜索系统功能单文件7KB

通用功能: 快速填写参数用于自己的mysql数据表搜索,ajax载入数据 <?php header("content-Type: text/html; charsetUTF-8"); //error_reporting(0);$dbhost "localhost"; //数据库地址本地localhost $dbuser "chalidecom"; //数据库账号 …

Tkinter是什么?

Tkinter是Python标准库中的一个模块&#xff0c;用于创建图形用户界面&#xff08;GUI&#xff09;应用程序。它提供了一组工具和组件&#xff0c;使开发者能够在Python中创建窗口、按钮、标签、文本框、菜单等各种界面元素&#xff0c;并通过这些元素构建交互式的用户界面。 T…

稀碎从零算法笔记Day59-LeetCode: 感染二叉树需要的总时间

题型&#xff1a;树、图、BFS、DFS 链接&#xff1a;2385. 感染二叉树需要的总时间 - 力扣&#xff08;LeetCode&#xff09; 来源&#xff1a;LeetCode 题目描述 给你一棵二叉树的根节点 root &#xff0c;二叉树中节点的值 互不相同 。另给你一个整数 start 。在第 0 分钟…

Three.js入门学习笔记

学习资料&#xff1a; 【Three.js】Three.js快速上手教程_three.module.js-CSDN博客 2024年了&#xff0c;是该学学Three.js了_three.js 2024-CSDN博客 一、three.js简介 three.js是JavaScript编写的WebGL第三方库。 three.js&#xff0c;webGL&#xff0c;openGL三者的关…

微信小程序4~6章总结

目录 第四章 页面组件总结 4.1 组件的定义及属性 4.2 容器视图组件 4.2.1 view 4.2.2 scroll-view 4.2.3 swiper 4.3 基础内容组件 4.3.1 icon ​编辑 4.3.2 text 4.3.3 progress ​编辑 4.4 表单组件 4.4.1 button 4.4.2 radio 4.4.3 checkbox 4.4.4 switch …

第27天:安全开发-PHP应用TP框架路由访问对象操作内置过滤绕过核心漏洞

第二十七天 一、TP框架-开发-路由访问&数据库&文件上传&MVC模型 1.TP框架-开发-配置架构&路由&MVC模型 参考&#xff1a;https://www.kancloud.cn/manual/thinkphp5_1 配置架构-导入使用路由访问-URL访问数据库操作-应用对象文件上传操作-应用对象前端页…

51.HarmonyOS鸿蒙系统 App(ArkUI)通知

普通文本通知测试 长文本通知测试 多行文本通知测试 图片通知测试 进度条通知测试 通知简介 应用可以通过通知接口发送通知消息&#xff0c;终端用户可以通过通知栏查看通知内容&#xff0c;也可以点击通知来打开应用。 通知常见的使用场景&#xff1a; 显示接收到的短消息、…

L1-099 帮助色盲 - java

L1-099 帮助色盲 代码长度限制 16 KB 时间限制 400 ms 内存限制 64 MB 栈限制 8192 KB 题目描述&#xff1a; 在古老的红绿灯面前&#xff0c;红绿色盲患者无法分辨当前亮起的灯是红色还是绿色&#xff0c;有些聪明人通过路口的策略是这样的&#xff1a;当红灯或绿灯亮起时&am…

VMware-Linux切换桥接模式上网教程(超详细)

这里写目录标题 1. 虚拟机关机2. VMware 虚拟网络配置2.1 检查是否存在 VMnet02.2 修改桥接模式2.3 修改Linux虚拟机网络适配器 3. Linux 系统配置3.1 修改系统网卡配置3.1.1 配置项含义解释3.1.2 查看物理机网络信息3.3.3 修改配置 3.2 重启服务 4. 测试网络连接情况5. 注意事…

数据可视化-ECharts Html项目实战(14)

在之前的文章中&#xff0c;我们深入学习ECharts鼠标左键触发。想了解的朋友可以查看这篇文章。同时&#xff0c;希望我的文章能帮助到你&#xff0c;如果觉得我的文章写的不错&#xff0c;请留下你宝贵的点赞&#xff0c;谢谢。 数据可视化-ECharts Html项目实战&#xff08;…

目标检测——YOLOv7算法解读

论文&#xff1a;YOLOv7: Trainable bag-of-freebies sets new state-of-the-art for real-time object detectors (2022.7.6) 作者&#xff1a;Chien-Yao Wang, Alexey Bochkovskiy, Hong-Yuan Mark Liao 链接&#xff1a;https://arxiv.org/abs/2207.02696 代码&#xff1a;h…

Bayes判别示例数据:鸢尾花数据集

使用Bayes判别的R语言实例通常涉及使用朴素贝叶斯分类器。朴素贝叶斯分类器是一种简单的概率分类器&#xff0c;基于贝叶斯定理和特征之间的独立性假设。在R中&#xff0c;我们可以使用e1071包中的naiveBayes函数来实现这一算法。下面&#xff0c;我将通过一个简单的示例展示如…

vue 实现左侧导航栏,右侧锚点定位滚动到指定位置(超简单方法)

项目截图&#xff1a; 实现方法&#xff1a; 点击左侧菜单根据元素id定位到可视内容区域。 浏览器原生提供了一种方法scrollIntoView 。 通过scrollIntoView方法可以把元素滚动到可视区域内。 behavior: "smooth"是指定滚动方式为平滑效果。 具体代码如下&#xf…

Flink CDC详解

文章目录 Flink CDC一 CDC简介1.1 CDC定义1.2 CDC应用场景1.3 CDC实现机制1.4 开源CDC工具对比 二 Flink CDC简介2.1 Flink CDC介绍2.2 Flink CDC Connector(连接器)2.3 Flink CDC && Flink版本2.4 Flink CDC特点 三 Flink CDC发展3.1 发展历程3.2 背景Dynamic Table &…

微软发布Phi-3 Mini,性能媲美GPT-3.5、Llama-3,可在手机端运行

前言 微软发布了最新版的Phi系列小型语言模型(SLM) - Phi-3。这个系列包括3个不同参数规模的版本&#xff1a;Phi-3 Mini (38亿参数)、Phi-3 Small (70亿参数)和Phi-3 Medium (140亿参数)。 Phi系列模型是微软研究团队开发的小规模参数语言模型。从第一代Phi-1到第二代Phi-2&…

深度学习中的熵、交叉熵、相对熵(KL散度)、极大释然估计之间的联系与区别

熵的最初来源于热力学。在热力学中&#xff0c;熵代表了系统的无序程度或混乱程度&#xff0c;也可以理解为系统的热力学状态的一种度量。后来被广泛引用于各个领域中&#xff0c;如信息学、统计学、AI等&#xff0c;甚至社会学当中。接下来将大家领略一下深度学习中熵的应用。…

【高阶数据结构】B树 {B树的概念;B树的实现:节点设计,查找,插入,遍历,删除;B树的性能分析;B+树和B*树;B树的应用}

一、常见的搜索结构 以上结构适合用于数据量相对不是很大&#xff0c;能够一次性存放在内存中&#xff0c;进行数据查找的场景。如果数据量很大&#xff0c;比如有100G数据&#xff0c;无法一次放进内存中&#xff0c;那就只能放在磁盘上了&#xff0c;如果放在磁盘上&#xff…