所谓LAMT,其实就是由Linux+Apache+Mysql/MariaDB+Tomcat的一组动态网站或者服务器的开源软件,除Linux外其它各部件本身都是各自独立的程序,但是因为经常被放在一起使用,拥有了越来越高的兼容度,共同组成了一个强大的Web应用程序平台。
LAMP指的是Linux(操作系统)、Apache(HTTP服务器)、MySQL(也指MariaDB,数据库软件)和Tomcat的第一个字母,一般用来建立web应用平台。
Lamt的环境
| 平台系统 | IP | 主机名 | 安装的服务 |
|---|---|---|---|
| centos8/redhat8 | 192.168.229.143 | node1 | httpd-2.4.54 mysql-5.7 tomcat-9.0.65 |
安装centosyum源
[root@node1 ~]# cd /etc/yum.repos.d/
[root@node1 yum.repos.d]# curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-vault-8.5.2111.repo
[root@node1 yum.repos.d]# sed -i -e '/mirrors.cloud.aliyuncs.com/d' -e '/mirrors.aliyuncs.com/d' /etc/yum.repos.d/CentOS-Base.repo
## 清除缓存
[root@node1 ~]# dnf clean all
## 建立缓存
[root@node1 ~]# dnf makecache
安装epel源
[root@node1 yum.repos.d]# yum install -y https://mirrors.aliyun.com/epel/epel-release-latest-8.noarch.rpm
[root@node1 yum.repos.d]# sed -i 's|^#baseurl=https://download.example/pub|baseurl=https://mirrors.aliyun.com|' /etc/yum.repos.d/epel*
[root@node1 yum.repos.d]# sed -i 's|^metalink|#metalink|' /etc/yum.repos.d/epel*
## 清除缓存
[root@node1 ~]# dnf clean all
## 建立缓存
[root@node1 ~]# dnf makecache
## 永久关闭防火墙,并开机不自启
[root@node1 ~]# systemctl disable --now firewalld
## 永久关闭SElinux
[root@node1 ~]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
[root@node1 ~]# grep 'SELINUX=disabled' /etc/selinux/config
SELINUX=disabled
## 重启
[root@node1 ~]# reboot
## 创建一个系统用户
[root@node1 ~]# useradd -r -M -s /sbin/nologin apache
[root@node1 ~]# id apache
uid=995(apache) gid=992(apache) groups=992(apache)
## 下载 依赖包
[root@node1 ~]# dnf -y install openssl-devel pcre-devel expat-devel libtool make gcc gcc-c++
### 下载软件包
[root@node1 ~]# cd /usr/src/
[root@node1 src]# wget https://downloads.apache.org/apr/apr-1.7.0.tar.gz
[root@node1 src]# wget https://downloads.apache.org/apr/apr-util-1.6.1.tar.gz
[root@node1 src]# https://downloads.apache.org/httpd/httpd-2.4.54.tar.gz
## 解压软件包
[root@node1 src]# tar xf apr-1.7.0.tar.gz
[root@node1 src]# tar xf apr-util-1.6.1.tar.gz
[root@node1 src]# tar xf httpd-2.4.54.tar.gz
[root@node1 src]# ls
apr-1.7.0 apr-1.7.0.tar.gz apr-util-1.6.1 apr-util-1.6.1.tar.gz debug httpd-2.4.54 httpd-2.4.54.tar.gz kernels
## 进行源码编译三部曲
#### 安装Apr
[root@node1 ~]# cd /usr/src/apr-1.7.0
[root@node1 apr-1.7.0]# sed -n '/$RM "$cfgfile"/p' configure
$RM "$cfgfile" ## 删除这个
[root@node1 apr-1.7.0]# sed -i '/$RM "$cfgfile"/d' configure
[root@node1 apr-1.7.0]# ./configure --prefix=/usr/local/apr
....省略N
[root@node1 apr-1.7.0]# make
....省略N
[root@node1 apr-1.7.0]# make install
....省略N
### 安装 Apr-util
[root@node1 apr-1.7.0]# cd ../apr-util-1.6.1
[root@node1 apr-util-1.6.1]# ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr
....省略N
[root@node1 apr-util-1.6.1]# make
....省略N
[root@node1 apr-util-1.6.1]# make install
....省略N
### 安装httpd
[root@node1 apr-util-1.6.1]# cd ../httpd-2.4.54
[root@node1 httpd-2.4.54]# ./configure --prefix=/usr/local/apache \
--enable-so \
--enable-ssl \
--enable-cgi \
--enable-rewrite \
--with-zlib \
--with-pcre \
--with-apr=/usr/local/apr \
--with-apr-util=/usr/local/apr-util/ \
--enable-modules=most \
--enable-mpms-shared=all \
--with-mpm=prefork
[root@node1 httpd-2.4.54]# make
....省略N
[root@node1 httpd-2.4.54]# make install
....省略N
## 设置环境变量
[root@node1 ~]# echo 'export PATH=/usr/local/apache/bin:$PATH' > /etc/profile.d/apache.sh
[root@node1 ~]# source /etc/profile.d/apache.sh
[root@node1 ~]# which httpd
/usr/local/apache/bin/httpd
## 软连接
[root@node1 ~]# ln -s /usr/local/apache/include /usr/include/apache
## 配置man文档
[root@node1 ~]# vim /etc/man_db.conf
....省略N
MANDATORY_MANPATH /usr/local/share/man
MANDATORY_MANPATH /usr/local/apache/man ## 添加
## 设置环境变量,并开机自启
[root@node1 ~]# cd /usr/lib/systemd/system
[root@node1 system]# cp sshd.service httpd.service
[root@node1 system]# vim httpd.service
[Unit]
Description=httpd server daemon
After=network.target sshd-keygen.target
[Service]
Type=forking
ExecStart=/usr/local/apache/bin/apachectl start
ExecStop=/usr/local/apache/bin/apachectl stop
ExecReload=/bin/kill -HUP $MAINPID
[Install]
WantedBy=multi-user.target
## 刷新守护进程
[root@node1 ~]# systemctl daemon-reload
[root@node1 ~]# systemctl status httpd
● httpd.service - httpd server daemon
Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor preset: disabled)
Active: inactive (dead)
## 启动,并开机自动。
[root@node1 ~]# systemctl enable --now httpd
[root@node1 ~]# systemctl status httpd
● httpd.service - httpd server daemon
Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled)
Active: active (running) since Mon 2022-08-15 14:50:16 CST; 21s ago
访问
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ttHyxScn-1660783977942)(../../%E5%8D%9A%E5%AE%A2/%E7%A0%B4%E8%A7%A3%E5%AF%86%E7%A0%81/1660551765875.png)]](https://1000bd.com/contentImg/2024/03/30/302049e8b3c7762f.png)
## 创建一个系统用户mysql
[root@node1 ~]# useradd -r -M -s /sbin/nologin mysql
[root@node1 ~]# id mysql
uid=994(mysql) gid=991(mysql) groups=991(mysql)
## 下载依赖包
[root@node1 ~]# dnf -y install ncurses-compat-libs openssl-devel openssl cmake mariadb-devel
## 下载软件包
[root@node1 ~]# cd /usr/src/
[root@node1 src]# wget https://downloads.mysql.com/archives/get/p/23/file/mysql-5.7.37-linux-glibc2.12-x86_64.tar.gz
[root@node1 src]# ls
apr-1.7.0 apr-util-1.6.1 debug httpd-2.4.54.tar.gz mysql-5.7.37-linux-glibc2.12-x86_64.tar.gz
apr-1.7.0.tar.gz apr-util-1.6.1.tar.gz httpd-2.4.54 kernels
[root@node1 src]#
## 解压软件包
[root@node1 src]# tar xf mysql-5.7.37-linux-glibc2.12-x86_64.tar.gz -C /usr/local/
## 重命名为mysql
[root@node1 ~]# cd /usr/local/
[root@node1 local]# mv mysql-5.7.37-linux-glibc2.12-x86_64 mysql
[root@node1 local]# ll mysql/ -d
drwxr-xr-x 9 root root 129 Aug 15 14:57 mysql/
# 修改目录/usr/local/mysql的属主属组
[root@node1 local]# chown -R mysql.mysql mysql
[root@node1 local]# ll mysql/ -d
drwxr-xr-x 9 mysql mysql 129 Aug 15 14:57 mysql/
# 添加环境变量
[root@node1 ~]# echo 'export PATH=/usr/local/mysql/bin:$PATH' > /etc/profile.d/mysql.sh
[root@node1 ~]# source /etc/profile.d/mysql.sh
[root@node1 ~]# which mysqld
/usr/local/mysql/bin/mysqld
# 配置include
## 软链接到/usr/include/mysql,叫mysql
[root@node1 ~]# ln -s /usr/local/mysql/include /usr/include/mysql
# 配置 man 文档
[root@localhost ~]# vim /etc/man_db.conf
MANDATORY_MANPATH /usr/share/man
MANDATORY_MANPATH /usr/local/share/man
MANDATORY_MANPATH /usr/local/apache/man
MANDATORY_MANPATH /usr/local/mysql/man # 添加这条
# 映射库文件
[root@node1 ~]# echo '/usr/local/mysql/lib' > /etc/ld.so.conf.d/mysql.conf
[root@node1 ~]# ldconfig # 让其生效
# 建立数据存放目录
[root@node1 ~]# mkdir -p /opt/data
[root@node1 ~]# chown -R mysql.mysql /opt/data/
[root@node1 ~]# ll /opt/data/ -d
drwxr-xr-x 2 mysql mysql 6 Aug 15 15:04 /opt/data/
# 初始化数据库
[root@node1 ~]# /usr/local/mysql/bin/mysqld --initialize --user=mysql --datadir=/opt/data/
......省略
root@node1: ry4htt-ft7nF
# 请注意,这个命令的最后会生成一个临时密码,此处密码是 ry4htt-ft7nF
# 再次注意,这个密码是随机的,你的不会跟我一样,一定要记住这个密码,因为一会登录时会用到
# 生成配置文件
[root@node1 ~]# cat /etc/my.cnf
[mysqld]
basedir = /usr/local/mysql
datadir = /opt/data
socket = /tmp/mysql.sock
port = 3306
pid-file = /opt/data/mysql.pid
user = mysql
skip-name-resolve
# 配置服务启动脚本
[root@node1 ~]# cd /usr/local/mysql/support-files/
[root@node1 support-files]# ls
magic mysqld_multi.server mysql-log-rotate mysql.server
[root@node1 support-files]# cp mysql.server /etc/init.d/mysqld
[root@node1 support-files]# ll /etc/init.d/mysqld -d
-rwxr-xr-x 1 root root 10576 Aug 15 15:10 /etc/init.d/mysqld
# 设置所有者所属组为mysql
[root@node1 ~]# chown -R mysql.mysql /etc/init.d/mysqld
[root@node1 ~]# ll /etc/init.d/mysqld -d
-rwxr-xr-x 1 mysql mysql 10576 Aug 15 15:10 /etc/init.d/mysqld
[root@node1 ~]# sed -ir 's#^basedir=#basedir=/usr/local/mysql#' /etc/init.d/mysqld
[root@node1 ~]# grep '^basedir=/usr/local/mysql' /etc/init.d/mysqld
basedir=/usr/local/mysql
[root@node1 ~]# sed -i '/^datadir=/c datadir=/opt/data' /etc/init.d/mysqld
[root@node1 ~]# grep '^datadir=/opt/data' /etc/init.d/mysqld
datadir=/opt/data
# 启动mysql
[root@node1 ~]# service mysqld start
Starting MySQL.Logging to '/opt/data/node1.err'.
SUCCESS!
## 设置开机自启
[root@node1 ~]# chkconfig --add mysqld
[root@node1 ~]# chkconfig mysqld on
[root@node1 ~]# ss -antl
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
LISTEN 0 128 0.0.0.0:22 0.0.0.0:*
LISTEN 0 80 *:3306 *:*
LISTEN 0 128 *:80 *:*
LISTEN 0 128 [::]:22 [::]:*
重启是否能够开机自启
# 使用临时密码登录
[root@node1 ~]# mysql -uroot -p'ry4htt-ft7nF'
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.37
Copyright (c) 2000, 2022, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> set password = password('runtime123!'); # 修改密码
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> quit
# 退出登录验证密码
[root@node1 ~]# mysql -uroot -p'runtime123!'
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.7.37 MySQL Community Server (GPL)
Copyright (c) 2000, 2022, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
//安装jdk环境
[root@localhost ~]# yum -y install java-17-openjdk java-17-openjdk-devel
.....安装过程略
//查看安装的版本
[root@node1 ~]# java -version
openjdk version "17.0.1" 2021-10-19 LTS
OpenJDK Runtime Environment 21.9 (build 17.0.1+12-LTS)
OpenJDK 64-Bit Server VM 21.9 (build 17.0.1+12-LTS, mixed mode, sharing)
//下载tomcat
[root@localhost ~]# cd /usr/src/
[root@localhost src]# wget https://archive.apache.org/dist/tomcat/tomcat-9/v9.0.65/bin/apache-tomcat-9.0.65.tar.gz
//解压部署
[root@localhost src]# tar xf apache-tomcat-9.0.65.tar.gz
apache-tomcat-9.0.65 apache-tomcat-9.0.65.tar.gz debug kernels
[root@localhost src]# mv apache-tomcat-9.0.65 /usr/local/tomcat
[root@localhost src]# ll /usr/local/tomcat/ -d
drwxr-xr-x. 9 root root 220 Aug 15 13:03 /usr/local/tomcat/
// 写一个hello world的java页面
[root@node1 ~]# cd /usr/local/tomcat/webapps/
[root@node1 webapps]# mkdir test
[root@node1 webapps]# ls
docs examples host-manager manager ROOT test
[root@node1 ~]# cd /usr/local/tomcat/webapps/test/
[root@node1 test]# vi index.jsp
test page
<%
out.println("Hellow Tomcat");
%>
[root@localhost test]# ll index.jsp
-rw-r--r--. 1 root root 141 Aug 15 13:17 index.jsp
[root@node1 ~]# cd /usr/local/tomcat/bin/
[root@node1 bin]# ls
bootstrap.jar configtest.sh shutdown.sh
catalina.bat daemon.sh startup.bat
catalina.sh digest.bat startup.sh
catalina-tasks.xml digest.sh tomcat-juli.jar
ciphers.bat makebase.bat tomcat-native.tar.gz
ciphers.sh makebase.sh tool-wrapper.bat
commons-daemon.jar setclasspath.bat tool-wrapper.sh
commons-daemon-native.tar.gz setclasspath.sh version.bat
configtest.bat shutdown.bat version.sh
配置service文件
[root@node1 ~]# cd /usr/lib/systemd/system
[root@node1 system]# cp sshd.service tomcat.service
[root@node1 system]# vim tomcat.service
[Unit]
Description=tomcat server daemon
After=network.target sshd-keygen.target
[Service]
Type=forking
ExecStart=/usr/local/tomcat/bin/catalina.sh start
ExecStop=/usr/local/tomcat/bin/catalina.sh stop
ExecReload=/bin/kill -HUP $MAINPID
[Install]
WantedBy=multi-user.target
## 刷新守护进程
[root@node1 ~]# systemctl daemon-reload
[root@node1 ~]# systemctl status tomcat
● tomcat.service - tomcat server daemon
Loaded: loaded (/usr/lib/systemd/system/tomcat.service; disabled; vendo>
Active: inactive (dead)
## 启动并设置开机自启
[root@node1 ~]# systemctl enable --now tomcat
Created symlink /etc/systemd/system/multi-user.target.wants/tomcat.service→ /usr/lib/systemd/system/tomcat.service.
[root@node1 ~]# systemctl status tomcat
● tomcat.service - tomcat server daemon
Loaded: loaded (/usr/lib/systemd/system/tomcat.service; enabled; vendor>
Active: active (running) since Mon 2022-08-15 16:18:19 CST; 1s ago
// 开启8009 端口
[root@localhost conf]# pwd
/usr/local/tomcat/conf
[root@localhost conf]# vim server.xml
......省略N
这样的箭头删除
address="::1"
port="8009"
redirectPort="8443" /> ## 把前面的 --> 这样的箭头删除
......省略N
## --> 这个表示注释
[root@localhost conf]# pwd
/usr/local/tomcat/conf
[root@localhost conf]# vim tomcat-users.xml
## 添加
## 添加
[root@localhost META-INF]# pwd
/usr/local/tomcat/webapps/manager/META-INF
[root@localhost META-INF]# ls
context.xml
[root@localhost META-INF]# vim context.xml
.......省略N
## 在172的前面添加你本机的IP。.前面需要转义
[root@localhost conf]# pwd
/usr/local/tomcat/conf
[root@localhost conf]# vim tomcat-users.xml
...省略N
## 添加
## 添加
## 放行
[root@localhost ~]# cd /usr/local/tomcat/webapps/host-manager/META-INF/
[root@localhost META-INF]# ls
context.xml
[root@localhost META-INF]# vim context.xml
.....省略
## 在172的前面添加你本机的IP。.前面需要转义
## 重启一下
[root@localhost bin]# pwd
/usr/local/tomcat/bin
[root@localhost bin]# ./catalina.sh stop ### 前停止
[root@localhost bin]# ./catalina.sh start ## 在开启
[root@node1 ~]# ss -antl
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
LISTEN 0 128 0.0.0.0:22 0.0.0.0:*
LISTEN 0 1 [::ffff:127.0.0.1]:8005 *:*
LISTEN 0 80 *:3306 *:*
LISTEN 0 100 [::1]:8009 [::]:*
LISTEN 0 100 *:8080 *:*
LISTEN 0 128 *:80 *:*
LISTEN 0 128 [::]:22 [::]:*
访问
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ukBO2BC9-1660783977943)(../../%E5%8D%9A%E5%AE%A2/%E7%A0%B4%E8%A7%A3%E5%AF%86%E7%A0%81/1660551822167.png)]](https://1000bd.com/contentImg/2024/03/30/325f28e3f42cfbf8.png)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BrLDcxSh-1660783977944)(../../%E5%8D%9A%E5%AE%A2/%E7%A0%B4%E8%A7%A3%E5%AF%86%E7%A0%81/1660551873520.png)]](https://1000bd.com/contentImg/2024/03/30/f6032f4c3f944dd6.png)
点击服务管理就看到这个页面 Server Status
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9kRcpHA9-1660783977945)(../../%E5%8D%9A%E5%AE%A2/%E7%A0%B4%E8%A7%A3%E5%AF%86%E7%A0%81/1660783472849.png)]](https://1000bd.com/contentImg/2024/03/30/548d8a61e65dcea3.png)
登录进来后就看到这个页面
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UfdLAomQ-1660783977947)(../../%E5%8D%9A%E5%AE%A2/%E7%A0%B4%E8%A7%A3%E5%AF%86%E7%A0%81/1660783516058.png)]](https://1000bd.com/contentImg/2024/03/30/4d58720f49284a8a.png)
点击应用 Manager App
![![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-62QQS5S7-1660783977949)(../../%E5%8D%9A%E5%AE%A2/%E7%A0%B4%E8%A7%A3%E5%AF%86%E7%A0%81/1660783540316.png)]](https://img-blog.csdnimg.cn/7c976d80e3a848b0957c8cd8e36dfc](https://1000bd.com/contentImg/2024/03/30/02549e8b925d74cf.png)
点击管理主机 Host Manager
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZC8dtpHo-1660783977949)(../../%E5%8D%9A%E5%AE%A2/%E7%A0%B4%E8%A7%A3%E5%AF%86%E7%A0%81/1660783570357.png)]](https://1000bd.com/contentImg/2024/03/30/73b6e95d4f3e91eb.png)
登录进来的页面
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YBxDT3JH-1660783977950)(../../%E5%8D%9A%E5%AE%A2/%E7%A0%B4%E8%A7%A3%E5%AF%86%E7%A0%81/1660783581721.png)]](https://1000bd.com/contentImg/2024/03/30/36b6bd4b2cafbb61.png)
## 启用httpd的相关模块
### 把前面的注释取消掉
[root@node1 ~]# sed -i '/mod_proxy.so/s/#//g' /usr/local/apache/conf/httpd.conf
[root@node1 ~]# grep 'mod_proxy.so' /usr/local/apache/conf/httpd.conf
LoadModule proxy_module modules/mod_proxy.so
[root@node1 ~]# sed -i '/proxy_http_module/s/#//g' /usr/local/apache/conf/httpd.conf
## 开启虚拟主机功能
[root@node1 ~]# sed -i '/httpd-vhosts.conf/s/#//g' /usr/local/apache/conf/httpd.conf
## 配置虚拟主机
[root@node1 ~]# cat /usr/local/apache/conf/extra/httpd-vhosts.conf
DocumentRoot "/usr/local/apache/htdocs"
ServerName tomcat.example.com
ErrorLog "logs/tomcat.example.com-error_log"
CustomLog "logs/tomcat.example.com-access_log" common
ProxyPass / http://192.168.229.143:8080/
ProxyPassReverse / http://192.168.229.143:8080/
Options none
AllowOverride none
Require all granted
## 重启apache
[root@node1 ~]# systemctl restart httpd
[root@node1 ~]# ss -antl
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
LISTEN 0 128 0.0.0.0:22 0.0.0.0:*
LISTEN 0 1 [::ffff:127.0.0.1]:8005 *:*
LISTEN 0 80 *:3306 *:*
LISTEN 0 128 *:80 *:*
LISTEN 0 100 *:8080 *:*
LISTEN 0 128 [::]:22 [::]:*
[root@node1 ~]#
访问网页
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UMOPCXbS-1660783977952)(../../%E5%8D%9A%E5%AE%A2/%E7%A0%B4%E8%A7%A3%E5%AF%86%E7%A0%81/1660553858524.png)]](https://1000bd.com/contentImg/2024/03/30/1ee3402d8ed6eea3.png)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qICXPjH1-1660783977953)(../../%E5%8D%9A%E5%AE%A2/%E7%A0%B4%E8%A7%A3%E5%AF%86%E7%A0%81/1660553890442.png)]](https://1000bd.com/contentImg/2024/03/30/1bc54546a1a5bb3e.png)