华为欧拉系统(EulerOS)上部署 Java 环境:JDK21 + MySQL8 + Nginx

华为欧拉系统(EulerOS)是一款针对企业级场景优化的 Linux 发行版,适合作为服务器和云环境的基础操作系统。当前刚好华为云新用户可免费领取一个月使用,可用于熟悉 Linux 系统相关指令,以及环境部署和项目部署

本文将详细讲解 Java 开发环境的部署,包括 JDK21MySQL8Nginx 的安装与配置


环境准备

  • 操作系统:华为EulerOS 2.0(基于CentOS兼容架构)
  • 用户权限root 或具有 sudo 权限的账户
  • 网络:确保系统可访问互联网

一、安装 JDK-21

步骤1:二进制发布包下载

  • 通过分享的链接下载,并使用工具将文件上传到服务器上

    「jdk-21_linux-x64_bin.tar.gz」
    链接:https://pan.quark.cn/s/fee0443bbe42
    提取码:GhJJ

  • 解压安装包

    执行如下指令,将上传上来的压缩包进行解压,并通过 -C 参数指定解压文件存放目录为 /usr/local。

tar -zxvf jdk-21_linux-x64_bin.tar.gz -C /usr/local/

在这里插入图片描述

步骤2:配置环境变量

# 编辑配置文件
vim /etc/profile

# 在文件末尾加入如下配置
export JAVA_HOME=/usr/local/jdk-21.0.1
export PATH=$JAVA_HOME/bin:$PATH

# 使配置生效
source /etc/profile

# 验证安装
java -version

在这里插入图片描述


二、安装MySQL8

在安装MySQL数据库之前,需要先检查一下当前 Linux 系统中,是否安装的有MySQL的相关服务(很多linux安装完毕之后,自带了低版本的 mysql 的依赖包),如果有,先需要卸载掉,然后再进行安装

通过 rpm 相关指令,来查询当前系统中是否存在已安装的 mysql 软件包,执行指令如下:

  • rpm -qa 查询当前系统中安装的所有软件
  • rpm -qa | grep mysql 查询当前系统中安装的名称带mysql的软件
  • rpm -qa | grep mariadb 查询当前系统中安装的名称带mariadb的软件

如果有,可通过 rpm 相关指令,来卸载对应的组件,执行指令如下:

在rpm中,卸载软件的语法为:

  • rpm -e --nodeps 软件名称

步骤1: 二进制发布包下载

  • 通过分享的链接下载,并使用工具将文件上传到服务器上

    「mysql-8.0.30-linux-glibc2.12-x86_64.tar.xz」
    链接:https://pan.quark.cn/s/e7c3a34a660a
    提取码:tLzZ

步骤2:解压安装包

tar -xvf mysql-8.0.30-linux-glibc2.12-x86_64.tar.xz

# 将解压后的文件夹移动到 /usr/local 目录下, 并改名为 mysql
mv mysql-8.0.30-linux-glibc2.12-x86_64 /usr/local/mysql

cd /usr/local/mysql

步骤 3: 创建 MySQL 用户和组

创建一个用于运行 MySQL 服务的系统用户:

groupadd mysql
useradd -r -g mysql -s /bin/false mysql

步骤 4: 配置 MySQL 数据目录

创建 MySQL 数据目录并设置适当的权限:

mkdir /usr/local/mysql/data
chown -R mysql:mysql /usr/local/mysql
chown -R mysql:mysql /usr/local/mysql/data

步骤 5: 初始化数据库

使用 mysqld 初始化数据库:

cd /usr/local/mysql
./bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data

此命令会初始化 MySQL 数据库并在日志中输出一个临时的 root 密码,记得复制出来备用

在这里插入图片描述

步骤 6: 配置 MySQL 服务

创建一个 MySQL 启动脚本以便系统可以启动和停止 MySQL 服务

  1. 创建一个名为 mysql 的服务脚本文件:
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql
  1. 设置脚本可执行权限:
chmod +x /etc/init.d/mysql
  1. 配置系统服务(可选):
chkconfig --add mysql
chkconfig mysql on

步骤 7: 启动 MySQL

使用以下命令启动 MySQL:

/etc/init.d/mysql start

或者直接使用 mysqld 启动:

/usr/local/mysql/bin/mysqld_safe --user=mysql &

