Old Branch
[Docker 위의 웹서버] 프로젝트 세팅 (5) - vue 도커라이징
woolbro
2020. 8. 28. 11:10
반응형
GITHUB
paullee714/Flask-Vue-ELK-Mongo-Docker
Structure
아래와 같은 구조로 진행하고 있다. 오늘 작업 할 내용은
docker-compose.yml의 수정과 web/front/front.Dockerfile을 만들어 줄 것이고
동작 확인을 위해 back-front연동을 해 보려고 한다.
├── ELK
│ ├── elasticsearch
│ │ ├── config
│ │ ├── data
│ │ └── elastic.Dockerfile
│ ├── kibana
│ │ ├── config
│ │ └── kibana.Dockerfile
│ └── logstash
│ ├── config
│ ├── logstash.Dockerfile
│ └── pipeline
├── README.md
├── docker-compose.yml
└── web
├── back
│ ├── app.py
│ ├── back.Dockerfile
│ ├── back_lib
│ ├── requirements.txt
│ ├── route
│ ├── util
│ ├── uwsgi.ini
│ └── venv
└── front
├── README.md
├── babel.config.js
├── front.Dockerfile
├── nginx
├── node_modules
├── package.json
├── public
├── src
└── yarn.lock
Dockerfile
Dockerfile을 만드는 목적은 나중에 배포시에 다른 설정 없이 한번에 배포를 하려고 하기 때문이다.
우리의 front는 vue이기 때문에, vue의 production 빌드버전으로 dockerfile을 만들어 주도록 하겠다.
web/front/nginx/nginx.conf
nginx는 vue 배포시에 사용할 엔진이다.
web/front폴더 아래에 nginx를 만들고, 설정파일을 작성 해 주도록 하겠다.
server {
listen 8080;
client_max_body_size 5M;
location / {
alias /usr/share/nginx/html/;
try_files $uri $uri/ /index.html;
}
}
web/front/front.Dockerfile
FROM node as build-stage
MAINTAINER ba93love@gmail.com
WORKDIR /app
ADD . .
RUN yarn install
RUN yarn run build
# production stage
FROM nginx:stable-alpine as production-stage
COPY ./nginx/nginx.conf /etc/nginx/conf.d/default.conf
COPY --from=build-stage /app/dist /usr/share/nginx/html
EXPOSE 8080
CMD ["nginx", "-g", "daemon off;"]
docker-compose setting
front.Dockerfile을 만들었으니, docker-compose파일에 올려서 다른 서비스들과 묶어주도록 하겠다.
docker-compose.yml
version: '3.2'
services:
...(생략)
web-front:
build:
context: web/front/
dockerfile: front.Dockerfile
ports:
- "8080:8080"
expose:
- "8080"
networks:
- elk
networks:
elk:
driver: bridge
- 8080포트를 열어서 외부에서 접속 할 수 있도록 작성 해 주었다.
- dockerfile은 아까 작성 해준 front.Dockerfile을 작성한다.
front-back 연동
flask-cors 설치
플라스크 서버에서 back과 front를 연동하기 위해서는 flask-cors라는 패키지가 필요하다
(venv)$ pip install flask-cors
(venv)$ pip freeze > requirements.txt
web/back/app.py 수정
app.py에 flask-cors를 적용시켜준다
from flask import Flask
from flask_cors import CORS
# route pacakge import
from route.test_route import my_test
app = Flask(__name__)
app.secret_key = 'laksdjfoiawjewfansldkfnzcvjlzskdf'
CORS(app)
# route 등록
app.register_blueprint(my_test)
if __name__ == '__main__':
app.run('0.0.0.0',port=5000,debug=True)
front의 axios 설치
vue에서 데이터 통신을 위한 axios모듈을 설치 해주도록 하겠다
# web/front/에서 진행
# yarn.lock, package.json이 있는곳에서 진행
$ yarn add axios
$ yarn install
front/src/views/About.vue 페이지수정
<template>
<div class="about">
<h1>This is an about page</h1>
<h3>{{ greet }}</h3>
</div>
</template>
<script>
import axios from 'axios';
export default {
name: 'say-hi',
data() {
return {
greet: '',
};
},
methods: {
getGreet() {
let path = 'http://localhost:5000/';
axios.get(path).then(res => {
this.greet = res.data;
});
},
},
created() {
this.getGreet();
},
};
</script>
- 아래의 스크립트 부분을 작성 해 준다
- axios가 localhost:5000에서 받은 데이터를 greet에 저장 해 줌
- created()에서 getGreet함수 실행
docker-compose up!!!!
작성을 완료했으니 실행 해 보자
$ docker-compose up --build -d