项目架构图

在这里插入图片描述

  • 这里我们接入nginx目的是作为反向代理,redis的目的是作为缓存.

项目介绍

JspGou 是老式 war 包项目,无内置 Web 容器,依赖外部独立 Tomcat 才能运行;

Blog 是 SpringBoot 可执行 jar 项目,自带嵌入式 Tomcat,服务器只装 JDK 就能直接启动,不需要单独安装、配置 Tomcat。

项目搭建

一:环境准备

准备一台服务器,2核心2线程,4G的服务器;

我们一般有了新的项目要部署就会申请服务器,一般我们拿到一台新的服务器都要对这个服务器进行一个初始化,比如IP的配置,防火墙的配置,还有账号密码的设置等,我这里搞了一个简单的初始化脚本

#!/bin/bash
 # 设置要分配的IP地址、子网掩码和默认网关
echo '正在关闭防火墙'
systemctl stop firewalld && systemctl disable firewalld
echo '正在关闭networkmanager'
systemctl stop NetworkManager && systemctl disable NetworkManager
echo '正在关闭selinux'
setenforce 0 && sed -ri 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
echo '正在配置网卡'
ip_address="192.168.255.163"
subnet_mask="255.255.255.0"
default_gateway="192.168.255.2"
networkfile=/etc/sysconfig/network-scripts/ifcfg-ens32
if [ -f "$networkfile" ]; then
    rm "$networkfile"
fi
# 编写ifcfg-ens32文件并将其复制到相应目录中
cat >> /etc/sysconfig/network-scripts/ifcfg-ens32 <<EOF
TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="static"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="yes"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="ens32"
UUID="2a28f6f8-c188-4415-b960-42b19519a04b"
DEVICE="ens32"
ONBOOT="yes"
IPADDR=$ip_address
NETMASK=$subnet_mask
GATEWAY=$default_gateway
DNS1=114.114.114.114
DNS2=223.5.5.5
EOF

echo '正在安装基础软件包'
yum -y install wget lrzsz unzip gzip telnet
echo '配置基础环境变量'
cat >> /etc/profile <<EOF
if [ $(id -u) == 0 ]; then
export PS1='[\[\e[31;1m\]\u\[\e[m\]@\h \w]# '
else
export PS1='[\[\e[34;1m\]\u\[\e[m\]@\h \w]$ '
fi
alias ll='ls -lh --color=auto'
alias grep='grep --color'
alias free='free -m'
alias df='df -h'
alias du='du -h'
alias vi='vim'
EOF
cat >> ~/.vimrc <<EOF
"设置高亮
syntax on
"显示行号
set number
"自动缩进功能
set autoindent
"启用鼠标支持
"set mouse=a
"vim新打开.sh文件自动添加一下内容
autocmd BufNewFile *.sh exec ":call SetComment()"
func SetComment()
     if expand("%:e")=='sh'
         call setline(1,'#!/bin/bash')
         call setline(2,'#Author:     xxx')
         call setline(3,'#Create time:'.strftime("%Y-%m-%d"))
     endif
endfunc
EOF
source /etc/profile
systemctl restart network
echo '脚本执行完毕'

没有执行权限,给他一个执行权限

chmod +x init.sh

配置yum源:

步骤1:备份原有仓库配置(关键!防止出错无法恢复)
修改系统配置前,务必备份原始文件,避免误操作后无法回滚:

sudo mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup

步骤2:下载阿里云YUM源配置文件 
根据系统已安装的工具(curl 或 wget),选择以下任一命令执行:

若系统有 curl:
sudo curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo

若系统有 wget:
sudo wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo

提示:若两种工具都没有,可先通过系统自带的基础源临时安装(如 sudo yum install -y curl),再执行上述命令。

步骤3:清理旧缓存 并重建新缓存
新的YUM源配置需通过清理旧缓存、重建新缓存来生效,避免旧配置干扰:

# 清理所有YUM缓存
sudo yum clean all
# 基于新源重建缓存(加载阿里云源的包信息)
sudo yum makecache

