【Vue + Flask環境構築】Dockerでクライアントとサーバーを立ち上げよう!

Vue+Flask環境構築

こんにちは!今回は、Vue.jsFlask の環境を Docker を使って構築する方法について紹介します。Vue.jsはフロントエンド、Flaskはバックエンドのフレームワークとして使い、両者をDockerで一緒に動かすことで、効率的に開発を進めることができます。

この手順を通じて、Dockerを使ったコンテナの立ち上げから、実際にVueとFlaskの連携までを解説しますので、ぜひ参考にしてください!

1. Docker環境の準備

まず、プロジェクトのルートディレクトリに docker-compose.yml を作成します。このファイルで、FlaskとVueのコンテナを管理します。

docker-compose.yml

version: "3"
services:

  flask:
    build:
      context: .
      dockerfile: dockerfile_python
    container_name: flask_container
    working_dir: /usr/src/app/backend
    tty: true
    volumes:
      - ./:/usr/src/app
    ports:
      - "5000:5000"
    command: python app.py

  vue:
    build:
      context: .
      dockerfile: dockerfile_node
    container_name: vue_container
    tty: true
    volumes:
      - ./:/usr/src/app
    working_dir: /usr/src/app/frontend
    ports:
      - "8083:8083"
    depends_on:
      - flask
    command: yarn run serve

この構成では、FlaskとVueそれぞれにDockerfile を指定しています。最初にコンテナを立ち上げる際には、FlaskとVueのcommand部分はコメントアウトしておくと良いです。

Dockerfileの作成

次に、Flask用とVue用にそれぞれ Dockerfile を作成します。

dockerfile_python(Flask用)

FROM python:3.9

WORKDIR /usr/src/app

COPY ./ /usr/src/app

RUN pip install --upgrade pip && \
    pip install flask && \
    pip install flask-cors

dockerfile_node(Vue用)

FROM node:16.13.0

WORKDIR /usr/src/app

COPY ./ /usr/src/app

RUN npm init -y&& \
    npm install && \
    npm install -g @vue/cli && \
    npm install axios

注意点:最初に npm init を実行しないと、package.json が作成されないのでエラーになります。

コンテナの立ち上げ

次に、ターミナルで以下のコマンドを実行してコンテナを立ち上げます。

docker-compose up

もしエラーがなければ、コンテナが正しく立ち上がったことになります。ここまでが準備段階です。

2. Vueのセットアップ

次に、Vue.jsのプロジェクトをセットアップします。コンテナ内で作業を進めるために、まずコンテナのシェルに入ります。

シェルに入ったら、以下のコマンドでVueプロジェクトを作成します。

vue create frontend

プロジェクトが作成されたら、vue.config.js でポートを変更します。

const { defineConfig } = require("@vue/cli-service")
module.exports = defineConfig({
  transpileDependencies: true,
  devServer: {
    port: 8083, // 任意のポート番号
  },
})

これで、Vueの開発サーバーを立ち上げる準備が整いました。次にビルドしてサーバーを立ち上げます。

npm run build
npm run serve

ローカルの http://localhost:8083 にアクセスすると、Vueのプロジェクトが表示されるはずです。

3. Flaskのセットアップ

次はバックエンドのFlaskをセットアップします。Vueのセットアップが終わったら、Flask用のコンテナに入って作業を行います。

docker exec -it flask_container /bin/bash

コンテナ内で、以下のコマンドで backend フォルダを作成し、app.py を作成します。

mkdir backend
cd backend
touch app.py

app.py に以下のコードを追加します。ここでは、Vueでビルドした静的ファイルをFlaskで提供する設定を行っています。

from flask import Flask, render_template, jsonify
from flask_cors import CORS
from random import *

app = Flask(__name__, static_folder="../frontend/dist/static", template_folder="../frontend/dist")

app.config.from_object(__name__)

CORS(app)

@app.route('/', defaults={'path': ''})
@app.route('/<path:path>')
def index(path):
    return render_template("index.html")

if __name__ == '__main__':
    app.run(host='0.0.0.0', debug=True)

これでFlaskのバックエンドがセットアップできました。python app.py を実行して、サーバーを立ち上げます。

vue側も起動した状態で、127.0.0.1:5000にアクセスすると

この画面が表示されればOKです。

4. Docker Composeの設定

最後に、docker-compose.yml でFlaskとVueのcommand部分を追加して、自動ビルドができるように設定します。

 flask:
    command: python app.py

  vue:
    command: yarn run serve

再度コンテナを立ち上げ直すと、VueとFlaskが連携して動作するようになります。

まとめ

これで、Docker環境を使ってVue.js(フロントエンド)とFlask(バックエンド)を一緒に立ち上げることができました。コンテナを使うことで、開発環境を統一でき、効率よく作業を進めることができます。

これからこの環境を使って、LIFFアプリの制作をやってみたいと思っています!

参考文献

コメント