步骤 8: 配置 MySQL 环境变量

为了方便使用,可以将 MySQL 的二进制文件路径加入到 PATH 环境变量中。编辑 ~/.bash_profile 文件,加入以下内容:

export PATH=$PATH:/usr/local/mysql/bin

然后执行:

source ~/.bash_profile

步骤 9: 设置 root 密码

根据初始化数据库时输出的临时密码,登录 MySQL:

mysql -u root -p

在这一步时,欧拉系统报错缺少 libtinfo.so.5

在这里插入图片描述

这个库通常由 ncursesncurses-libs 包提供。可以通过以下步骤来解决这个问题:

sudo yum install ncurses-libs

安装完库之后,使用以下命令确认库文件是否存在:

ldconfig -p | grep libtinfo

发现系统安装的是 libtinfo.so.6,此时依然存在该问题

在这里插入图片描述

为了解决该问题,可以尝试创建一个符号链接,将 libtinfo.so.6 映射到 libtinfo.so.5,这样 MySQL 依然能找到它依赖的库。

sudo ln -s /usr/lib64/libtinfo.so.6 /usr/lib64/libtinfo.so.5

然后,尝试再次运行 MySQL,输入此前复制的临时密码:

mysql -u root -p

在这里插入图片描述

登录后,修改 root 密码:

ALTER USER 'root'@'localhost' IDENTIFIED BY 'newpassword';

步骤 10: 配置 MySQL 开机自启

如果想让 MySQL 在系统启动时自动启动,可以使用以下命令:

chkconfig mysql on

或者,使用 systemd 来管理 MySQL 服务

步骤11:window 连接服务器(可选)

创建账号, 并授权远程访问

CREATE USER 'root'@'%' IDENTIFIED BY 'password';

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%';

FLUSH PRIVILEGES;

注意:要想在windows上能够访问MySQL,需要开放防火墙的3306端口 或者 直接关闭防火墙 ,执行如下指令:

# 关闭防火墙
systemctl stop firewalld

# 开放防火墙的3306端口号
firewall-cmd --zone=public --add-port=3306/tcp --permanent

# 重新加载
firewall-cmd --reload

# 查看开放的端口号
firewall-cmd --zone=public --list-ports

在这里插入图片描述


三、防火墙

1、防火墙的基本概念

防火墙是服务器安全体系中的核心组件,用于监控和控制进出服务器的网络流量。在Linux系统中,防火墙通过定义规则(Rules)来决定允许或拒绝特定的数据包。

常见的防火墙实现工具有 iptables(传统工具)、nftables(新一代替代工具)以及基于它们的用户友好工具如 UFW(Uncomplicated Firewall)和 firewalld(CentOS/RHEL默认工具)

核心功能:
  1. 流量过滤:根据IP地址、端口、协议等条件允许或拒绝流量
  2. 网络地址转换(NAT):实现端口转发、IP伪装等功能
  3. 状态化监控:跟踪连接状态(如已建立的TCP连接),动态调整规则

2、常用防火墙工具对比

工具名称特点
iptables传统工具,直接操作内核Netfilter模块,功能强大但配置复杂
nftablesiptables的替代品,语法更简洁,支持统一规则管理
UFW基于iptables的简化工具,适合新手快速配置(Ubuntu默认)
firewalld动态管理工具,支持“区域”概念,适合复杂网络环境(CentOS/RHEL默认)

3、常用操作指南

1. iptables/nftables基础操作
  • 查看当前规则

    iptables -L -n -v  # 查看iptables规则
    nft list ruleset   # 查看nftables规则
    
  • 允许特定端口(如SSH的22端口):

    iptables -A INPUT -p tcp --dport 22 -j ACCEPT
    
  • 拒绝某个IP地址

    iptables -A INPUT -s 192.168.1.100 -j DROP
    
  • 保存规则(避免重启后丢失):

    iptables-save > /etc/iptables/rules.v4  # Debian/Ubuntu
    service iptables save                  # CentOS/RHEL
    
2. UFW简化操作
  • 启用防火墙

    ufw enable
    
  • 允许HTTP/HTTPS流量

    ufw allow 80/tcp
    ufw allow 443/tcp
    
  • 拒绝某个IP

    ufw deny from 10.0.0.5
    
  • 查看状态

    ufw status numbered
    
