Skip to content
isdnetworks
Go back

Linux 서버 4대의 환경을 통일한 과정

Updated:

x86과 ARM이 섞인 Linux 서버 4대를 운영했다. 시간이 지나면서 서버마다 사용자명, SSH 설정, Docker 경로, 홈 디렉토리 구조가 제각각이 되었다. “이 서버는 어떤 계정이었지?”부터 확인해야 하는 상황이 되어 통일 작업을 진행했다.

Table of contents

Open Table of contents

서버 구성

서버아키텍처OS역할
A (x86)x86_64Debian TrixieGPU 연산
B (ARM)aarch64Debian TrixieDB Slave + 서비스
C (ARM)aarch64Armbian TrixieWeb + Master DB + VPN
D (x86)x86_64Debian TrixieAI Hub (MCP 서버)

통일 항목

1. 사용자 계정 통일

서버마다 다른 계정명을 사용하고 있었다. 하나의 계정으로 통일하고 sudo 권한을 설정했다.

# 모든 서버에 동일 계정 생성
sudo useradd -m -s /bin/bash {username}
echo '{username} ALL=(ALL) NOPASSWD: ALL' | sudo tee /etc/sudoers.d/{username}

기존 계정의 데이터는 새 계정 홈으로 이동하고, 이전 계정은 로그인 비활성화 후 유지했다(롤백 대비).

2. SSH 설정 중앙화

SSH config를 프로젝트 저장소에서 관리하고, 각 머신에서 Include로 참조하는 방식을 적용했다.

# ~/.ssh/config
Include ~/project/ssh/config

프로젝트의 SSH config:

Host server-a
  HostName 192.168.x.10
  User {username}
  IdentityFile ~/project/ssh/id_ed25519

Host server-b
  HostName 192.168.x.12
  User {username}
  IdentityFile ~/project/ssh/id_ed25519

# ... 4대 모두 동일 패턴

셋업 스크립트로 Include 추가/제거를 자동화했다.

#!/usr/bin/env bash
set -euo pipefail

SSH_DIR="$HOME/.ssh"
CONFIG="$SSH_DIR/config"
INCLUDE_LINE="Include ~/project/ssh/config"

case "${1:-install}" in
  install)
    mkdir -p "$SSH_DIR" && chmod 700 "$SSH_DIR"
    if ! grep -qF "$INCLUDE_LINE" "$CONFIG" 2>/dev/null; then
      echo "$INCLUDE_LINE" | cat - "$CONFIG" > /tmp/ssh_config && mv /tmp/ssh_config "$CONFIG"
    fi
    chmod 600 "$CONFIG"
    ;;
  remove)
    sed -i "\|$INCLUDE_LINE|d" "$CONFIG"
    ;;
esac

결과: Windows, macOS, 서버 간 SSH 접속 시 동일한 호스트명 사용 가능. ssh server-a로 모든 환경에서 접속.

3. 서버 간 상호 SSH 연결

4대 서버 간 상호 접속을 위해 authorized_keys를 교차 등록했다.

# 각 서버에서 키 생성 (이미 있으면 스킵)
[ -f ~/.ssh/id_ed25519 ] || ssh-keygen -t ed25519 -N "" -f ~/.ssh/id_ed25519

# 다른 3대 서버에 공개키 배포
for server in server-a server-b server-c server-d; do
  ssh-copy-id -i ~/.ssh/id_ed25519.pub "$server"
done

4. Docker 경로 패턴

서버 하드웨어에 따라 두 가지 경로 패턴으로 표준화했다.

패턴적용 서버Docker 소스런타임 데이터
NVMe 분리B, C (ARM)~/docker//mnt/nvme/docker/
홈 통합A, D (x86)~/docker/~/docker/

ARM 서버는 eMMC/SD 부팅 + NVMe 데이터 분리 구조라서, IO 집중 데이터(DB, 로그, 캐시)만 NVMe로 분리한다. x86 서버는 단일 디스크라서 홈 디렉토리에 통합한다.

# ARM 서버: 심볼릭 링크로 소스→데이터 연결
ln -s /mnt/nvme/docker/mariadb/data ~/docker/mariadb/data
ln -s /mnt/nvme/docker/redis/data ~/docker/redis/data

5. 홈 디렉토리 정리

각 서버의 불필요한 파일을 정리했다.

정리 원칙:

검증

# 모든 서버에서 동일 명령 실행 가능 확인
for s in server-a server-b server-c server-d; do
  echo "=== $s ==="
  ssh "$s" "whoami && docker ps --format '{{.Names}}' | head -5"
done

핵심 정리

서버 환경 통일의 핵심은 “어떤 서버에서든 같은 방식으로 작업할 수 있는 것”이다. 계정명, SSH 접속 방식, 경로 패턴이 통일되면, 스크립트를 서버별로 분기할 필요가 없어진다. 통일 작업 자체보다 통일 상태를 유지하는 것이 더 중요하므로, SSH config를 코드로 관리하고 셋업 스크립트로 자동화하는 것이 핵심이다.

참고 자료


Share this post on:

Previous Post
NHN KCP 본인인증을 Laravel에 통합한 구조
Next Post
Hello World