原创

blog传统部署文档

blog传统部署文档

一、环境准备

准备一台服务器,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.137.140"
subnet_mask="255.255.255.0"
default_gateway="192.168.137.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

二、项目解析

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来一个自定义配置

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

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'o?=RfHasu7Cg' 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

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

image-20240817223747221

上传之后我们修改对应的配置文件,假如我们环境是生产环境,我们就要使用生产环境的配置文件,需要在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程序。Java启动命令

java -jar blog-0.0.1-SNAPSHOT.jar
#如果没有报错我们就按ctrl+C停掉,然后使用下面的后台启动

如果没有问题我们的项目就部署完成了,但是java -jar xxx.jar属于前台运行,如果我们关闭窗口进程将自动结束,所以我们需要使用后台运行

nohup java -jar xxx.jar &
nohup java -jar blog-0.0.1-SNAPSHOT.jar &
讲解:
	nohup 表示守护进程
	& 表示后台启动
#查看一下进程是否存在
ps -ef|grep java
#查看端口是否正常
netstat -lntp|grep 8080

加了nohup启动日志就会输出到nohup.out中,使用tail -f查看日志是否报错

#查看日志是否正常
tail -f nohup.out
或者vim nohup.out直接进去看
#如果以上都没有问题了我们就去浏览器进行访问

由于敲这个命令比较麻烦,所以我们可以编写成一个脚本的方式进行启动vim start.sh

使用脚本时需要先停掉原来的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:端口

这里和我们之前做的jspgou对比:

数据库方面都是一样的,部署数据库,创建数据库,导入数据。

不一样的地方:

  • 我们这次的部署没有使用tomcat
  • 添加环境变量的时候只需要添加jdk的,tomcat的不需要
  • 之前我们项目是存放在tomcat中,现在存放在/opt/web/blog中
  • 之前启动Java服务我们启动的是tomcat,现在启动Java服务使用的java -jar,用的是java命令

最后思考一个问题,为什么jspgou需要tomcat,blog不需要部署tomcat?