백엔드는 django 프레임워크를 사용할 거다. 또, 개인적으로 종속성을 사람이 직접 다루는 pip를 별로 좋아하지 않는다. 그래서 poetry를 사용할 거다.
/blog-backend 폴더를 만든다. 여기다가 백엔드 자료는 모두 넣을 생각이다.
poetry init
poetry shell
poetry add django
mkdir blog-api
cd blog-api
django-admin startproject config .
python3 manage.py migrate
이러면 대충 세팅은 끝났다. 현재까지 folder structure는 아래와 같다.
.
├── blog-api
│ ├── config
│ │ ├── __init__.py
│ │ ├── __pycache__
│ │ ├── asgi.py
│ │ ├── settings.py
│ │ ├── urls.py
│ │ └── wsgi.py
│ ├── db.sqlite3
│ └── manage.py
├── poetry.lock
└── pyproject.toml
그 담엔 superuser 만들고 잘 실행되는지 확인하면 된다.
python3 manage.py createsuperuser # 세팅은 알아서
python3 manage.py runserver
localhost:8000/admin/ 에서 admin 페이지가 잘 표시되면 된 거다.
최상위 폴더(/blog-backend)에 아래 두 파일을 만든다.
Dockerfile
FROM python:3
ENV PYTHONUNBUFFERED 1
WORKDIR /backend
COPY poetry.lock pyproject.toml /backend/
RUN pip3 install poetry
RUN poetry config virtualenvs.create false
RUN poetry install --no-root
local에서 작업할 때는 poetry shell을 통해 가상환경을 쓰는 게 편한데 docker에서 돌릴 때는 굳이 가상환경 안 쓰는 게 편해서 virtualenvs.create false
옵션을 줬다. 이거 쓰기 싫으면 밑에 docker-compose.yml
에서 파이썬 실행할 때마다 poetry run 써야 되는데 저게 잘 안 될때가 있다. 그리고 컨테이너에 얘 하나 돌릴 건데 굳이 가상환경 만들 이유가 있나라는 생각도 든다.
docker-compose.yml
version: "3"
services:
backend:
command: "python3 blog-api/manage.py runserver 0:8000"
build: .
volumes:
- .:/backend
ports:
- "8000:8000"
docker build -t blog-backend .
docker image ls # 이미지 잘 만들어졌는지 확인
docker-compose up
이러고서 admin 페이지 잘 들어가지면 성공이다.
gitignore는 아래와 같이 만든다.
.gitignore
# Created by https://www.toptal.com/developers/gitignore/api/django
# Edit at https://www.toptal.com/developers/gitignore?templates=django
### Django ###
*.log
*.pot
*.pyc
__pycache__/
local_settings.py
db.sqlite3
db.sqlite3-journal
media
그 담에
git init
git add .
git commit -m "Initial commit"
이제 github에 레포지토리 만들고 연결한다.
git remote add origin <your repository's SSH>
git push --set-upstream origin master
이제 레포지토리 가보면 initial commit이 제대로 잘 들어간 걸 확인할 수 있다.