3. firewalld动态管理(最常用)
操作命令说明
查看防火墙状态sudo systemctl status firewalld查看防火墙服务状态
查看防火墙运行状态sudo firewall-cmd --state查看防火墙是否启动
查看当前活动区域和规则sudo firewall-cmd --get-active-zones查看当前活动的区域及其规则
查看某个区域的详细配置sudo firewall-cmd --zone=public --list-all查看 public 区域的详细规则
启动防火墙服务sudo systemctl start firewalld启动 firewalld 服务
停止防火墙服务sudo systemctl stop firewalld停止 firewalld 服务
设置防火墙开机自启动sudo systemctl enable firewalld设置 firewalld 开机自启动
禁用防火墙开机自启动sudo systemctl disable firewalld禁用 firewalld 开机自启动
临时添加服务sudo firewall-cmd --zone=public --add-service=ssh允许 public 区域使用 ssh 服务
永久添加服务sudo firewall-cmd --zone=public --add-service=ssh --permanent永久添加 ssh 服务到 public 区域
临时删除服务sudo firewall-cmd --zone=public --remove-service=sshpublic 区域删除 ssh 服务
永久删除服务sudo firewall-cmd --zone=public --remove-service=ssh --permanent永久删除 ssh 服务
临时开放端口sudo firewall-cmd --zone=public --add-port=8080/tcp允许 public 区域开放 8080/tcp 端口
永久开放端口sudo firewall-cmd --zone=public --add-port=8080/tcp --permanent永久开放 8080/tcp 端口
临时关闭端口sudo firewall-cmd --zone=public --remove-port=8080/tcppublic 区域关闭 8080/tcp 端口
永久关闭端口sudo firewall-cmd --zone=public --remove-port=8080/tcp --permanent永久关闭 8080/tcp 端口
重新加载防火墙配置sudo firewall-cmd --reload重新加载防火墙配置
列出所有已添加服务sudo firewall-cmd --list-services列出所有已添加的服务
列出所有已开放的端口sudo firewall-cmd --list-ports列出所有已开放的端口
临时添加 IP 地址sudo firewall-cmd --zone=public --add-source=192.168.1.10允许 public 区域的 192.168.1.10 地址
永久添加 IP 地址sudo firewall-cmd --zone=public --add-source=192.168.1.10 --permanent永久允许 192.168.1.10 地址
临时移除 IP 地址sudo firewall-cmd --zone=public --remove-source=192.168.1.10public 区域移除 192.168.1.10 地址
永久移除 IP 地址sudo firewall-cmd --zone=public --remove-source=192.168.1.10 --permanent永久移除 192.168.1.10 地址
禁用 ICMP(Ping)请求sudo firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="0.0.0.0/0" reject'禁止所有 ICMP 请求(禁用 Ping)
允许 ICMP(Ping)请求sudo firewall-cmd --zone=public --remove-rich-rule='rule family="ipv4" source address="0.0.0.0/0" reject'允许 ICMP 请求(启用 Ping)
查看 firewalld 配置文件sudo cat /etc/firewalld/firewalld.conf查看 firewalld 配置文件内容

补充说明:

  • 区域(Zone)firewalld 使用区域来管理不同的网络接口。常见的区域有 publicdmztrusted 等。
  • 临时规则:临时规则在 firewalld 重启或系统重启后会丢失。使用 --permanent 标志来设置永久规则。
  • 重新加载配置:修改防火墙规则后,使用 reload 命令让新配置生效。

4、注意事项

  1. 默认策略:建议先设置默认规则为:DROP 或 REJECT,再逐步开放必要服务

    iptables -P INPUT DROP  # 默认拒绝所有入站流量
    
  2. 避免锁定自己:配置SSH规则前,确保当前连接不会被中断

  3. 日志记录:可通过规则记录被拒绝的流量,便于排查问题。

    iptables -A INPUT -j LOG --log-prefix "DROPPED: "
    
  4. 定期备份规则:防止误操作或系统更新导致配置丢失


5、工具选择建议

  • 新手推荐:使用UFWfirewalld简化配置
  • 高级需求:直接使用nftablesiptables实现精细控制
  • 生产环境:结合脚本和版本管理工具(如Git)保存防火墙规则

