Linux 服务器 Java 开发环境搭建保姆级教程

作为 Java 后端开发,Linux 服务器环境搭建是日常工作的基础技能。本文基于 CentOS 7 系统,纯干货整理 JDK 11、Nginx、Nacos、Redis、Docker 及 MySQL 的安装与配置步骤,全程命令可直接复制,新手也能轻松上手。

一、前置准备:更换 yum 源 + 开放端口

1. 更换国内 yum 源(阿里源)

默认 yum 源下载速度慢,优先替换为阿里云镜像:

bash 复制代码
# 备份系统默认源
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak

# 下载阿里源(wget方式)
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

# 若无wget,用curl下载
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

# 清除缓存并重建
yum clean all
yum makecache

# 更新yum
yum update -y

2. 开放防火墙端口

Java 开发常用端口(如 8080、6379、3306 等)需提前开放,云服务器需先在控制台配置安全组。

bash 复制代码
# 查看防火墙状态
firewall-cmd --state

# 启动防火墙(未启动时)
systemctl start firewalld.service

# 开放单个端口(永久生效)
firewall-cmd --zone=public --add-port=8080/tcp --permanent
firewall-cmd --zone=public --add-port=6379/tcp --permanent
firewall-cmd --zone=public --add-port=3306/tcp --permanent
firewall-cmd --zone=public --add-port=8848/tcp --permanent

# 重启防火墙使配置生效
systemctl restart firewalld.service

# 查看已开放端口
firewall-cmd --list-ports

二、核心组件安装

1. JDK 11 安装(解压版)

推荐使用解压版 JDK,避免 rpm 安装的环境变量冲突问题。

bash 复制代码
# 进入软件安装目录
cd /usr/local/

# 下载JDK 11(华为云镜像)
wget https://repo.huaweicloud.com/java/jdk/11+28/jdk-11_linux-x64_bin.tar.gz

# 解压
tar -zxvf jdk-11_linux-x64_bin.tar.gz

# 卸载系统自带openjdk(若有)
rpm -qa | grep java | xargs rpm -e --nodeps

# 配置环境变量
vim /etc/profile

# 在文件末尾添加以下内容
export JAVA_HOME=/usr/local/jdk-11
export CLASSPATH=.:$JAVA_HOME/lib
export PATH=$PATH:$JAVA_HOME/bin

# 加载环境变量
source /etc/profile

# 验证安装
java -version

2. Nginx 安装

Nginx 是 Java 项目常用的反向代理服务器,需先安装依赖库。

bash 复制代码
# 安装依赖
yum install -y gcc-c++ openssl openssl-devel pcre pcre-devel zlib zlib-devel

# 创建安装目录
mkdir /usr/local/nginx

# 下载并解压Nginx(以1.19.9为例)
wget http://nginx.org/download/nginx-1.19.9.tar.gz
tar -zxvf nginx-1.19.9.tar.gz
cd nginx-1.19.9

# 配置编译参数(指定安装路径+开启SSL)
./configure --prefix=/usr/local/nginx --with-http_ssl_module

# 编译安装
make && make install

# 启动Nginx
cd /usr/local/nginx/sbin
./nginx

# 验证:浏览器访问服务器IP,出现Nginx欢迎页即成功
# 重启Nginx命令
./nginx -s reload

3. Nacos 安装(单机版)

bash 复制代码
# 进入安装目录
cd /usr/local/

# 下载Nacos 1.4.2
wget https://github.com/alibaba/nacos/releases/download/1.4.2/nacos-server-1.4.2.tar.gz

# 解压
tar -xvf nacos-server-1.4.2.tar.gz

# 调整JVM参数(小内存服务器必备)
vim /usr/local/nacos/bin/startup.sh
# 修改单机模式JVM参数为:
# JAVA_OPT="${JAVA_OPT} -Xms64m -Xmx64m -Xmn64m"

