클라우드 없이도 DevOps는 가능하다

1. 왜 온프레미스 자동배포가 필요한가?

많은 조직이 아직:

  • IDC 서버
  • 사내 Ubuntu 물리 서버
  • 내부망 전용 WAS
  • Public WEB / Private WAS 구조

를 사용하고 있습니다.

문제는 여전히 이겁니다:

 
 
코드 수정 → 서버 접속 → git pull → build → 재기동
 

수작업은 DevOps가 아닙니다.

DevOps의 핵심은 배포 자동화 + 재현성 + 롤백 가능성입니다.

온프레미스에서도 충분히 가능합니다.


2. 전체 구조 아키텍처

4

구성:

 
 
Developer Push

GitHub Actions

SSH or Self-Hosted Runner

On-Premise Server (Docker / JVM)
 

방법은 2가지입니다.


3. 방법 1️⃣ SSH 기반 배포 (가장 단순)

원리

GitHub Actions에서 SSH로 서버 접속 후 명령 실행


1단계: 서버에 SSH 키 등록

서버:

 
 
ssh-keygen
 

생성된 public key를 ~/.ssh/authorized_keys에 등록


2단계: GitHub Secret 등록

  • SERVER_HOST
  • SERVER_USER
  • SSH_PRIVATE_KEY

3단계: workflow 예시

 
 
name: Deploy to On-Prem

on:
push:
branches:
- main

jobs:
deploy:
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v4

- name: SSH Deploy
uses: appleboy/ssh-action@v1
with:
host: ${{ secrets.SERVER_HOST }}
username: ${{ secrets.SERVER_USER }}
key: ${{ secrets.SSH_PRIVATE_KEY }}
script: |
cd /home/app
git pull
./gradlew build
docker compose up -d --build
 

이렇게 하면 Push 시 자동 배포됩니다.


4. 방법 2️⃣ Self-Hosted Runner (DevOps 정석)

SSH 방식은 단순하지만 보안/확장성에 한계가 있습니다.

권장 방식은:

서버에 GitHub Runner를 직접 설치하는 것


1단계: 서버에 Runner 설치

 
 
mkdir actions-runner && cd actions-runner
curl -o actions-runner.tar.gz ...
tar xzf ./actions-runner.tar.gz
./config.sh
./run.sh
 

2단계: workflow 수정

 
 
jobs:
deploy:
runs-on: self-hosted

steps:
- uses: actions/checkout@v4
- name: Build
run: ./gradlew build
- name: Restart
run: docker compose up -d --build
 

이제 GitHub가 서버 내부에서 직접 실행됩니다.

장점:

  • SSH 필요 없음
  • 네트워크 단순화
  • 사내망 전용 서버 가능

5. Docker 기반 자동배포 구조 (권장)

온프레미스에서 가장 안정적인 방식은:

  1. Docker 이미지 빌드
  2. Registry Push
  3. 서버에서 pull
  4. 무중단 재기동

예시:

 
 
docker pull lemuel/app:latest
docker compose up -d
 

6. 무중단 배포 전략

온프레미스에서도 가능합니다.

  • Blue/Green
  • Nginx Reverse Proxy
  • Docker Port Switching
  • Canary Deployment

예시 구조:

 
 
app-blue : 8081
app-green: 8082
nginx → active target switching
 

7. 보안 고려사항

  • SSH 키 암호화
  • 방화벽 제한
  • GitHub Secret 사용
  • Runner 권한 최소화
  • Docker rootless 모드

DevOps는 자동화 + 보안이 동시에 가야 합니다.


8. DevOps 관점에서의 의미

온프레미스 자동배포는 단순 편의 기능이 아닙니다.

의미:

  • 배포 리드타임 감소
  • 휴먼에러 제거
  • 야근 감소
  • 장애 대응 속도 향상
  • 재현 가능한 인프라

특히 SI 조직에서:

배포를 수작업으로 하는 팀과 자동화한 팀의 생산성 격차는 매우 큽니다.


9. 실무 적용 체크리스트

  • Dockerfile 작성
  • docker-compose 구성
  • GitHub Actions CI 구축
  • 서버 접근 권한 정리
  • 롤백 전략 설계
  • 로그 모니터링 연동

10. 결론

클라우드가 아니어도 DevOps는 가능합니다.

GitHub Actions + 온프레미스 서버만으로도:

  • 완전 자동 배포
  • 무중단 운영
  • 재현 가능한 인프라

를 구현할 수 있습니다.

문제는 기술이 아니라 의지입니다.

LIST

+ Recent posts