サーバーにはNginx、データベースサポートにはMongo、Python言語のWebフレームワークにはFlaskを採用しています。Dockerのコンテナ特性を活かし、Linuxサーバー上に簡単に導入できます。 プロジェクト準備 プロジェクトのメインディレクトリは次のとおりです。 __プロジェクト名 |__ docker ファイル |__ ニングス |__ Dockerファイル |__conf |__ nginx.conf |__フラスコ |__ Dockerファイル |__ 要件.txt |__ モンゴ |__ Dockerファイル |__ セットアップ.sh __docker-compose.yml は、 |__ソース |__ アプリ |__ ... |__run.py 簡単な説明 docker-fileディレクトリはdockerデプロイメントの設定ファイルです srcディレクトリはFlaskアプリケーションのPythonコードです Dockerの詳細設定 docker-compose の設定 バージョン: '2.2' サービス: モンゴ: ビルド: ./mongo ボリューム: - 「./mongo/db:/data/db」 再起動: 常に ポート: - 「27017:27017」 環境: MONGO_INITDB_ROOT_USERNAME: ルート MONGO_INITDB_ROOT_パスワード: 123456 フラスコ: ビルド: ./flask リンク: - モンゴ ポート: - 「5000:5000」 さらす: - 「5000」 ボリューム: - ../src:/home/web nginx: ビルド: ./nginx リンク: - フラスコ ボリューム: - 「./nginx/log:/var/log/nginx」 - 「../:/usr/share/nginx/html」 ポート: - 「80:80」 - 「8080:8080」 - 「443:443」 再起動: 常に MongoDB の設定 /mongo/Dockerfileの内容は次のとおりです。 mongo:3.6より # タイムゾーンを設定 ENV TZ=Asia/Shanghai 実行 ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone # 作業ディレクトリを設定する ENV WORKDIR /usr/local/work 環境変数 AUTO_RUN_DIR /docker-entrypoint-initdb.d ENV INSTALL_MONGO_SHELL セットアップ.sh mkdir -p $WORKDIR を実行します。 # データベース初期化コマンドをコピーします COPY ./$INSTALL_MONGO_SHELL $AUTO_RUN_DIR/ chmod +x $AUTO_RUN_DIR/$INSTALL_MONGO_SHELL を実行します。 /mongo/setup.shの内容は次のとおりです このファイルの目的は、MongoDBを起動した後にパスワードtestを持つユーザーtestを作成し、データベースtestに対する読み取りおよび書き込み操作を許可することです。 #!/bin/bash モンゴ <<EOF 管理者を使用します。 db.auth('ルート', '123456'); dmx_aluminum を使用します。 db.createUser({user:'test',pwd:'test',roles:[{role:'readWrite',db:'test'}]}); db.createCollection("ユーザー"); 終了 Flaskアプリケーションの構成 /flask/Dockerfileの内容は次のとおりです。 Python:3.6 から # タイムゾーンを設定 ENV TZ=Asia/Shanghai 実行 ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone # ワークスペースを設定する RUN mkdir -p /home/web ワークディレクトリ /home/web # 依存関係を追加する ADD requirements.txt /home/web/requirements.txt pip3 install -i https://pypi.douban.com/simple/ -r requirements.txt を実行します。 # gunicorn を使用してアプリケーションを起動します CMD gunicorn -w 4 -b 0.0.0.0:5000 run:app /src/app/run.py コード ここではデバッグ用の app.run() がコメントアウトされており、公開時に gunicorn で起動されます。 アプリからインポートcreate_app アプリ = create_app('デフォルト') app.debug=False # __name__ == '__main__' の場合: # アプリを実行() Nginx の設定 /nginx/Dockerfileの内容は次のとおりです nginx:1.14より # タイムゾーンを設定 ENV TZ=Asia/Shanghai 実行 ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone # 設定をコピー COPY conf/nginx.conf /etc/nginx/nginx.conf /nignx/conf/nginx.confの内容は次のとおりです。 ユーザー nginx; ワーカープロセス 1; error_log /var/log/nginx/error.log 警告; pid /var/run/nginx.pid; イベント { ワーカー接続 1024; } http { /etc/nginx/mime.types を含めます。 デフォルトタイプ アプリケーション/オクテットストリーム; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log メイン; ファイル送信オン; #tcp_nopush オン; キープアライブタイムアウト65; # gzipを有効にする gzip オン; gzip_min_length 1k; gzip_バッファ 4 16k; #gzip_http_バージョン1.0; gzip_comp_level 1; gzip_types text/plain application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png; gzip_vary オフ; gzip_disable "MSIE [1-6]\."; サーバー{ 聞く 80; server_name ローカルホスト; キープアライブタイムアウト 5; ルート /usr/share/nginx/html; 場所 /static/ { エイリアス /usr/share/nginx/html/src/app/static/; } 位置 / { # 静的ファイルをチェックし、見つからない場合はアプリへのプロキシ try_files $uri @flask_app; } 場所 @flask_app { proxy_pass http://192.168.0.2:5000; # Alibaba Cloudに公開されている場合、イントラネットIPアドレスを入力する必要があります proxy_redirect オフ; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header ホスト $http_host; proxy_set_header X-Real-IP $remote_addr; #プロキシバッファ 8 32k; #プロキシバッファサイズ64k; } } } 展開を開始する
最後に、docker_file_nginx_1、docker_file_mongo_1、docker_file_flask_1 に似た 3 つのコンテナーが表示され、成功したことを示します。 ! ! 落とし穴と苦情 1 mongolコンテナの初期化ファイルはdocker-entrypoint-initdb.dディレクトリに配置する必要があります。 以下を試してみましたが、mongdb が起動していないことがわかりました。 setup.sh /data/setup.shを追加します chmod +x /data/setup.shを実行します。 コマンド ["/data/setup.sh"] 2 Flask アプリケーションは mongo に接続できません。この記事では、link メソッドを使用します。 データベース構成はそれに応じて記述する必要があります。 MONGODB_SETTINGS = { 'db': 'テスト', 'host': 'mongo', # 127.0.0.1 ホストアドレスは、設定した --link の名前である必要があります 'username': 'test', 'パスワード': 'テスト', 'ポート': 27017 } ローカルテスト中に 127.0.0.1 に戻す 3 nginx設定で使用されるプロキシモード。Flaskアプリケーションを実行するIPはイントラネットIPである必要があります。 以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。 以下もご興味があるかもしれません:
|
>>: SQL と MySQL のステートメント実行順序の分析
RULES を使用すると、テーブルの内部境界のスタイルを制御できます。基本的な構文<TABLE...
以前、raspbian で実行したときに opencv の一部の依存関係をパッケージ化できず、一部の...
この記事では、Vueの簡単なコメント機能を実装するための具体的なコードを参考までに共有します。具体的...
カーネル 2.6 の時代には、アクセス制御セキュリティ ポリシーのメカニズムを提供するために新しいセ...
目次概要例なぜそれが必要なのでしょうか?設定参照、反応的計算して見るライフサイクルVue3.0 は ...
以前、MySQLがローカルでは接続できるのにリモートでは接続できないという問題に遭遇したことがありま...
この記事では、参考までに、ビデオアップロード機能を実現するためのVueの具体的なコードを紹介します。...
Docker サービス アプリケーションを再起動するコマンドを見てみましょう。具体的な内容は次のと...
目次ファイル()文法パラメータ例ブロブ()文法パラメータ財産方法例要約するファイル() File()...
インストールパス: /application/mysql-5.7.18 1. 事前準備MySQL 依...
通常、国喪の日、大地震の日、清明節には、ウェブサイト全体を灰色にして、故人への哀悼の意を表します。そ...
次のコードは、MySQL 5.7.22 バイナリ パッケージのインストール方法を紹介しています。具体...
開発から導入まで自分で行うシングルページアプリケーションを開発する場合、ビルドを実行した後 npm ...
この記事では主に、Web ページ上でデスクトップ exe プログラムを呼び出す方法を紹介します。 W...
序文Linux 運用保守エンジニアとして、日々の業務の中で Linux サーバーの CPU 負荷が ...