こんにちは、
自分の努力をどこに集中すべきかについてのガイダンスを探しています。私はこれらのウサギの穴を降り続け、探している道が見つからないようです。
私はいくつかの小さな内部Djangoアプリを開発しましたが、より動的なフロントエンドのためにVueJSをミックスに統合したいと考えています。
私の目標は:
私の質問/懸念:
私が新しい領域に挑戦し続けるので、あなたのすべての指導に感謝します。
ケビン
私はDjango/Vueを使用してきましたが、これは私が行うことです:
ここから2つの開発サーバーを起動できます。1つはDjango用で、もう1つはVue用です。
python manage.py runserver
別のターミナルで:
npm run serve
Vue thisで私のAPIを使用するために、この構成をvue.config.js
で使用します:
module.exports = {
baseUrl: process.env.NODE_ENV === 'production'
? '/static/'
: '/',
outputDir: '<PROJECT_BASE_DIR>/static',
indexPath: '../templates/index.html',
filenameHashing: false,
devServer: {
proxy: {
'/api': {
target: 'http://localhost:8000'
}
}
},
}
devServer
はリクエストをAPIにリダイレクトし、outputDir
およびindexPath
はアプリをプロジェクトのフォルダーにビルドするのに役立ちます<PROJECT_BASE_DIR>/templates/
および<PROJECT_BASE_DIR>/static/
次に、TemplateView
を作成し、template_name
をindex.html
(Vueによって作成されたファイル)に設定します。これにより、Djangoビュー/テンプレート。
このアプローチでは、DjangoのDockerコンテナーを使用できます。
これにより、継続するための基本的なガイダンスが得られると思います。
アレハンドロ
私はDjango + Vueプロジェクトをセットアップする方法を示すプロジェクトに取り組んでいます。これはverbose-equals-true
(- https://verbose-equals-true.tk )。このプロジェクトのソースコードは、こちらから入手できます: https://gitlab.com/briancaffey/verbose-equals-true
ここに、私が生産のためにプロジェクトをどのように構成しているかの概要があります。このプロジェクトでは、Docker Composeを使用して、本番用と開発用のさまざまなコンテナーを調整します。
Django/Vue/dockerの使用方法について質問がある場合はお知らせください。 https://verbose-equals-true.tk/docs に詳細な説明があるドキュメントがあります。
ここにあなたの質問/懸念に関するいくつかの考えがあります:
Vueアプリをドッキングする方法についてのVueJSからの公式の推奨事項、およびpostgres + Djangoアプリをドッキングする方法についてのDockerからの公式の例から始めました。おそらくすべてを同じコンテナーに入れることができますが、モジュール化して明確にする方法として、物事を分離することが好きです。
私はdjangorestframework_jwtパッケージでの認証にJWTを使用しています。組み込みのDjango認証システムとDjango adminを使用することもできます。
別々のコンテナを持つことは理にかなっていると思います。開発では、Vueアプリを実行しているnpm run serve
を実行しているノードコンテナーからアプリを提供できます。本番環境では、nginxコンテナーから本番アプリの静的ファイルを提供できます(これにはマルチステージビルドを使用できます)部)。
私はすべてをコンテナーに保持し、Dockerエンジン以外のサーバーには何もありません。これにより、セットアップが簡略化され、アプリケーションを展開する場所に移植できるようになります。別々にしておくのが理にかなっているのは、postgresデータベースだけです。多くの場合、AWS RDSなどのマネージドデータベースサービスに接続する方がはるかに簡単ですが、Dockerホストマシンでpostgresコンテナを実行して、物事をさらにシンプルにすることもできます。これは、自分でバックアップを行う必要があるため、Dockerボリュームに精通している必要があります。