IT/Docker

[Docker] Linux + Docker + Django + PostgreSQL 세팅하기

월공 2021. 4. 8. 11:48
728x90
300x250

환경 Linux, Centos7, Docker, Django, PostgreSQL / Window10, Putty, vscode,filezila

 

회사에 남아도는 테스트 서버에 장고 설치하고싶어서 여기저기 찾아보면서 야금야금 정리한다.

먼저 리눅스 서버에 장고프로젝트 폴더를 생성시켜주자 나는 var/www/html/django_test 라는 폴더를 만들어줬다.

 

django_test 폴더 내부에다가 Dockerfile 을 만들어주자

 

Dockerfile

FROM python:3
ENV PYTHONUNBUFFERED=1
WORKDIR /code
COPY requirements.txt /code/
RUN pip install -r requirements.txt
COPY . /code/

 

같은 폴더내에

requirements.txt도 만들어주자

Django>=3.0,<4.0
psycopg2-binary>=2.8

 

Dockerfile 에서 txt 파일에 선언된 버전으로 인식하여 설치가된다

 

같은 폴더내에

docker-compose.yml  도 만들어주자

version: "3.9"
   
services:
  db:
    image: postgres
    volumes:
      - ./data/db:/var/lib/postgresql/data
    environment:
      - POSTGRES_DB=postgres
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=postgres
  web:
    build: .
    command: python manage.py runserver 0.0.0.0:8000
    volumes:
      - .:/code
    ports:
      - "8000:8000"
    depends_on:
      - db

compose 에서는 이렇게 작성만 해주면 알아서 무슨 DB 이미지를 사용할지 마운트 경로설정 , 포트포워딩 등등 docker run 할때 겪었던 불편함을 줄여준다

 

리눅스에서 Docker를 실행하는경우 컨테이너가 root 로 실행되기 때문에 생성된 파일은 root에게 소유권이 있어서

폴더의 소유권을 변경해야한다.

난 여기서 일단 새로운 사용자를 만들어서 진행하였다.

#사용자 생성
useradd django
passwd django

#권한 조정
chown -R django:django .

작성하고나서 아래 명령어를 친다.

docker-compose run web django-admin startproject composeexample .

난 이 설치과정에서 용량부족하다는 에러문구가 나왔고 아래 링크처럼 해결하였다.

bug41.tistory.com/94?category=887580

 

[Docker] Docker no space left on device

도커에서 장고세팅하려고하는데 갑자기 ERROR: Service 'web' failed to build : write /var/lib/docker/tmp/GetImageBlob0000000000000 : no space left on device 에러가 떳다 좀 찾아보니 안쓰는 이미지들 정리..

bug41.tistory.com

 

여튼 설치가 완료되면 composeexample/settings.py 파일을 편집해줘야한다

80 라인 부근에 DATABASES 수정

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': 'postgres',
        'USER': 'postgres',
        'PASSWORD': 'postgres',
        'HOST': 'db',
        'PORT': 5432,
    }
}

이 파일 똑바로 수정 안해주면 엄청난

postgres permission denied 

postgres permission denied 

postgres permission denied 

postgres permission denied 

postgres permission denied  에러를 볼수있다.

 

여튼 다 수정되고나서

docker-compose up

쳤을때 아래 화면같이 나오면 실행 성공한거다

 

해당 리눅스 ip주소:8000 으로 들어가면 이렇게 뿌슝빠슝 로켓도 보인다

만약에 입력한 IP주소로 태클거는 뭐시기 오류 뜨면 settings.py 에서 아래처럼 내용 추가해주면된다

ALLOWED_HOSTS = ['127.0.0.1', 'localhost']
ALLOWED_HOSTS += ['192.168.11.111']

 

 

putty 하나 더틀어서 서버에 접속해갖고 (Ctrl + C  로 서버 끄지만 않았다면 현재까지 작업했던 putty 창 꺼도 서버는 그대로 유지된다)

docker ps -a

쳐주면 현재 가동중인 컨테이너들 확인할수 있는데

아래처럼 django 컨테이너와 코끼리db 컨테이너가 구동되고있음을 확인할수 있다.

서버 종료하는 법은 아래와 같이 치면되고

docker-compose down

 

서버종료 시키고나면 컨테이너 목록에서도 사라진다 (?)

이건 왜그런건지 모르겠다 두개의 서버에서 테스트했는데 한곳에선 안사라지고 Exit 상태로 남아있고 다른곳에선 아예 사라진다

 

추가적으로 회사 실서버에 도커 테스트를 하던 도중에 아무리 포트를 열어줘도 먹지를 않아서 이런저러 삽질을 했는데

IDC 에 있는 서버라 자체 UTM 방화벽에서 해당 포트를 막고있어서 접속이 안됐었다 -_-

다른분들은 나처럼 멍청하게 삽질하지마시라고 혹시나싶어 적어둔다

728x90
300x250