PuTTy로 서버 관리하기 썸네일
PuTTy로 서버 관리하기 썸네일


PuTTy로 서버 관리하기 | Docker, Django, PostgreSQL, Nginx 운영하며 가장 많이 사용하는 SSH 명령어


현재 제가 운영 중인 win-j.com은 시놀로지 NAS 환경에서 Docker, Django, PostgreSQL, Nginx를 이용해 운영하고 있습니다. 유틸리티 추가, 다국어 업데이트, SEO 수정, IndexNow 등록 등 거의 모든 작업을 SSH를 통해 진행하고 있습니다. 시놀로지 NAS를 사용하는 가장 큰 이유 중 하나는 GUI 환경입니다. 리눅스를 잘 모르는 사람도 웹 브라우저만 열 면 파일 관리, 사용자 관리, Docker 컨테이너 관리까지 쉽게 할 수 있습니다. 

물론 처음 시놀로지 NAS의 DSM(DiskStation Manager)의 GUI기능을 사용해서 윈도우처럼 작업이 가능해 초반 서버 세팅이나 DSM에서 제공하는 유틸리티인 텍스트 편집기를 사용해서 SSH 환경보다 텍스트 편집할 때 유용합니다. 문서의 대량 수정이 필요하면 GUI 모드에서 하는게 편하기는 하지만 Docker, Django, PostgreSQL, Nginx를 직접 관리하다 보면 점점 GUI보다 SSH를 사용하는 시간이 길어지게 됩니다. 

이번 글에서는 단순 명령어 나열이 아니라 실제 운영 중 가장 자주 사용하는 명령어와 언제 사용하는지 함께 정리해보겠습니다.


왜 GUI보다 SSH를 더 많이 사용할까?


DSM의 Container Manager에서도 컨테이너 상태, 로그, 터미널 등을 사용할 수 있습니다. 하지만 실제 운영에서는 로그 확인, Migration 실행, Git, Pull, PostgreSQL 접속 등의 작업이 매우 자주 발생합니다. DSM에서는 패키지에서 Container를 찾아서 실행하고 실행중인 컨테이너에 접속해서 로그를 확인 또는 터미널 실행 등을 해야하지만 Putty로 접속해 SSH 명령어를 한 줄 작성하면 바로 폴더 이동, 소스코드 수정, 로그 확인 등을 할 수 있어 작업 시간이 단축됩니다. 


SSH에서 로그 확인
SSH에서 로그 확인
시놀로지 NAS 로그 확인 화면
시놀로지 NAS 로그 확인 화면

서버 접속 후 가장 많이 사용하는 명령어 

pwd    - 현재 폴더의 파일 목록을 확인
ls    - 가장 기본적인 목록 조회 명령어 (숨김 파일, 상세 정보 표시 안됨)
ls -l    -  파일의 상세 정보를 함께 출력 
ls -al    - 숨김 파일까지 표시 
cd        -  폴더 이동 명령 

Docker 컨테이너 상태 확인 

사이트가 갑자기 접속되지 않거나 오류가 발생하면 가장 먼저 Docker 컨테이너 상태를 확인합니다. 

bash
docker ps

현재 실행 중인 컨테이너만 표시

중지된 컨테이너까지 모두 확인하려면 다음 명령어를 사용합니다.

bash
docker ps -a 

실제로 Django 컨테이너가 종료되어 있거나 PostgreSQL, Nginx가 정상 실행되지 않는 경우도 종종 있기 때문에 가장 먼저 확인하는 명령어 입니다. 


운영하면서 가장 많이 사용하는 Docker 로그 확인

개인적으로 가장 많이 사용하는 명령어는 docker logs입니다. 

bash
docker logs 컨테이너명

실시간 로그를 확인하려면 다음 명령어를 사용합니다.

bash
docker logs -f 컨테이너명

최근 로그만 확인하고 싶을 때는 아래와 같이 사용합니다.

bash
docker logs --tail 100 컨테이너명

