前言
本文为企业生产级标准部署流程,不是网上随便跑通的简易版。
覆盖:服务器初始化 → 安全加固 → JDK环境 → MySQL生产安装调优 → Nginx生产配置 → Java后端Systemd托管部署 → Vue前端部署 → 日志切割防爆盘 → 开机自启 → 发布流程 → 日常运维规范。
适用:CentOS7 / CentOS8 / Rocky Linux
一、服务器生产初始化
1.1 安装必备依赖工具
生产服务器必备工具,提前装齐,避免后续缺包报错
yum install -y wget curl vim net-tools lrzsz tree zip unzip tar chrony
1.2 时间同步
解决日志时间错乱、数据库时间不一致、定时任务误差问题
systemctl start chronyd systemctl enable chronyd
1.3 系统资源限制优化
默认文件打开数太小,高并发Java直接卡死
vim /etc/security/limits.conf
文件末尾追加:
* soft nofile 65535
* hard nofile 65535
* soft nproc 65535
* hard nproc 65535
1.4 防火墙规范配置(生产禁止关闭防火墙)
只放行必要端口,安全合规
systemctl start firewalld
systemctl enable firewalld
# 放行常用业务端口
firewall-cmd --permanent --add-port=80/tcp
firewall-cmd --permanent --add-port=443/tcp
firewall-cmd --permanent --add-port=8080/tcp
firewall-cmd --permanent --add-port=3306/tcp
firewall-cmd --reload
1.5 SELinux生产处理
测试可关,生产建议永久关闭(避免各种权限诡异问题)
sed -i 's/^SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
setenforce 0
1.6 统一企业目录规范
mkdir -p /usr/local/soft # 软件安装目录
mkdir -p /data/project # Java项目目录
mkdir -p /data/frontend # 前端dist目录
mkdir -p /data/logs # 统一日志目录
mkdir -p /data/backup # 备份目录
二、企业级 JDK1.8 安装
不使用yum默认JDK(版本不可控、无环境变量、升级混乱)
2.1 上传 jdk-8uxxx-linux-x64.tar.gz 到 /usr/local/soft
2.2 解压
cd /usr/local/soft
tar -zxvf jdk-8u*.tar.gz
mv jdk1.8* jdk1.8
2.3 配置全局环境变量
vim /etc/profile
文件最底部追加:
export JAVA_HOME=/usr/local/soft/jdk1.8
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib
export PATH=$PATH:$JAVA_HOME/bin
2.4 生效并验证
source /etc/profile
java -version
三、MySQL8.0 生产级安装与调优
3.1 安装
yum install -y mysql-server
3.2 启动自启
systemctl start mysqld
systemctl enable mysqld
3.3 获取初始密码并修改
grep 'temporary password' /var/log/mysqld.log
mysql -uroot -p
3.4 生产授权规范
-- 修改root密码
ALTER USER 'root'@'localhost' IDENTIFIED BY 'Mx@123456';
-- 创建独立业务账号(最规范)
CREATE USER 'biz'@'%' IDENTIFIED BY 'Biz@123456';
CREATE DATABASE biz_db DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; GRANT ALL ON biz_db.* TO 'biz'@'%';
FLUSH PRIVILEGES;
3.5 生产my.cnf优化
覆盖默认配置,解决连接慢、乱码、超时、性能差问题
vim /etc/my.cnf
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
pid-file=/var/run/mysqld/mysqld.pid
user=mysql
port=3306
character-set-server=utf8mb4
default-storage-engine=INNODB
max_connections=500
wait_timeout=600
interactive_timeout=600
innodb_buffer_pool_size=512M
innodb_log_file_size=256M
slow_query_log=1
slow_query_log_file=/data/logs/mysql-slow.log
long_query_time=2
systemctl restart mysqld
四、Nginx 生产级安装 + 完整配置
4.1 安装启动
yum install -y nginx
systemctl start nginx
systemctl enable nginx
4.2 企业级标准配置
清空默认配置,写入生产配置
echo "" > /etc/nginx/nginx.conf
vim /etc/nginx/nginx.conf
user nginx;
worker_processes auto;
error_log /data/logs/nginx-error.log;
pid /run/nginx.pid;
events {
worker_connections 65535;
}
http {
log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /data/logs/nginx-access.log main;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
# 开启gzip压缩
gzip on;
gzip_min_length 1k;
gzip_types text/plain text/css application/json application/javascript text/xml application/x-javascript;
server {
listen 80;
server_name _;
# 前端静态资源
location / {
root /data/frontend;
index index.html;
try_files $uri $uri/ /index.html;
}
# 后端接口代理
location /api/ {
proxy_pass http://127.0.0.1:8080/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_connect_timeout 60s;
proxy_read_timeout 60s;
}
}
}
4.3 检查重启
nginx -t
systemctl restart nginx
五、Java后端 企业级部署
彻底抛弃 nohup 裸跑!!!
企业用 systemd 托管:自动重启、日志可控、不炸盘、状态可查
5.1 上传 jar 包到 /data/project
5.2 创建Java服务配置文件
vim /etc/systemd/system/java-project.service
[Unit]
Description=Java Project Service
After=network.target
[Service]
Type=simple
# 生产JVM参数,根据服务器配置微调
ExecStart=/usr/local/soft/jdk1.8/bin/java -Xms512m -Xmx1024m -XX:+HeapDumpOnOutOfMemoryError -jar /data/project/demo.jar
SuccessExitStatus=143
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
5.3 启动、开机自启
systemctl daemon-reload
systemctl start java-project
systemctl enable java-project
5.4 后端运维标准命令
systemctl status java-project # 查看运行状态
systemctl restart java-project # 重启项目
systemctl stop java-project # 停止项目
journalctl -u java-project -f # 实时看日志
✅ 彻底解决:nohup.out 20G爆盘、删文件不释放空间问题
六、前端Vue/React 生产部署
6.1 本地打包
npm run build
6.2 上传dist全部内容至服务器 /data/frontend
6.3 授权防止403
chmod -R 755 /data/frontend
systemctl restart nginx
七、企业级日志防爆盘方案
7.1 系统日志自动切割 logrotate
系统自带,无需安装,直接配置规则,自动按天分割、自动删除旧日志
7.2 Java项目日志切割配置
vim /etc/logrotate.d/java-log
/data/logs/*.log {
daily
rotate 7
missingok
compress
delaycompress
notifempty
copytruncate
}
解释:按天切割、保留7天、压缩旧日志、不中断程序写入
八、企业标准发布流程
每次迭代上线严格按此流程,不翻车、可回滚
#1. 备份旧包
cp /data/project/demo.jar /data/backup/demo-$(date +%Y%m%d).jar
#2. 停止服务
systemctl stop java-project
#3. 上传新jar覆盖
#4. 启动服务
systemctl start java-project
#5. 检查状态
systemctl status java-project
#6. 查看实时日志排错
journalctl -u java-project -f
九、生产环境日常运维黄金命令
df -h # 查磁盘
free -h # 查内存
top # 查负载CPU
lsof | grep deleted # 查删了不释放的垃圾文件
nginx -t # 检查Nginx配置
systemctl status java-project # 查项目状态
十、整套环境优势
-
无nohup:彻底根治日志爆盘、删文件不释放空间
-
进程托管:程序崩溃、服务器断电自动重启
-
JVM参数规范:有效防止内存溢出OOM
-
MySQL调优:拒绝默认垃圾参数,支持高并发
-
Nginx生产参数:压缩、缓存、超时、跨域全套
-
日志自动切割:从根源杜绝几十G超大日志
-
安全规范:不关闭防火墙、业务账号隔离、最小权限