网站首页 > java教程 正文
最近公司有个项目需上线,记录下系统安装,应用部署过程。
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-09-01 Guacamole安装部署_安装camhi
- 2025-09-01 阿里云服务器-安装tomcat_阿里云服务器安装yum
- 2025-09-01 Linux下安装常用软件都有哪些?做了一个汇总列表,你看还缺啥?
- 2025-09-01 测试员必备:Linux下安装JDK 1.8你必须知道的那些事
- 2025-09-01 10分钟3个步骤集成使用SkyWalking
- 2025-09-01 在linux 上搭建jenkens前端自动化打包部署
- 2025-09-01 Apache Maven基础_maven.apache.org
- 2025-09-01 开源:NginxWebUI一款图形化管理Nginx配置的工具
- 2025-09-01 分享一个开源下载简单配置不用安装数据库就可以使用的个人博客
- 2025-09-01 「开源推荐」推荐一款搭建svn服务器的神器,可以用Web管理了
你 发表评论:
欢迎- 最近发表
-
- 如何优雅地记录操作日志?_操作日志怎么实现
- 开发利器丨如何使用ELK设计微服务中的日志收集方案?
- Java应用日志如何与Jaeger的trace关联
- Springboot强大的日志功能你真的了解吗?这些功能你肯定不知道
- 深入探索 Spring Boot3 中日志的自定义封装处理操作
- SpringBoot+Kafka+ELK 完成海量日志收集(超详细)
- SpringBoot中统一日志管理_springboot日志每天一个文件
- 16.3K Star!简洁高效的Java权限认证与会话管理框架——Sa-Token
- 27 | API网关:系统的门面要如何做呢?
- 微服务网关—Zuul1.0和2.0我们该如何选择?
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)