网站首页 > 教程文章 正文
最近公司有个项目需上线,记录下系统安装,应用部署过程。
1、安装系统centos7.9最小化安装
2、安装基本工具:
由于基本配置yum文件不能使用,我这边使用阿里云yum仓库进行替代
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
yum clean all # 清理原有缓存
yum makecache # 生成阿里云源缓存
yum -y install wget epel-release rsync net-tools
安装mysql数据库,卸载一些不必要的软件:
yum -y remove postfix
rpm -e mariadb-libs-5.5.68-1.el7.x86_64
3、安装数据库mysql:
mkdir /data/mysql //数据盘,数据目录
useradd mysql
chown -R mysql:mysql /data/mysql
到官网下载这些数据库文件,将这些文件放在一个目录里:
mysql-community-common-8.0.33-1.el7.x86_64.rpm
mysql-community-server-8.0.33-1.el7.x86_64.rpm
mysql-community-client-8.0.33-1.el7.x86_64.rpm
mysql-community-client-plugins-8.0.33-1.el7.x86_64.rpm
mysql-community-icu-data-files-8.0.33-1.el7.x86_64.rpm
mysql-community-libs-8.0.33-1.el7.x86_64.rpm
安装,使用yum命令安装,如提示缺少相应的mysql相关rpm包会有提示:
yum -y install mysql-community-common-8.0.33-1.el7.x86_64.rpm mysql-community-server-8.0.33-1.el7.x8
6_64.rpm mysql-community-client-8.0.33-1.el7.x86_64.rpm mysql-community-client-plugins-8.0.33-1.el7.x86_64.rpm mysql-community-icu-d
ata-files-8.0.33-1.el7.x86_64.rpm mysql-community-libs-8.0.33-1.el7.x86_64.rpm
启动服务:
service mysqld start
查看日志文件可以查看初始密码:
/var/log/mysqld.log
SET PASSWORD = PASSWORD('YourNewPassword'); //首次登录需要修改密码
service mysqld stop //停止目录,将目录数据目录修改到数据盘,数据目录。
rsync -avH /var/lib/mysql/ /data/mysql //根据自己实际将数据目录存放数据盘
修改配置文件:
数据目录修改后,启动数据库。
创建应用库:
create database dbname; //创建应用库
CREATE USER 'user'@'%' IDENTIFIED BY 'passwd'; //创建用户
GRANT ALL PRIVILEGES ON dbname.* TO 'user'@'%'; //关联用户和应用数据库
4、安装应用
应用是java语言开发的,先配置java环境 ,我这边配置的是java1.8的版本,可以将如下配置写入/etc/profile 末尾:
###for jdk1.8 ###
JAVA_HOME=/usr/local/jdk1.8.0_241
JRE_HOME=$JAVA_HOME/jre
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
PATH=$PATH:$JAVA_HOME/bin
export PATH JAVA_HOME JRE_HOME CLASSPATH
export HISTTIMEFORMAT="%F %T `whoami` "
创建应用启动用户,目录:
useradd appadmin
mkdir /data/app
chown -R appadmin:appadmin /data/app
说明:生产环境建议用普通用户来运行单独的应用,规划单独的应用目录。
启动应用:
su - appadmin
cd /data/app
nohup java -jar fs-0.0.1-SNAPSHOT.jar >> app.log 2>&1 &
启动脚本:
#!/bin/bash
# 功能:安全启动Java应用,包含日志记录、进程管理和基础错误处理
# --------------------- 基础配置 ---------------------
APP_NAME="fs-0.0.1-SNAPSHOT.jar"
APP_PATH="/data/app"
LOG_FILE="$APP_PATH/app.log"
PID_FILE="$APP_PATH/app.pid"
MAX_RETRY=10 # 最大重试次数
RETRY_INTERVAL=3 # 重试间隔(秒)
# --------------------- 日志函数 ---------------------
log() {
local timestamp=$(date +"%Y-%m-%d %H:%M:%S")
local level=$1
local message=$2
echo "[$timestamp] [$level] $message"
echo "[$timestamp] [$level] $message" >> "$LOG_FILE"
}
# --------------------- 检查应用是否已启动 ---------------------
check_running() {
if [ -f "$PID_FILE" ]; then
local pid=$(cat "$PID_FILE")
if ps -p "$pid" > /dev/null 2>&1; then
log "ERROR" "应用已在运行,PID: $pid"
return 1
else
log "WARN" "发现残留PID文件,但进程不存在,将清理PID文件"
rm -f "$PID_FILE"
fi
fi
return 0
}
# --------------------- 等待数据库启动 ---------------------
wait_for_database() {
log "INFO" "开始检查数据库连接..."
local db_host="localhost" # 请根据实际修改
local db_port="3306" # 请根据实际修改
local attempt=0
while [ $attempt -lt $MAX_RETRY ]; do
if nc -z "$db_host" "$db_port"; then
log "INFO" "数据库连接成功"
return 0
fi
attempt=$((attempt + 1))
log "INFO" "数据库未就绪,第 $attempt 次尝试,等待 $RETRY_INTERVAL 秒..."
sleep $RETRY_INTERVAL
done
log "ERROR" "数据库连接超时,已重试 $MAX_RETRY 次"
return 1
}
# --------------------- 主启动逻辑 ---------------------
main() {
# 1. 初始化日志
log "INFO" "==================== 应用启动流程开始 ===================="
# 2. 检查应用是否已启动
check_running
if [ $? -ne 0 ]; then
log "ERROR" "应用启动失败:检测到重复启动"
exit 1
fi
# 3. 等待数据库就绪(可选,根据实际需求启用)
# wait_for_database
# if [ $? -ne 0 ]; then
# log "ERROR" "应用启动失败:数据库连接失败"
# exit 1
# fi
# 4. 记录启动时间
local start_time=$(date +"%Y-%m-%d %H:%M:%S")
log "INFO" "应用启动时间:$start_time"
# 5. 启动Java应用
log "INFO" "开始启动Java应用:java -jar $APP_NAME"
nohup java -jar "$APP_NAME" >> "$LOG_FILE" 2>&1 &
# 6. 记录PID
local new_pid=$!
echo "$new_pid" > "$PID_FILE"
log "INFO" "应用已启动,PID: $new_pid"
# 7. 验证启动状态
sleep 2
if ! ps -p "$new_pid" > /dev/null 2>&1; then
log "ERROR" "应用启动后异常退出,PID: $new_pid"
rm -f "$PID_FILE"
exit 1
fi
log "INFO" "==================== 应用启动流程完成 ===================="
exit 0
}
# 执行主函数
main
猜你喜欢
- 2025-06-28 CentOS Linux操作系统各种启动和服务管理
- 2025-06-28 centos7必备命令—cat(centos7cp命令)
- 2025-06-28 Podman 快速上手指南:替代 Docker 的新选择
- 2025-06-28 CentOS 防火墙配置指南(基于不同版本)
- 2025-06-28 centos7怎么安装?VMware安装CentOS7的方法
- 2025-06-28 centos7 停服后yum源无法使用的解决办法
- 2025-06-28 【入门】【失败】Linux下mysql-8.0.22-linux-x64.tar.gz 安装
- 2025-06-28 2024, 是时候告别CentOS了(郎平正式告别中国女排是什么时候)
- 2025-06-28 CentOS替代之路:Rocky Linux 9.1 安装简易教程
- 最近发表
-
- Nacos最全详解(8大架构原理图解)(nacos原理讲解)
- 干货!微服务全量升级JDK17,踩坑笔记整理
- springboot集成nacos配置中心(springcloud配置nacos集群)
- Nacos快速入门指南(nacos 使用)
- Nacos读取配置文件的顺序(nacos 配置文件)
- 本地启动若依项目nacos报错:Server check fail, please check server
- 阿里Nacos惊爆安全漏洞,火速升级!(附修复建议)
- Nacos简介—1.Nacos使用简介(nacos是干啥的)
- Nacos简介—4.Nacos架构和原理一(nacos原理讲解)
- Nacos架构最全详解(图文全面总结)
- 标签列表
-
- location.href (44)
- document.ready (36)
- git checkout -b (34)
- 跃点数 (35)
- 阿里云镜像地址 (33)
- qt qmessagebox (36)
- mybatis plus page (35)
- vue @scroll (38)
- 堆栈区别 (33)
- 什么是容器 (33)
- sha1 md5 (33)
- navicat导出数据 (34)
- 阿里云acp考试 (33)
- 阿里云 nacos (34)
- redhat官网下载镜像 (36)
- srs服务器 (33)
- pico开发者 (33)
- https的端口号 (34)
- vscode更改主题 (35)
- 阿里云资源池 (34)
- os.path.join (33)
- redis aof rdb 区别 (33)
- 302跳转 (33)
- http method (35)
- js array splice (33)