服务器环境部署手册

项目名称:Java后端 + 前端服务环境部署

部署方式:离线部署

一、文档概述

1.1 文档目的

本文档用于记录在 UOS Server 20 操作系统上部署 Java 运行环境及 Web 服务环境的完整流程,包括 JDK 21、MySQL 5.7、Nginx 的安装、配置和验证方法。

1.2 适用范围

项目 说明
操作系统 UOS Server 20(内核 4.19.90)
架构 x86_64
部署用户 普通用户,无root权限

1.3 软件版本清单

软件 版本 下载地址
JDK 21.0.11 LTS Java Downloads | Oracle
MySQL 5.7.44 https://downloads.mysql.com/archives/get/p/23/file/mysql-5.7.44-linux-glibc2.12-x86_64.tar.gz
Nginx 1.18.0 http://nginx.org/download/nginx-1.18.0.tar.gz
libpcre3 https://packages.debian.org/bullseye/amd64/libpcre3/download

二、部署前准备

将以下安装包上传至服务器 /data/linjr/ 目录下:

文件名 说明
jdk-21_linux-x64_bin.tar.gz JDK 21 安装包
mysql-5.7.44-linux-glibc2.12-x86_64.tar.gz MySQL 5.7.44 安装包
nginx_1.18.0-xxx_amd64.deb Nginx 1.18.0 离线deb包
libpcre3_8.39-13+deb11u6_amd64.deb 解决nginx运行依赖缺失

三、JDK 21 部署

3.1 解压

cd /data/linjr
tar -zxvf jdk-21_linux-x64_bin.tar.gz

3.2 配置环境变量

echo "export JAVA_HOME=/data/linjr/jdk-21.0.11" >> ~/.bashrc
echo "export PATH=\$PATH:\$JAVA_HOME/bin" >> ~/.bashrc
source ~/.bashrc

3.3 验证安装

java -version

预期输出

java version "21.0.11" 2026-04-21 LTS
Java(TM) SE Runtime Environment (build 21.0.11+9-LTS-211)
Java HotSpot(TM) 64-Bit Server VM (build 21.0.11+9-LTS-211, mixed mode, sharing)

3.4 多用户不同JDK版本配置

当多个用户共用一台服务器,且各自需要不同版本的JDK时(例如:用户A需要JDK 21,用户B需要JDK 17,用户C需要JDK 8),可采用本方案。

3.4.1 核心原理

每个用户在自己的个人目录下独立解压JDK,并在自己的 ~/.bashrc 文件中配置 JAVA_HOMEPATH。用户登录后加载自己的配置文件,使用的JDK版本完全由自己控制,互不影响、完全隔离

3.4.2 当前用户(linjr)配置 JDK 21

已按3.1-3.3完成配置,JAVA_HOME 指向 /data/linjr/jdk-21.0.11

3.4.3 其他用户(如 zhangsan)配置 JDK 17

步骤1:切换登录 zhangsan 用户

步骤2:上传并解压 JDK 17

jdk-17_linux-x64_bin.tar.gz 上传到 /home/zhangsan/ 目录下:

cd /home/zhangsan
tar -zxvf jdk-17_linux-x64_bin.tar.gz

解压后得到 /home/zhangsan/jdk-17.0.10 目录。

步骤3:配置环境变量

vi ~/.bashrc

在文件末尾添加:

export JAVA_HOME=/home/zhangsan/jdk-17.0.10
export PATH=$JAVA_HOME/bin:$PATH

步骤4:生效并验证

source ~/.bashrc
java -version

预期输出:java version "17.0.10"

3.4.4 同一账号临时切换其他JDK版本

如果当前用户需要临时切换JDK版本(仅当前终端窗口生效):

# 临时切换为 JDK 8
export JAVA_HOME=/data/linjr/jdk1.8.0_401
export PATH=$JAVA_HOME/bin:$PATH
java -version
​
# 临时切换为 JDK 17
export JAVA_HOME=/data/linjr/jdk-17.0.10
export PATH=$JAVA_HOME/bin:$PATH
java -version

