サーバーには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 のステートメント実行順序の分析
昨日プロジェクトを書いていた時に、MySQL の派生版である Percona を使う必要があったので...
1) 適用範囲:読み取り専用:input[type="text"],input[...
序文TCP サーバの最大同時接続数に関して、「ポート番号の上限が 65535 であるため、TCP サ...
<br /> テキスト、シンボル、リンクの 3 つの側面に焦点を当て、主に中国語で、私の...
方法1コードをコピーコードは次のとおりです。 document.getElementById(&qu...
以前、動的フォームを記述しているときに落とし穴に遭遇しました。インデックスの添え字をキーとして使用す...
フロントエンドのデザイン案では、「X」や「>」の形をした閉じるボタンや、他の 3 方向の白抜き...
CSS3 構文: (750 ピクセルのデザインの場合、1rem = 100 ピクセル) @media...
任意のウェブページを開きます。例: http://www.baidu.com/ ブラウザのタブのヘッ...
CSSを使用してスクロールバーを変更する1.コンテンツがオーバーフローした場合のオーバーフロー設定水...
独自のWebプロジェクトをtomcatディレクトリの下のwebappsディレクトリに配置します。 R...
この記事では、MySQL 5.6.23のインストールと設定のチュートリアルを参考までに紹介します。具...
この記事では、主にリスト構造を使用して水平ナビゲーション構造を設定する 2 つの方法を紹介します。こ...
この記事では、ウェブページのスネークゲームを実装するためのJavaScriptの具体的なコードを参考...
最近、私は「ぶどうコレクション」というプロジェクトに取り組んでいます。簡単に言うと、Budou ペー...