通过合理配置防火墙,可以有效提升服务器的安全性。建议在修改规则前充分测试,并利用工具如telnetnmap验证端口状态,确保配置符合预期


四、安装Nginx

  • 通过分享的链接下载,并使用工具将文件上传到服务器上

    「nginx-1.20.2.tar.gz」
    链接:https://pan.quark.cn/s/001fc7dd9f34
    提取码:X65y

1.安装依赖

Nginx的安装包,从官方下载下来的是 c 语言的源码包,需要自己编译安装。具体操作步骤如下:

1). 安装Nginx运行时需要的依赖

yum install -y pcre pcre-devel zlib zlib-devel openssl openssl-devel

安装C语言的编译环境.

yum install gcc-c++

2. 解压安装 Nginx

# 解压源码包到当前目录
tar -zxvf nginx-1.20.2.tar.gz

#进入解压目录
cd nginx-1.20.2

#执行命令配置, 生成Makefile文件
./configure --prefix=/usr/local/nginx

#编译
make

#编译安装
make install

# 开放HTTP/HTTPS端口
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload

3. 启动验证Nginx

进入到nginx安装目录/usr/local/nginx,启动nginx服务

cd /usr/local/nginx/
sbin/nginx

# 查看系统中 nginx 进程
ps -ef | grep nginx

在这里插入图片描述

浏览器访问 http://服务器IP,若显示欢迎页面则安装成功

遇到的问题:

在这里插入图片描述


查看错误日志:

cat /usr/local/nginx/logs/error.log

在这里插入图片描述

有以下三种可能导致,可根据实际情况进行排查:

  • 查看 nginx 的启动用户,发现是nobody,而非是用 root 启动的

    • ps aux | grep "nginx: worker process" | awk '{print $1}'
      
      # 修改配置文件中 user 指定用户为 root
      vi /usr/local/nginx/conf/nginx.conf
      
      # 重新加载 nginx 配置
      sudo /usr/local/nginx/sbin/nginx -s reload
      

      在这里插入图片描述

      在这里插入图片描述

  • 检查文件权限

    • 检查目录权限: 确保 /usr/local/nginx/html 目录和其中的文件对 Nginx 进程可读
    • Nginx 默认是以 nobody 用户运行,因此需要确保该用户可以访问这些文件
    1. 检查并修改权限

      sudo chmod -R 755 /usr/local/nginx/html
      sudo chown -R nobody:nobody /usr/local/nginx/html
      
  • 检查 SELinux 设置

    • 检查 SELinux 状态
    sudo getenforce
    

    如果输出是 Enforcing,则说明 SELinux 仍然启用,可能需要进一步设置 SELinux 来允许 Nginx 访问文件。可以尝试将其设置为 Permissive 或临时禁用 SELinux:

    sudo setenforce 0   # 临时禁用 SELinux
    

    关闭 SELinux(如果需要): 如果 SELinux 是启用状态且影响 Nginx 的访问,可以编辑 SELinux 配置文件 /etc/selinux/config

    sudo vi /etc/selinux/config
    

    SELINUX 的值修改为 disabled,然后重启系统:

    SELINUX=disabled
    

    可根据实际情况进行排查,最终实现效果

在这里插入图片描述

四、验证环境集成

1. 部署测试Java应用

创建一个简单的Spring Boot应用(假设打包为 app.jar),测试数据库连接和HTTP访问:

# 启动应用(示例)
java -jar app.jar --spring.datasource.url=jdbc:mysql://localhost:3306/app_db

2. 配置Nginx反向代理

编辑Nginx配置文件:

sudo vim /etc/nginx/conf.d/app.conf

# 添加以下内容
server {
    listen 80;
    server_name your_domain.com;

    location / {
        proxy_pass http://localhost:8080;  # 转发到Java应用
        proxy_set_header Host $host;
    }
}

# 重启Nginx
sudo systemctl restart nginx

五、常见问题解决

MySQL连接失败

  • 确认防火墙开放3306端口:firewall-cmd --add-port=3306/tcp
  • 检查用户权限:GRANT 语句需包含远程访问IP(如 'app_user'@'%'

Nginx无法启动

  • 检查端口冲突:netstat -tuln | grep 80
  • 查看日志:tail -f /var/log/nginx/error.log

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿绵

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值