본 프로젝트는 AWS EC2 환경에서 진행하였습니다.
Client ip 와 Request_time 정보를 가져와 PostgreSQL 에 저장하는 로직을 구현하는 프로젝트 입니다!
mkdir
FROM python:3
ENV PYTHONUNBUFFERED=1
WORKDIR /code
COPY requirements.txt /code/
RUN pip install -r requirements.txt
COPY . /code/
Dockerfile에서 requirements.txt 파일에 선언된 버전으로 인식하여 설치된다!
Django>=3.0,<4.0
psycopg2-binary>=2.8
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
리눅스에서 Docker를 실행하는 경우, 컨테이너가 root로 실행되기 때문에 생성된 파일은 root에게 소유권이 있다.
$ whoami
$ sudo chown -R 'whoami해서나온이름' .
#사용자 생성
useradd django
passwd django
#권한 조정
chown -R django:django .
$ docker exit -it --username --dbname
$ docker-compose run web django-admin startproject composeexample .
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'postgres',
'USER': 'postgres',
'PASSWORD': '알아서 비밀번호 설정하기',
'HOST': 'db',
'PORT': 5432,
}
} run web django-admin startproject composeexample .
$ docker-compose exec web python manage.py startapp logs
from django.db import models
class Log(models.Model):
ip_address = models.CharField(max_length=50, blank=True)
access_time = models.DateTimeField(auto_now_add=True)
class Meta:
db_table = "logs"
$ docker-compose exec web python manage.py makemigrations
$ docker-compose exec web python manage.py migrate
requsest.META에 들어있는 정보 key:value 값이라 META의 [’REMOTE_ADDR’] 확인하면 ip 확인 가능하다.
from django.http import JsonResponse
from django.views import View
from logs.models import Log
from datetime import datetime
class LogView(View):
def get(self, request):
ip_address = request.META['REMOTE_ADDR']
access_time = datetime.now()
Log.objects.create(
ip_address = ip_address,
access_time = access_time
)
logs = Log.objects.all()
log_list = [{
'ip_address' : log.ip_address,
'access_time' : log.access_time
}for log in logs]
return JsonResponse({'result':log_list}, status=200)