下面给出一套在 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>。🙂
环境与端口一览
| 组件 | 推荐版本 | 端口 | 安装方式 |
|---|---|---|---|
| JDK | 1.8(OpenJDK) | — | 宿主机 yum |
| Docker | 基于 CentOS7 仓库 | 2375(可选) | 宿主机 yum |
| MySQL | 8.4(LTS) | 3306 | Docker 容器 |
| Tomcat | 9.0(JDK8 运行时) | 8080 | Docker 容器 |
| Nginx | stable | 80/443 | Docker 容器 |
工作流程(vditor/Markdown)
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>。🚀
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用。你还可以使用@来通知其他用户。