1) Github Repository 생성 후 Clone
2) Docker hub 회원가입
3) Docker AccessToken 생성
django>=5.0.1,<6.0.0 # 5.0.1 이상 6.0.0 미만
djangorestframework>=3.14.0,<4.0.0
flake8>=7.0.0,<8.0.0 # PEP8 스타일 유지하도록
6) Docker file 생성
# alpine 3.19 버전의 리눅스를 구축하는데, 파이썬 버전은 3.11로 설치된 이미지를 불러오자
# alpine - 경량화된 리눅스 버전 => 가벼움 => 빌드 속도가 짧음
# ex) miniconda
FROM python:3.11-alpine3.19
# image 유지 관리자
LABEL maintainer="yoonjaeo"
# python 0:1 = False: True
# 컨테이너에 찍히는 로그를 볼수 있도록 허용
# 도커 컨테이너에서 어떤 일이 벌어지고 있는지 알수 있어서 컨테이너 관리가 편해짐
# 이는 Docker 컨테이너에서 로그를 더 쉽게 볼 수 있게 합니다.
ENV PYTHONUNBUFFERED 1
# 최대한 컨테이너를 경량으로 유지하기 위해서 삭제할 수 있도록 tmp에 넣어서 build 후 삭제할 수 있도록
COPY ./requirements.txt /tmp/requirements.txt
COPY ./requirements.dev.txt /tmp/requirements.dev.txt
COPY ./app /app
WORKDIR /app
# 장고가 8000 포트이기 때문에 이를 열어줌
EXPOSE 8000
ARG DEV=false
# && \ : Enter
RUN python -m venv /py && \
/py/bin/pip install --upgrade pip && \
/py/bin/pip install -r /tmp/requirements.txt && \
if [ $DEV = "true" ]; \
then /py/bin/pip install -r /tmp/requirements.dev.txt ; \
fi && \
rm -rf /tmp && \
adduser \
--disabled-password \
--no-create-home \
django-user
ENV PATH="/py/bin:$PATH"
USER django-user
7) ignore 파일 생성
# Git
.git
.gitignore
# Docker
.docker
# Python
app/__pycache__/
app/*/__pycache__/
app/*/*/__pycache__/
app/*/*/*/__pycache__/
.env/
.venv/
venv/
# Django #
*.log
*.pot
*.pyc
__pycache__
db.sqlite3
media
# Backup files #
*.bak
# If you are using PyCharm #
# User-specific stuff
.idea/**/workspace.xml
.idea/**/tasks.xml
.idea/**/usage.statistics.xml
.idea/**/dictionaries
.idea/**/shelf
# AWS User-specific
.idea/**/aws.xml
# Generated files
.idea/**/contentModel.xml
# Sensitive or high-churn files
.idea/**/dataSources/
.idea/**/dataSources.ids
.idea/**/dataSources.local.xml
.idea/**/sqlDataSources.xml
.idea/**/dynamic.xml
.idea/**/uiDesigner.xml
.idea/**/dbnavigator.xml
# Gradle
.idea/**/gradle.xml
.idea/**/libraries
# File-based project format
*.iws
# IntelliJ
out/
# JIRA plugin
atlassian-ide-plugin.xml
# Python #
*.py[cod]
*$py.class
# Distribution / packaging
.Python build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
wheels/
*.whl
*.egg-info/
.installed.cfg
*.egg
*.manifest
*.spec
# Installer logs
pip-log.txt
pip-delete-this-directory.txt
# Unit test / coverage reports
htmlcov/
.tox/
.coverage
.coverage.*
.cache
.pytest_cache/
nosetests.xml
coverage.xml
*.cover
.hypothesis/
# Jupyter Notebook
.ipynb_checkpoints
# pyenv
.python-version
# celery
celerybeat-schedule.*
# SageMath parsed files
*.sage.py
# Environments
.env
.venv
env/
venv/
ENV/
env.bak/
venv.bak/
# mkdocs documentation
/site
# mypy
.mypy_cache/
# Sublime Text #
*.tmlanguage.cache
*.tmPreferences.cache
*.stTheme.cache
*.sublime-workspace
*.sublime-project
# sftp configuration file
sftp-config.json
# Package control specific files Package
Control.last-run
Control.ca-list
Control.ca-bundle
Control.system-ca-bundle
GitHub.sublime-settings
# Visual Studio Code #
.vscode/*
!.vscode/settings.json
!.vscode/tasks.json
!.vscode/launch.json
!.vscode/extensions.json
.history
8) docker image 생성
docker build .
9) docker compose 파일 생성 및 빌드
version: "3.11" # docker compose API version 3.11
services:
app:
build:
context: . # root 경로에 만들것 이므로
args:
- DEV=true
ports:
- "8000:8000"
volumes:
- ./app:/app
command: sh -c "python manage.py runserver 0.0.0.0:8000"
docker compose build
10) django 설치
docker-compose run --rm app sh -c "django-admin startproject app ."
docker-compose up
10 -2) 관리자 생성
docker-compose run --rm app sh -c "python manage.py migrate"
docker-compose run --rm app sh -c "python manage.py createsuperuser"
11) flake8
# app/.flake8
# flake8 : 파이썬 코드 스타일 강제 & 디버깅 도움
[flake8]
exclude =
migrations,
__pycache__,
manage.py,
settings.py
docker-compose run --rm app sh -c "flake8"
12) github actions 설정
# Github Actions CI/CD
name: Checks # Workflow 이름
on: [push] # git push 이벤트 활성화 -> 레포지토리에 push를 했을 때 활성화
jobs:
test-lint:
name: Test and Lint
runs-on: ubuntu-20.04 # 작업 환경
steps: # 작업 단계
# 도커 연결 작업
- name: Login in to Docker Hub
uses: docker/login-action@v1 # 다른 Docker 레지스트리에 로그인하기 위해 사용하는 GitHub Action
with:
username: ${{ secrets.DOCKERHUB_USER }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Checkout # 깃헙 레포에 있는 코드를 작업 환경으로 가져오는 역할
uses: actions/checkout@v2
- name: Test # 테스트 코드 실행
run: docker compose run --rm app sh -c "python manage.py test"
- name: Lint # pep8 파이썬 코드 스타일 가이드 준수 여부 검사
run: docker compose run --rm app sh -c "flake8"
13) git에 올리기
git add .
git commit -m "message"
git push -u origin main
14) action이 달라진것을 볼수 있음