개발이 완료된 후에는 클라이언트의 서버에 개발 완료된 프로그램을 배포해주어야 한다.
하지만 당연하게도 프로그램은 단일로 동작하지 않고, Java, DB등 여러 인프라가 필요하다.
만약 서버가 외부망에 연결된 환경이라면 yum이나 wget 등 명령어를 통해 인프라를 쉽게 설치가 가능하겠지만, 대부분은 그렇지 않고 결국 오프라인 환경 (내부망 환경)에서 설치를 수행해야 할 일이 많았다.
wget의 경우는 그냥 단순하게 파일을 옮기기만 하면 된다. 하지만 yum은? 꽤나 번거로운 작업을 요구했다.
그동안은 사수분께서 인프라 설치를 도맡아 해주셨지만 팀이 내부적으로 분리된 지금은 내가 그 역할을 수행해야 했고, 이에 대비하기 위해 공부한 내용을 까먹지 않기 위해 저장하고자 한다.
1. Offline에서 yum 사용
온라인 환경에서 yum 사용 시 자동으로 인터넷에 올라온 패키지가 설치된다.
하지만 인터넷이 연결되지 않은 내부망(폐쇄망)에서는 이게 불가능하고, 결국 rpm을 사용한 설치를 수행해야 한다.
간단하게는
yumdownloader --downloadonly --resolve {packagename}
*resolve : dependency 가 있는 패키지도 함께 설치
명령어를 통해서 rpm을 다운로드받고, 대상 서버에서
yum install {package 경로}/{package 파일명}.rpm
명령어로 풀어주는 방법이 있다. 하지만 이는 미리 준비한 패키지만 설치가 가능하고, 추가적으로 패키지가 필요할 경우 다시 준비를 해와서 설치를 해줘야 하는 단점이 존재했다.
그래서 다른 방법은 없나... 하고 구글링을 한 결과 Local에 Repository를 구축하는 방법을 찾아냈다.
Local Repository 구축 방법은 아래와 같다.
먼저 대상 서버의 OS 버전을 확인한다. 테스트는 CentOS를 기준으로 수행했다.
아래 명령어 실행 시 아래와 같이 CentOS의 버전이 출력된다.
cat /etc/redhat-release
버전은 7.9로 확인되었다. 이제 repository를 구축하기 위해 해당 버전의 Everything 버전 설치 파일을 다운로드 받는다.
Everything 설치파일 내부에는 해당 OS 버전의 rpm 파일들이 존재한다. 이제 이 rpm파일들을 내부로 옮겨주는 작업을 할 것이다.
SCP 프로그램을 이용해 설치 파일을 서버 내부에 옮겨준다. 그리고 MOUNT 명령어를 통해 디렉터리에 ISO 파일을 마운트한다.
mkdir /tmp/repos
mount -o loop /root/CentOS-7-X86_64-Everything-2009.iso /tmp/repos
마운트가 완료되었다면 이제 내부의 RPM 파일을 외부로 빼내야 한다.
아래 명령어를 사용하면 된다.
mkdir /root/repos
cp -rfvp /tmp/repos/* /root/repos
작업이 완료되었다면 이제 마운트를 해제해주고 쓸데없는 용량을 차지하지 않도록 설치 파일을 삭제한다.
umount /tmp/repos
rm -rf /tmp/repos
rm -f /root/CentOS-7-X86_64-Everything-2009.iso
이제 빼낸 RPM 파일들을 사용해 Local Repository를 구축한다.
기존의 Repository는 오프라인 환경에서는 쓸모가 없으니 삭제하도록 한다.
rm -rf /etc/yum.repos.d/CentOS-*
Local Repository 구축 과정은 크게 특별할 건 없고, 그냥 .repo 파일을 하나만 생성해주면 된다.
vi /etc/yum.repos.d/local.repo
vi 편집기에 아래와 같이 입력한 후 저장한다.
[local]
name=local
baseurl=file:///root/repos
enabled=1
gpgcheck=0
이제 repolist 갱신 및 확인을 위해 다음 명령어로 repolist에 local이 정상적으로 들어갔는지 확인한다.
yum repolist
마지막으로 vim을 설치해봄으로써 local repository가 정상적으로 작동하는지 확인한다.
yum install -y vim
2. Docker Community Edition 설치
Docker Community Edition 설치를 위해서 CentOS 기본 Repository 외에 특정 Repository가 필요하다.
이 Repository는 위와 같은 방법으로 직접 웹에 들어가서 rpm 파일들을 다운로드받은 후 옮겨서 Local Repository로 구축이 가능하다.
https://download.docker.com/linux/centos/7/x86_64/stable/Packages/
하지만 굳이 Repository를 통째로 옮기고 싶지 않았고, 여러 시도 끝에 dependency 순서를 파악하여 내용을 공유하고자 한다.
먼저 온라인 환경 서버에서 아래 명령어를 통해 필요 rpm 파일들을 추출한다.
yumdownloader --downloadonly --resolve {packagename}
docker-ce는 --resolve가 정상적으로 작동하지 않는 듯 하여 일일히 타이핑해서 설치해주어야 한다. 물론 상단의 웹 사이트에서 곧바로 설치해도 무방하다.
이제 SCP로 대상 서버에 rpm을 옮긴다. 그리고 아래 명령어를 순차적으로 실행해주면 Docker 설치가 완료된다.
yum -y install {디렉토리}/container-selinux-2.119.2-1.911c772.el7_8.noarch.rpm
yum -y install {디렉토리}/containerd.io-1.6.10-3.1.el7.x86_64.rpm
yum -y install {디렉토리}/docker-scan-plugin-0.21.0-3.el7.x86_64.rpm
yum -y install {디렉토리}/docker-ce-cli-20.10.21-3.el7.x86_64.rpm
yum -y install {디렉토리}/fuse3-libs-3.6.1-4.el7.x86_64.rpm
yum -y install {디렉토리}/fuse-overlayfs-0.7.2-6.el7_8.x86_64.rpm
yum -y install {디렉토리}/slirp4netns-0.4.3-4.el7_8.x86_64.rpm
yum -y install {디렉토리}/docker-ce-rootless-extras-20.10.21-3.el7.x86_64.rpm {디렉토리}/docker-ce-20.10.21-3.el7.x86_64.rpm
yum -y install {디렉토리}/docker-compose-plugin-2.12.2-3.el7.x86_64.rpm
yum -y install {디렉토리}/nodejs-14.21.1-1nodesource.x86_64.rpm
Docker 설치가 완료되었다면 아래 명령어를 통해 컨테이너를 옮겨줄 수 있게된다.
# 이미지 추출
docker commit {실행중인 컨테이너명} {새로운 이미지 이름}
docker save -o {저장할 tar 파일명} {이미지명}
# 이미지 로드
docker load -i {tar 파일명}
3. npm 패키지 설치
npm 패키지 설치는 아래와 같이 수행한다.
먼저 온라인 환경에서 필요한 파일을 tgz 파일로 만든다.
npm install -g npm-pack-all
# 아래 명령어는 npm을 이용해 옮기고 싶은 package를 먼저 설치하고 실행한다.
cd /usr/lib/node_modules/{원하는 package}
npm-pack-all
위 명령어를 입력하면 아래와 같이 package의 tgz 파일이 생성된다.
이제 서버로 옮긴 후 아래 명령어로 풀어주기만 하면 끝난다.
npm install {디렉토리}/{package}.tgz
'IT 지식 > 운영체제' 카테고리의 다른 글
내부망에서 apt 사용 (1) | 2023.06.04 |
---|---|
자동 재실행 스크립트 만들기 (0) | 2023.05.28 |
[운영체제] Linux와 Unix (0) | 2021.05.16 |
[운영체제] 멀티 프로세스와 멀티 쓰레드 (0) | 2021.04.02 |