重新打开新终端后,自动恢复为 ~/.bashrc 中配置的默认JDK版本。

四、MySQL 5.7.44 部署

4.1 解压

cd /data/linjr
tar -xzvf mysql-5.7.44-linux-glibc2.12-x86_64.tar.gz
mv mysql-5.7.44-linux-glibc2.12-x86_64 mysql8

4.2 创建数据目录

cd /data/linjr/mysql8
mkdir -p data logs tmp

4.3 创建配置文件

cat > /data/linjr/mysql8/my.cnf << 'EOF'
[mysqld]
basedir=/data/linjr/mysql8
datadir=/data/linjr/mysql8/data
socket=/data/linjr/mysql8/mysql.sock
log-error=/data/linjr/mysql8/logs/mysql.err
pid-file=/data/linjr/mysql8/mysql.pid
port=3307
user=linjr
tmpdir=/data/linjr/mysql8/tmp
EOF

4.4 初始化数据库

/data/linjr/mysql8/bin/mysqld --defaults-file=/data/linjr/mysql8/my.cnf --initialize --user=linjr

注意:初始化完成后,会生成临时密码。执行以下命令查看:

grep 'temporary password' /data/linjr/mysql8/logs/mysql.err

记下输出的临时密码。

4.5 启动 MySQL

/data/linjr/mysql8/bin/mysqld_safe --defaults-file=/data/linjr/mysql8/my.cnf &

4.6 登录并修改密码

使用临时密码登录:

/data/linjr/mysql8/bin/mysql -uroot -p -S /data/linjr/mysql8/mysql.sock

进入 MySQL 命令行后更改密码,执行:

ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';
FLUSH PRIVILEGES;
EXIT;

4.7 验证数据库连接

/data/linjr/mysql8/bin/mysql -uroot -p123456 -S /data/linjr/mysql8/mysql.sock -e "SHOW DATABASES;"

预期输出

+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+

4.8 MySQL 多用户权限管理

在生产环境中,不同应用或不同人员应使用独立的 MySQL 账号,并授予最小必要权限,通过MySQL root账号实现多用户创建、权限分配、权限查询、权限回收、用户删除避免共用 root 账号带来的安全风险。

4.8.1 创建MySQL自定义用户

语法说明:CREATE USER '用户名'@'访问范围' IDENTIFIED BY '密码';

访问范围说明:

  • localhost:仅服务器本机可登录(安全最高)

  • 10.217.%:仅公司内网网段可登录

  • %:任意IP均可登录

实操示例:

# 创建用户,自定义密码
CREATE USER 'dev'@'10.217.%' IDENTIFIED BY '123456';
4.8.2 创建应用专用数据库 & 权限四层粒度说明
1)创建业务隔离数据库 SQL
-- 为不同应用创建独立数据库,业务、日志、配置库物理隔离
CREATE DATABASE IF NOT EXISTS app_db;
CREATE DATABASE IF NOT EXISTS log_db;
CREATE DATABASE IF NOT EXISTS config_db;
2)MySQL 权限四层粒度划分(授权时按需选择)
权限层级 匹配语法 使用场景说明
全局权限 ON *.* 作用于服务器全部数据库、全部数据表;仅 DBA 管理员账号使用,禁止分配给业务开发账号
数据库级权限 ON db_name.* 作用于指定数据库下所有表;业务应用账号标准授权粒度,推荐日常使用
表级权限 ON db_name.table_name 仅作用于单张指定数据表;多业务共用库、精细化管控单表权限时使用
列级权限 ON db_name.table_name (col1, col2) 仅作用于数据表内指定字段;敏感数据脱敏管控场景,日常业务极少使用
4.8.3 常用权限分配(场景化实操)

