LAMP架构详解+构建LAMP平台之Discuz论坛

L A M P

  • 一、LAMP架构简介
    • [1.1 LAMP架构的组成](#1.1 LAMP架构的组成)
    • [1.2 LAMP各组件的主要作用](#1.2 LAMP各组件的主要作用)
    • [1.3 LAMP工作过程](#1.3 LAMP工作过程)
    • [1.4 CGI和fastcgi](#1.4 CGI和fastcgi)
  • 二、搭建Discuz论坛的思路
  • [三、编译安装Apache httpd](#三、编译安装Apache httpd)
    • [3.1 前置准备](#3.1 前置准备)
    • [3.2 移动apr包 apr-util包到安装目录中,并切换到 httpd-2.4.29目录中](#3.2 移动apr包 apr-util包到安装目录中,并切换到 httpd-2.4.29目录中)
    • [3.3 编译安装](#3.3 编译安装)
    • [3.4 建立软连接,方便补全](#3.4 建立软连接,方便补全)
    • [3.5 添加httpd系统服务](#3.5 添加httpd系统服务)
    • [3.6 修改配置文件](#3.6 修改配置文件)
  • 四、编译安装Mysql
    • [4.1 前置准备](#4.1 前置准备)
    • [4.2 解压源代码包](#4.2 解压源代码包)
    • [4.3 配置软件模块](#4.3 配置软件模块)
    • [4.4 修改MySQL配置文件](#4.4 修改MySQL配置文件)
    • [4.5 设置路径环境变量](#4.5 设置路径环境变量)
    • [4.6 初始化数据库](#4.6 初始化数据库)
    • [4.7 添加mysqld系统服务](#4.7 添加mysqld系统服务)
    • [4.8 修改mysql 的登录密码](#4.8 修改mysql 的登录密码)
  • 五、编译安装PHP
    • [5.1 前置准备](#5.1 前置准备)
    • [5.2 配置软件模块,编译安装php](#5.2 配置软件模块,编译安装php)
    • [5.3 复制模版文件作为PHP 的主配置文件,进行修改](#5.3 复制模版文件作为PHP 的主配置文件,进行修改)
    • [5.4 优化把PHP 的可执行程序文件放入路径环境变量的目录中便于系统识别](#5.4 优化把PHP 的可执行程序文件放入路径环境变量的目录中便于系统识别)
    • [5.5 修改httpd 服务的配置文件,让apache支持PHP](#5.5 修改httpd 服务的配置文件,让apache支持PHP)
    • [5.6 验证PHP 测试页](#5.6 验证PHP 测试页)
  • 六、安装论坛
    • [6.1 以 root 用户身份登录到 MySQL 数据库,进行配置](#6.1 以 root 用户身份登录到 MySQL 数据库,进行配置)
    • [6.2 解压Discuz源码包](#6.2 解压Discuz源码包)
    • [6.3 更改论坛目录的属主](#6.3 更改论坛目录的属主)
    • [6.4 安装Discuz论坛](#6.4 安装Discuz论坛)
    • [6.5 访问192.168.2.100/bbs ,进入Discuz论坛界面](#6.5 访问192.168.2.100/bbs ,进入Discuz论坛界面)

一、LAMP架构简介

1.1 LAMP架构的组成

LAMP 架构是一种常见的用于构建动态网站的技术栈。

组成部分 功能
Linux (操作系统) LAMP 架构的基础,用于托管 Web 服务器和应用程序。
Apache (Web 服务器) 接收和处理客户端请求,并将静态和动态内容发送给客户端。
MySQL (数据库): 存储和检索应用程序的数据
PHP (编程语言) 用于动态生成网页内容。

1.2 LAMP各组件的主要作用

Linux 提供了可靠的操作系统环境;

Apache负责处理客户端的请求;

MySQL负责存储和检索数据 ;

PHP 负责处理业务逻辑并生成网页内容。

1.3 LAMP工作过程

静态资源

当客户端请求的是静态资源时,web服务器会直接把静态资源返回给客户端。

动态资源

当客户端请求的是动态资源时,httpd的PHP模块会进行相应的动态资源运算。

如果此过程还需要数据库的数据作为运算参数时,php会连接mysql取得数据然后进行运算。

运算的结果转为静态资源由web服务器返回到客户端;

1.4 CGI和fastcgi

CGI(通用网关接口)和FastCGI(快速公共网关接口)都是用于将Web服务器与后端应用程序(如PHP、Python等)进行交互的协议/接口。

特点 CGI FastCGI
运行方式 每个请求启动新的进程 复用进程处理多个请求
性能 每个请求需要重新加载代码 多个请求共享同一份代码
资源消耗 每个请求都需要消耗大量资源 多个请求间资源共享
扩展性 难以扩展 更容易实现扩展性
缓存能力 依赖于服务器配置 有较好的缓存能力
安全性 比较低 更高
适用场景 适用于小型或低流量应用 适用于高流量或复杂应用

二、搭建Discuz论坛的思路

在构建LAMP平台时,各组件的安装顺序依次为Linux、Apache、MySQL、PHP。

编译安装Apache httpd服务 ----->编译安装MySQL----->编译安装PHP ----->搭建LAMP平台

三、编译安装Apache httpd

3.1 前置准备

bash 复制代码
systemctl disable --now firewalld #开机自动关闭防火墙

setenforce 0

yum -y install gcc gcc-c++ make pcre-devel expat-devel perl pcre#安装依赖环境
bash 复制代码
解压软件包

3.2 移动apr包 apr-util包到安装目录中,并切换到 httpd-2.4.29目录中

bash 复制代码
mv apr-1.6.2 httpd-2.4.29/srclib/apr

mv apr-util-1.6.0 httpd-2.4.29/srclib/apr-util

cd httpd-2.4.29;ls 

3.3 编译安装

bash 复制代码
#检测编译环境 加功能
./configure --prefix=/test/httpd --enable-so --enable-rewrite --enable-charset-lite --enable-cgi 

#--enable-so  启用动态加载模块支持,使httpd具备进一步扩展功能的能力
#--enable-rewrite 启用网页地址的重写功能,用于网站优化、防盗链及目录迁移维护   
#--enable-charset-lite 启用字符集支持,以便支持使用各种字符集编码的页面
#--enable-cgi  启用CGI(通用网关接口)脚本程序支持,便于网站外部扩展应用访问的能力

make j2 && make install #安装 

3.4 建立软连接,方便补全

bash 复制代码
cp /test/httpd/bin/apachectl  /etc/init.d/httpd
#将文件拷入/etc/init.d/httpd
ln -s /test/httpd/conf/httpd.conf /etc/
#建立配置文件软连接放入etc目录下
ln -s /test/httpd/bin/* /usr/local/bin/

3.5 添加httpd系统服务

bash 复制代码
#新建.service文件
vim /usr/lib/systemd/system/httpd.service 

[Unit]
Description=The Apache HTTP Server    
After=network.target 

[Service]
Type=forking
PIDFile=/test/httpd/logs/httpd.pid
ExecStart=/test/httpd/bin/apachectl $OPTIONS
ExecReload=/bin/kill -HUP ${MAINPID}

[Install]
WantedBy=multi-user.target

systemctl daemon-reload
systemctl start httpd.service;systemctl status httpd.service
bash 复制代码
ss -ntap |grep 80

3.6 修改配置文件

bash 复制代码
vim /test/httpd/httpd.conf

--52行--修改
Listen 192.168.2.100:80
--197行--取消注释,修改
ServerName www.byyd.com:80

--221行--默认首页存放路径
DocumentRoot "/test/httpd/htdocs"
--255行--默认首页文件名设置
DirectoryIndex index.html


bash 复制代码
httpd -t  #语法检查

cat /test/httpd/htdocs/index.html

systemctl restart httpd.service;systemctl status httpd


四、编译安装Mysql

4.1 前置准备

bash 复制代码
systemctl disable --now firewalld #开机自动关闭防火墙

setenforce 0

yum install -y ncurses-devel autoconf cmake#安装依赖环境

useradd -s /sbin/nologin  mysql#一定要新建用户

4.2 解压源代码包

bash 复制代码
mv boost_1_59_0  /test/boost 

4.3 配置软件模块

bash 复制代码
cd /rw/mysql-5.7.20/

cmake \
#指定将 mysql 数据库程序安装到某目录下
-DCMAKE_INSTALL_PREFIX=/test/mysql \ 
#指定套接字文件的存储路径,数据库连接的文件
-DMYSQL_UNIX_ADDR=/test/mysql/mysql.sock \
#指定配置文件的存储路径
-DSYSCONFDIR=/etc \
#指定进程文件的存储路径
-DSYSTEMD_PID_DIR=/test/mysql \
#指定默认使用的字符集编码为utf8
-DDEFAULT_CHARSET=utf8  \
#指定默认使用的字符集校对规则
-DDEFAULT_COLLATION=utf8_general_ci \
#指定支持其他字符集编码
-DWITH_EXTRA_CHARSETS=all \
#安装INNOBASE存储引擎 ARCHIVE存储引擎 BLACKHOLE存储引擎  FEDERATED存储引擎
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \
#指定数据库文件的存储路径
-DMYSQL_DATADIR=/test/mysql/data \
#指定boost的路径
-DWITH_BOOST=/test/boost \
#生成便于systemctl管理的文件
-DWITH_SYSTEMD=1
bash 复制代码
make j2 && make install  #编译安装


bash 复制代码
chown -R mysql:mysql /test/mysql/  #改变数据库目录的属主属组

4.4 修改MySQL配置文件

bash 复制代码
vim /etc/my.cnf #删除原配置,添加新配置
#客户端配置
[client] 
port = 3306
default-character-set=utf8
socket = /test/mysql/mysql.sock
#服务端配置
[mysql]
port = 3306
default-character-set=utf8
socket = /test/mysql/mysql.sock
#服务端全局配置
[mysqld]
user = mysql
basedir = /test/mysql
datadir = /test/mysql/data
port = 3306
character_set_server=utf8
pid-file = /test/mysql/mysqld.pid
socket = /test/mysql/mysql.sock
server-id = 1
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_A    UTO_VALUE_ON_ZERO,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,PI    PES_AS_CONCAT,ANSI_QUOTES
/etc/my.cnf
bash 复制代码
chown mysql:mysql /etc/my.cnf #改变配置文件的属主属组

4.5 设置路径环境变量

bash 复制代码
#将 MySQL 的可执行文件和库文件的路径添加到系统的环境变量中
#可以直接运行 MySQL 相关的命令,而不需要每次都输入完整的路径

echo 'PATH=/test/mysql/bin:/test/mysql/lib:$PATH' >> /etc/profile
echo 'export PATH' >> /etc/profile
source /etc/profile #刷新使生效

4.6 初始化数据库

bash 复制代码
cd /test/mysql/

bin/mysqld \
--initialize-insecure \
--user=mysql \
--basedir=/test/mysql \
--datadir=/test/mysql/data

4.7 添加mysqld系统服务

bash 复制代码
cp /test/mysql/usr/lib/systemd/system/mysqld.service /usr/lib/systemd/system/ 
#能用systemd启动
bash 复制代码
#刷新识别 
systemctl daemon-reload             
#开启服务
systemctl start mysqld.service   
#开机自启动
systemctl enable mysqld  
        
#查看端口
ss -natp | grep 3306        

4.8 修改mysql 的登录密码

bash 复制代码
mysqladmin -u root -p password "abc123" 

五、编译安装PHP

5.1 前置准备

bash 复制代码
#安装GD库和GD库关联程序,用来处理和生成图片
yum -y install \
gd \
libjpeg libjpeg-devel \
libpng libpng-devel \
freetype freetype-devel \
libxml2 libxml2-devel \
zlib zlib-devel \
curl curl-devel \
openssl openssl-devel
bash 复制代码
#解压源代码包
tar jxvf php-7.1.10.tar.bz2

5.2 配置软件模块,编译安装php

bash 复制代码
cd /rw/php-7.1.10/
bash 复制代码
#检测编译环境
./configure \
#指定将 PHP 程序的安装路径
--prefix=/test/php7 \
#指定Apache httpd服务提供的apxs 模块支持程序的文件位置
--with-apxs2=/test/httpd/bin/apxs \
#指定mysql 数据库连接文件的存储路径
--with-mysql-sock=/test/mysql/mysql.sock \
#设置 PHP 的配置文件 php.ini 将要存放的位置
--with-config-file-path=/test/php7 \
#添加 MySQL 扩展支持
--with-mysqli \
#支持zlib功能,提供数据压缩
--with-zlib \
#开启curl扩展功能,实现HTTP的Get下载和Post请求的方法
--with-curl \
#激活gd库/的支持 激活jpeg 的支持 激活png的支持
--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 \
#zip压缩格式
--enable-zip
bash 复制代码
make -j2 && make install #安装

5.3 复制模版文件作为PHP 的主配置文件,进行修改

bash 复制代码
cp /rw/php-7.1.10/php.ini-development /test/php7/php.ini

vim /test/php7/php.ini


5.4 优化把PHP 的可执行程序文件放入路径环境变量的目录中便于系统识别

bash 复制代码
ln -s /test/php7/bin/* /usr/local/bin/

php -m #查看功能模块

5.5 修改httpd 服务的配置文件,让apache支持PHP

bash 复制代码
vim /etc/httpd.conf


5.6 验证PHP 测试页

bash 复制代码
rm -rf /test/httpd/htdocs/index.html

vim /test/httpd/htdocs/index.php
bash 复制代码
systemctl restart httpd.service #重启服务

打开浏览器,输入本机IP地址

六、安装论坛

6.1 以 root 用户身份登录到 MySQL 数据库,进行配置

bash 复制代码
mysql -u root -p 
#以 root 用户身份登录到 MySQL 数据库
bash 复制代码
mysql> CREATE DATABASE bbs;  #创建一个数据库

mysql> GRANT all ON bbs.* TO 'bbsuser'@'%' IDENTIFIED BY 'admin123';  #把bbs数据库里面所有表的权限授予给bbsuser,并设置密码

mysql>flush privileges; #刷新数据库

6.2 解压Discuz源码包

bash 复制代码
unzip /rw/Discuz_X3.4_SC_UTF8.zip -d /rw/dis #解压

cd /rw/dis/dir_SC_UTF8/

cp -r upload/ /test/httpd/htdocs/bbs

6.3 更改论坛目录的属主

bash 复制代码
cd /test/httpd/htdocs/bbs

chown -R daemon ./config
chown -R daemon ./data
chown -R daemon ./uc_client
chown -R daemon ./uc_server/data


6.4 安装Discuz论坛


6.5 访问192.168.2.100/bbs ,进入Discuz论坛界面

相关推荐
Lary_Rock42 分钟前
RK3576 LINUX RKNN SDK 测试
linux·运维·服务器
云飞云共享云桌面3 小时前
8位机械工程师如何共享一台图形工作站算力?
linux·服务器·网络
Peter_chq3 小时前
【操作系统】基于环形队列的生产消费模型
linux·c语言·开发语言·c++·后端
一坨阿亮4 小时前
Linux 使用中的问题
linux·运维
dsywws5 小时前
Linux学习笔记之vim入门
linux·笔记·学习
Dann Hiroaki6 小时前
GPU架构概述
架构
幺零九零零6 小时前
【C++】socket套接字编程
linux·服务器·网络·c++
wclass-zhengge6 小时前
Docker篇(Docker Compose)
运维·docker·容器
李启柱6 小时前
项目开发流程规范文档
运维·软件构建·个人开发·设计规范
茶馆大橘6 小时前
微服务系列五:避免雪崩问题的限流、隔离、熔断措施
java·jmeter·spring cloud·微服务·云原生·架构·sentinel