장고:서버 옮기기
장고! 웹 프레임워크! 틀:장고
개요
종종 서버를 이사해야 할 때가 있다. 하드디스크의 손상을 고려해 새 서버로 옮긴다든가...
업그레이드는 업그레이드 문서를 참고하자.
Django 프로젝트 이전 절차
- 기존 서비스 중단 여부 결정 (무중단 / 점검 시간 확보)
- 옮기기
- 크게 다음 것들만 옮기면 된다.
- 파이썬 가상환경
- 프로젝트 디렉토리
- 데이터베이스
파이썬 관련 옮기기
기존 서버에서
| 과정 | 설명 | 비고 |
|---|---|---|
| Python 버전 확인 | 버전 안맞으면 연달아 라이브러리에서 깨지는 경우 있음. | python --version |
| 라이브러리 백업 | 현재 사용하는 라이브러리 정보 생성. | pip freeze > requirements.txt |
새 서버에서
| 과정 | 설명 | 비고 |
|---|---|---|
| 파이썬 설치 | 이전에 확인한 버전에 맞게 설치한다. |
|
| Python 가상환경 구성 | 디렉토리 이사 후 진행하면
서버에서 운영하는 프로젝트가 1개라면 굳이 가상환경을 만들 필요는 없다. 그러나, 만들어두는 게 추후 문제해결 등에서 좋지. 이전 서버와 완전 똑같이 만들어줄 준비를 하자. |
python -m venv 가상환경폴더명(가상환경이름)
source venv/bin/activate # 가상환경 활성 |
| 라이브러리 설치 | 위에서 백업한 그대로 진행한다. | pip install -r requirements.txt |
디렉토리 옮기기
| 과정 | 설명 | 비고 |
|---|---|---|
| 프로젝트 디렉토리 |
|
|
| 자동화 쉘 | 편의상 만들었던 자동화 쉘이 있으면 옮긴다. | 보통 이것까지 포함하여 프로젝트 디렉토리를 만들어두면 편하지. |
데이터 베이스 옮기기
기존 서버에서
데이터베이스 종류 확인 (SQLite / PostgreSQL / MySQL 등)
| DB 종류 | 설명 | 비고 |
|---|---|---|
| SQLite | db.sqlite3 파일을 그대로 복사 | |
| PostgreSQL | pg_dump dbname > backup.sql | |
| MySQL / MariaDB | mysqldump -u user -p dbname > backup.sql |
- sql을
rsync -avzP ~/backup.sql [email protected]:/home/id8436/등의 방법으로 옮긴다.
새 서버에서
각 DB에 맞게 sql 파일을 복원하는 명령을 수행하면 된다.
| DB 종류 | 설명 | 비고 |
|---|---|---|
| MySQL / MariaDB | (어차피 외부접속 안되니, 드러내놓는다.)
|
시작하기 전에..
sudo apt install libmariadb-dev
|
(PostgreSQL: psql, MySQL/MariaDB: mysql 등)
각종 에러
DB는 버전이 다르거나 기타 등등등 문제점이 많이 생긴다.
기타
| DB 종류 | 설명 | 비고 |
|---|---|---|
| Redis 설치 | sudo apt install redis-server
| |
| 샐러리 권한 부여 | sudo mkdir -p /var/run/celery
sudo chown id8436 /var/run/celery # 계정명은 알아서. |
웹서버 설정 등을 옮기면 끝.
프로젝트 파일 안에 nginx 설정 등이 있는 경우 이처럼 심볼릭 링크를 만든다.
sudo ln -s /home/id8436/django_project/maintain/nginx_conf /etc/nginx/sites-enabled/
https를 쓰는 경우 ssl 인증서가 있어야 하는데, 이것도 프로젝트 디렉토리에 합치면 이사가 쉬워질 듯하다.
이후 웹 서버 설정, systemd 등록 등은 다른 장고 웹호스팅 관련 문서를 참고하자.
점검
점검도 웹호스팅 문서를 따라가자.
이전 후 체크리스트
- DEBUG = False 확인
- ALLOWED_HOSTS 확인
- 보안 키 유출 여부 점검
- SSL 인증서 적용
- 백업 정책 설정
- 크론잡 / Celery / Redis 정상 동작 확인
참고 사항
- 대규모 이전 시 Docker 사용을 권장
- 작업 전 반드시 데이터베이스 백업 수행
- 테스트 서버에서 1회 이상 이전 연습 권장(DB는 손상 시 복구가 매우 어렵다)