현재 DB는 Django container 안에 있어서, Data들이 DB 데이터 안에 들어있는 상태이다.
하지만, 알 수 없는 이유로 서버가 종료된다면??
따라서, 해당 데이터들을 MariaDB container로 분리해서, Volume으로 저장한다.
DB를 MariaDB로 따로 빼서 VPS 환경에 적용했기 때문에, 개발을 실제로 진행한 Local 환경인 Sqlite3와 다르다.
즉, Local 환경과 배포 환경이 다르다.
개발환경과 로컬환경이 다른 것들을 분리한다.
기본 설정을 가져오기 위해 해당 구문 입력
from .base import *
env 설정, databases
# Database
# https://docs.djangoproject.com/en/3.2/ref/settings/#databases
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'user',
'USER': 'user',
'PASSWORD': 'password',
'HOST': 'host',
'PORT': '3306',
}
}
Runserver를 하면, settings.py로 접근해야하는데, 1차적으로 폴더 구조가 한 층 더 생겼으므로, 접근이 불가능하다.
따라서, BASE_DIR 설정에 parent를 한 번 더 입력!
BASE_DIR = Path(__file__).resolve().parent.parent.parent
manage.py는 실행시 프로젝트 폴더의 settings.py에 접근하는 구조인데, 이름을 다르게 설정했으므로, 수정해줄 필요가 있다.
기존
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'pragmatic.settings')
변화
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'pragmatic.settings.local')
settings.deploy의 이름과 일치시켜야한다.
network는 nginx - django로 연결
Volume에서는 Mariadb를 사용할 때 어디에 데이터를 저장할지 정해줘야한다.
database라는 Volumes를 생성
container : /var/lib/mysql로, volume: database volume으로 설정
ENV 환경변수는 MYSQL_ROOT_PASSWORD, MYSQL_DATABASE, MYSQL_USER, MYSQL_PASSWORD를 설정해줘야한다.
Deploy
수정 전
FROM python:3.9.13
WORKDIR /home/
RUN git clone https://github.com/holawan/Pinterest.git
WORKDIR /home/Pinterest/
RUN pip install -r requirements.txt
RUN pip install gunicorn
WORKDIR /home/Pinterest/pragmatic/
RUN echo "SECRET_KEY=[SECRET_KEY]" > .env
WORKDIR /home/Pinterest/
RUN python manage.py migrate
RUN python manage.py collectstatic
30 0 B
EXPOSE 8000
31 0 B
CMD ["gunicorn" "pragmatic.wsgi" "--bind" "0.0.0.0:8000"]
수정 후
FROM python:3.9.13
WORKDIR /home/
RUN echo "testing"
RUN git clone https://github.com/holawan/Pinterest.git
WORKDIR /home/Pinterest/
RUN pip install -r requirements.txt
RUN pip install gunicorn
RUN pip install mysqlclient
RUN echo "SECRET_KEY=[SECRET_KEY]" > .env
RUN python manage.py collectstatic
EXPOSE 8000
CMD ["bash", "-c", "python manage.py migrate --settings=pragmatic.settings.deploy && gunicorn pragmatic.wsgi --env DJANGO_SETTINGS_MODULE=pragmatic.settings.deploy --bind 0.0.0.0:8000"]
image name : django_test_image:4
container name : django_container_gunicorn
Network : nginx-django
Volume : /home/Pinterest/staticfiles/, /home/Pinterest/media/