权限语法:GRANT 权限列表 ON 数据库名.表名 TO '用户名'@'访问范围';

核心权限说明:

  • SELECT:查询数据(只读权限)

  • INSERT,UPDATE,DELETE:增、改、删数据

  • CREATE,DROP:创建 / 删除数据表、数据库

  • ALL PRIVILEGES:所有权限(仅管理员使用)

场景 1:给开发用户分配业务库完整操作权限(数据库级粒度)

# 给dev用户分配app_db业务库所有增删改查、建表权限
GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP ON app_db.* TO 'dev'@'10.217.%';
FLUSH PRIVILEGES;

场景 2:创建只读测试用户,仅可查询数据,无法修改

CREATE USER 'test_read'@'10.217.%' IDENTIFIED BY '123456';
GRANT SELECT ON app_db.* TO 'test_read'@'10.217.%';
FLUSH PRIVILEGES;
4.8.5 查询用户已有权限

查看指定用户的所有已分配权限,确认配置是否生效:

# 查看dev用户权限
SHOW GRANTS FOR 'dev'@'10.217.%';

# 查看只读用户权限
SHOW GRANTS FOR 'test_read'@'10.217.%';
4.8.6 回收用户权限

回收用户多余权限,实现权限精细化管控:

# 回收dev用户的删表、删库高危权限
REVOKE DROP,CREATE ON app_db.* FROM 'dev'@'10.217.%';
FLUSH PRIVILEGES;
4.8.7 删除无用用户

清理废弃测试用户,保证数据库安全:

# 删除指定用户
DROP USER IF EXISTS 'test_read'@'10.217.%';
FLUSH PRIVILEGES;
4.8.7 多用户隔离核心说明
  1. 不同MySQL用户权限相互隔离,dev用户仅能操作授权的 test_db 库,无法访问其他数据库;

  2. 只读用户仅能查询数据,无法修改、删除业务数据,规避误操作风险;

  3. 所有权限修改后,必须执行FLUSH PRIVILEGES; 命令方可立即生效。

五、Nginx 部署

5.1 解压deb安装包

服务器仅可访问公司内网,无外网权限,无法使用apt在线安装,采用离线deb包手动解压部署。

cd /data/linjr
# 解压deb包提取内部文件
ar x nginx_1.18.0-xxx_amd64.deb
# 解压程序目录
tar -zxvf data.tar.gz

解压后生成usr、etc目录,完整保留在/data/linjr/下,不迁移至系统目录。

  • 执行程序路径:/data/linjr/usr/sbin/nginx

  • 配置文件路径:/data/linjr/etc/nginx/

5.2 处理依赖库缺失问题

直接运行nginx会提示缺少libpcre动态库,提前上传依赖库文件处理:

  1. 在个人目录创建库存放文件夹

mkdir -p /data/linjr/lib64
  1. 将传输的libpcre依赖库复制至该目录

cp libpcre*.so* /data/linjr/lib64/
  1. 运行、重载nginx时通过LD_LIBRARY_PATH指定自定义库路径,加载本地依赖。

5.3 新建前端静态页面目录

mkdir -p /data/linjr/html
# 创建测试首页
echo "<h1>Nginx 离线部署完成</h1>" > /data/linjr/html/index.html

5.4 修改nginx.conf完整配置

cat > /data/linjr/etc/nginx/nginx.conf << 'EOF'
worker_processes  1;

error_log  /data/linjr/var/log/nginx/error.log;
pid        /data/linjr/var/run/nginx.pid;

events {
    worker_connections  1024;
}

