公司内网linux服务器环境搭建 - JDK + Nginx + MySQL
服务器环境部署手册
项目名称: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_HOME 和 PATH。用户登录后加载自己的配置文件,使用的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 多用户隔离核心说明
-
不同MySQL用户权限相互隔离,dev用户仅能操作授权的
test_db库,无法访问其他数据库; -
只读用户仅能查询数据,无法修改、删除业务数据,规避误操作风险;
-
所有权限修改后,必须执行
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动态库,提前上传依赖库文件处理:
-
在个人目录创建库存放文件夹
mkdir -p /data/linjr/lib64
-
将传输的libpcre依赖库复制至该目录
cp libpcre*.so* /data/linjr/lib64/
-
运行、重载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 进程名
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐

所有评论(0)