리셋 되지 말자

[CSAPI] Django 개발환경 셋팅 본문

프로젝트

[CSAPI] Django 개발환경 셋팅

kyeongjun-dev 2021. 10. 3. 18:38

local 개발환경

개발 부터 aws에 db서버를 따로 두고 개발하기에는 비용적인 부분이 너무 감당이 안될 것 같아서 local에 두 개의 centos 서버를 두고 개발을 시작. 여기서는 django 컨테이너를 실행시켰을 때, database와 연결이 되는 것까지 진행.

 

Vagrant 를 이용한 환경 세팅

Virtualbox에 centos 두 개를 띄어서 시작.

Vagrant.configure("2") do |config|
    #csapi
    config.vm.define "csapi" do |cfg|
        cfg.vm.box = "centos/8"
        cfg.vm.provider "virtualbox" do |vb|
            vb.name = "csapi"
        end
        cfg.vm.host_name = "csapi"
        cfg.vm.network "private_network", ip: "192.168.252.100", :adapter => 2
        cfg.vm.network "forwarded_port", guest: 22, host: 60001, auto_correct: true, id: "ssh"

        # install docker
        cfg.vm.provision "shell", inline: "yum install -y yum-utils && yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo"
        cfg.vm.provision "shell", inline: "yum install -y docker-ce-20.10.5 docker-ce-cli-20.10.5 containerd.io"
        cfg.vm.provision "shell", inline: "usermod -aG docker vagrant"
        cfg.vm.provision "shell", inline: "systemctl start docker"
        cfg.vm.provision "shell", inline: "systemctl enable docker"

        # install git
        cfg.vm.provision "shell", inline: "yum install -y git"

        # install python, gcc
        cfg.vm.provision "shell", inline: "yum install -y epel-release.noarch"
        cfg.vm.provision "shell", inline: "yum install -y python39"
        cfg.vm.provision "shell", inline: "yum install -y gcc"

        # install mysql lib
        cfg.vm.provision "shell", inline: "yum install -y python3-devel"
        cfg.vm.provision "shell", inline: "yum install -y mysql-devel"
    end

    #csapi
    config.vm.define "database" do |cfg|
        cfg.vm.box = "centos/8"
        cfg.vm.provider "virtualbox" do |vb|
            vb.name = "database"
        end
        cfg.vm.host_name = "database"
        cfg.vm.network "private_network", ip: "192.168.252.101", :adapter => 2
        cfg.vm.network "forwarded_port", guest: 22, host: 60001, auto_correct: true, id: "ssh"

        # install docker
        cfg.vm.provision "shell", inline: "yum install -y yum-utils && yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo"
        cfg.vm.provision "shell", inline: "yum install -y docker-ce-20.10.5 docker-ce-cli-20.10.5 containerd.io"
        cfg.vm.provision "shell", inline: "usermod -aG docker vagrant"
        cfg.vm.provision "shell", inline: "systemctl start docker"
        cfg.vm.provision "shell", inline: "systemctl enable docker"
    end
end

 

데이터베이스(mariadb) 세팅

mariadb 컨테이너는 ip가 192.168.252.101 인 가상머신에서 실행

docker run -d -p 3306:3306 --name mariadb -e MARIADB_ROOT_PASSWORD=root -e MARIADB_USER=user -e MARIADB_PASSWORD=user -e MARIADB_DATABASE=csapi mariadb:latest

 

 

Django 세팅

가상 환경(venv) 생성 및 가상환경 activate

$ python3 -m venv venv
$ source venv/bin/activate

 

pip 업데이트 및 패키지 설치

$ pip install django mysqlclient

 

django 프로젝트 생성

$ django-admin startproject config .

 

현재 디렉토리 상태

$ tree -L 1
.
├── config
├── manage.py
└── venv

 

settings.py 파일 수정 시작

vi config\settings.py

- allow hosts 수정

ALLOWED_HOSTS = ['*']

 

- database 설정 수정
root를 사용하면 안좋지만, 우선 고려하지 않음

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'csapi',
        'USER': 'root',
        'PASSWORD': 'root',
        'HOST': '192.168.252.101',
        'PORT': '3306'
    }
}

 

Django 테스트

runserver를 이용해 서비스 시작

$ python manage.py runserver 0.0.0.0:8000
Watching for file changes with StatReloader
Performing system checks...

System check identified no issues (0 silenced).

You have 18 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions.
Run 'python manage.py migrate' to apply them.
October 04, 2021 - 02:37:15
Django version 3.2.7, using settings 'config.settings'
Starting development server at http://0.0.0.0:8000/
Quit the server with CONTROL-C.

 

django 서버 접속

 

후기

아직 django를 컨테이너화 하지 않았다. 다음은 컨테이너화를 진행

Comments