下面給出一套在 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>。🚀