실제로 Migration 오류, Python 예외, Static 파일 오류 등을 대부분 로그에서 확인할 수 있습니다. 


Django 배포 시 가장 많이 사용하는 명령어 

Docker 컨테이너에서 Django프로젝트를 운영중이라면 Djnago 컨테이너에 직접 접속해 manage.py를 찾아 아래 명령어를 실행하면 됩니다. 먼저 Django 컨테이너에 직접 접속 합니다.

bash
docker exec -it 컨테이너명 bash

새로운 기능을 추가하거나 모델을 수정한 뒤에는 컨테이너에 직접 접속해 manage.py가 있는 폴더에서 migration 작업이 필요합니다. 

bash
python manage.py makemigrations

docker 컨테이너에 접속하면 처음 프로젝트의 root로 설정된 곳으로 이동되는데 src폴더로 이동해서 manage.py를 실행해야 할 수 있습니다. src 폴더로 이동하거나 아래 명령어를 사용합니다.

bash
python src/manage.py makemigrations

생성된 Migration을 적용합니다.

bash
python manage.py migrate

정적 파일을 수집할 때는 다음 명령어를 사용합니다.

bash
 python manage.py collectstatic --noinput

CSS가 적용되지 않거나 이미지가 보이지 않는 경우 collectstatic를 잊은 경우가 생각보다 많습니다. 

python shell 접속 bash

python manage.py shell

python shell 종료는 Ctrl + D  

컨테이너를 빠져 나올때에는 다음 명령어를 사용합니다.

bash
exit

실제 Docker 환경에서는 컨테이너에 먼저 들어가지 않고 아래처럼 한 줄로 실행하는 경우도 많습니다.

bash
docker exec -it 컨테이너명 python src/manage.py shell

PostgreSQL 데이터베이스 확인

데이터 저장이 정상적으로 되지 않거나 Migration 이후 문제가 발생하면 PostgreSQL에 직접 접속해 확인합니다.

bash
docker exec -it DB컨테이너명 bash
bash
psql -U postgres

데이터베이스 목록 확인

bash
\ㅣ

테이블 목록 확인

bash
\dt

현제 접속중인 데이터베이스 확인

bash
SELECT current_database();

Django 모델 변경 후 테이블 생성 여부를 확인할 때 자주 사용합니다.


Nginx 설정 확인

최근 win-j.com 사이트에서도 ads.txt, robots.txt, SSL 설정 등을 수정하면서 Nginx 설정을 자주 변경했습니다.

설정 변경 후 반드시 테스트를 진행합니다.

bash
nginx -t 

문제가 없다면 설정을 다시 불러옵니다.

bash
nginx -s reload

설정 파일 오타 하나로 사이트 전체가 영향을 받을 수 있기 때문에 매우 중요한 과정입니다. 


실제 win-j.com 배포 순서 

git pull
3
docker compose up -d --build
docker exec django python manage.py migrate
docker exec django python manage.py collectstatic --noinput
docker restart nginx
docker logs -f django

배포 후에는 반드시 로그를 확인합니다.

예전에는 배포 후 바로 사이트만 확인했지만, 지금은 로그를 먼저 확인하는 습관이 생겼습니다. 시놀로지 nas에서 GitServer를 사용해서 데스크톱, 노트북 등에서 git push 작업을 하면 자동으로 배포하도록  Hooks 설정을 해서 데스크톱에서 git push이후에 SSH에서 로그를 확인하는 작업으로 진행하고 있습니다. 


마무리

시놀로지 NAS는 분명 GUI가 강력한 운영체제 입니다. 하지만 Django 웹사이트를 직접 운영하게 되면 결국  SSH 사용 비중이 점점 높아집니다. 현재 win-j.com도 대부분 유지보수 작업을 SSH로 진행하고 있으며, 문제 해결 속도 역시 GUI보다 훨씬 빠릅니다. 처음에는 어렵게 느껴질 수 있지만, 위 명령어들만 익혀도 Docker 기반 Django 서버를 운영하는데  큰 도움이 될것입니다.