# 赋予脚本执行权限
chmod u+x /usr/local/nacos/bin/*.sh

# 单机启动
cd /usr/local/nacos/bin
./startup.sh -m standalone

# 验证启动
ps -ef | grep nacos

# 访问控制台:http://服务器IP:8848/nacos(默认账号密码:nacos/nacos)

4. Redis 安装

Redis 是 Java 项目常用的缓存中间件,需修改配置文件开启后台运行。

bash 复制代码
# 进入安装目录
cd /usr/local/

# 下载Redis 5.0.4
wget http://download.redis.io/releases/redis-5.0.4.tar.gz

# 解压
tar -xzvf redis-5.0.4.tar.gz
cd redis-5.0.4

# 编译安装
make
cd src
make install PREFIX=/usr/local/redis

# 复制配置文件到安装目录
mkdir /usr/local/redis/etc
cp ../redis.conf /usr/local/redis/etc/

# 修改配置文件
vim /usr/local/redis/etc/redis.conf
# 1. 开启后台运行:daemonize no → yes
# 2. 关闭保护模式:protected-mode yes → no
# 3. 设置密码:requirepass 你的密码(可选)
# 4. 注释bind 127.0.0.1(允许远程访问)

# 启动Redis
cd /usr/local/redis/bin
./redis-server /usr/local/redis/etc/redis.conf

# 验证启动
ps -ef | grep redis

5. Docker 安装

Docker 可简化 MySQL、RocketMQ 等组件的部署,是开发环境的必备工具。

bash 复制代码
# 查看系统内核版本(需3.10以上)
uname -r

# 安装Docker
yum install -y docker

# 启动Docker
systemctl start docker

# 设置开机自启
systemctl enable docker

# 配置阿里云镜像加速
vim /etc/docker/daemon.json
# 添加以下内容
{
    "registry-mirrors": ["https://mirror.ccs.tencentyun.com"]
}

# 重启Docker
systemctl restart docker

# 验证安装
docker -v

6. Docker 安装 MySQL 5.7

使用 Docker 安装 MySQL,避免系统环境依赖问题。

bash 复制代码
# 拉取MySQL 5.7镜像
docker pull mysql:5.7

# 创建数据挂载目录
mkdir -p /usr/local/mysql/{conf,logs,data}

# 启动MySQL容器
docker run -p 3306:3306 --name mysql \
--privileged=true \
-v /usr/local/mysql/conf:/etc/mysql/conf.d \
-v /usr/local/mysql/logs:/logs \
-v /usr/local/mysql/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql:5.7

# 进入容器
docker exec -it mysql /bin/bash

# 登录MySQL
mysql -uroot -proot

# 开启远程访问
use mysql;
update user set Host='%' where User='root';
flush privileges;

# 配置字符集(防止中文乱码)
vim /usr/local/mysql/conf/my.cnf
# 添加以下内容
[client]
default-character-set=utf8
[mysqld]
init_connect='SET collation_connection = utf8_unicode_ci'
init_connect='SET NAMES utf8'
character-set-server=utf8
collation-server=utf8_unicode_ci
skip-character-set-client-handshake
lower_case_table_names=1

# 重启MySQL容器
docker restart mysql

7. RocketMQ 集群搭建(双主双从)

RocketMQ 是 Java 项目核心的分布式消息队列,双主双从集群满足开发 / 测试环境的高可用需求。
7.1 环境准备

bash 复制代码
# 开放RocketMQ所需端口
firewall-cmd --zone=public --add-port=9876/tcp --permanent  # NameServer端口
firewall-cmd --zone=public --add-port=10911-10914/tcp --permanent  # Broker端口
systemctl restart firewalld.service

# 验证JDK环境(RocketMQ依赖JDK)
java -version

7.2 下载安装

bash 复制代码
# 进入安装目录
cd /usr/local/
# 下载RocketMQ 4.9.4(稳定版)
wget https://archive.apache.org/dist/rocketmq/4.9.4/rocketmq-all-4.9.4-bin-release.zip
# 安装unzip(若未安装)
yum install -y unzip
# 解压并重命名
unzip rocketmq-all-4.9.4-bin-release.zip
mv rocketmq-all-4.9.4-bin-release rocketmq

# 调整JVM参数(小内存服务器必改,避免启动失败)
# 修改NameServer JVM参数
vim /usr/local/rocketmq/bin/runserver.sh
# 将原配置 -Xms4g -Xmx4g -Xmn2g 改为
JAVA_OPT="${JAVA_OPT} -server -Xms1g -Xmx1g -Xmn512m"

# 修改Broker JVM参数
vim /usr/local/rocketmq/bin/runbroker.sh
# 将原配置 -Xms4g -Xmx4g -Xmn2g 改为
JAVA_OPT="${JAVA_OPT} -server -Xms1g -Xmx1g -Xmn512m"

7.3 配置集群文件

bash 复制代码
# 创建集群配置目录
mkdir -p /usr/local/rocketmq/conf/cluster

# 1. 编写broker-a(主节点)配置
cat > /usr/local/rocketmq/conf/cluster/broker-a.conf << EOF
brokerClusterName=DefaultCluster
brokerName=broker-a
brokerId=0
namesrvAddr=127.0.0.1:9876
listenPort=10911
storePathRootDir=/usr/local/rocketmq/store/broker-a
storePathCommitLog=/usr/local/rocketmq/store/broker-a/commitlog
autoCreateTopicEnable=true
brokerPermission=6
EOF

# 2. 编写broker-a-s(从节点)配置
cat > /usr/local/rocketmq/conf/cluster/broker-a-s.conf << EOF
brokerClusterName=DefaultCluster
brokerName=broker-a
brokerId=1
namesrvAddr=127.0.0.1:9876
listenPort=10912
storePathRootDir=/usr/local/rocketmq/store/broker-a-s
storePathCommitLog=/usr/local/rocketmq/store/broker-a-s/commitlog
autoCreateTopicEnable=true
brokerPermission=2
EOF

# 3. 编写broker-b(主节点)配置
cat > /usr/local/rocketmq/conf/cluster/broker-b.conf << EOF
brokerClusterName=DefaultCluster
brokerName=broker-b
brokerId=0
namesrvAddr=127.0.0.1:9876
listenPort=10913
storePathRootDir=/usr/local/rocketmq/store/broker-b
storePathCommitLog=/usr/local/rocketmq/store/broker-b/commitlog
autoCreateTopicEnable=true
brokerPermission=6
EOF

# 4. 编写broker-b-s(从节点)配置
cat > /usr/local/rocketmq/conf/cluster/broker-b-s.conf << EOF
brokerClusterName=DefaultCluster
brokerName=broker-b
brokerId=1
namesrvAddr=127.0.0.1:9876
listenPort=10914
storePathRootDir=/usr/local/rocketmq/store/broker-b-s
storePathCommitLog=/usr/local/rocketmq/store/broker-b-s/commitlog
autoCreateTopicEnable=true
brokerPermission=2
EOF

7.4 启动集群

bash 复制代码
cd /usr/local/rocketmq/bin

# 1. 启动NameServer
nohup sh mqnamesrv &
# 验证NameServer启动:日志出现"The Name Server boot success"
tail -f ~/logs/rocketmqlogs/namesrv.log

# 2. 启动Broker节点(按顺序执行)
nohup sh mqbroker -c /usr/local/rocketmq/conf/cluster/broker-a.conf &
nohup sh mqbroker -c /usr/local/rocketmq/conf/cluster/broker-a-s.conf &
nohup sh mqbroker -c /usr/local/rocketmq/conf/cluster/broker-b.conf &
nohup sh mqbroker -c /usr/local/rocketmq/conf/cluster/broker-b-s.conf &

# 3. 验证集群状态
export NAMESRV_ADDR=127.0.0.1:9876
sh mqadmin clusterList
# 输出显示2主2从节点即搭建成功

7.5 常用命令

bash 复制代码
# 关闭NameServer
sh mqshutdown namesrv
# 关闭Broker
sh mqshutdown broker
# 发送测试消息
sh tools.sh org.apache.rocketmq.example.quickstart.Producer
# 消费测试消息
sh tools.sh org.apache.rocketmq.example.quickstart.Consumer

三、总结

  1. 本文覆盖 Java 开发核心环境:JDK 11、Nginx、Nacos、Redis、Docker、MySQL、RocketMQ,所有命令可直接复制执行。
  2. 小内存服务器需重点调整 Nacos、RocketMQ 的 JVM 参数,避免内存不足导致启动失败。
  3. 云服务器需同时配置安全组和防火墙端口,否则会出现服务可启动但无法远程访问的问题。

如果安装过程中遇到问题,欢迎在评论区留言交流!

相关推荐
金牌归来发现妻女流落街头5 小时前
【从SpringBoot到SpringCloud】
java·spring boot·spring cloud
毅炼5 小时前
Java 基础常见问题总结(4)
java·后端
GR2342345 小时前
2025年影视仓TV+手机官方版 内置地址源支持高清直播
java·智能手机·软件
70asunflower5 小时前
Emulation,Simulation,Virtualization,Imitation 的区别?
linux·docker
程序员清风5 小时前
北京回长沙了,简单谈谈感受!
java·后端·面试
神梦流5 小时前
ops-math 算子库的扩展能力:高精度与复数运算的硬件映射策略
服务器·数据库
何中应5 小时前
请求头设置没有生效
java·后端
神梦流5 小时前
GE 引擎的内存优化终局:静态生命周期分析指导下的内存分配与复用策略
linux·运维·服务器
凡人叶枫5 小时前
C++中输入、输出和文件操作详解(Linux实战版)| 从基础到项目落地,避坑指南
linux·服务器·c语言·开发语言·c++