http {
    client_body_temp_path /data/linjr/var/cache/nginx/client_temp;
    proxy_temp_path /data/linjr/var/cache/nginx/proxy_temp;
    fastcgi_temp_path /data/linjr/var/cache/nginx/fastcgi_temp;
    uwsgi_temp_path /data/linjr/var/cache/nginx/uwsgi_temp;
    scgi_temp_path /data/linjr/var/cache/nginx/scgi_temp;

    include       /data/linjr/etc/nginx/mime.types;
    default_type  application/octet-stream;

    access_log  /data/linjr/var/log/nginx/access.log;

    sendfile        on;
    keepalive_timeout  65;

    server {
        listen       8080;
        server_name  localhost;

        # 前端静态页面托管
        location / {
            root   /data/linjr/html;
            index  index.html index.htm;
        }

        # 后端接口反向代理,转发至8090端口Java模拟服务
        location /api/ {
            proxy_pass http://127.0.0.1:8090;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   /data/linjr/html;
        }
    }
}
EOF

配置说明:监听8080高位端口规避普通用户端口权限限制,新增/api反向代理规则对接后端Java服务,所有日志、缓存路径均配置至个人目录,不占用系统目录。

5.5 启动 Nginx

cd /data/linjr/usr/sbin
# 指定依赖库路径启动
LD_LIBRARY_PATH=/data/linjr/lib64 ./nginx -c /data/linjr/etc/nginx/nginx.conf

5.6 验证 Web 访问

curl http://localhost:8080

预期输出<h1>Nginx 离线部署完成</h1>

六、服务管理

6.1 JDK 环境管理

操作 命令
查看JDK版本 java -version
查看JAVA_HOME echo $JAVA_HOME
重新加载环境变量 source ~/.bashrc

6.2 MySQL 服务管理

操作 命令
启动MySQL /data/linjr/mysql8/bin/mysqld_safe --defaults-file=/data/linjr/mysql8/my.cnf &
查看进程 ps aux \| grep mysql
停止MySQL pkill -9 mysqld
登录MySQL /data/linjr/mysql8/bin/mysql -uroot -p -S /data/linjr/mysql8/mysql.sock
查看MySQL版本 /data/linjr/mysql8/bin/mysql --version

6.3 Nginx 服务管理

所有操作需携带自定义依赖库环境变量

操作 命令
启动 cd /data/linjr/usr/sbin && LD_LIBRARY_PATH=/data/linjr/lib64 ./nginx -c /data/linjr/etc/nginx/nginx.conf
停止 cd /data/linjr/usr/sbin && LD_LIBRARY_PATH=/data/linjr/lib64 ./nginx -s stop -c /data/linjr/etc/nginx/nginx.conf
重新加载配置 cd /data/linjr/usr/sbin && LD_LIBRARY_PATH=/data/linjr/lib64 ./nginx -s reload -c /data/linjr/etc/nginx/nginx.conf
查看版本 cd /data/linjr/usr/sbin && LD_LIBRARY_PATH=/data/linjr/lib64 ./nginx -v
测试配置文件 cd /data/linjr/usr/sbin && LD_LIBRARY_PATH=/data/linjr/lib64 ./nginx -t -c /data/linjr/etc/nginx/nginx.conf

七、验证清单

检查项 验证命令 预期结果
JDK已安装 java -version 显示 21.0.11
JAVA_HOME已配置 echo $JAVA_HOME 显示 /data/linjr/jdk-21.0.11
MySQL已启动 ps aux \| grep mysqld 显示 mysqld 进程
MySQL可连接 /data/linjr/mysql8/bin/mysql -uroot -p -S /data/linjr/mysql8/mysql.sock -e "SHOW DATABASES;" 显示数据库列表
Nginx已启动 ps aux \| grep nginx 显示 nginx master、worker进程
Nginx可访问 curl http://localhost:8080 输出Nginx测试页面内容
反向代理连通 curl http://127.0.0.1:8080/api/test 返回后端JSON数据

八、附录:进程管理

# 查看所有 Java 进程
ps aux | grep java

# 查看所有 MySQL 进程
ps aux | grep mysql

# 查看所有 Nginx 进程
ps aux | grep nginx

# 强制终止进程
pkill -9 进程名
Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