前書き
この記事では、フレームワークの助けを借りずに、Python 3、MySQL、Apache2でサーバーをセットアップする方法を説明します。 このチュートリアルの終わりまでに、ベアボーンシステムを運用環境に完全に起動できるようになります。
Djangoは多くの場合、Pythonのすべてのもののワンショップストップです。 Pythonのほぼすべてのバージョンと互換性があり、カスタムサーバーがあらかじめパッケージ化されており、ワンクリックでインストールできるデータベースも備えています。 この強力なツールを使用せずにバニラシステムをセットアップするのは難しい場合がありますが、サーバー構造についての基礎から非常に貴重な洞察を得ることができます。
このチュートリアルでは、パッケージインストーラー、つまりapt-getとPipのみを使用します。 _Package installers_は、コードのインストールをはるかに便利で管理しやすくする小さなプログラムです。 それらがなければ、ライブラリ、モジュール、およびその他のコードビットを維持することは、非常に面倒なビジネスになる可能性があります。
前提条件
このチュートリアルを実行するには、次のものが必要です。
-
Ubuntu 14.04ドロップレット1つ。
ステップ1-Python 3をデフォルトにする
このステップでは、Python 3を `+ python +`コマンドのデフォルトとして設定します。
まず、現在のPythonバージョンを確認します。
python --version
新しいUbuntu 14.04サーバーでは、次の出力が表示されます。
Python 2.7.6
`+ python`でPython 3を実行したいと思います。 最初に、古い2.7バイナリを削除しましょう。
sudo rm /usr/bin/python
次に、代わりにPython 3バイナリへのシンボリックリンクを作成します。
sudo ln -s /usr/bin/python3 /usr/bin/python
もう一度 `+ python --version `を実行すると、 ` Python 3.4.0 +`が表示されます。
ステップ2-Pipのインストール
このセクションでは、Pythonの推奨パッケージインストーラーであるPipをインストールします。
まず、システムのパッケージインデックスを更新します。 これにより、古いパッケージや古いパッケージがインストールを妨げないようにします。
sudo apt-get update
Pipを使用すると、必要なPython 3パッケージを簡単に管理できます。 それをインストールするには、次を実行するだけです:
sudo apt-get install python3-pip
Pipの概要については、https://www.digitalocean.com/community/tutorials/common-python-tools-using-virtualenv-installing-with-pip-and-managing-packages [このチュートリアル]をご覧ください。
ステップ3-MySQLのインストール
このセクションでは、MySQLをインストールして構成します。
SQLのインストールは簡単です。
sudo apt-get install mysql-server
プロンプトが表示されたらMySQL rootユーザーの強力なパスワードを入力し、後で必要になるため覚えておいてください。
インストールが完了すると、MySQLサーバーが起動します。 インストール後、次を実行します。
mysql_secure_installation
このセットアップでは、一連のわかりやすい手順を実行します。 まず、先ほど選択したルートパスワードを入力する必要があります。 最初の質問では、ルートパスワードを変更するかどうかを尋ねられますが、設定しただけなので、* n と入力します。 他のすべての質問については、 ENTER *を押してデフォルトの応答を受け入れます。
ただし、Python 3にはMySQLと接続する方法が必要です。 MySQLclientのような多くのオプションがありますが、モジュールの単純化のために、このチュートリアルでは `+ pymysql +`を使用します。 Pipを使用してインストールします。
sudo pip3 install pymysql
ステップ4-Apache 2のインストール
このセクションでは、Apache 2をインストールし、Pythonファイルが実行可能ファイルとして認識されるようにします。
apt-getを使用してApacheをインストールします。
sudo apt-get install apache2
MySQLと同様に、インストールが完了するとApacheサーバーが起動します。
注意:インストール後、いくつかのポートがインターネットに開かれます。 セキュリティに関するリソースについては、このチュートリアルの結論を確認してください。
ウェブサイトのルートディレクトリを安全な場所に置きたい。 サーバーはデフォルトで `+ / var / www / html`にあります。 規則を守るために、同じ場所にテスト用の新しいディレクトリ「+ test +」を作成します。
sudo mkdir /var/www/test
最後に、PythonをApacheに登録する必要があります。 まず、マルチスレッドプロセスを無効にします。
sudo a2dismod mpm_event
次に、スクリプトを実行するための明示的な許可をApacheに付与します。
sudo a2enmod mpm_prefork cgi
次に、実際のApache構成を変更して、Pythonファイルを実行可能ファイルとして明示的に宣言し、そのような実行可能ファイルを許可します。 nanoまたはお好みのテキストエディターを使用して構成ファイルを開きます。
sudo nano /etc/apache2/sites-enabled/000-default.conf
`+ <VirtualHost *:80 \> +`を読み取る最初の行の直後に以下を追加します。
<Directory /var/www/>
Options +ExecCGI
DirectoryIndex index.py
</Directory>
AddHandler cgi-script .py
`+ <Directory> `ブロックが ` <VirtualHost> +`ブロック内にネストされていることを確認してください。 タブでも正しくインデントしてください。
/etc/apache2/sites-enabled/000-default.conf
<VirtualHost *:80>
<Directory /var/www/>
Options +ExecCGI
DirectoryIndex index.py
</Directory>
AddHandler cgi-script .py
...
このDirectoryブロックにより、Apacheがそのディレクトリを処理する方法を指定できます。 `+ / var / www / test `ディレクトリに実行可能ファイルが含まれていることをApacheに通知し、 ` index.py +`をデフォルトファイルと見なし、実行可能ファイルを定義します。
また、ウェブサイトのディレクトリで実行可能ファイルを許可するため、 + DocumentRoot +`のパスも変更する必要があります。 ファイルの先頭にある長いコメントの下の数行、 `+ DocumentRoot / var / www / html`を読み取る行を探し、代わりに
+ / var / www / test`を読み取るように修正します。
DocumentRoot /var/www/
ファイルは次のようになります。
/etc/apache2/sites-enabled/000-default.conf
<VirtualHost *:80>
<Directory /var/www/>
Options +ExecCGI
DirectoryIndex index.py
</Directory>
AddHandler cgi-script .py
...
DocumentRoot /var/www/
...
ファイルを保存して終了します。 これらの変更を有効にするには、Apacheを再起動します。
sudo service apache2 restart
注:Apache 2は、サーバーの完全修飾ドメイン名に関する警告をスローする場合があります。 ServerNameディレクティブは現時点ではほとんど適用されていないため、これは無視できます。 これらは最終的に、https://www.digitalocean.com/community/tutorials/how-to-set-up-a-host-name-with-digitalocean [必要なレコード]が作成された後、サブドメインホスティングを決定するために使用されます。
出力の最後の行が `+ [OK] +`の場合、Apacheは正常に再起動しています。
ステップ5-最終製品のテスト
このセクションでは、サンプルWebページとデータベースを作成して、個々のコンポーネント(Python、MySQL、およびApache)が相互にやり取りできることを確認します。
まず、データベースを作成しましょう。 MySQLにログインします。 以前に設定したMySQLルートパスワードを入力する必要があります。
mysql -u root -p
-
example *という名前のサンプルデータベースを追加します。
CREATE DATABASE example;
新しいデータベースに切り替えます。
USE example;
Pythonアプリに追加するサンプルデータの表を追加します。
CREATE TABLE numbers (num INT, word VARCHAR(20));
-
CTRL + D *を押して終了します。 SQLの背景については、https://www.digitalocean.com/community/tutorials/a-basic-MySQL-tutorial [MySQLチュートリアル]をご覧ください。
次に、単純なPythonアプリ用の新しいファイルを作成します。
sudo nano /var/www/test/index.py
次のコードをコピーして貼り付けます。 インラインコメントは、コードの各部分が何をするかを説明しています。 `+ passwd +`の値を、前に選択したルートMySQLパスワードに置き換えてください。
#!/usr/bin/python
# Turn on debug mode.
import cgitb
cgitb.enable()
# Print necessary headers.
print("Content-Type: text/html")
print()
# Connect to the database.
import pymysql
conn = pymysql.connect(
db='example',
user='root',
passwd='',
host='localhost')
c = conn.cursor()
# Insert some example data.
c.execute("INSERT INTO numbers VALUES (1, 'One!')")
c.execute("INSERT INTO numbers VALUES (2, 'Two!')")
c.execute("INSERT INTO numbers VALUES (3, 'Three!')")
conn.commit()
# Print the contents of the database.
c.execute("SELECT * FROM numbers")
print([(r[0], r[1]) for r in c.fetchall()])
保存して終了。
次に、新しく作成されたファイルのアクセス許可を修正します。 3桁の許可コードの詳細については、https://www.digitalocean.com/community/tutorials/linux-permissions-basics-and-how-to-use-umask-on-a-vpsのチュートリアルを参照してください[Linuxの許可]。
sudo chmod 755 /var/www/test/index.py
ここで、お気に入りのブラウザを使用して「+ http:// +」にアクセスしてサーバーにアクセスします。 以下が表示されるはずです。
your_server_ip ’> http://
[(1, 'One!'), (2, 'Two!'), (3, 'Three!')]
おめでとうございます。 サーバーがオンラインになりました。
結論
これで、堅牢なSQLデータベースでPython 3を実行できる稼働中のサーバーができました。 サーバーは、よく文書化され確立されたパッケージインストーラーにより、メンテナンスが容易になるように構成されています。
ただし、現在の状態では、サーバーは部外者に対して脆弱です。 SSL暗号化などの要素はサーバーの機能にとって必須ではありませんが、これらは信頼性の高い安全なサーバーにとって不可欠なリソースです。 詳細については、https://www.digitalocean.com/community/tutorials/how-to-configure-the-apache-web-server-on-an-ubuntu-or-debian-vps [Apacheの設定方法]をご覧ください。 、https://www.digitalocean.com/community/tutorials/how-to-create-a-ssl-certificate-on-apache-for-ubuntu-14-04 [Apache SSL証明書の作成方法]およびhttps: //www.digitalocean.com/community/tutorials/7-security-measures-to-protect-your-servers[Linuxサーバーを保護する方法]。