Skip to content

Latest commit

 

History

553 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

오디가지

개발환경

각각의 서버에서 사용되는 라이브러리 등의 세부 정보는 README_front, back 을 참조해주세요.

Frontend

  • Node:16.0.1, React:17.0.2
  • URL : j6b103.p.ssafy.io

Backend

  • Framework : Python : 3.9.6, Django : 4.0.3, djangorestframework : 3.13.1
  • IDE: Visual Studio Code : latest, Pycharm Pro : 2021.3.1
  • URL : j6b103.p.ssafy.io:8000
  • git에 등록하지 않은 파일 : https 인증키

DB

  • DB : MySQL : 8.0.28
  • Management : MySQL Workbench : 8.0.26
  • User : name : root, password : ssafy103
  • URL : 3.38.250.117:3333

Datas

프로젝트 메인 폴더에 있는 Datas 폴더에는, 서비스를 구성하는데 사용한 데이터들과 데이터를 전처리, db에 입력하는데 사용한 python 프로그램들이 있습니다.

실행

# backend 폴더에서
pip install -r requirements.txt
python manage.py runserver	# 기본은 8000번 포트로 실행

# frontend 폴더에서
npm install
npm start  # 기본은 3000번 포트로 실행

자세한 내용은 README_front, back 을 참조해주세요.

배포

배포 구조

image-20220406160524871

  • 프론트엔드는 리액트, 백엔드는 쟝고, DB는 MySQL을 활용했다.
  • 배포를 위해서 위 세가지 서버를 AWS EC2 서버 위에 Docker를 통해 올려두고 쟝고 서버와 MySQL 서버를 연결했다.
  • AWS에 NGINX를 설치하고 certbot을 이용해 letenscrypt 인증을 받았다.
  • ssl 인증을 받은 nginx에 리액트 서버와 쟝고 서버를 연결했다.

Nginx config

# http로 들어온 요청을 https쪽으로 리다이렉트하기 위한 설정
server {
        location / {
                return 301 https://j6b103.p.ssafy.io$request_uri;
        }
}
# 도메인으로 들어온 요청을 3000번 포트(리액트 서버)로 연결하는 설정
server {

        server_name j6b103.p.ssafy.io
        listen 80 default_server;
        listen [::]:80 default_server;

        listen 443 ssl default_server;
        listen [::]:443 ssl default_server;
				# 인증받은 ssl키와 연결
        ssl_certificate /etc/letsencrypt/live/j6b103.p.ssafy.io/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/j6b103.p.ssafy.io/privkey.pem;

        ssl_session_cache shared:SSL:1m;
        ssl_session_timeout 10m;
        ssl_ciphers HIGH:!aNULL:!MD5;
        ssl_prefer_server_ciphers on;

        root /var/www/html;

        # Add index.php to the list if you are using PHP
        index index.html index.htm index.nginx-debian.html;

        server_name j6b103.p.ssafy.io;
        location / {
                proxy_pass http://j6b103.p.ssafy.io:3000/;

                proxy_http_version 1.1;
                proxy_set_header Upgrade $http_upgrade;
                proxy_set_header Connection "upgrade";

                proxy_set_header X-Real_IP $remote_addr;
                proxy_set_header X-Fowarded-For $proxy_add_x_forwarded_for;
                proxy_set_header Host $host;
        }
   
}

배포 과정

Backend

FROM python:3.9.6
ENV PYTHONDONTWRITEBYTECODE=1
ENV PYTHONUNBUFFERED=1
WORKDIR /code
COPY requirements.txt /code/
RUN pip install -r requirements.txt
COPY . /code/
EXPOSE 8000

CMD ["python3", "manage.py", "runsslserver", "--certificate", "./fullchain.pem", "--key", "./privkey.pem", "0.0.0.0:8000"]
  • https를 사용하기에 백서버에도 인증키를 두고 django-sslserver를 사용하여 실행하였다.

Frontend

# Dockerfile 
FROM node:16.13.1-alpine
# set working directory
WORKDIR /app

ENV PATH /app/node_modules/.bin:$PATH

# install app dependencies
COPY package.json ./
COPY package-lock.json ./

COPY /package.json /app/package.json
RUN npm install

# add app
COPY /. ./

# start app
CMD ["npm", "run", "deploy_start"]
// package.json
...
  "scripts": {
    "start": "react-scripts start",
    "deploy_start": "cross-env REACT_APP_ENV=production react-scripts start",
    ...
  },
...
// server.js
const server = {
  BASE_URL: 'http://localhost:8000',
	...
};

if (process.env.REACT_APP_ENV === 'production') {
  server.BASE_URL = 'https://j6b103.p.ssafy.io:8000';
}
...
  • server.jsdeploy_start라는 스크립트를 만들어 두고, 이 명령어로 실행할 경우 로컬 쟝고 서버가 아닌 배포되어 있는 쟝고 서버를 사용하도록 해두었다.
  • 도커파일에서 실행시 deploy_start를 사용하게 해두었다.

진행

  • 쟝고와 리액트 서버를 각각 로컬환경에서 docker 이미지로 빌드한 뒤, docker hub를 이용해 aws에서 이미지를 받아와 실행했다.
  • jenkins를 통해 깃과 aws상의 젠킨스를 연동하는 데까지는 성공했으나, 이후 진행을 위해서는 기존 배포 구조에 큰 수정이 필요하여 젠킨스 사용은 중단했다.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages