基于阿里云 ECS 的Java 博客系统部署实战

📅 2026/7/6 2:40:56
基于阿里云 ECS 的Java 博客系统部署实战
基于阿里云 ECS 的 Java 博客系统部署实践记录一、项目背景本次实践的目标是在阿里云 ECS 云服务器上部署一个 Java 博客系统并通过 Nginx 对外提供统一访问入口。该博客系统采用典型的 Java Web 架构主要组件包括JDK提供 Java 运行环境MySQL存储博客系统数据Tomcat运行 Java Web 项目Nginx作为 Web 入口和反向代理服务器阿里云 ECS承载整套服务环境最终目标是用户通过浏览器访问 Nginx 所在服务器的 80 端口由 Nginx 将请求转发到后端 Tomcat 服务Tomcat 调用 MySQL 数据库完成博客系统页面展示和业务处理。二、整体架构设计本次部署采用两台 ECS 云服务器节点主要角色部署组件node1入口代理节点JDK、Nginxnode2应用与数据库节点JDK、MySQL、Tomcat、博客系统 WAR 包整体访问链路如下用户浏览器 ↓ 阿里云安全组 80 端口 ↓ node1Nginx ↓ 反向代理 node2Tomcat 8080 ↓ node2MySQL 数据库这样设计的好处是Nginx 统一对外暴露 80 端口。Tomcat 只作为后端应用服务不直接暴露给公网。后期如果扩展多台 Tomcat可以继续使用 Nginx 做负载均衡。整体结构更接近实际生产环境中的“入口层 应用层 数据层”部署方式。三、ECS 服务器准备本次使用阿里云 ECS 免费试用实例完成部署。创建 ECS 时主要关注以下几项图 1阿里云 ECS 实例创建完成node1 和 node2 分别作为代理节点与应用数据库节点操作系统CentOS Stream 9配置规格2 核 CPU、2GB 内存、40GB 云盘网络分配公网 IP安全组开放 SSH 22 端口和 HTTP 80 端口后期临时验证 Tomcat 时开放 8080 端口正式通过 Nginx 访问后再关闭 8080 公网访问两台服务器分别设置主机名hostnamectl set-hostname node1.itcast.cn hostnamectl set-hostname node2.itcast.cn然后在两台服务器的/etc/hosts中添加内网解析记录node1内网IPnode1 node1.itcast.cnnode2内网IPnode2 node2.itcast.cn这里需要注意服务器之间通信应优先使用阿里云内网 IP而不是公网 IP。这样可以减少公网暴露面也更符合生产环境中的内网通信方式。配置完成后可以通过ping node1、ping node2验证主机名解析和两台服务器之间的连通性。四、部署 JDK 环境博客系统是 Java Web 项目因此两台服务器都需要安装 JDK。创建软件包目录mkdir-p/export/softwarecd/export/software下载 JDK 安装包wgethttps://raw.gitcode.com/open-source-toolkit/66825/blobs/7acfac1a75800e01c620ea37a18de1fa62c645e3/jdk-8u241-linux-x64.tar.gz解压到/opt目录tar-xzfjdk-8u241-linux-x64.tar.gz-C/opt配置系统环境变量vim/etc/profile在文件末尾添加exportJAVA_HOME/opt/jdk1.8.0_241exportPATH$JAVA_HOME/bin:$PATHexportCLASSPATH$JAVA_HOME/lib:$CLASSPATH使配置生效source/etc/profile验证 JDK 是否安装成功java-versionjavac图 3JDK 1.8 环境配置完成Java 命令可全局调用能正常输出 Java 版本信息说明 JDK 环境配置完成。五、部署 MySQL 数据库MySQL 部署在 node2 上用于存储博客用户、文章、后台管理等数据。安装 MySQL 官方仓库dnfinstall-yhttps://dev.mysql.com/get/mysql80-community-release-el9-1.noarch.rpm查看 MySQL 仓库是否启用dnf repolist enabled|grepmysql安装 MySQL 服务dnfinstall-ymysql-community-server--nogpgcheck启动并设置开机自启systemctl start mysqld systemctlenablemysqld systemctl status mysqld图 4node2 上 MySQL 服务启动成功查看 MySQL 初始 root 密码greppassword /var/log/mysqld.log执行安全初始化mysql_secure_installation初始化完成后使用 root 用户登录 MySQLmysql-uroot-p这里不建议在博客文档中写出真实数据库密码生产环境也不应该将 root 密码暴露在文档、截图或公网仓库中。六、导入博客系统初始化数据博客系统需要提前准备数据库和基础数据。本次项目使用schema.sql和data.sql两个初始化脚本。将 SQL 文件上传到 node2 后执行cd~ mysql-uroot-pschema.sql mysql-uroot-pdata.sql导入完成后登录数据库验证showdatabases;确认存在forum-java进入数据库useforum-java;showtables;查看用户表数据select*fromforum_user;如果数据库、表和基础用户数据都存在说明博客系统的数据初始化完成。七、部署 Tomcat 服务Tomcat 部署在 node2 上用于运行博客系统 WAR 包。进入软件目录cd/export/software下载 Tomcatwgethttps://mirrors.huaweicloud.com/apache/tomcat/tomcat-9/v9.0.97/bin/apache-tomcat-9.0.97.tar.gz解压到/opttar-xzfapache-tomcat-9.0.97.tar.gz-C/opt启动 Tomcatcd/opt/apache-tomcat-9.0.97/bin ./startup.sh查看 Tomcat 进程ps-ef|greptomcat查看端口监听ss-tulnp临时开放 8080 端口用于验证firewall-cmd--zonepublic --add-port8080/tcp--permanentfirewall-cmd--reloadfirewall-cmd --list-all同时需要在阿里云安全组中临时放行 8080 端口。浏览器访问http://node2公网IP:8080如果能看到 Tomcat 默认页面说明 Tomcat 服务启动成功。八、部署博客系统 WAR 包部署博客系统前先停止 Tomcatcd/opt/apache-tomcat-9.0.97/bin ./shutdown.sh删除 Tomcat 默认项目rm-rf/opt/apache-tomcat-9.0.97/webapps/ROOT上传博客系统的ROOT.war到/opt/apache-tomcat-9.0.97/webapps/重新启动 Tomcatcd/opt/apache-tomcat-9.0.97/bin ./startup.shTomcat 会自动解压ROOT.war生成新的ROOT项目目录。访问前台http://node2公网IP:8080访问后台http://node2公网IP:8080/admin如果前台页面和后台登录页面都能正常打开说明博客系统已经成功部署到 Tomcat。九、部署 Nginx 反向代理Nginx 部署在 node1 上作为整个博客系统的统一访问入口。安装 Nginxdnfinstall-ynginx启动并设置开机自启systemctl start nginx systemctlenablenginx systemctl status nginx开放 80 端口firewall-cmd--zonepublic --add-servicehttp--permanentfirewall-cmd--reloadfirewall-cmd --list-all同时需要在阿里云安全组中放行 80 端口。浏览器访问http://node1公网IP如果能看到 Nginx 默认页面说明 Nginx 部署成功。十、配置 Nginx 请求转发编辑 Nginx 配置文件vim/etc/nginx/nginx.conf在对应的server配置中添加或修改location /location / { proxy_pass http://node2.itcast.cn:8080/; }检查 Nginx 配置语法nginx-t如果输出nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful说明配置文件语法正确。重新加载 Nginxnginx-sreload再次访问http://node1公网IP这时访问 node1 的 80 端口应该直接进入后端博客系统页面。十一、部署验证本次部署完成后我主要从以下几个角度验证服务状态。1. Nginx 配置验证nginx-t结果显示配置文件语法正确。2. Nginx 本地访问验证curl-Ihttp://127.0.0.1返回结果中出现HTTP/1.1 200 Server: nginx/1.20.1说明 Nginx 本地访问正常。3. 浏览器访问验证通过浏览器访问http://node1公网IP能够正常打开博客系统页面说明访问链路已经打通用户浏览器 → node1 Nginx → node2 Tomcat → MySQL十二、日志查看与问题排查1. Tomcat 日志Tomcat 日志目录/opt/apache-tomcat-9.0.97/logs常用查看命令tail-100f/opt/apache-tomcat-9.0.97/logs/catalina.out项目相关日志包括access.log error.log forum-java.log如果博客页面打不开、后台登录异常、数据库连接失败可以优先查看 Tomcat 和项目日志。2. Nginx 日志Nginx 日志目录/var/log/nginx查看访问日志tail-10f/var/log/nginx/access.log查看错误日志tail-10f/var/log/nginx/error.log如果出现 502、页面无法访问、反向代理失败可以重点查看 Nginx 错误日志和 Tomcat 服务状态。十三、安全收口部署过程中为了验证 Tomcat临时开放了 8080 端口。但正式通过 Nginx 访问后Tomcat 不应该继续直接暴露在公网。最终安全组建议端口用途是否保留22SSH 远程连接保留但建议限制来源 IP80Nginx 对外访问保留8080Tomcat 直接访问验证完成后关闭3306MySQL不对公网开放正式环境中MySQL 只允许本机或内网访问不能暴露到公网。另外博客文档和截图中不应出现服务器登录密码MySQL root 密码完整公网 IP阿里云 AccessKey数据库连接密码后台管理员密码十四、云监控与告警配置部署完成后还需要对服务器资源进行基础监控避免服务运行后无人感知异常。本次可以在阿里云云监控中开启主机监控重点关注CPU 使用率内存使用率磁盘使用率网络流量进程数量ECS 实例状态可以配置基础告警规则例如内存使用率 95% 磁盘使用率 80% CPU 使用率持续过高 服务器异常停止同时可以创建可视化监控大屏将 CPU、内存、磁盘、网络等指标集中展示形成一个简单的运维观测面板。十五、本次实践总结本次部署完成了一套基于阿里云 ECS 的 Java 博客系统上线流程主要包括创建两台 ECS 云服务器。配置主机名和内网 hosts 解析。部署 JDK 运行环境。在 node2 上部署 MySQL 并导入初始化数据。在 node2 上部署 Tomcat 和博客系统 WAR 包。在 node1 上部署 Nginx。配置 Nginx 反向代理到 node2 的 Tomcat。通过nginx -t、curl -I和浏览器访问完成上线验证。查看 Tomcat 和 Nginx 日志建立基础排查路径。收口安全组关闭不必要的公网端口。使用阿里云云监控补充 CPU、内存、磁盘、网络等基础监控。这次实践让把一个 Java Web 项目从云服务器准备、基础软件安装、数据库初始化、应用部署、反向代理配置到最终访问验证完整走了一遍。从运维角度看真正重要的不只是“服务能打开”而是要形成完整闭环部署前资源规划、端口规划、节点分工 部署中组件安装、配置修改、服务启动 部署后访问验证、日志排查、安全收口、监控告警最终结果是通过访问 node1 的 80 端口可以正常打开博客系统页面说明 Nginx 到 Tomcat再到 MySQL 的整体链路已经部署成功。