(2018年版)
ミゲル・グリンバーグ
これは、Flask Mega-Tutorialsシリーズの17番目のパートで、Linuxサーバーにマイクロブログを展開します。
ネタバレの下には、この2018年シリーズのすべての記事のリストがあります。
- 第1章:Hello world!
- 第2章:テンプレート
- 第3章:Webフォーム
- 第4章:データベース
- 第5章:ユーザーログイン
- 第6章:プロフィールページとアバター
- 第7章:エラー処理
- 第8章:サブスクライバー、連絡先、およびフレンド
- 第9章:ページネーション
- 第10章:メールサポート
- 第11章:再構成
- 第12章:日付と時刻
- 第13章:I18nおよびL10n
- 第14章:Ajax
- 第15章:アプリケーション構造の改善
- 第16章:全文検索
- 第17章:Linuxでの展開 (この記事)
- 第18章:Herokuでの展開
- 第19章:Dockerコンテナーでの展開
- 第20章:JavaScriptマジック
- 第21章:ユーザー通知
- 第22章:バックグラウンドタスク
- 第23章:アプリケーションプログラミングインターフェイス(API)
注1:このコースの古いバージョンをお探しの場合は、こちらをご覧ください 。
注2:私(ミゲル)の仕事を支持して突然声をかけたい場合、または1週間記事を待つ忍耐がない場合、私(ミゲルグリーンバーグ)はこのガイドの完全版(英語)を電子書籍またはビデオの形式で提供します。 詳細については、 learn.miguelgrinberg.comをご覧ください 。
この章は、実際のユーザーがアクセスできるように運用サーバーに展開する方法について説明するときが来たため、私のマイクロブログアプリケーションの人生における重要なマイルストーンです。
展開のトピックは広範囲にわたるため、1つの章ですべての可能なオプションを網羅することはできません。 この章は、従来のホスティングオプションの研究に専念しており、研究の対象として、Ubuntuを実行する専用のLinuxサーバーと、広く普及しているミニコンピューターRaspberry Piを使用します。 クラウドやコンテナの展開など、その他のオプションについては、後の章で説明します。
この章のGitHubリンク: Browse 、 Zip 、 Diff 。
従来のホスティング
「従来のホスティング」とは、アプリケーションが手動でインストールされるか、通常のサーバーのスクリプトインストーラーによってインストールされることを意味します。 このプロセスには、アプリケーション、その依存関係、実稼働規模のWebサーバーのインストール、およびセキュリティシステムの構成が含まれます。
独自のプロジェクトを展開するときに尋ねる最初の質問は、サーバーの場所です。 最近では多くの安価なホスティングサービスがあります。 たとえば、月5ドルで、 Digital Ocean 、 Linode、またはAmazon Lightsailは、展開実験のために仮想Linuxサーバー(VPS)をレンタルします。 (LinodeとDigital Oceanは、エントリーレベルのサーバーに1 GBのRAMを提供しますが、Amazonは512 MBのみを提供します)。 お金をかけずに練習したい場合は、 VagrantとVirtualBoxの 2つのツールを組み合わせて使用することで、自分のコンピューター上で有料サーバーなどの仮想サーバーを作成できます。
オペレーティングシステムの選択に関しては、技術的な観点から、このアプリケーションは、主要なオペレーティングシステム、多数のLinuxおよびBSDオープンソースディストリビューション、商用OS XおよびMicrosoft Windows( OS Xは、オープンソースBSDの派生物であるDarwinに基づいているため、オープンソースと商用のハイブリッド型です。
OS XとWindowsは、サーバーとしての運用に最適化されていないデスクトップオペレーティングシステムであるため、このような候補はすぐに拒否します。 LinuxまたはBSDの選択は主に設定に基づいているため、2つのうち最も人気のあるLinuxを選択します。 Linuxディストリビューションに関しては、人気を選んでUbuntuを継続するのは公平だと思います。
Ubuntuサーバー
私と一緒にこの展開に興味があるなら、明らかにサーバーが必要です。 サーバーを取得するには、有料と無料の2つのオプションをお勧めします。 お金を払っても構わない場合は、Digital Ocean、Linode、またはAmazon Lightsailでアカウントを取得し、Ubuntu 16.04仮想サーバーを作成できます。 最小のサーバーバージョンを使用すれば十分です。このフレーズを書いている今日、上記リストの3つのプロバイダーすべてで月額5ドルです。 支払いは1時間ごとです。そのため、サーバーを作成し、それを数時間操作してから削除すると、セントでのみ支払うことになります。
無料の代替手段は、自分のコンピューターで実行できる仮想マシンに基づいています。 このオプションを使用するには、 VagrantとVirtualBoxをコンピューターにインストールし、 Vagrantfileというファイルを作成して、次の内容で仮想マシンの仕様を記述します。
Vagrantfile :Vagrant設定。
Vagrant.configure("2") do |config| config.vm.box = "ubuntu/xenial64" config.vm.network "private_network", ip: "192.168.33.10" config.vm.provider "virtualbox" do |vb| vb.memory = "1024" end end
このファイルは、Ubuntu 16.04サーバーを1 GBのRAMで構成し、そこからIPアドレス192.168.33.10のホストコンピューターからアクセスできます。 サーバーを作成するには、次のコマンドを実行します。
$ vagrant up
Vagrant コマンドラインドキュメントでは、仮想サーバーを管理するための他のオプションについて学習します。
SSHクライアントを使用する
サーバーはコンソールなので、自分のコンピューターのようなデスクトップはありません。 SSHクライアントを介してサーバーに接続し、コマンドラインを使用して作業する必要があります。 LinuxまたはMac OS Xを使用している場合は、ほとんどの場合OpenSSHがすでにインストールされています。 Linux用のMicrosoft Windows、 Cygwin 、 Git 、およびWindows Subsystemを使用する場合は、OpenSSHを使用する機能も提供されるため、これらのオプションをインストールできます。
サードパーティの仮想サーバーを使用している場合、サーバーの作成時にIPアドレスが提供されました。 次のコマンドを使用して、新しいサーバーとのターミナルセッションを開くことができます。
$ ssh root@<server-ip-address>
パスワードの入力を求められます。 サービスによっては、サーバーの作成後にパスワードが自動的に生成されて表示される場合があります。または、ユーザー自身がパスワードを選択する機会を与えている場合もあります。
Vagrant VMを使用している場合、次のコマンドでターミナルセッションを開くことができます。
$ vagrant ssh
WindowsとVagrant VMを使用している場合、シェルから上記のコマンドを実行する必要があることに注意してください。シェルはOpenSSHからssh
コマンドを呼び出すことがssh
。
パスワードなしでログイン(パスワードなし)
Vagrant VMを使用している場合、Vagrantからの自動パスワードなしでubuntu
という名前の非ルートアカウントを使用するように仮想マシンが正しく構成されているため、このセクションをスキップできます。
仮想サーバーを使用する場合、通常のユーザーアカウントを作成して展開作業を実行し、パスワードを使用せずにログインするようにこのアカウントを構成することをお勧めします(パスワードなし)。これは最初は悪い判断に思えるかもしれませんが、より便利であるだけでなく、より安全です。
ubuntu
というユーザーアカウントを作成します(必要に応じて別の名前を使用できます)。 このアカウントを作成するには、前のセクションのssh
指示を使用してサーバーのルートアカウントにログインし、次のコマンドを入力してユーザーを作成し、 sudo
権限を付与して、最後に切り替えます。
$ adduser --gecos "" ubuntu $ usermod -aG sudo ubuntu $ su ubuntu
次に、パスワードを入力せずにログインできるように、 公開キー認証を使用するようにこの新しいubuntu
アカウントを設定します。
サーバーで開いたターミナルセッションを終了し、ローカルコンピューターで2番目のターミナルを実行します。 Windowsを使用する場合は、 ssh
コマンドにアクセスできる端末である必要があります。したがって、おそらくネイティブのWindows端末ではなく、 bash
または同様のプロンプトになります。 このターミナルセッションで、 〜/ .sshディレクトリの内容を確認します 。
$ ls ~/.ssh id_rsa id_rsa.pub
上記のように、ディレクトリリストにid_rsaおよびid_rsa.pubという名前のファイルがある場合、すでにキーがあります。 これらの2つのファイルがない場合、または〜/ .sshディレクトリがない場合は、OpenSSHツールキットにも含まれている次のコマンドを実行して、独自のSSHキーペアを作成する必要があります。
$ ssh-keygen
このアプリケーションでは、いくつかの値を入力するよう求められますが、すべてのプロンプトでEnterキーを押してデフォルト値を受け入れることをお勧めします。 自分が何をしているかを知っていて、そうでない場合は、彼らが言うように、旗はあなたの手にあります。
このコマンドを実行すると、上記の2つのファイルが作成されます。 id_rsa.pubファイルは公開鍵公開鍵であり、識別のために第三者に提供するファイルです。 id_rsaファイルは秘密鍵であり、誰とも共有されない秘密鍵です。
ここで、公開キーをサーバー上の承認済みホストとして構成する必要があります。 コンピューターで開いた端末画面に公開キーを印刷します。
$ cat ~/.ssh/id_rsa.pub ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCjw....F8Xv4f/0+7WT miguel@miguelspc
これは非常に長い文字列であり、複数行にわたる可能性があります。 このデータをクリップボードにコピーしてから、リモートサーバー上のターミナルに切り替える必要があります。ここで、公開キーを保存するためにこれらのコマンドが発行されます。
$ echo <paste-your-key-here> >> ~/.ssh/authorized_keys $ chmod 600 ~/.ssh/authorized_keys
これで、パスワードなしで機能するはずです。 アイデアは、秘密鍵を必要とする暗号化操作を実行することにより、コンピューター上のssh
がサーバー上で自身を識別することです。 サーバーは、公開キーを使用して操作が有効であることを確認します。
これで、 ubuntu
セッションからログアウトし、次にroot
セッションからログアウトできます。次に、以下を使用して、 ubuntu
アカウントに直接ログインしてみます。
$ ssh ubuntu@<server-ip-address>
今回はパスワードを入力する必要はありません!
サーバー保護
サーバーハッキングのリスクを最小限に抑えるために、攻撃者がアクセスできる多くの潜在的なドアを閉じることを目的としたいくつかの手順を実行できます。
最初に行う必要がある変更は、SSHを介したルートログインを無効にすることです。 これで、 ubuntu
アカウントにパスワードなしでアクセスでき、 sudo
を介してそのアカウントからadminコマンドを実行できるため、rootアカウントを提供する必要はありません。 ルートログインを無効にするには、サーバー上の/ etc / ssh / sshd_configファイルを編集する必要があります。 おそらくvi
とnano
(テキストエディター)がサーバーに既にインストールされており、それらを使用してファイルを編集できます(これらのいずれかに慣れていない場合は、まずnano
試してください)。 通常のユーザーはSSH設定にアクセスできないため、sudoを使用してエディターのプレフィックスが必要になります(例: sudo vi /etc/ssh/sshd_config
)。 このファイルの1行を変更する必要があります。
/ etc / ssh / sshd_config :ルートログインを無効にします。
PermitRootLogin no
SSH構成の編集が完了したら、変更を有効にするためにサービスを再起動する必要があります。
$ sudo service ssh restart
行う必要がある3番目の変更は、ファイアウォールをインストールすることです。 これは、明示的に許可されていないポートでサーバーへのアクセスをブロックするソフトウェアです。
$ sudo apt-get install -y ufw $ sudo ufw allow ssh $ sudo ufw allow http $ sudo ufw allow 443/tcp $ sudo ufw --force enable $ sudo ufw status
これらのコマンドは、単純なファイアウォールであるUFWをインストールし、ポート22(SSH)、80(http)、および443(HTTPS)でのみ外部トラフィックを許可するように構成します。 他のポートはすべて閉じられます。
基本依存関係の設定
私のアドバイスに従い、Ubuntu 16.04にサーバーをインストールした場合、Python 3.5を完全にサポートするシステムが既にあります。これをデプロイに使用します。
そのため、ベースのPythonインタープリターはサーバーにプリインストールされていると考えていますが、欠落している可能性が高い追加のパッケージがいくつかあり、Python以外にも、信頼性の高い、すぐに使用できる展開を作成するのに役立つ他のパッケージがいくつかあります。 データベースサーバーについては、SQLiteからMySQLに切り替えます。 postfixは、メールの送信に使用するメール転送エージェントです。 スーパーバイザツールはFlaskサーバープロセスを監視し、クラッシュした場合やサーバーが再起動した場合は自動的に再起動します。 nginxサーバーは、外部からのすべてのリクエストを受け入れ、それらをアプリケーションにリダイレクトします。 最後に、gitリポジトリからアプリケーションを直接ダウンロードするためのツールとしてgitを使用します。
$ sudo apt-get -y update $ sudo apt-get -y install python3 python3-venv python3-dev $ sudo apt-get -y install mysql-server postfix supervisor nginx git
これらの設定はほとんど無人で開始されますが、ある時点で、3番目のインストールステートメントで、MySQLサービスのルートパスワードを選択するように求められ、値を取得できる回答で、postfixパッケージのインストールに関するいくつかの質問が求められますデフォルトで。
この展開では、Elasticsearchをインストールしないことに注意してください。 このサービスには大量のRAMが必要であるため、2 GBを超えるメモリを備えた大規模なサーバーがある場合に実行可能です。 サーバーのメモリ不足の問題を回避するために、検索機能はそのままにします。 サーバーが十分に大きい場合は、Elasticsearch Webサイトから公式の.debパッケージをダウンロードし、インストール手順に従ってサーバーに追加できます。 もう一つの重要なポイント! Ubuntu 16.04パッケージリポジトリにあるElasticsearchパッケージは古すぎて機能しないため、バージョン6.x以降が必要です。
デフォルトでpostfixをインストールするだけでは、実稼働環境で電子メールを送信するにはおそらく十分ではないことにも注意してください。 スパムや悪意のある電子メールを回避するために、多くのサーバーでは、送信者サーバーがセキュリティ拡張機能で自身を識別する必要があります。つまり、少なくとも、サーバーに関連付けられたドメイン名が必要です。 標準のセキュリティテストに合格するようにメールサーバーを完全に構成する方法を知りたい場合は、次のDigital Oceanのマニュアルを参照してください。
アプリケーションのインストール
次に、GitHubリポジトリからMicroblogソースコードをダウンロードするためにgit
を使用します。 gitバージョン管理に慣れていない場合は、初心者向けにgitを読むことをお勧めします。
翻訳者注:ロシア語でGitを学習するための3つの優れたガイド:
- Gitのシンプルなガイドは、シンプルなgitチュートリアルです。 しかし、一部の人にとっては、この資料では十分ではないかもしれません。すべてが非常に簡潔に説明されており、主要な点だけが説明されているからです。
- Pro Gitは包括的なGitブックで、Amazonで購入したり、オンラインで読んだり、無料でダウンロードしたりできます。
- Git How Toは、Gitの基本を紹介するインタラクティブツアーです。 ツアーは、何かを学ぶ最良の方法は自分でやることであるという理解の下に作成されました。
アプリケーションをサーバーにダウンロードするには、 ubuntu
ユーザーのホームディレクトリにいることを確認してから実行します。
$ git clone https://github.com/miguelgrinberg/microblog $ cd microblog $ git checkout v0.17
この一連のコマンドは、サーバーにコードをインストールし、この章と同期します。 このトレーニングコードのバージョンをgitリポジトリで維持している場合、リポジトリURLを自分のものに変更できます。その場合、git checkoutコマンドをスキップできます。
ここで、仮想環境を作成し、すべてのパッケージの依存関係を設定する必要があります。これは、便宜上、 第15章の要件.txtファイルに保存しました。
$ python3 -m venv venv $ source venv/bin/activate (venv) $ pip install -r requirements.txt
requirements.txtの一般的に必要なパッケージに加えて、この環境にのみ適用される2つのパッケージを使用するため、これらは要件ファイルには含まれていません。 gunicorn
パッケージは、Pythonアプリケーション用のWebサーバーです。 pymysql
パッケージには、SQLAlchemyがMySQLデータベースを操作できるようにするMySQLドライバーが含まれています。
(venv) $ pip install gunicorn pymysql
必要なすべての環境変数を含む.envファイルを作成する必要があります。
/home/ubuntu/microblog/.env :環境設定。
SECRET_KEY=52cb883e323b48d78a0a36e8e951ba4a MAIL_SERVER=localhost MAIL_PORT=25 DATABASE_URL=mysql+pymysql://microblog:<db-password>@localhost:3306/microblog MS_TRANSLATOR_KEY=<your-translator-key-here>
この.envファイルは 、 第15章で示した例と少し似ていますが 、SECRET_KEYにランダムな行を使用しました。 ランダムな文字列を生成するには、次のコマンドを使用しました。
python3 -c "import uuid; print(uuid.uuid4().hex)
DATABASE_URL
変数に対して、MySQL URLを定義しました。 次のセクションでデータベースの設定方法を紹介します。
FLASK_APP
コマンドを機能させるには、 FLASK_APP
環境FLASK_APP
をアプリケーションエントリポイントに設定する必要がありますが、この変数は.envファイルを解析する前に定義する必要があるため、手動で設定する必要があります。 これを毎回行う必要がないように、 ubuntu
アカウントの〜/ .profileの最後に追加するので、ログインするたびに自動的にインストールされます。
$ echo "export FLASK_APP=microblog.py" >> ~/.profile
ログアウトして戻る場合、FLASK_APPの値はすでに設定されています。 flask --help
を使用して、値が定義されていることを確認できflask --help
。 サポートメッセージに、アプリケーションによって追加されたtranslate
コマンドが示されている場合は、アプリケーションが見つかりました。
そして、 flask
コマンドが機能するようになったので、言語翻訳をコンパイルできます。
(venv) $ flask translate compile
MySQLセットアップ
開発中に使用したsqliteデータベースは単純なアプリケーションに最適ですが、同時に複数のクエリを処理できる可能性がある本格的なWebサーバーを展開する場合は、より信頼性の高いDBMSを使用することをお勧めします。 このため、MySQLデータベースを作成します。これをmicroblog
と呼びます。
データベースサーバーを管理するには、サーバーに既にインストールされているmysql
コマンドを使用します。
$ mysql -u root -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 6 Server version: 5.7.19-0ubuntu0.16.04.1 (Ubuntu) Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql>
MySQLのインストール時に選択したMySQLルートパスワードを入力して、MySQLコマンドラインにアクセスする必要があることに注意してください。
これらは、 microblog
と呼ばれる新しいデータベースと、そのデータベースへのフルアクセスを持つ同じ名前のユーザーを作成するコマンドです。
mysql> create database microblog character set utf8 collate utf8_bin; mysql> create user 'microblog'@'localhost' identified by '<db-password>'; mysql> grant all privileges on microblog.* to 'microblog'@'localhost'; mysql> flush privileges; mysql> quit;
<db-password>
選択<db-password>
パスワードに置き換える必要があります。 これは、 microblog
データベースユーザーのパスワードであるため、rootユーザーのパスワードとは異なることが正しいでしょう。 microblog
ユーザーのパスワードは、 .envファイルのDATABASE_URL
変数に含まれるパスワードと一致する必要があります。
データベース構成が正しい場合、すべてのテーブルを作成するデータベース移行を実行できます。
(venv) $ flask db upgrade
先に進む前に、上記のコマンドがエラーなしで完了したことを確認してください。
Gunicornとスーパーバイザーを構成する
Flask flask run
コマンドでサーバーを起動すると、Flaskに付属のWebサーバーを使用します。 このサーバーは開発時に役立ちますが、パフォーマンスと信頼性を考慮して構築されていないため、実稼働サーバーでの使用には適していません。 この展開用のFlask開発サーバーの代わりに、純粋なPython Webサーバーでもあるgunicornを使用することにしましたが、Flaskとは異なり、多くの人が使用する信頼性の高い運用サーバーであり、同時に非常に使いやすいです。
gunicornでマイクロブログを開始するには、次のコマンドを使用できます。
(venv) $ gunicorn -b localhost:8000 -w 4 microblog:app
-b
オプションは、内部ネットワークインターフェイスのポート8000が要求をリッスンするように設定されていることをgunicornに伝えます。 通常、外部アクセスなしでPython Webアプリケーションを実行し、クライアントからのすべての要求を受け入れる静的ファイルを提供するように最適化された非常に高速なWebサーバーを使用することをお勧めします。 この高速Webサーバーは静的ファイルを直接提供し、アプリケーション向けのリクエストを内部サーバーにリダイレクトします。 次のセクションで、パブリックサーバーとしてnginxを構成する方法を示します。
-w
は、gunicornで動作するワークフローの数を決定します 。 4つのプロセスが存在するため、アプリケーションは一度に最大4つのクライアントを処理できます。これは通常、Webアプリケーションが適切な数のクライアントを処理するのに十分です。 サーバーで使用可能なRAMの量によっては、メモリが不足しないようにプロセスの数を構成する必要がある場合があります。
microblog microblog:app
引数は、gunicornにアプリケーションインスタンスのダウンロード方法を指示します。 コロンの前の名前はアプリケーションを含むモジュールであり、コロンの後の名前はこのアプリケーションの名前です。
gunicornの設定は非常に簡単ですが、コマンドラインから起動することは、実稼働サーバーにとって実際には良いソリューションではありません。 何らかの理由でサーバーがクラッシュして終了した場合は、新しいサーバーが自動的に起動して代わりになるようにするため、バックグラウンドで動作し、常に監視されるようにします。 さらに、コンピューターを再起動すると、システムにログインしてすべてを自分で起動する必要なく、サーバーが自動的に起動します。 これらの目的のために、上記でインストールしたスーパーバイザーパッケージを使用します。
スーパーバイザユーティリティは、監視するプログラムと必要に応じてそれらを再起動する方法を指示する構成ファイルを使用します。 設定ファイルは/etc/supervisor/conf.dに保存する必要があります。 Microblogの構成ファイルを次に示します。これをmicroblog.confと呼びます。
/etc/supervisor/conf.d/microblog.conf :スーパーバイザー構成。
[program:microblog] command=/home/ubuntu/microblog/venv/bin/gunicorn -b localhost:8000 -w 4 microblog:app directory=/home/ubuntu/microblog user=ubuntu autostart=true autorestart=true stopasgroup=true killasgroup=true
command
、 directory
およびuser
設定は、スーパーバイザーにアプリケーションの起動方法を伝えます。 autostart
およびautorestart
再起動の設定。コンピューターの起動または障害により自動的に再起動します。 stopasgroup
およびkillasgroup
は、スーパーバイザーがアプリケーションを再起動するためにアプリケーションを停止する必要がある場合、最上位のgunicornプロセスのすべての子プロセスにも到達するようにします。
この構成ファイルを書き込んだ後、スーパーバイザーサービスを再起動してインポートする必要があります。
$ sudo supervisorctl reload
そしてそのように、gunicorn Webサーバーが稼働している必要があります!
Nginxを構成する
Gunicornベースのマイクロブログアプリケーションサーバーはプライベートポート8000で実行されるようになりました。アプリケーションを外部に提供するために今必要なことは、ファイアウォールで開いた2つのポートである80と443で公開Webサーバーを有効にすることですWebアプリケーショントラフィックを処理します。
これを安全な展開にしたいので、暗号化されるすべてのトラフィックをポート443に転送するようにポート80を構成します。 それで、SSL証明書を作成することから始めます。 self-signed SSL certificate , , , - , . SSL :
$ mkdir certs $ openssl req -new -newkey rsa:4096 -days 365 -nodes -x509 \ -keyout certs/key.pem -out certs/cert.pem
. , SSL, - , . key.pem
cert.pem
, certs .
- nginx, . nginx /etc/nginx/sites-enabled directory. Nginx , , :
$ sudo rm /etc/nginx/sites-enabled/default
nginx Microblog, /etc/nginx/sites-enabled/microblog:
/etc/nginx/sites-enabled/microblog: Nginx configuration.
server { # 80 (http) listen 80; server_name _; location / { # URL-, https return 301 https://$host$request_uri; } } server { # 443 (https) listen 443 ssl; server_name _; # self-signed SSL- ssl_certificate /home/ubuntu/microblog/certs/cert.pem; ssl_certificate_key /home/ubuntu/microblog/certs/key.pem; # /var/log access_log /var/log/microblog_access.log; error_log /var/log/microblog_error.log; location / { # gunicorn proxy_pass http://localhost:8000; proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } location /static { # , alias /home/ubuntu/microblog/static; expires 30d; } }
nginx , , , , , . , nginx .
nginx , :
$ sudo service nginx reload
. - IP- ( 192.168.33.10, Vagrant), . , -, .
, . IP- . , , Let's Encrypt SSL. , Flask HTTPS .
Linux , . git
, , , git pull
, , .
, , . , , , . , , .
, . , , :
(venv) $ git pull # (venv) $ sudo supervisorctl stop microblog # (venv) $ flask db upgrade # (venv) $ flask translate compile # (venv) $ sudo supervisorctl start microblog #
Raspberry Pi
Raspberry Pi - Linux, , -, 24/7, . Linux, Raspberry Pi. Raspbian , Raspberry Pi Foundation.
Raspberry Pi, Raspbian. raspbian Stretch Lite 2017 , , , , , , .
Raspbian SD-, Raspberry Pi, . Raspbian SD- Windows, Mac OS X Linux Raspberry Pi .
Raspberry Pi , . , SSH, .
Ubuntuと同様に、RaspbianはDebianの派生物であるため、上記のUbuntu Linuxの手順の大部分はRaspberry Piの場合と同じように機能します。ただし、外部アクセスなしでホームネットワークで小さなアプリケーションを実行する場合は、いくつかの手順をスキップできます。たとえば、パスワードなしでファイアウォールやログインが必要ない場合があります。また、このような小さなコンピューターでは、MySQLの代わりにSQLiteを使用できます。nginxの使用をオプトアウトし、gunicornサーバーにクライアント要求を直接リッスンさせるだけです。おそらく、1つのgunicornプロセスのみが必要です。スーパーバイザーサービスは、アプリケーションが常に正常に動作していることを確認するのに役立つため、Raspberry Piで使用することをお勧めします。