기존의 15년이상 지난 구형 노트북(아톰 프로세서, 2G ram)시스템에 가벼운 Lubuntu 서버를 구성해서 이것저것 연습하며 설치한 것들이 좀 있습니다.
대략, DOCKER로 n8n서버, WordPress 서버, cockpit 서버등등 몇가지를 설치했는데 구형 노트북이라 그런지 원격 reboot도 어렵고 해서 싱글보드 컴퓨터를 하나 구입했습니다.
alixxx에서 약 8만원에 구입한 싱글보드pc(banana pi bpi m5)에 기존 구형노트북(구입당시 80만원.ㅜ.ㅜ)에 설치했던 것들을 그대로 옮길 수 있는지 VM ware를 통해 pc에 Ubuntu를 설치 후 rsync를 통해 시스템을 그대로 복사하였습니다.
상황은 내부ip 192.168.0.251(구형 서버-Lubuntu)에서 192.168.0.115(VM ware 서버-Ubuntu)로 이전하는 것입니다.
먼저 가장 큰 변화는 ubuntu서버의 인터페이스가 Lubuntu처럼 똑같이 변한다는 겁니다. 이 점 참고하세요.
아래 내용은 'Gemini 2.5 Pro Preview 03-25'버전과 협업(?)하면서 진행한 사항이고 화면을 비롯해서 모든 것들이 그대로 똑같이 이전 되었습니다. ㅎㅎ
핵심 원리: 기존 서버의 설정, 데이터, 설치된 프로그램들을 최대한 그대로 새 서버로 복사하고, 새 환경(특히 IP 주소)에 맞게 일부 설정을 수정하는 것입니다.
가장 일반적이고 권장하는 방법: rsync를 이용한 데이터 및 설정 복사
이 방법은 새 서버에 Ubuntu를 새로 설치한 후, 필요한 데이터와 설정을 기존 서버에서 복사해오는 방식입니다. 유연하고 문제가 발생했을 때 대처하기 용이합니다.
진행 단계:
1단계: 사전 준비
새 서버 준비:
- 새 서버에 원하는 버전의 Ubuntu 서버를 설치합니다. (기존 Lubuntu와 버전이 비슷하거나 더 최신이면 좋습니다.)
- 새 서버에 고정 IP 주소 (192.168.0.115) 를 설정합니다. Ubuntu 서버는 보통
netplan을 사용합니다. (/etc/netplan/*.yaml파일 수정 후sudo netplan apply) - 새 서버에 SSH 서버를 설치하고 실행합니다. (
sudo apt update && sudo apt install openssh-server) - 새 서버에서 방화벽(ufw 등)이 SSH 연결(기본 포트 22)을 허용하는지 확인합니다. (
sudo ufw allow ssh또는sudo ufw allow 22/tcp)
기존 서버 (192.168.0.251) 확인:
rsync가 설치되어 있는지 확인합니다. 없다면 설치합니다. (sudo apt update && sudo apt install rsync)- 매우 중요: 이전 작업을 시작하기 전에 기존 서버의 중요 데이터를 백업하세요! 외장 하드나 다른 안전한 곳에 백업하는 것이 좋습니다. 예상치 못한 문제에 대비할 수 있습니다.
서비스 중지 (기존 서버):
- 데이터 일관성을 위해, 이전할 데이터와 관련된 서비스(웹 서버, 데이터베이스 등)를 기존 서버에서 중지합니다. 예를 들어:
sudo systemctl stop apache2(Apache 웹서버)sudo systemctl stop nginx(Nginx 웹서버)sudo systemctl stop mysql(MySQL/MariaDB 데이터베이스)- (운영 중인 다른 서비스들도 중지)
- 데이터 일관성을 위해, 이전할 데이터와 관련된 서비스(웹 서버, 데이터베이스 등)를 기존 서버에서 중지합니다. 예를 들어:
2단계: 데이터 및 설정 복사 (rsync 사용)
- 새 서버 (192.168.0.115)에서 다음 명령어를 실행하여 기존 서버의 데이터를 가져옵니다. (비밀번호나 SSH 키 필요)
sudo를 사용하는 이유는 시스템 파일 전체에 대한 권한이 필요하기 때문입니다.
sudo rsync -aAXv --exclude={"/dev/*","/proc/*","/sys/*","/tmp/*","/run/*","/mnt/*","/media/*","/lost+found","/boot/*","/var/run/*","/var/lock/*","/etc/fstab","/etc/mtab","/etc/netplan/*","/etc/network/interfaces","/etc/ssh/ssh_host_*"} -e ssh <기존서버_사용자계정>@192.168.0.251:/ /
명령어 설명:
sudo: 관리자 권한으로 실행rsync: 원격/로컬 파일 동기화 도구-a: 아카이브 모드 (권한, 소유권, 타임스탬프 등 대부분 속성 유지)-A: ACL 정보 유지-X: 확장 속성(Extended Attributes) 유지-v: 진행 상황 상세히 보기--exclude={...}: 복사에서 제외할 디렉토리 및 파일 목록./dev,/proc,/sys: 가상 파일 시스템 (복사 불필요)/tmp,/run,/var/run,/var/lock: 임시 파일 및 런타임 파일 (복사 불필요)/mnt,/media: 마운트 포인트 (하위 내용 복사 시 문제될 수 있음)/lost+found: 파일 시스템 복구용 디렉토리/boot/*: 부트로더 관련 파일. 새 서버에 새로 설치된 것을 사용하는 것이 안전할 수 있습니다. (필요시 수동 복사 고려)/etc/fstab: 파일 시스템 마운트 정보 (디스크 UUID 등이 다를 수 있어 제외)/etc/mtab: 현재 마운트 정보 (자동 생성됨)/etc/netplan/*,/etc/network/interfaces: 네트워크 설정 파일 (새 서버 IP 설정 유지 위해 제외)/etc/ssh/ssh_host_*: SSH 호스트 키 (새 서버 고유 키 유지 위해 제외)
-e ssh: SSH를 통해 원격으로 접속<기존서버_사용자계정>@192.168.0.251:/: 원본 위치 (기존 서버의 루트 디렉토리/)/: 대상 위치 (새 서버의 루트 디렉토리/)
주의:
--exclude목록은 서버 설정에 따라 추가/수정이 필요할 수 있습니다.시간 단축 팁: 처음
rsync를 실행하면 시간이 오래 걸립니다. 이후 변경된 내용만 동기화하려면 같은 명령을 다시 실행하면 됩니다. 이를 이용해 서비스 중단 시간을 최소화할 수 있습니다 (마지막 동기화 직전에 서비스 중지).실행시 권한으로 인해 문제가 발생할 수 있습니다. 이럴 경우 아래 명령어를 실행하여 필요한 권한을 부여하세요.
해결 방법:
** 기존 서버에서 비밀번호 없이 sudo rsync 실행 허용 **
가장 깔끔하고 안전한 방법은 기존 서버(192.168.0.251) 에서 <기존서버_사용자계정>이 비밀번호 입력 없이 sudo rsync 명령어만 실행할 수 있도록 sudoers 설정을 잠시 변경하는 것입니다.
기존 서버(192.168.0.251)에 SSH로 접속하세요. (평소 사용하던
<기존서버_사용자계정>으로)sudo visudo명령어를 실행하여sudoers파일을 안전하게 편집합니다. (절대nano나 다른 편집기로 직접 열지 마세요! 문법 오류 시 시스템에 문제가 생길 수 있습니다.)sudo visudo편집기(보통 nano 또는 vim)가 열리면, 파일 맨 아래쪽에 다음 줄을 추가합니다.
<기존서버_사용자계정>부분은 실제 사용하는 계정 이름으로 바꿔주세요.<기존서버_사용자계정> ALL=(ALL) NOPASSWD: /usr/bin/rsync- 주의:
rsync의 정확한 경로를 확인하는 것이 좋습니다. 기존 서버에서which rsync명령어를 실행해서 경로가/usr/bin/rsync가 맞는지 확인하세요. 다르면 해당 경로로 수정해야 합니다.
- 주의:
파일을 저장하고 편집기를 종료합니다. (nano의 경우
Ctrl+X,Y,Enter)이제 새 서버(192.168.0.115)에서 이전에 실패했던
rsync명령어를 다시 실행해보세요.sudo rsync -aAXv --rsync-path="sudo rsync" --exclude={"/dev/*","/proc/*","/sys/*","/tmp/*","/run/*","/mnt/*","/media/*","/lost+found","/boot/*","/var/run/*","/var/lock/*","/etc/fstab","/etc/mtab","/etc/netplan/*","/etc/network/interfaces","/etc/ssh/ssh_host_*"} -e ssh <기존서버_사용자계정>@192.168.0.251:/ / 2>&1 | tee rsync_sudo_nopasswd_log.txt이제 기존 서버에서
sudo rsync를 실행할 때 비밀번호를 묻지 않아야 합니다.rsync작업이 성공적으로 끝나면, 보안을 위해 반드시 기존 서버의sudoers파일에서 방금 추가했던 라인을 다시 삭제하거나 주석 처리(#추가) 하세요! (sudo visudo사용)*r sync_sudo_nopasswd_log.txt 확인하여 에러발생 여부 확인 *
** sudo reboot 실행하여 서버 재시작 **
3단계: 새 서버 설정 확인 및 수정
rsync 완료 후, 새 서버에서 몇 가지 중요한 설정을 확인하고 새 IP 주소(192.168.0.115)에 맞게 수정해야 합니다.
네트워크 설정 확인:
/etc/netplan/아래의 설정 파일이나/etc/network/interfaces(구 버전) 파일에 새 IP (192.168.0.115)가 올바르게 설정되어 있는지 다시 확인합니다.
호스트 이름 확인/수정:
/etc/hostname파일과/etc/hosts파일을 확인하고, 필요하다면 새 서버에 맞는 호스트 이름으로 수정합니다./etc/hosts파일 안에 기존 IP (192.168.0.251)가 하드코딩된 부분이 있다면 새 IP (192.168.0.115) 또는127.0.0.1(localhost) 로 변경해야 합니다.
애플리케이션 설정 파일 확인:
가장 중요한 부분입니다. 기존 서버에서 운영하던 서비스들의 설정 파일 내부에 기존 IP (192.168.0.251)가 직접 적혀있는 경우가 많습니다. 이 부분을 새 IP (192.168.0.115) 또는 상황에 맞게
0.0.0.0(모든 IP),127.0.0.1등으로 수정해야 합니다.주요 확인 대상:
- 웹 서버 설정 (Apache:
/etc/apache2/sites-available/, Nginx:/etc/nginx/sites-available/) -Listen,ServerName, 가상 호스트 설정 등 - 데이터베이스 설정 (MySQL/MariaDB:
/etc/mysql/my.cnf또는/etc/mysql/mariadb.conf.d/, PostgreSQL:/etc/postgresql/.../postgresql.conf,pg_hba.conf) -bind-address등 - 애플리케이션 자체 설정 파일 (예: PHP 애플리케이션의 DB 접속 정보 등)
- 방화벽 설정 (
sudo ufw status numbered,/etc/ufw/) - 특정 IP 기반 규칙이 있다면 수정
- 웹 서버 설정 (Apache:
찾는 방법:
grep명령어를 사용하여 설정 파일 디렉토리에서 기존 IP를 검색해 볼 수 있습니다.sudo grep -r "192.168.0.251" /etc/ # 필요하다면 다른 디렉토리도 검색 (예: /var/www/, /opt/)
SSH 호스트 키:
- 새 서버는 고유한 SSH 호스트 키를 가집니다. 기존 서버에서 새 서버로 SSH 접속하던 클라이언트들은 호스트 키가 변경되었다는 경고 메시지를 보게 됩니다. 클라이언트의
~/.ssh/known_hosts파일에서 기존 서버 IP에 해당하는 라인을 삭제해야 합니다.
- 새 서버는 고유한 SSH 호스트 키를 가집니다. 기존 서버에서 새 서버로 SSH 접속하던 클라이언트들은 호스트 키가 변경되었다는 경고 메시지를 보게 됩니다. 클라이언트의
필요한 패키지 설치:
기존 서버에 설치되었던 프로그램/패키지 목록을 확인하고 (
dpkg --get-selections > installed-packages.txt등), 새 서버에 동일하게 설치되지 않았다면 설치해 줍니다.rsync는 설정 파일과 데이터를 가져오지만, 실행 파일 자체는 새 OS에 설치된 것을 사용하게 됩니다. (일반적으로rsync로 시스템 디렉토리를 복사하면 대부분 따라오지만, 확인차 진행)# 기존 서버에서 목록 생성 dpkg --get-selections > ~/installed-packages.txt # 새 서버로 목록 파일 복사 (예: scp 사용) # 새 서버에서 목록 기반 설치 sudo apt-get update sudo apt-get install dselect sudo dselect update sudo dpkg --set-selections < ~/installed-packages.txt sudo apt-get dselect-upgrade -y주의: 위 패키지 설치 과정은 시스템을 불안정하게 만들 수도 있습니다. 문제가 없다면 생략하거나, 꼭 필요한 핵심 패키지만
sudo apt install <패키지명>으로 설치하는 것을 권장합니다.
4단계: 테스트 및 서비스 시작
- 재부팅: 새 서버를 재부팅합니다 (
sudo reboot). - 서비스 시작: 기존 서버에서 중지했던 서비스들을 새 서버에서 하나씩 시작합니다.
sudo systemctl start apache2sudo systemctl start nginxsudo systemctl start mysql- ... (다른 서비스들)
- 상태 확인 및 로그 분석: 서비스가 정상적으로 시작되었는지 확인하고 (
systemctl status <서비스명>), 문제가 있다면 관련 로그 파일 (/var/log/디렉토리 확인)을 분석하여 원인을 찾습니다. 특히 IP 주소 관련 설정 오류가 없는지 확인합니다. - 기능 테스트: 웹사이트 접속, 데이터베이스 연결, 애플리케이션 기능 등 모든 것이 기존 서버와 동일하게 작동하는지 꼼꼼하게 테스트합니다. 내부 네트워크의 다른 PC에서 새 IP (192.168.0.115)로 접속하여 테스트합니다.
5단계: 최종 마무리
- DNS 업데이트 (필요시): 만약 도메인 이름으로 서버에 접속하고 있었다면, DNS 설정에서 해당 도메인이 새 IP 주소 (192.168.0.115)를 가리키도록 변경해야 합니다.
- 기존 서버 처리: 새 서버가 완벽하게 작동하는 것을 확인한 후에, 기존 서버(192.168.0.251)를 네트워크에서 분리하거나 전원을 끕니다. 바로 삭제하지 말고, 문제가 발생했을 경우를 대비해 일정 기간 동안 보관하는 것이 좋습니다.
대안: 디스크 이미지 복제 (고급 사용자)
dd명령어 또는 Clonezilla 같은 도구를 사용하여 기존 서버의 디스크 전체를 이미지 파일로 만든 후, 새 서버의 디스크에 해당 이미지를 복원하는 방법입니다.- 장점: 시스템 상태를 거의 완벽하게 그대로 복제할 수 있습니다.
- 단점:
- 디스크 크기가 같거나 새 서버 디스크가 더 커야 합니다.
- 하드웨어 드라이버 호환성 문제가 발생할 수 있습니다 (특히 물리 서버 간 이동 시).
- 복제 후 새 서버에서 네트워크 설정(IP 주소 등)을 반드시 수동으로 변경해야 합니다. (위 3단계의 네트워크 설정 및 애플리케이션 설정 수정은 동일하게 필요)
- 초보자에게는
rsync방식보다 복잡하고 위험 부담이 클 수 있습니다.
** 완료후 체크할 사항 **
1. 새 서버 설정 확인 및 수정 (가장 중요! 꼼꼼하게!)
네트워크 설정 재확인 (필수):
- 혹시 모르니 새 서버(192.168.0.115)의
/etc/netplan/*.yaml(또는 구버전이면/etc/network/interfaces) 파일에 새 IP 주소192.168.0.115가 올바르게 설정되어 있는지 다시 한번 확인해주세요. ip a명령어로 현재 IP 주소를 확인합니다.
- 혹시 모르니 새 서버(192.168.0.115)의
호스트 이름 확인/수정 (필수):
/etc/hostname파일과/etc/hosts파일을 확인합니다.- 특히
/etc/hosts파일 안에 기존 IP 주소192.168.0.251이 직접 적혀 있다면 반드시 새 IP 주소192.168.0.115또는127.0.0.1(localhost)로 변경해야 합니다!
** 애플리케이션 설정 파일 내 IP 주소 변경 (핵심 중의 핵심!) **
이제
rsync로 복사해 온 각종 서비스 설정 파일들을 열어서, 그 안에 하드코딩된 기존 IP 주소192.168.0.251을 새 IP 주소192.168.0.115(또는0.0.0.0,127.0.0.1등 서비스 특성에 맞게)로 바꿔줘야 합니다.어디를 찾아야 할까요?
grep명령어로 찾아보면 편리합니다! 새 서버 터미널에서 다음 명령어를 실행해보세요:sudo grep -r "192.168.0.251" /etc/(이 명령어는
/etc디렉토리 아래 모든 파일에서192.168.0.251문자열을 찾아줍니다.)주요 확인 대상:
- 웹 서버: Apache (
/etc/apache2/), Nginx (/etc/nginx/) 설정 파일 (특히sites-available안의 파일들,Listen,ServerName,VirtualHost설정 등) - 데이터베이스: MySQL/MariaDB (
/etc/mysql/), PostgreSQL (/etc/postgresql/) 설정 파일 (bind-address등) - 기타 서비스: 기존에 사용하던 다른 서비스들의 설정 파일 (예: FTP, 방화벽 규칙에 IP가 명시된 경우 등)
- 웹 애플리케이션: 웹사이트 코드 내의 설정 파일 (
/var/www/html등)에 DB 접속 정보나 API 주소 등이 IP로 되어 있다면 수정해야 합니다.
- 웹 서버: Apache (
grep으로 찾은 파일들을sudo nano <파일명>등으로 열어서 해당 IP 주소를 수정하고 저장합니다.
2. 테스트 및 서비스 시작
재부팅: 모든 설정 변경을 마쳤다면, 시스템을 안정적으로 적용하기 위해 새 서버를 재부팅합니다.
sudo reboot서비스 시작: 재부팅 후, 기존 서버에서
stop시켰던 서비스들을 새 서버에서 하나씩start시킵니다.sudo systemctl start apache2 # 또는 nginx sudo systemctl start mysql # ... 다른 서비스들도 시작상태 확인: 서비스가 제대로 시작되었는지 확인합니다.
sudo systemctl status apache2 sudo systemctl status mysql # ...만약
active (running)상태가 아니라면 에러가 발생한 것이니 로그를 확인해야 합니다.로그 확인: 문제가 있다면 관련 로그를 확인하여 원인을 찾습니다.
journalctl -u apache2 # 아파치 로그 확인 예시 sudo tail -n 50 /var/log/apache2/error.log # 아파치 에러 로그 확인 예시 sudo tail -n 50 /var/log/mysql/error.log # MySQL 에러 로그 확인 예시기능 테스트: 다른 PC에서 웹 브라우저로 새 서버 IP(
http://192.168.0.115)에 접속해보거나, DB에 접속해보는 등 실제 서비스가 기존처럼 잘 작동하는지 꼼꼼하게 테스트합니다.
** 참고사항 **
- 백업은 필수입니다! 어떤 방법을 사용하든 시작 전에 반드시 데이터를 백업하세요.
- IP 주소 변경이 가장 큰 변수입니다. 새 서버에서 관련 설정을 꼼꼼히 확인하고 수정하는 것이 중요합니다.
rsync방법이 일반적으로 더 안전하고 유연합니다.- 서비스 중단 시간을 최소화하려면
rsync를 여러 번 실행하여 변경분만 동기화하는 전략을 사용하세요. - 문제가 발생하면 로그 파일을 확인하는 것이 기본입니다 (
/var/log/). - 천천히, 각 단계를 확인하면서 진행하세요.
'IT 관련 > 우분투(Ubuntu) 이것저것' 카테고리의 다른 글
| Ubuntu를 VM에 설치시 네트워크 설정 (0) | 2025.04.06 |
|---|---|
| scp 명령어 (0) | 2025.04.05 |
| Ubuntu 메일서버 설치(with Manus) (0) | 2025.04.05 |
| tail 명령어 (0) | 2025.04.05 |
| grep 명령어 (0) | 2025.04.05 |