サーバーには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 のステートメント実行順序の分析
ffmpeg は非常に強力なオーディオおよびビデオ処理ツールです。公式 Web サイトは http:...
目次序文1. scp2をインストールする2. テスト/本番環境サーバーのSSHリモートログインアカウ...
実装のアイデア: CSSでtext-shadowを使用してテキストの光る効果を実現します効果画像: ...
この記事の例では、WeChatアプレットの検索ボックス機能を実装するための具体的なコードを参考までに...
最近、Microsoft は Docker をネイティブにサポートする Windows Server...
1. protoをコンパイルするすべての .proto ファイルを保存するために、src フォルダー...
1. psshを確認してインストールします。yum list pssh 2. キーレスログインが設定...
目次1. ユニットテストはなぜ必要なのでしょうか? 2. ユニットテストの書き方3. テストツール4...
MySQL バックアップコールドバックアップ:停止服務進行備份,即停止數據庫的寫入ホットバックアップ...
目次プロジェクトの背景改善案データ特性を観察するマルチプロセスアイデアの要約データ処理スキルプロジェ...
需要背景最近、Vue を使用してフロントエンド エンジニアリング システムと組み合わせ、以前のデモを...
例を見てみましょう。コードは次の通り非常にシンプルです。コードをコピーコードは次のとおりです。 &l...
この記事の例では、計算機機能を実装するためのjsの具体的なコードを参考までに共有しています。具体的な...
Bステーションでパスワードを入力するときに目を覆っているこの画像を見たことがある人もいると思いますこ...
目次最初のステップはMySQLをダウンロードすることですステップ2: ダウンロードした圧縮パッケージ...