公司内网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 软件版本清单软件版本下载地址JDK21.0.11 LTSJava Downloads | OracleMySQL5.7.44https://downloads.mysql.com/archives/get/p/23/file/mysql-5.7.44-linux-glibc2.12-x86_64.tar.gzNginx1.18.0http://nginx.org/download/nginx-1.18.0.tar.gzlibpcre3https://packages.debian.org/bullseye/amd64/libpcre3/download二、部署前准备将以下安装包上传至服务器/data/linjr/目录下文件名说明jdk-21_linux-x64_bin.tar.gzJDK 21 安装包mysql-5.7.44-linux-glibc2.12-x86_64.tar.gzMySQL 5.7.44 安装包nginx_1.18.0-xxx_amd64.debNginx 1.18.0 离线deb包libpcre3_8.39-13deb11u6_amd64.deb解决nginx运行依赖缺失三、JDK 21 部署3.1 解压cd /data/linjr tar -zxvf jdk-21_linux-x64_bin.tar.gz3.2 配置环境变量echo export JAVA_HOME/data/linjr/jdk-21.0.11 ~/.bashrc echo export PATH\$PATH:\$JAVA_HOME/bin ~/.bashrc source ~/.bashrc3.3 验证安装java -version预期输出java version 21.0.11 2026-04-21 LTS Java(TM) SE Runtime Environment (build 21.0.119-LTS-211) Java HotSpot(TM) 64-Bit Server VM (build 21.0.119-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.103.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 mysql84.2 创建数据目录cd /data/linjr/mysql8 mkdir -p data logs tmp4.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 port3307 userlinjr tmpdir/data/linjr/mysql8/tmp EOF4.4 初始化数据库/data/linjr/mysql8/bin/mysqld --defaults-file/data/linjr/mysql8/my.cnf --initialize --userlinjr注意初始化完成后会生成临时密码。执行以下命令查看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 rootlocalhost 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 dev10.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;2MySQL 权限四层粒度划分授权时按需选择权限层级匹配语法使用场景说明全局权限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 dev10.217.%; FLUSH PRIVILEGES;场景 2创建只读测试用户仅可查询数据无法修改CREATE USER test_read10.217.% IDENTIFIED BY 123456; GRANT SELECT ON app_db.* TO test_read10.217.%; FLUSH PRIVILEGES;4.8.5 查询用户已有权限查看指定用户的所有已分配权限确认配置是否生效# 查看dev用户权限 SHOW GRANTS FOR dev10.217.%; # 查看只读用户权限 SHOW GRANTS FOR test_read10.217.%;4.8.6 回收用户权限回收用户多余权限实现权限精细化管控# 回收dev用户的删表、删库高危权限 REVOKE DROP,CREATE ON app_db.* FROM dev10.217.%; FLUSH PRIVILEGES;4.8.7 删除无用用户清理废弃测试用户保证数据库安全# 删除指定用户 DROP USER IF EXISTS test_read10.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 h1Nginx 离线部署完成/h1 /data/linjr/html/index.html5.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 启动 Nginxcd /data/linjr/usr/sbin # 指定依赖库路径启动 LD_LIBRARY_PATH/data/linjr/lib64 ./nginx -c /data/linjr/etc/nginx/nginx.conf5.6 验证 Web 访问curl http://localhost:8080预期输出h1Nginx 离线部署完成/h1六、服务管理6.1 JDK 环境管理操作命令查看JDK版本java -version查看JAVA_HOMEecho $JAVA_HOME重新加载环境变量source ~/.bashrc6.2 MySQL 服务管理操作命令启动MySQL/data/linjr/mysql8/bin/mysqld_safe --defaults-file/data/linjr/mysql8/my.cnf 查看进程ps aux \| grep mysql停止MySQLpkill -9 mysqld登录MySQL/data/linjr/mysql8/bin/mysql -uroot -p -S /data/linjr/mysql8/mysql.sock查看MySQL版本/data/linjr/mysql8/bin/mysql --version6.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.11JAVA_HOME已配置echo $JAVA_HOME显示 /data/linjr/jdk-21.0.11MySQL已启动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 进程名