下面给出一套在 CentOS 7 上“在线安装并运行” JDK 1.8 + Tomcat + MySQL 8 + Nginx + Docker 的最稳妥方案:宿主机安装 JDK 与 Docker,业务服务用容器运行(避免 CentOS 7 EOL 带来的仓库老化问题)。<span style="color:red">CentOS 7 已于 2024-06-30 结束维护,务必先修复软件源</span>。🙂

环境与端口一览

组件推荐版本端口安装方式
JDK1.8(OpenJDK)宿主机 yum
Docker基于 CentOS7 仓库2375(可选)宿主机 yum
MySQL8.4(LTS)3306Docker 容器
Tomcat9.0(JDK8 运行时)8080Docker 容器
Nginxstable80/443Docker 容器

工作流程(vditor/Markdown)

flowchart LR
A[切换 Vault 源]-->B[安装 JDK 1.8]
B-->C[安装并启动 Docker]
C-->D[运行 MySQL 8 容器(持久化)]
C-->E[运行 Tomcat(JDK8)]
C-->F[运行 Nginx 反代]
D-->E
E-->F

0)切换到 Vault 源(必须)

sudo cp /etc/yum.repos.d/CentOS-Base.repo{,.bak}
sudo sed -i 's/^mirrorlist=/#mirrorlist=/g;s|^#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-Base.repo
sudo yum clean all && sudo yum makecache

**解释:**备份原仓库;把镜像自动选择改为固定的 vault 历史仓库;<span style="color:red">确保 yum 可用</span>。

1)基础工具与 JDK 1.8

sudo yum -y install yum-utils unzip tar firewalld
sudo systemctl enable --now firewalld

sudo yum -y install java-1.8.0-openjdk-devel
java -version

**解释:**安装常用工具与防火墙并启动;安装 <span style="color:red">OpenJDK 1.8(含编译环境)</span>,java -version 用于校验版本。

2)安装并启动 Docker

sudo yum -y install docker
sudo systemctl enable --now docker
docker version
sudo docker network create appnet

**解释:**使用 CentOS7 可用的 docker 包;设置 <span style="color:red">开机自启</span>;创建业务专用网段 appnet 便于容器互联。

3)部署 MySQL 8.4(容器)

sudo mkdir -p /data/mysql8
sudo docker run -d --name mysql8 --restart=always \
  --network appnet -p 3306:3306 \
  -e MYSQL_ROOT_PASSWORD='StrongPass!' \
  -e TZ=Asia/Shanghai \
  -v /data/mysql8:/var/lib/mysql \
  mysql:8.4 \
  --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci

解释:

  • -p 3306:3306 暴露数据库端口;
  • MYSQL_ROOT_PASSWORD 设置 <span style="color:red">强口令</span>;
  • -v /data/mysql8:/var/lib/mysql 做数据<span style="color:red">持久化</span>;
  • 统一时区 + UTF8MB4,避免中文与表情乱序。
  • 8.4 为当前 LTS 分支,更稳定。

4)部署 Tomcat(JDK8 运行时)

sudo mkdir -p /data/tomcat/webapps
sudo docker run -d --name tomcat --restart=always \
  --network appnet -p 8080:8080 \
  -e TZ=Asia/Shanghai \
  -v /data/tomcat/webapps:/usr/local/tomcat/webapps \
  tomcat:9.0-jdk8-temurin

解释:

  • 选用 tomcat:9.0-jdk8-temurin,内置 JDK8,兼容老项目;
  • webapps 映射,方便直接投放 war
  • 通过容器名 tomcat 与 Nginx 同网互通。

5)部署 Nginx(反向代理到 Tomcat)

sudo mkdir -p /data/nginx/conf /data/nginx/html /data/nginx/logs
cat <<'CONF' | sudo tee /data/nginx/conf/default.conf
server {
  listen 80;
  server_name _;
  location / {
    proxy_pass http://tomcat:8080/;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  }
}
CONF

sudo docker run -d --name nginx --restart=always \
  --network appnet -p 80:80 \
  -v /data/nginx/conf:/etc/nginx/conf.d \
  -v /data/nginx/html:/usr/share/nginx/html \
  -v /data/nginx/logs:/var/log/nginx \
  -e TZ=Asia/Shanghai \
  nginx:stable

解释:

  • 简单反代,将 / 转发至 tomcat:8080
  • 映射配置/静态/日志目录,方便本地管理;
  • <span style="color:red">同一网络</span>通过服务名直连,免写固定 IP。

6)防火墙与验证

sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --permanent --add-port=3306/tcp
sudo firewall-cmd --reload

curl -I http://127.0.0.1
docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}"
mysql -h127.0.0.1 -uroot -p

**解释:**开放 80/443/3306;curl -I 查看首页;docker ps 查看容器状态;mysql 本地连通性测试。


关键提示

  • <span style="color:red">优先用容器获得新版本</span>,宿主机仅保留 JDK8 与 Docker,降低 EOL 风险。
  • MySQL 首次启动会初始化数据目录;若密码遗失需先停容器并进入安全模式重置。
  • 生产环境请开启 <span style="color:red">最小权限账户</span> 与网络访问控制,仅放行必要来源 IP。🔒

小结(原理说明表)

环节核心做法原因
源修复切到 Vault保障 yum 可用
宿主机仅装 JDK8、Docker减少系统改动与依赖冲突
服务层全容器化获得最新稳定版、易迁移
网络自建 appnet名称互联、配置简化
Nginx反代 Tomcat统一入口,便于后续 HTTPS 与缓存

以上步骤贴合 CentOS 7 当前可行路径,重点强调了 <span style="color:red">可维护性</span> 与 <span style="color:red">安全性</span>。🚀


蓝易云
39 声望7 粉丝

蓝易云高防服务器:www.tsyvps.com