少し前に、フラスコフレームワークを使ってブログプログラムを書いたのですが、書き終えたらサーバーにデプロイしたかったのですが、シャオバイだったので、たくさんの情報をググって、ちょっとした話をしました。設定方法を教えてくれるところもありますが、詳細はなぜこれが一致するのか説明しなかったので、最初から最後までプロセスを要約しました。
サーバーにプロジェクトをデプロイすることは、プロジェクトをこのサーバーで実行し、パブリックネットワーク上のプロジェクトにアクセスできるようにすることです。
したがって、これら2つのポイントを達成したい場合、実行する必要のある作業は次のとおりです。
最初にシステムの選択についてお話ししましょう。最初にWindowsシステムを除外します。Linuxシステムでは、Ubuntu、Debian、CentOSが非常に優れています。
Ubuntuは強力なソフトウェアソースサポートを備えていますが、デスクトップオペレーティングシステムに適しています。 Debianは安定しており、ハードディスク上の小さなスペースと少量のメモリを占有しますが、開発が速すぎて、セキュリティと安定性はCentOSほど良くありません。そこでCentOSを選びました。 3つの比較については、[http://waynerqiu.com/7/156.html](http://waynerqiu.com/7/156.html)を参照してください。
購入したサーバーはリモート接続で操作する必要があります。ここではパテをお勧めします。 CentOS 6.3 x86_64を使用しています。バージョンが異なれば、ソフトウェアのインストールアドレスも異なる場合があります。
Linuxシステムには、python-Vで表示できる低バージョンのpythonが付属しています。組み込みのpythonバージョンは、yumなどのシステムの一部の機能に関連しています。
フラスコプロジェクトにはpython2.7以降が必要なので、システムにpython2.7またはpython3.5をインストールする必要があります。
Python2.7.5をダウンロードしてインストールします。
# wget http://www.python.org/ftp/python/2.7.5/Python-2.7.5.tar.bz2
現時点でwgetがない場合は、yum installwgetを使用してインストールできます。
# tar jxvf Python-2.7.5.tar.bz2
# cd Python-2.7.5
#. /configure --prefix=/usr/local
# make && make install
現時点では、python2.7.5はシステムが使用するpythonではありません(python -Vと入力すると、下位バージョンのpythonが表示されます)。したがって、システムのデフォルトのpythonがpython2.7.5を指すようにするには、ソフト接続を確立する必要があります。
# mv /usr/bin/python /usr/bin/python2.4.3//あなたのpythonバージョンは異なるかもしれません
# ln -s /usr/local/bin/python27 /usr/bin/python
yumはpython2.7と互換性がないため、新しいバージョンのpythonを使用すると、yumインストールソフトウェアがエラーを報告します。そのため、yumが使用するpythonバージョンを指定する必要があります。
# vi /usr/bin/yum
編集モードに入り、 #!/ usr / bin / python
を#!/ usr / bin / python2.7.5
に変更します
関連する開発キットといくつかのパッケージをインストールします
# yum groupinstall "Development tools"
# yum install zlib zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel
pipをインストールする
# wget https://pypi.python.org/packages/source/p/pip/pip-1.3.1.tar.gz --no-check-certificate
pipのダウンロードはhttpsプロトコルに基づいているため、 wgeturl
の後に --no-check-certificate
を追加する必要があります。そうしないと、ダウンロードできません。
ピップを解凍してインストールします
# chmod +x pip-1.3.1.tar.gz
# tar xzvf pip-1.3.1.tar.gz
# cd pip-1.3.1
# python setup.py install
最後のステップで、setuptoolsがインストールされていないため、エラーが「ImportError:No modulenamedsetuptools」と報告される場合があります。
setuptoolsをインストールします
# wget https://pypi.python.org/packages/2.7/s/setuptools/setuptools-0.6c11-py2.7.egg --no-check-certificate
# chmod +x setuptools-0.6c11-py2.7.egg
# sh setuptools-0.6c11-py2.7.egg
この手順では、エラー " zlib not available "
も報告される場合があります。#rpm-qa | grep zlib
を使用して、使用可能なインストールパッケージを表示し、インストールされていないパッケージをインストールできます(上記のzlibとzlib-develをインストールしました)
sh setuptools-0.6c11-py2.7.eggを再度実行しますが、それでもエラーが報告されますか?同じエラー?
その場合、これはzlibの問題ではなく、pythonの問題であるはずです。コンパイルする前に、python2.7.5を再コンパイルし、Modules /Setup.distファイルを変更する必要があります。現れる
# zlib zlibmodule.c -I$(prefix)/include -L$(exec_prefix)/lib -lz
コメントを削除して、python2.7.5を再コンパイルします
# cd Python-2.7.5
#. /configure --prefix=/usr/local
# make && make install
このようにして、zlibを使用できるようにし、setuptoolsのインストールに戻ってから、pipのインストールに戻ります。今回は、pipが最終的にインストールされます。フラスコ関連のパッケージをグローバル環境にインストールすることも(サーバーに将来プロジェクトが1つだけ含まれる場合)、仮想環境にパッケージをインストールすることもできます。心配しないで、プロジェクトコードをアップロードしてください。
次に、フラスコプロジェクトコードをサーバーにアップロードできます。flashFXPまたはFileZillaを使用してアップロードできます。
これが次のステップを紹介するためのアップロードディレクトリです。フラスコプロジェクトコードは / home / www / WebBlogold
に配置されます(WebBlogoldは私のプロジェクトフォルダです)。 Linuxのディレクトリ構造がわかりませんか?あなたはそれをググることができます、そして私はここに記事[http://yangrong.blog.51cto.com/6945369/1288072](http://yangrong.blog.51cto.com/6945369/1288072)をお勧めします。
サーバーに複数のプロジェクトがある場合は、virtualenv仮想環境をインストールすることをお勧めします。 Virtualenvは、プロジェクト間の同じパッケージの異なるバージョンの依存関係の問題を解決できます。
pipを使用してvirtualenv仮想環境をインストールします
pip install virtualenv
プロジェクトディレクトリを入力し、ディレクトリに「virtualenv venv」と入力します。ここで、venvは、ビルドする仮想環境フォルダの名前です。結果として、次の2行が表示されます。
New python executable in venv/bin/python
Installing setuptools, pip...done.
これは、フォルダが作成されたことを意味します。 source venv / bin / activate
コマンドを使用して仮想環境を有効にします。有効にすると、現在のパス名の前に(venv)が表示されます。
フラスコ関連のパッケージを仮想環境にインストールするには、パッケージを1つずつインストールするか、すべてのパッケージをtxtファイルに書き込んで一度にインストールします。
フラスコ関連.txtファイル:
Flask==0.10.1
Flask-Login==0.2.11
Flask-Mail==0.9.1
Flask-Moment==0.4.0
Flask-PageDown==0.1.5
Flask-SQLAlchemy==2.0
などなど
それらをプロジェクトフォルダに保存し、仮想環境で「pip install-rflaskrelated.txt」と入力してインストールします。
私のサーバーエージェントはグローバルにインストールされていますが、もちろん仮想環境にインストールすることもできます。
使用されるプロキシはnginxとuwsgiの2つです。最初に、nginxなしでプロジェクトにアクセスできる場合、nginxを使用する目的はセキュリティと[負荷分散](https://cloud.tencent.com/product/clb?from=10680)です。 nginxをフロントエンドプロキシとして構成し、uwsgiをバックエンドプロキシサーバーとして構成します(ここで説明するフロントエンドとバックエンドは相対位置であり、実際の意味はありません)。インターネットからの要求を処理する場合は、nginxで処理する必要があります。その後、リクエストはuwsgiに渡され、プロジェクト自体にはuwsgiを介してアクセスできます。
nginxがなく、uwsgiサーバーしかない場合、インターネット要求はuwsgiによって直接処理され、プロジェクトにフィードバックされます。
Nginxは、セキュリティフィルタリング、アンチDDOS保護、およびその他の安全な操作を実装できます。複数のサーバーが構成されている場合、nginxはサーバーの負荷が比較的分散されていることを確認できます。
また、uwsgiは、WSGIプロトコル(Webサーバーゲートウェイインターフェイス)、httpプロトコルなどを実装するWebサーバーであり、要求の受信と処理、応答の送信などを行うことができます。したがって、uwsgiのみも可能です。
最初にuwsgiをインストールします
pip install uwsgi
プロジェクトのルートディレクトリに構成ファイルuwsgiconfig.iniを作成します(uwsgiは複数の構成ファイル形式、xml、ini、jsonなどをサポートします)
[ uwsgi]
socket =127.0.0.1:8001//プログラムの開始時に使用されるアドレスとポート。通常、フラスコプロジェクトをローカルで実行します。//アドレスとポートは127です.0.0.1:5000,//ただし、サーバーでは、ポートはuwsgiを介して設定され、プロジェクトはuwsgiを介して開始されます。//つまり、uwsgiが開始されると、プロジェクトも開始されます。
chdir =/home/www///プロジェクトディレクトリ
wsgi-file = manage.py //フラスコプログラムの起動ファイルは通常、ローカルで実行されます// python manage.プロジェクトを開始するためのpyrunserver
callable = app //プログラムで有効になっているアプリケーション変数名
processes =4//プロセッサの数
threads =2//スレッド数
stats =127.0.0.1:9191//uwsgi統計を取得するためのサービスアドレス
構成ファイルを保存します。uwsgiuwsgiconfig.ini
と入力してuwsgiを起動できます。
nginxのインストール:nginxはyumインストールソフトウェアソースにないため、追加します
# rpm -ivh http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm
# yum install nginx
nginxのいくつかのコマンド
nginx
nginx -s -stop
pkill -9 nginx
nginx -t
nginx -v
急いでnginxプロキシサーバーを起動しないでください。最初にnginx構成ファイルを作成しましょう。
nginx構成ファイルは / etc / nginx / conf.d /
フォルダーにあり、 / etc / nginx / sites-enabled / default
にある場合もあります。デフォルトの構成ファイルを開きます。ほとんどのコンテンツに注釈が付けられているため、変更する必要があります。
events {
worker_connections 1024;}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 80;//デフォルトのWebアクセスポート
server_name xxx.xxx.xxx.xxx;//あなたのパブリックネットワークIP
# charset koi8-r;
access_log /home/www/WebBlogold/logs/access.log;//サーバーが受信した要求ログ、//プロジェクトフォルダの下に作成する必要があります//ログフォルダ、以下と同じ。
error_log /home/www/WebBlogold/logs/error.log;//エラーログ
location /{
include uwsgi_params;//インポートされたuwsgi構成は次のとおりです
uwsgi_pass 127.0.0.1:8001;//uwsgi構成ファイルのソケットアイテムのアドレスと一致する必要があります//同じ,そうしないと、uwsgiはリクエストを受信できません。
uwsgi_param UWSGI_PYHOME /home/www/WebBlogold/venv;//pythonの場所(仮想環境)
uwsgi_param UWSGI_CHDIR /home/www/WebBlogold;//プロジェクトルートディレクトリ
uwsgi_param UWSGI_SCRIPT manage:app;//プロジェクトのメインプログラムを開始します(ローカルで実行//このメインプログラムはフラスコに組み込むことができます//サーバー上のプロジェクトにアクセスする)}}}
以下は束です#、それはすべてコメントです、それについて心配しないでください。
nginxを起動するときに、「98:Addressがすでに使用されています」というエラーが表示された場合でも、心配しないでください。nginxがすでに起動されている可能性があります。
netstat -ntlp
でポートの占有率をチェックして、ポート80がnginxによって占有されているかどうかを確認します。他のプログラムがnginxのデフォルトポート80を占有していることがわかった場合は、これらのプロセスを強制終了して、nginxを再起動できます。
この時点で、ようやくすべての作業が完了し、すぐにプロジェクトにアクセスできるようになりました。
ここで、nginx構成ファイルをチェックして、nginx -tが正常に適用されていないかどうかを確認し、構成ファイルを確認します。
nginx
と入力してnginxを開始しますuwsgi uwsgiconfig.ini
と入力して、uwsgiを開始しますこのとき、uwsgiはプロジェクトにエラーがあるかどうかを通知します。ローカル操作が適切であれば、通常はエラーは発生しません。
報告される可能性のあるエラーは、プロジェクト関連モジュールのインポートパスが正しくないことです。変更するだけです。エラーがない場合は、ブラウザを開いてサーバーのIPアドレスを入力するか、対応するドメイン名があり、IPに解決されている場合は、ドメイン名を入力することもできます。
すべてがうまくいけば、目的のページが表示されます。うまくいかない場合は、最初にログファイルを確認します。ログファイルは、プロジェクトのルートディレクトリの下のlogsフォルダにあります。
Recommended Posts