步骤4:设置YUM跳过失效仓库(可选但推荐)
当部分仓库失效时,YUM默认会中断 操作。通过以下命令设置“跳过失效仓库”,确保整体流程不中断:

sudo yum-config-manager --save --setopt=<repoid>.skip_if_unavailable=true

说明:将 <repoid> 替换为具体仓库ID(如 CentOS-Base),若需对所有仓库生效,可批量配置或省略具体ID(视系统版本而定)。
步骤5:验证YUM源是否配置成功
执行简单的包安装命令(如安装 wget),测试是否能正常从阿里云源下载:

sudo yum install -y wget


二:项目解析

blog项目是使用Java开发,使用了springboot框架进行开发的

项目部署环境:jdk8+mysql5.7+redis5.0。注意:如果部署项目中,需要mysql数据库或者其他数据如redis等中间件时,我们应该优先运行中间件

三:数据库的部署

1.下载rpm包
mkdir /opt/soft/mysql -p && cd /opt/soft/mysql
wget https://mirrors.aliyun.com/mysql/MySQL-5.7/mysql-community-client-5.7.36-1.el7.x86_64.rpm
wget https://mirrors.aliyun.com/mysql/MySQL-5.7/mysql-community-common-5.7.36-1.el7.x86_64.rpm
wget https://mirrors.aliyun.com/mysql/MySQL-5.7/mysql-community-devel-5.7.36-1.el7.x86_64.rpm
wget https://mirrors.aliyun.com/mysql/MySQL-5.7/mysql-community-libs-5.7.36-1.el7.x86_64.rpm
wget https://mirrors.aliyun.com/mysql/MySQL-5.7/mysql-community-libs-compat-5.7.36-1.el7.x86_64.rpm
wget https://mirrors.aliyun.com/mysql/MySQL-5.7/mysql-community-server-5.7.36-1.el7.x86_64.rpm
2.安装mysql
yum -y install mysql-community*
3.配置

安装完成后我们不要急着启动,先给mysql来一个自定义配置

备份原来的配置,然后添加新的配置

cp /etc/my.cnf /etc/my.cnf_bak

mv /etc/my.cnf /etc/my.cnfbak

vim /etc/my.cnf

#客户端设置
[client]

#mysql服务配置
[mysqld]
#服务器监听端口,默认为3306
port=3306
#数据存储位置
datadir=/var/lib/mysql
#Unix套接字文件路径
socket=/var/lib/mysql/mysql.sock
#MySQL服务唯一标识,开启二进制日志,做主从时需要
server-id=1
log-bin=mysql-bin
#不会跟随符号链接
symbolic-links=0
#日志路径
log-error=/var/log/mysqld.log
#服务进程pid文件路径
pid-file=/var/run/mysqld/mysqld.pid
#mysql字符集设置
character_set_server=utf8mb4
#mysql比较规则设置
collation_server=utf8mb4_general_ci
4.启动mysql
#设置开机自启并立即启动
systemctl enable mysqld && systemctl start mysqld
#查看mysql状态
systemctl status mysqld
5.修改密码

yum安装的mysql会在日志中给我们生成一个临时密码,我们需要用这个临时密码去修改成我们自己的密码

#查看临时密码
grep 'password' /var/log/mysqld.log
#修改mysql密码
mysqladmin -uroot -p'临时密码' password '需要修改的密码'
mysqladmin -uroot -p'b:4omwydI1Se' password 'Admin123.'
6.授权

mysql安装完成后还需要给一个登录权限不然无法用IP连接

登录mysql

mysql -uroot -p
- 查看一下用户是否具有权限
SELECT user,host,authentication_string from mysql.user;

授权

--语法
GRANT 权限列表 ON 库名.表名 TO '用户名'@'客户端主机ip' IDENTIFIED BY '密码' WITH GRANT OPTION;
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%'IDENTIFIED BY 'Admin123.' WITH GRANT OPTION;
-- 最后刷新
FLUSH PRIVILEGES;
7.创建数据库

当我们拿到项目后,如果项目没有提供数据库需要创建的名称,我们可以通过项目的配置文件中查看,blog目录结构后面有讲解

