Hermit Under the Cliff

오래된 서버 GCP 이전기 (php4 + mysql4) 본문

Personal Projects

오래된 서버 GCP 이전기 (php4 + mysql4)

AnonymousDeveloper 2023. 1. 9. 21:14

개인적으로 어느샌가 관리하게 되어버린 사이트가 하나 있습니다.

2001년에 만들어졌고 그 당시의 기술이던 php4와 mysql4 하의

제로보드 기반으로 이루어진 사이트입니다.

매년 나가는 호스팅 비용이 아까워서 

구글 클라우드 플랫폼의 무료 인스턴스를 이용해서 서버를 옮기려고 합니다.

 

위와 같이 GCP에서 무료로 사용을 할 수 있는 인스턴스를 제공하고 있습니다.

더 자세한 내용은 아래 블로그에서 보시면 됩니다.

https://wildeveloperetrain.tistory.com/154

 

구글 클라우드 플랫폼 GCP 무료 서버 생성하기(22년 6월 기준)

구글 클라우드 플랫폼(Google Cloud Platform) 무료 서버 생성하는 방법에 대해서 알아보겠습니다. 구글링을 통해 GCP 무료 서버 구축 방법을 찾아보면 포스팅이 작성된 기간에 따라 서버 구축에 관련

wildeveloperetrain.tistory.com

 

일단 vm을 만들고 우분투 최신버전을 선택한뒤

apt를 통해 mysql과 php 및 아파치를 설치를 하고

백업된 내용을 올리고 보니,

아... 너무 오래된 로스트 테크놀로지라 안되는 것 투성입니다.

(인코딩 euc-kr은 정말 오랜만에 보네요)

 

제로보드를 비롯한 php소스를 수정하자니 이건 배보다 배꼽이 훨씬 큰거 같고

vm의 os 버전을 내려서 php랑 mysql을 old version을 설치하자니 

그 정도로 오래된 버전은 당연스럽게되 지원되지 않습니다.

 

고민을 하다가 요즘의 추세대로 docker를 이용해서 컨테이너 기반의 서비스로 하면

무언가 될 것 같아서 php4 와 mysql4의 docker 이미지를 찾아봅니다.

당연히 official 이미지는 존재하지 않지만 그래도 해당되는 이미지가 몇몇 존재합니다.

 

php 4.4.9 image:

https://github.com/clagomess/docker-php-4.4.9

 

mysql 4 image:

https://hub.docker.com/r/stevemayne/mysql4

 

위 두 이미지를 가지고 구성을 하려고 보니,

제로보드 외에도 추가적으로 구성해놓은 php 모듈들이 

기본적으로 localhost로만 db에 붙게 작업을 해놓은 터라

이걸 수정해야할지 고민하다가 그냥 두 이미지를 합치기로 합니다.

 

첫 번째 시도는 php 이미지를 기반으로 mysql4를 설치를 해 보았는데

중간에 컴파일 에러가 뜹니다.

bison 이라는 패키지에 대한 오래된 버그인데 해당 패키지 버전을 낮추어도

제대로 빌드가 되지 않습니다.

 

다시 반대로 mysql4 이미지에다가 php를 설치 합니다.

apt-get update에서 에러가 뜨는데

이건 오래된 버전이라 apt soure list만 archive.ubuntu.com에서

old-releases.ubuntu.com으로 바꿔주기만 하니

정상적으로 설치가 됩니다.

 

확인을 했으니 Dockerfile하나 만들어 주고 이미지를 만듭니다.

FROM stevemayne/mysql4:latest

#change apt-get source list
RUN sed -i 's/archive.ubuntu/old-releases.ubuntu/g' /etc/apt/sources.list

RUN apt-get update
RUN apt-get install build-essential -y
RUN apt-get install vim wget -y
RUN apt-get install flex -y

# sources
RUN wget http://archive.apache.org/dist/httpd/httpd-2.0.65.tar.gz -P /srv
RUN wget http://museum.php.net/php4/php-4.4.9.tar.gz -P /srv --no-check-certificate
RUN cd /srv \
&& tar -xzf httpd-2.0.65.tar.gz \
&& tar -xzf php-4.4.9.tar.gz

# httpd
RUN cd /srv/httpd-2.0.65 \
&& ./configure --enable-so \
&& make \
&& make install

# php
# ./configure --help
RUN apt-get install flex -y
RUN cd /srv/php-4.4.9 \
&& ./configure --with-apxs2=/usr/local/apache2/bin/apxs --with-mysql \
&& make \
&& make install \
&& cp php.ini-dist /usr/local/lib/php.ini

# config httpd
RUN echo "AddType application/x-httpd-php .php .phtml" >> /usr/local/apache2/conf/httpd.conf \
&& echo "User www-data" >> /usr/local/apache2/conf/httpd.conf \
&& echo "Group www-data" >> /usr/local/apache2/conf/httpd.conf

RUN ln -sf /dev/stdout /usr/local/apache2/logs/access_log \
&& ln -sf /dev/stderr /usr/local/apache2/logs/error_log

 

이제 이 이미지를 이용하여 mysql에 기존과 똑같은 db를 생성하고

똑같은 유저를 생성한 다음 기존에 백업해 놓았던 db를 restore 해줍니다.

아래 명령으로 backup file을 restore 할 수 있습니다.

mysql -u [id] -p [db] < [bakupfile.sql]

이제 사이트에 들어가 보면 짜잔... DB Connection Error가 뜹니다.

 

기존 사용하던 php/mysql 버전이랑 살짝 달라서 password 저장방식이 문제가 있네요.

아래와 같이 다시 db 사용자 비밀번호를 업데이트 합니다.

USE mysql
UPDATE USER SET PASSWORD=OLD_PASSWORD('비밀번호') WHERE USER='유저';

이제 어느정도 정상적으로 돌아가는 것 같은데

제로보드에서 로그인이 제대로 되질 않습니다.

 

하아...

 

일단 또 아래와 같은 글을 찾아서 제로보드 코드를 살짝 고쳐줍니다.

http://withalways.tistory.com/327

 

[스크랩] 서버이전시 mysql버전에 따른 패스워드오류

1. 문제 mysql 버전이 4.1 이상이 되면서 password 함수가 바뀌었습니다. 그래서 제로보드 로그인을 사용할 수 없습니다. 2. 문제 해설 4.0 이하의 버전에서는 password 함수가 16바이트의 문자열을 만들어

withalways.tistory.com

 

이제야 제대로 동작합니다.

제로보드 외에 다른 php모듈에서 절대 경로를 사용해서 에러가 나는 것들만 조금 수정해주면

정상적으로 이전이 완료되었습니다.

 

아래 글을 참고하여 도메인에 연결된 주소를 바꾸면

이제 정말 완료입니다.

http://r4bb1t.tistory.com/34

 

[GCP] 구글 클라우드 DNS에 도메인 연결하기

원래는 AWS Router53에서 구매하려고 했는데 원하는 도메인이 없어서 네임칩에서 도메인을 구입했다. 구글 클라우드에 기존에 만들어 놓은 인스턴스가 있어서 여기에 도메인을 연결하려고 한다.

r4bb1t.tistory.com

 

Comments