サーバーには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 のステートメント実行順序の分析
現在多くの携帯電話には、下部のタブバーを切り替える機能があります。私も最近、同様の機能を見つけました...
1. 機能主にコンポーネントの状態を保持したり、再レンダリングを回避したりするために使用されます。 ...
本日、ローカル開発環境で突然「入力ファイルが指定されていません」というエラーが発生してしまいました。...
sshツールをインストールする1. ターミナルを開き、次のコマンドを入力します。 apt-getアッ...
1: <a> タグを使用してページにリンクする場合、target 属性の役割は誰もが知っ...
NULL が頻繁に使用されるのはなぜですか? (1)Javaのnull Java の NullPoi...
このプロジェクトでは MySQL を使用する必要があります。これまで Windows では常に確実に...
MySQL 5.7.27のインストールチュートリアルは以下のように記録され、皆さんと共有されています...
MySQL の漢字ソートの詳細な説明デフォルトでは、MySQL は日付、時刻、および英語の文字列の並...
これからの道のりは長く困難ですが、私は探求を続けます。また週末がやってきました。引き続き、皆さんと一...
ドロップダウン メニューも実生活では非常に一般的です。実装に使用される js コードは、タブ選択やア...
IPマスカレードとポート転送Firewalldは2種類のネットワークアドレス変換をサポートしています...
原因最近、プロジェクトのリファクタリングを始めたのですが、マスタースレーブと読み取り書き込み分離を使...
CSS には、一般的には使用されない 2 つの疑似クラス、before と :after があります...
CentOS にはデフォルトで MariaDB がインストールされていますが、これは MySQL の...