前言
Red Hat Linux 7.2 (2001 年發布) + PostgreSQL 7.2 + Resin 2.0.4 + Apache 1.3 組合是早期 Java Web 專案典型生產棧。本文記錄從作業系統安裝到網書營銷系統上線的完整編譯安裝步驟、環境變量、數據庫初始化、Resin-Apache 整合配置,**僅供歷史系統遷移、技術考古參考,嚴禁用於新系統建設**。
一、 硬體與軟體基線
| 層級 | 軟體版本 | 獲取形式 |
| OS | Red Hat Linux 7.2 (Enigma) | 安裝光盤 |
| JDK | 1.3.1 (RPM 包) | jdk1.3.1.i386.rpm |
| Web Server | Apache 1.3.22 | 源碼編譯 |
| Servlet/JSP Engine | Caucho Resin 2.0.4 | 源碼編譯 (with-apache) |
| Database | PostgreSQL 7.2.1 | RPM 系列包 (libs, server, devel, jdbc) |
| JDBC Driver | pgjdbc2.jar | PostgreSQL RPM 附帶 |
二、 系統環境變量 (/etc/profile 或用戶 .bash_profile)
export LANG=zh_CN
export LC_ALL=zh_CN
export JAVA_HOME=/usr/java/jdk
export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export PGDATA=/usr/local/pgsql/data
三、 逐步編譯安裝流程
1. JDK (RPM)
rpm -ivh jdk1.3.1.i386.rpm
# 默認安裝至 /usr/java/jdk1.3.1,建立軟鏈接 /usr/java/jdk -> jdk1.3.1
2. Apache 1.3.22 (源碼,啟用 DSO 支援 Resin 模塊)
tar -xzvf apache_1.3.22.tar.gz
cd apache_1.3.22
./configure --prefix=/usr/local/apache --enable-module=so
make && make install
3. Resin 2.0.4 (源碼,指定 Apache 路徑編譯 mod_caucho.so)
tar -xvf resin_2.0.4.tar
cd resin_2.0.4
./configure --with-apache=/usr/local/apache
make && make install
# 產生 mod_caucho.so 於 Apache modules 目錄
4. PostgreSQL 7.2.1 (RPM 系列)
rpm -ivh postgresql-libs-7.2.1-5.i386.rpm
rpm -ivh postgresql-7.2.1-5.i386.rpm
rpm -ivh postgresql-server-7.2.1-5.i386.rpm
rpm -ivh postgresql-devel-7.2.1-5.i386.rpm
rpm -ivh postgresql-jdbc-7.2.1-5.i386.rpm
# 複製 JDBC 驅動至 JDK 擴展目錄
cp /usr/share/pgsql/pgjdbc2.jar $JAVA_HOME/lib/
export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib/pgjdbc2.jar
5. 初始化數據庫簇與建表
mkdir -p /usr/local/pgsql/data
su - postgres
initdb
postmaster -i & # 後台啟動,監聽 TCP/IP
createdb -E EUC-CN dbebook # 指定中文編碼
psql dbebook
# 執行建表 SQL (見下文)
6. 核心業務表結構 (節選)
CREATE TABLE users (
id SERIAL PRIMARY KEY,
name VARCHAR(16), passwd VARCHAR(16), email VARCHAR(60),
address VARCHAR(100), zipcode VARCHAR(8), phone VARCHAR(14), level VARCHAR(12)
);
CREATE TABLE books (
id SERIAL PRIMARY KEY,
isbn VARCHAR(15), title VARCHAR(255), author VARCHAR(50),
summary VARCHAR(500), price DECIMAL(12), classid INT, discount INT, image BYTEA
);
CREATE TABLE bookclass (id SERIAL PRIMARY KEY, class VARCHAR(16), parentid INT, depth INT);
CREATE TABLE orders (
id SERIAL PRIMARY KEY, shopcartid INT[], email VARCHAR(100),
ordertime TIMESTAMP(0) DEFAULT now(), totalprice DECIMAL(16), status VARCHAR(10) DEFAULT 'notpayfor'
);
CREATE TABLE shopcarts (id SERIAL PRIMARY KEY, bookid INT, quantity INT, unitprice DECIMAL(12), commit BOOLEAN DEFAULT FALSE);
CREATE TABLE operators (id SERIAL PRIMARY KEY, name VARCHAR(10), passwd VARCHAR(16), email VARCHAR(50), dept VARCHAR(10) DEFAULT 'normal');
7. 配置 PostgreSQL 訪問控制 (pg_hba.conf)
# 允許本地信任、同網段密碼認證
local all all trust
host all all 192.168.1.0/24 md5
8. 整合 Apache + Resin (httpd.conf)
LoadModule caucho_module libexec/mod_caucho.so
AddModule mod_caucho.c
CauchoConfigFile /usr/local/resin/conf/resin.conf
<Location /caucho-status>
SetHandler caucho-status
</Location>
9. 部署 Web 應用與啟動
# 複製 WAR/目錄至 Apache DocumentRoot
cp -r webapp/* /usr/local/apache/htdocs/
# 重啟所有服務
/usr/local/apache/bin/apachectl restart
postmaster -i &
/usr/local/resin/bin/httpd.sh start
四、 關鍵端口與驗證
| 服務 | 端口 | 驗證命令 |
| Apache HTTP | 80 | curl https://localhost/ |
| Resin 內部 | 6802 | telnet localhost 6802 |
| PostgreSQL | 5432 | psql -h localhost dbebook |
五、 歷史棧現代化遷移路徑建議
| 原組件 | 現代替代 | 遷移要點 |
| Red Hat 7.2 | RHEL 9 / Rocky Linux 9 / Ubuntu 22.04 LTS | 內核 2.4 → 5.x/6.x,glibc 2.2 → 2.34+,二進制不兼容,需重編譯/容器化 |
| JDK 1.3.1 | OpenJDK 11/17/21 LTS | 語言特性巨大差異,源碼需重構 (泛型、枚舉、模塊、var、Record 等) |
| Apache 1.3 + Resin 2.0 | Nginx + Tomcat 10 / Jetty 11 / Undertow 2 | Servlet 2.2 → 6.0,web.xml → 註解/程式化配置,mod_caucho → proxy_pass |
| PostgreSQL 7.2 | PostgreSQL 15/16 | EUC_CN → UTF8,BYTEA → BYTEA/JSONB,pg_dump/pg_restore 跨版本遷移 |
| JDBC pgjdbc2.jar | org.postgresql:postgresql:42.7+ | Driver 類名 org.postgresql.Driver,URL 格式兼容 |
結語
這套棧見證了 Java Web 從 CGI/ISAPI 走向 Servlet 容器標準化的關鍵時期。Resin 的 XML 配置、Apache DSO 模塊化、PostgreSQL 開源鋸齒路,都是當代雲原生基礎設施的遠祖。遷移時請遵循 「容器化封裝舊版運行時、流量漸進切換、數據雙寫驗證、回滾預案先行」 原則,將歷史資產平滑轉化為現代微服務架構。