spring:
  datasource:
  #这里能看到我们需要的数据库名字叫做blog
    url: jdbc:mysql://localhost:3306/blog?useUnicode=true&characterEncoding=utf-8
    username: root
    password: Admin123.
    driver-class-name: com.mysql.cj.jdbc.Driver

四:jdk安装

下载好jdk上传到服务器

#创建文件夹,上传jdk
mkdir /opt/soft/jdk && cd /opt/soft/jdk
#创建Java文件夹
mkdir /usr/local/java
#上传jdk后解压
unzip jdk1.8.0_121.zip
#移动解压后的jdk
mv jdk1.8.0_121 /usr/local/java/
#授权
chmod +x /usr/local/java/jdk1.8.0_121/bin/*
chmod +x /usr/local/java/jdk1.8.0_121/jre/bin/*

环境变量配置

#vim /etc/profile
export JAVA_HOME=/usr/local/java/jdk1.8.0_121
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=$JAVA_HOME/lib:${JRE_HOME}/lib:$CLASSPATH
export JAVA_PATH=${JAVA_HOME}/bin:${JRE_HOME}/bin
PATH=$PATH:$HOME/bin:$JAVA_HOME/bin
#刷新环境变量
source /etc/profile
#查看java版本
java -version

五:部署blog

创建文件夹,上传软件包及配置文件

mkdir -p /opt/web/blog && cd /opt/web/blog

创建好后我们就上传我们的包和相关文件

在这里插入图片描述

上传之后我们修改对应的配置文件,假如我们环境是生产环境,我们就要使用生产环境的配置文件,需要在application.yml中修改active: dev为active: pro,修改之后我们再去生产配置文件中修改相关配置

如果这里为active: dev,不想对其进行修改,那么我们就需要使用application-dev.yml,此时application-pro.yml不生效,如果是active: pro那么application-dev.yml不生效。

在yml中修改连接mysql的配置文件

spring:
  datasource:
  #localhost修改成具体的IP
    url: jdbc:mysql://localhost:3306/blog?useUnicode=true&characterEncoding=utf-8
    username: root
    password: Admin123.
    driver-class-name: com.mysql.cj.jdbc.Driver

使用脚本时需要先停掉原来的Java

#!/bin/bash

# 检查Java是否已安装
if ! command -v java &> /dev/null; then
    echo "错误:Java未安装。请安装Java后再试。"
    exit 1
fi

# 定义Java应用程序的JAR文件路径
JAR_FILE="blog-0.0.1-SNAPSHOT.jar"

# 检查JAR文件是否存在
if [ ! -f "$JAR_FILE" ]; then
    echo "错误:在 $JAR_FILE 找不到JAR文件"
    exit 1
fi

# 检查Java应用程序是否已经在运行
if pgrep -f "$JAR_FILE" &> /dev/null; then
    echo "错误:应用程序已在运行。"
    exit 1
fi

# 后台启动Java应用程序
nohup java -jar "$JAR_FILE" > log/blog.log 2>&1 &
# 获取应用程序的进程ID
PID=$!


echo "Java应用程序已成功在后台启动,进程ID为 $PID。"

脚本授权

chmod +x start.sh
#启动脚本
./start.sh

日志查看方法

tail -f log/blog.log

如果没有报错即可访问

ip:端口        # 端口是8080

六:nginx反向代理(另一台节点)

运行 Nginx 的服务器配有两块网卡,分别为公网网卡与内网网卡。

安装

# 1.创建一个文件夹,存放安装的nginx文件
mkdir /usr/local/nginx

# 2.安装nginx依赖包
yum -y install gcc gcc-c++  pcre pcre-devel zlib zlib-devel openssl openssl-devel

# 3.下载并解压nginx源码包
#创建文件夹存放安装包
mkdir /opt/soft/nginx -p && cd /opt/soft/nginx
#使用下面命令下载
wget https://nginx.org/download/nginx-1.18.0.tar.gz
#解压源码包
tar -zxvf nginx-1.18.0.tar.gz
#切换到解压后的包中
cd nginx-1.18.0

# 4.配置编译并安装
./configure --user=root --group=root --prefix=/usr/local/nginx \
--with-http_ssl_module  \
--with-http_v2_module \
--with-http_stub_status_module \
--with-http_gzip_static_module \
--with-http_sub_module --with-stream  \
--with-stream_ssl_module \
--with-openssl-opt=enable-weak-ssl-ciphers
#执行编译
make
#安装
make install

根据以上编译安装,安装后的所有文件会存放在/usr/local/nginx


# 5.0  启动nginx,然后我们在浏览器中进行访问即可
[root@localhost /opt/soft/nginx/nginx-1.18.0]# cd /usr/local/nginx
[root@localhost /usr/local/nginx]# ll
总用量 0
drwxr-xr-x 2 root root 333 3月  15 15:29 conf
drwxr-xr-x 2 root root  40 3月  15 15:29 html
drwxr-xr-x 2 root root   6 3月  15 15:29 logs
drwxr-xr-x 2 root root  19 3月  15 15:29 sbin
[root@localhost /usr/local/nginx]# cd ./sbin
[root@localhost /usr/local/nginx/sbin]# ll
总用量 7.4M
-rwxr-xr-x 1 root root 7.4M 3月  15 15:29 nginx
[root@localhost /usr/local/nginx/sbin]# ./nginx 
[root@localhost /usr/local/nginx/sbin]# 


# 6.0 

#重启nginx
/usr/local/nginx/sbin/nginx -s reload
#停止
/usr/local/nginx/sbin/nginx -s stop


修改配置文件

server {
        listen	80;
        server_name  www.web.com;
        location / {
            proxy_pass	http://www.baidu.com; #把访问地址转到后端地址
        }
}


# 如下配置:

    server {
        listen       80;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
	    proxy_pass http://192.168.255.135:8080;

        }

七:redis缓存


1.下载安装包
#下载地址
https://redis.io/download/
#创建文件夹上传安装包
[root@localhost ~]# mkdir -p /opt/soft/redis && cd /opt/soft/redis
# 查看包是否上传成功
[root@localhost /opt/soft/redis]# ll
总用量 1952
-rw-r--r-- 1 root root 1995566 1月  16 09:20 redis-5.0.13.tar.gz
#解压并切换到解压后的目录
[root@localhost /opt/soft/redis]# tar -zxvf redis-5.0.13.tar.gz
[root@localhost /opt/soft/redis]# cd redis-5.0.13


2.安装依赖
yum -y install gcc-c++


3.执行安装命令
#创建目录,存放安装后的文件
mkdir /usr/local/redis
#指定目录安装
make PREFIX=/usr/local/redis install
#编译并安装
make && make install


4.配置文件拿取
#创建目录
mkdir /usr/local/redis/conf
#复制配置文件到/usr/local/redis/conf
cp /opt/soft/redis/redis-5.0.13/redis.conf /usr/local/redis/conf/redis.conf
#查看redis默认配置
[root@localhost ~]# grep -v '^#' /usr/local/redis/conf/redis.conf | grep -v '^$'
bind 127.0.0.1
protected-mode yes
port 6379
tcp-backlog 511
timeout 0
tcp-keepalive 300
daemonize no
supervised no
pidfile /var/run/redis_6379.pid
loglevel notice
logfile ""
databases 16
always-show-logo yes
save 900 1
save 300 10
save 60 10000
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename dump.rdb
dir ./
replica-serve-stale-data yes
replica-read-only yes
repl-diskless-sync no
repl-diskless-sync-delay 5
repl-disable-tcp-nodelay no
replica-priority 100
lazyfree-lazy-eviction no
lazyfree-lazy-expire no
lazyfree-lazy-server-del no
replica-lazy-flush no
appendonly no
appendfilename "appendonly.aof"
appendfsync everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-load-truncated yes
aof-use-rdb-preamble yes
lua-time-limit 5000
slowlog-log-slower-than 10000
slowlog-max-len 128
latency-monitor-threshold 0
notify-keyspace-events ""
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-size -2
list-compress-depth 0
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
hll-sparse-max-bytes 3000
stream-node-max-bytes 4096
stream-node-max-entries 100
activerehashing yes
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit replica 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
hz 10
dynamic-hz yes
aof-rewrite-incremental-fsync yes
rdb-save-incremental-fsync yes
修改配置文件

[root@localhost ~]# vim /usr/local/redis/conf/redis.conf
bind 0.0.0.0 #修改后才能让本机所有ip都可以进行登录
protected-mode yes
port 6379  #端口号
tcp-backlog 511
timeout 0
tcp-keepalive 300
daemonize yes  #是否后台运行,默认是no,需要改成yes
supervised no
pidfile /var/run/redis_6379.pid
loglevel notice
logfile ""
databases 16
always-show-logo yes
save 900 1
save 300 10
save 60 10000
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename dump.rdb
dir ./  #数据持久化保存路径
replica-serve-stale-data yes
replica-read-only yes
repl-diskless-sync no
repl-diskless-sync-delay 5
repl-disable-tcp-nodelay no
replica-priority 100
lazyfree-lazy-eviction no
lazyfree-lazy-expire no
lazyfree-lazy-server-del no
replica-lazy-flush no
appendonly no
appendfilename "appendonly.aof"
appendfsync everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-load-truncated yes
aof-use-rdb-preamble yes
lua-time-limit 5000
slowlog-log-slower-than 10000
slowlog-max-len 128
latency-monitor-threshold 0
notify-keyspace-events ""
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-size -2
list-compress-depth 0
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
hll-sparse-max-bytes 3000
stream-node-max-bytes 4096
stream-node-max-entries 100
activerehashing yes
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit replica 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
hz 10
dynamic-hz yes
aof-rewrite-incremental-fsync yes
rdb-save-incremental-fsync yes
启动redis

/usr/local/redis/bin/redis-server /usr/local/redis/conf/redis.conf


5.加入systemctl管理
可以加可以不加,不加就按照上面的方式进行启动

cp /opt/soft/redis/redis-5.0.13/utils/redis_init_script /etc/init.d/redis
#修改启动文件的配置文件路径
sed -ri 's#EXEC=/usr/local/bin/redis-server#EXEC=/usr/local/redis/bin/redis-server#g' /etc/init.d/redis
sed -ri 's#CLIEXEC=/usr/local/bin/redis-cli#CLIEXEC=/usr/local/redis/bin/redis-cli#g' /etc/init.d/redis
sudo sed -ri 's#CONF="/etc/redis/\$\{REDISPORT\}\.conf"#CONF="/usr/local/redis/conf/redis.conf"#' /etc/init.d/redis

#授权
chmod +x /etc/init.d/redis
chkconfig --add redis
chkconfig redis on
#重新装载
systemctl daemon-reload
#启动,如果之前有启动,需要先停止
systemctl start redis


6.Redis工具
./redis-benchmark	#用于进行redis性能测试工具
./redis-check-dump	#用于修复备份数据文件
./redis-cli	#redis的客户端
./redis-server	#redis服务端
./redis-check-aof	#修复出问题的AOF文件
./redis-sentinel	#用于集群管理


/redis
#修改启动文件的配置文件路径
sed -ri ‘s#EXEC=/usr/local/bin/redis-server#EXEC=/usr/local/redis/bin/redis-server#g’ /etc/init.d/redis
sed -ri ‘s#CLIEXEC=/usr/local/bin/redis-cli#CLIEXEC=/usr/local/redis/bin/redis-cli#g’ /etc/init.d/redis
sudo sed -ri ‘s#CONF=“/etc/redis/${REDISPORT}.conf”#CONF=“/usr/local/redis/conf/redis.conf”#’ /etc/init.d/redis

#授权
chmod +x /etc/init.d/redis
chkconfig --add redis
chkconfig redis on
#重新装载
systemctl daemon-reload
#启动,如果之前有启动,需要先停止
systemctl start redis

6.Redis工具
./redis-benchmark #用于进行redis性能测试工具
./redis-check-dump #用于修复备份数据文件
./redis-cli #redis的客户端
./redis-server #redis服务端
./redis-check-aof #修复出问题的AOF文件
./redis-sentinel #用于集群管理

更多推荐