一,lamp概述
lamp概述
LAMP 是一组开源软件的缩写,用于搭建动态网站或Web应用程序的基础环境。LAMP 代表了四个主要的组成部分:
- Linux:操作系统,LAMP 环境的基础。通常使用的是 Linux 发行版,如 CentOS、Ubuntu 等。
- Apache:Web 服务器软件,用于处理客户端请求和响应,是 LAMP 堆栈中的服务器组件。
- MySQL 或 MariaDB:数据库管理系统,用于存储和管理数据。MySQL 是最常见的选择,但 MariaDB 是 MySQL 的一个分支,功能和兼容性较高。
- PHP 或 Perl 或 Python:编程语言,用于开发Web应用的动态内容。最常用的是 PHP。
组件作用
-
Linux:提供操作系统和基础环境。它为所有其他组件提供支持,管理硬件资源,处理任务和进程,是整个堆栈的运行平台。
-
Apache:作为 Web 服务器,负责接收和处理客户端请求(如 HTTP 请求),并根据请求返回网页或数据。它可以处理静态内容(如 HTML 文件)和动态内容(由 PHP 等语言生成)。它还支持多种认证和安全配置,确保网站的正常运行。
-
MySQL/MariaDB:数据库管理系统,负责存储和管理应用程序的数据(如用户信息、产品目录、文章等)。MySQL 和 MariaDB 都使用 SQL(结构化查询语言)来与数据库进行交互,执行增删改查等操作。
-
PHP/Python/Perl:用于开发动态网页的脚本语言,主要处理用户的交互请求,生成动态内容。例如,PHP 脚本可以从数据库中提取信息,并将其格式化后返回给用户的浏览器。PHP 是 LAMP 堆栈中最常用的语言,但 Python 和 Perl 也可以在不同场景中使用。
构建顺序
-
安装 Linux 操作系统:首先,必须在服务器上安装一个 Linux 发行版。常见的选择有 CentOS、Ubuntu、Debian 等。
-
安装 Apache Web 服务器:在 Linux 上安装 Apache,配置并启动 Web 服务器。这通常包括设置虚拟主机、配置端口等。
-
安装 MySQL 或 MariaDB:安装数据库服务器,配置用户和权限。数据库用于存储应用程序的数据。
-
安装 PHP/Python/Perl:选择一种服务器端语言(如 PHP),并配置与 Apache 和 MySQL 的集成。安装所需的库和模块(如 PHP 的 MySQL 扩展)。
-
配置和优化:安装完组件后,通常需要进行一些基本的配置和性能调优,如调整 Apache 配置文件、数据库优化、启用缓存等。
-
开发和部署应用程序:完成环境搭建后,可以开始开发 Web 应用或将现有的应用程序部署到服务器上。
其他形式
LAMP 组合有一些不同的变体,通常是基于 LAMP 的某个组件替换为其他流行的技术。常见的替代形式包括:
-
LEMP:替代 Apache 为 Nginx(发音为 "Engine-X")作为 Web 服务器。Nginx 是一个轻量级、高效的 Web 服务器,常用于高并发的环境。
- L: Linux
- E: Nginx (pronounced "Engine-X")
- M: MySQL / MariaDB
- P: PHP
-
LAPP:替代 MySQL 为 PostgreSQL(一个功能更强大的开源关系型数据库管理系统)。
- L: Linux
- A: Apache
- P: PostgreSQL
- P: PHP
-
LEPP:将数据库改为 PostgreSQL,同时使用 Nginx 作为 Web 服务器。
- L: Linux
- E: Nginx
- P: PostgreSQL
- P: PHP
-
MEAN:替代传统的 LAMP 组件为基于 JavaScript 的全栈技术,用于构建现代化的 Web 应用。
- M: MongoDB(NoSQL 数据库)
- E: Express.js(Node.js 框架)
- A: Angular(前端框架)
- N: Node.js(后端 JavaScript 环境)
-
WAMP:使用 Windows 操作系统而非 Linux。
- W: Windows
- A: Apache
- M: MySQL
- P: PHP
-
MAMP:类似 WAMP,但是搭建环境是在 macOS 系统上。
- M: macOS
- A: Apache
- M: MySQL
- P: PHP
每种变体的选择取决于应用场景、性能需求、开发语言偏好等因素。
二,discuz论坛系统部署
环境准备
1,做好网络准备(要可以连通外网,最好是静态ip但是可以不是)
#关闭无线网卡(有时候打开可能会导致网络无法访问)
systemctl stop NetworkManager
systemctl disable NetworkManager
#测试连通性
ping www.baidu.com
2,设置主机名
hostnamectl set-hostname lamp
3,关闭防火墙
#关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
#关闭selinux
getenforce
setenforce 0
#永久关闭selinux
vim /etc/selinux/config
#修改SELINUX=disabled即可
4,配置yum源
【Linux】CentOS更换国内阿里云yum源(超详细)_centos换源-CSDN博客
#安装拓展源
yum install -y epel-release
安装apache
1,检测apache是否已经安装
rpm [选项] [命令] [软件包]
-i:安装软件包
-U:升级或安装软件包
-e:卸载软件包
-q:查询软件包
-qa:查询所有已安装的软件包
-qi:查询已安装软件包的详细信息
-ql:列出已安装软件包的所有文件
-qf:查询文件属于哪个已安装软件包
-V:验证已安装软件包的完整性
-R:列出包的依赖关系
-p:查看 .rpm 包文件内容
--force:强制安装或卸载软件包
rpm -qa |grep httpd
2,yum安装apache(软件叫httpd)
yum install -y httpd
3,修改配置文件
#配置/etc/httpd/conf/httpd.conf
vim /etc/httpd/conf/httpd.conf
#添加或者修改为ServerName localhost:80
#(80是指定访问端口)(localhost,表示主机地址到时候写ip或者域名都可以)
# 这个时候如果已经启动就可以重启进行生效,没有启动直接启动就可以了
systemctl start httpd
systemctl enable httpd #(建议开机启动)
4,查看监听端口
netstat -ntlp |grep httpd
安装mysql
1,检测mysql是否安装
rpm -q mysql
2,下载mysql的yum
wget https://dev.mysql.com/get/mysql80-community-release-el7-5.noarch.rpm
3,安装mysql扩展源与服务端
rpm -ivh mysql80-community-release-el7-5.noarch.rpm
#(这是安装扩展源)
yum install mysql-community-server -y
#如果验证报错就输入这条命令(etc/yum.repos.d/下)
sed -i 's/check=1/check=0/g' *.repo
4,启动mysql
systemctl start mysqld
systemctl enable mysqld
#或者
systemctl enable mysqld --now
5,查看监听端口
netstat -tulpn | grep mysql
netstat [选项]
-a: 显示所有连接和监听的端口
-t: 显示 TCP 协议的连接
-u: 显示 UDP 协议的连接
-l: 显示正在监听的端口
-n: 以数字格式显示地址和端口号(不进行域名解析)
-p: 显示与每个连接相关的进程 PID 和程序名称
-r: 显示路由表信息
-i: 显示网络接口的统计信息
-s: 显示每个协议的统计信息
-c: 持续输出网络连接信息(实时更新)
-tuln: 显示 TCP 和 UDP 协议正在监听的端口,并以数字格式显示
-g: 显示所有组播连接
-v: 显示详细信息
-A: 显示指定类型的套接字(如 UNIX 套接字)
-h: 显示帮助信息
6,初始化数据库(建议使用下面中间的)
命令(MySQL 8.0 版本及以上):
sudo mysqld --initialize
说明:
--initialize:用于初始化 MySQL 数据库。该命令会创建系统数据库、数据目录和临时文件等。
默认情况下,它会为 root 用户生成一个临时的随机密码,并将该密码存储在 MySQL 的错误日志中。
执行初始化命令后,你可以通过查看错误日志文件(通常在 /var/log/mysqld.log)来查找 root 用户的临时密码。
查看错误日志:
sudo cat /var/log/mysqld.log | grep 'temporary password'
通过临时密码登录 MySQL 并修改密码:
mysql -u root -p
输入刚刚找到的临时密码,然后修改 root 用户的密码:
ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';
------------------------------------------------------
对于 MySQL 5.7 及以下版本
sudo mysqld --initialize-insecure
这个命令会创建一个没有密码的 root 用户,适用于不想使用临时密码的情况。
确保在初始化数据库前,/var/lib/mysql 或你指定的数据目录已经存在并具有正确的权限。
#补充(建议使用这个)
mysql_secure_installation 是 MySQL 提供的一个脚本,用于对 MySQL 数据库进行初始安全配置,包括设置 root 密码、删除匿名用户、禁用远程 root 登录、删除测试数据库等。这是提高 MySQL 安全性的一个常见步骤。
1运行 mysql_secure_installation 脚本——》运行以下命令启动 MySQL 安全配置脚本:
sudo mysql_secure_installation
2脚本流程
Enter current password for root (enter for none):
输入当前 root 用户的密码。如果是第一次安装,默认没有密码(或者是你在初始化时生成的临时密码)。如果你没有设置密码,按回车键继续。(有些版本直接跳过)
Set root password? [Y/n]:
是否设置 root 用户的密码。如果选择 Y,将提示你输入并确认新的 root 密码。
建议设置一个强密码。密码:Ly123456|
Remove anonymous users? [Y/n]:
是否删除匿名用户。建议选择 Y,因为匿名用户存在安全风险。
Disallow root login remotely? [Y/n]:
是否禁用 root 用户的远程登录。建议选择 Y,这样只有本地可以登录 root 用户,增加安全性。
Remove test database and access to it? [Y/n]:
是否删除 test 数据库及其访问权限。建议选择 Y,因为 test 数据库是一个默认存在的测试数据库,通常不需要使用。
Reload privilege tables now? [Y/n]:
是否重新加载权限表以使配置生效。选择 Y
3完成配置
一旦你完成上述步骤,mysql_secure_installation 脚本将配置好你的 MySQL 安全设置,包括密码、权限和不必要的用户和数据库。
登录 MySQL:
mysql -u root -p'密码'
查看当前密码政策
SHOW VARIABLES LIKE 'validate_password%';
修改密码策略
validate_password.check_user_name
默认值: ON
功能: 如果启用(ON),则密码不能与用户名相同。
修改: 可以保持为 ON,因为这通常是一个安全设置。也可以将其设置为 OFF,允许密码与用户名相同。
SET GLOBAL validate_password.check_user_name = OFF;
validate_password.length
默认值: 8
功能: 设置密码的最小长度。
修改: 如果你想允许非常短的密码,可以将其设置为 1,这将允许密码长度为 1 个字符。
SET GLOBAL validate_password.length = 1;
validate_password.mixed_case_count
默认值: 1
功能: 要求密码中包含至少一个大写字母和一个小写字母。
修改: 你可以将此值设置为 0,以允许密码中没有大小写字母的混合。
SET GLOBAL validate_password.mixed_case_count = 0;
validate_password.number_count
默认值: 1
功能: 要求密码中包含至少一个数字。
修改: 你可以将此值设置为 0,以允许密码中不包含数字。
SET GLOBAL validate_password.number_count = 0;
validate_password.policy
默认值: MEDIUM
功能: 控制密码策略的强度。
LOW: 仅要求密码长度大于等于 8 个字符。
MEDIUM: 需要密码包含大写字母、小写字母、数字、特殊字符,并且长度至少为 8 个字符(默认值)。
STRONG: 更严格的密码复杂性要求。
0(禁用):完全禁用密码策略,允许任何密码。
SET GLOBAL validate_password.policy = 0;
validate_password.special_char_count
默认值: 1
功能: 要求密码中包含至少一个特殊字符(如 !, @, # 等)。
修改: 你可以将此值设置为 0,以允许密码中没有特殊字符。
SET GLOBAL validate_password.special_char_count = 0;
--------------------------copy版
SET GLOBAL validate_password.check_user_name = OFF;
SET GLOBAL validate_password.length = 1;
SET GLOBAL validate_password.mixed_case_count = 0;
SET GLOBAL validate_password.number_count = 0;
SET GLOBAL validate_password.policy = 0;
SET GLOBAL validate_password.special_char_count = 0;
更改 用户 密码
ALTER USER '用户名'@'localhost' IDENTIFIED BY 'ly'; -- 设置为简单密码
-- 或者设置为空密码(不推荐用于生产环境)
ALTER USER '用户'@'localhost' IDENTIFIED BY '';
在进行密码设置后,记得刷新权限,以使修改立即生效:
FLUSH PRIVILEGES;
------------------------------------------------还有一方法就是登录后
UNINSTALL PLUGIN validate_password;
禁用密码验证插件=SET GLOBAL validate_password.special_char_count = 0;
安装php
1,检测PHP是否安装
rpm -q php
或者
php -v
2,yum安装PHP
sudo yum install php php-cli php-common php-mysql php-fpm -y
3,重启httpd服务
安装或更新 PHP 后,需要重启 httpd 服务,使得新的 PHP 设置生效。
sudo systemctl restart httpd
如果你使用的是 Nginx,则需要重启 Nginx 服务:
sudo systemctl restart nginx
4,测试lamp环境是否可用
创建测试 PHP 文件
在 Apache 的默认 Web 根目录(通常是 /var/www/html)下创一个 PHP文件
例如:
sudo echo "<?php phpinfo(); ?>" > /var/www/html/info.php
确保 Apache 具有该文件的适当权限
sudo chmod 644 /var/www/html/info.php
访问测试页面
打开浏览器:
访问 http://your_server_ip/info.php
http://localhost/info.php(如果在本机上测试)。
部署discuz论坛
https://gitee.com/Discuz/DiscuzX
按照自己会的来,下载zip可以,用git也可以,使用git命令要先安装git。
解压文件要安装zip与unzip,如果是git下来的就不用解压。
(对了让我们先删除之前的info.php吧)
cp -r DiscuzX/upload/* /var/www/html
upload内全是源文件,-r表示复制目录和文件,而且会递归
刷新之前链接的网址就可以了,对了去掉/info.php的后缀
这里开始就是图形化操作了:————————{ ^t^ }————————
默认进入是这样的:一次确定,一次取消
这里有错误,是因为php版本不够,虽然是一样的,但是要高一些才可以:
安装 EPEL 和 Remi 仓库: sudo yum install -y epel-release sudo yum install -y https://rpms.remirepo.net/enterprise/remi-release-7.rpm 启用 Remi 仓库: sudo yum install -y yum-utils sudo yum-config-manager --enable remi-php74 # 启用 PHP 7.4 仓库,或选择其他版本 你可以替换 remi-php74 为你想要的 PHP 版本。例如: remi-php80(PHP 8.0) remi-php81(PHP 8.1) 安装 PHP 新版本 sudo yum install -y php php-cli php-common php-mysqlnd php-fpm php-xml php-mbstring php-json php-zip php-opcache php-intl 确认 PHP 版本 php -v 重启 Apache 或 Nginx 服务 sudo systemctl restart httpd【nginx】
完成后就是这样,还是报错:没有权限怎么办,给他(复制我的命令吧,chmod -R a+w /var/www/html)
(刷新一下就好了)
点击下一步继续吧,对了因为httpd默认作为网站,当然只可以读了,要是对所有人都可读可写那不是太low了吗,所以(drwxr-xr-x. 13 root root 4096 12月 1 17:09 html
),而这个论坛要变就要有写,所以才要该权限。安装全新的独立模式
下一步:如图:(记录一下我的admin密码是ly怕忘了)
下一步就完成了:
访问测试
三,wordpress博客系统部署(可以略过)
环境准备
1,关闭无线网卡
systemctl stop NetworkManager
2,设置主机名
hostnamectl set-hostname wordpress
3,关闭防火墙
systemctl disable firewalld --now
4,配置yum源
【Linux】CentOS更换国内阿里云yum源(超详细)_centos换源-CSDN博客
(csdn找:下载源码安装包)
编译安装mysql
安装编译 MySQL 所需的开发工具和库
sudo yum groupinstall "Development Tools" -y
sudo yum install -y cmake ncurses-devel bison gcc-c++ libaio-devel libssl-devel
下载 MySQL 源代码
访问 MySQL 官方下载页面(选择你需要的版本):https://dev.mysql.com/downloads/mysql/
使用 wget 下载 MySQL 源代码:
cd /opt
sudo wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.27.tar.gz
解压源代码
sudo tar -zxvf mysql-8.0.27.tar.gz
cd mysql-8.0.27
创建 MySQL 用户和组
sudo groupadd mysql
sudo useradd -r -g mysql mysql
创建安装目录
选择一个目录来存放 MySQL 数据和文件。例如,使用 /usr/local/mysql 作为安装目录。
sudo mkdir /usr/local/mysql
sudo mkdir /var/lib/mysql(数据目录)
sudo mkdir /var/log/mysql(日志目录)
设置相应的权限:
sudo chown -R root:root /usr/local/mysql
sudo chown -R mysql:mysql /var/lib/mysql
sudo chown -R mysql:mysql /var/log/mysql
配置编译选项(到达源码目录)
下面直接复制执行,斜杠表示换行,注释去掉
cmake . \
-DCMAKE_INSTALL_PREFIX=$INSTALL_DIR \ # 设置安装路径
-DMYSQL_DATADIR=$DATA_DIR \ # 设置数据目录
-DSYSCONFDIR=$CONFIG_DIR \ # 设置配置文件目录
-DWITH_SSL=$ENABLE_SSL \ # 启用 SSL 支持
-DWITH_ZLIB=$ENABLE_ZLIB \ # 启用 Zlib 支持
-DDEFAULT_CHARSET=$DEFAULT_CHARSET \ # 设置默认字符集
-DDEFAULT_COLLATION=$DEFAULT_COLLATION \ # 设置默认字符序
-DWITH_INNOBASE_STORAGE_ENGINE=$ENABLE_INNODB \ # 启用 InnoDB 存储引擎
-DWITH_ARCHIVE_STORAGE_ENGINE=$ENABLE_ARCHIVE \ # 启用 Archive 存储引擎
-DWITH_PARTITION_STORAGE_ENGINE=$ENABLE_PARTITION \ # 启用 Partition 存储引擎
-DWITH_FAM=$ENABLE_FAM \ # 启用文件监控(FAM)
-DWITH_BOOST=$ENABLE_BOOST # 启用 Boost 库支持(根据需要)
编译 MySQL
sudo make
安装 MySQL
sudo make install
初始化 MySQL 数据目录
cd /usr/local/mysql
sudo ./bin/mysqld --initialize --user=mysql --datadir=/var/lib/mysql -- basedir=/usr/local/mysql
sudo cat /var/log/mysqld.log | grep 'temporary password'
设置系统服务
nano /etc/systemd/system/mysql.service
添加以下内容:
[Unit]
Description=MySQL Community Server
Documentation=https://dev.mysql.com/doc/refman/en/
After=network.target
[Service]
Type=forking
ExecStart=/usr/local/mysql/bin/mysqld --daemonize --pid- file=/var/run/mysqld/mysqld.pid
ExecStartPost=/usr/local/mysql/bin/mysqladmin -u root -p$MYSQL_ROOT_PASSWORD shutdown
ExecStop=/usr/local/mysql/bin/mysqladmin -u root -p$MYSQL_ROOT_PASSWORD shutdown
User=mysql
Group=mysql
LimitNOFILE=65535
[Install]
WantedBy=multi-user.target
重新加载 systemd 配置并启用 MySQL 服务:
sudo systemctl daemon-reload
sudo systemctl enable mysql
启动 MySQL 服务
sudo systemctl start mysql
安全配置
sudo /usr/local/mysql/bin/mysql_secure_installation
配置 MySQL 允许远程连接(可选)
sudo nano /etc/my.cnf
在 [mysqld] 部分添加以下内容,允许 MySQL 从任何 IP 地址进行远程连接:
bind-address = 0.0.0.0
重启 MySQL 服务:
sudo systemctl restart mysql
验证 MySQL 安装
/usr/local/mysql/bin/mysql -u root -p
#!/bin/bash
# MySQL 编译配置脚本
# 在 CentOS 7 上编译安装 MySQL,配置选项注释详解。
# 创建 MySQL 系统用户和组
# MySQL 安装后需要创建专用的用户和组
sudo groupadd mysql
sudo useradd -r -g mysql mysql
# 设置安装路径
INSTALL_DIR="/usr/local/mysql"
# 设置数据目录
DATA_DIR="/var/lib/mysql"
# 设置系统配置文件目录
CONFIG_DIR="/etc"
# 启用或禁用存储引擎
ENABLE_INNODB="1" # 启用 InnoDB 存储引擎
ENABLE_ARCHIVE="1" # 启用 Archive 存储引擎
ENABLE_PARTITION="1" # 启用 Partition 存储引擎(根据需求选择)
# 启用 SSL 加密支持
ENABLE_SSL="system" # 启用 SSL 支持,使用系统的 SSL 库
# 启用 Zlib 支持
ENABLE_ZLIB="system" # 启用 Zlib 支持,使用系统的 Zlib 库
# 默认字符集和字符序设置
DEFAULT_CHARSET="utf8mb4" # 设置默认字符集为 utf8mb4
DEFAULT_COLLATION="utf8mb4_unicode_ci" # 设置默认字符序为 utf8mb4_unicode_ci
# 设置文件监控(FAM)支持
ENABLE_FAM="system" # 启用文件监控(FAM)支持,使用系统的 FAM 库
# 启用 Boost 库支持(如果需要)
ENABLE_BOOST="/path/to/boost" # 设置 Boost 库路径(如果需要 Boost 库支持)
# 设置编译类型
BUILD_TYPE="Release" # 设置为 Release 模式,适用于生产环境
# 启用 MySQL 客户端和服务端的相关功能
ENABLE_CLIENT="1" # 启用 MySQL 客户端
ENABLE_SERVER="1" # 启用 MySQL 服务端
# 创建 MySQL 编译所需的目录
mkdir -p $INSTALL_DIR
mkdir -p $DATA_DIR
mkdir -p $CONFIG_DIR
# 执行 cmake 配置命令
echo "开始配置 MySQL 编译选项..."
cmake . \
-DCMAKE_INSTALL_PREFIX=$INSTALL_DIR \
-DMYSQL_DATADIR=$DATA_DIR \
-DSYSCONFDIR=$CONFIG_DIR \
-DWITH_SSL=$ENABLE_SSL \
-DWITH_ZLIB=$ENABLE_ZLIB \
-DDEFAULT_CHARSET=$DEFAULT_CHARSET \
-DDEFAULT_COLLATION=$DEFAULT_COLLATION \
-DWITH_INNOBASE_STORAGE_ENGINE=$ENABLE_INNODB \
-DWITH_ARCHIVE_STORAGE_ENGINE=$ENABLE_ARCHIVE \
-DWITH_PARTITION_STORAGE_ENGINE=$ENABLE_PARTITION \
-DWITH_FAM=$ENABLE_FAM \
-DWITH_BOOST=$ENABLE_BOOST
echo "配置完成,可以开始编译 MySQL..."
# 执行 make 编译命令
make
# 安装 MySQL
sudo make install
echo "MySQL 编译安装完成!"
# 初始化 MySQL 数据目录
# 初始化数据目录,并生成一个临时的 root 密码
sudo $INSTALL_DIR/bin/mysqld --initialize --user=mysql --datadir=$DATA_DIR --basedir=$INSTALL_DIR
# 提示用户查看临时 root 密码
echo "MySQL 初始化完成,请查看临时 root 密码:"
sudo cat /var/log/mysqld.log | grep 'temporary password'
# 安装并启用 systemd 服务
# 创建 MySQL 的 systemd 服务文件,确保 MySQL 可以随系统启动
echo "创建 MySQL 服务文件..."
sudo bash -c 'cat > /etc/systemd/system/mysql.service <<EOF
[Unit]
Description=MySQL Community Server
After=network.target
[Service]
Type=forking
ExecStart=$INSTALL_DIR/bin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid
ExecStartPost=$INSTALL_DIR/bin/mysqladmin -u root -p$MYSQL_ROOT_PASSWORD shutdown
ExecStop=$INSTALL_DIR/bin/mysqladmin -u root -p$MYSQL_ROOT_PASSWORD shutdown
User=mysql
Group=mysql
LimitNOFILE=65535
[Install]
WantedBy=multi-user.target
EOF'
# 重新加载 systemd 服务并启用 MySQL
sudo systemctl daemon-reload
sudo systemctl enable mysql
sudo systemctl start mysql
echo "MySQL 服务已启动!"