Debian で Apache 経由で Python スクリプトを実行する最速の方法(11)

Debian で Apache 経由で Python スクリプトを実行する最速の方法(11)

最近、Pythonスクリプトをリモートで実行したいと思います。 Apacheはすでにインストールされており、それについてよく知っているので、これについて知りたいのですが。別のオプションは、Pythonでカスタムソケットサーバーを作成することです。非常に簡単ですが、作成する必要があります。これはサービスです。

これは大規模に実行するためのものではなく、プライベートネットワーク内でのみ実行され、sh bashスクリプトを実行することもできます。

ベストアンサー1

これにはApache CGI(このメソッド)、mod_python、mod_wsgiなどがありますが、どちらも設定するのに時間がかかりません。この方法はステップが最も少ない。

CGIモードを有効にする最初のステップ(私の場合、a2enmodはデフォルトパスではなく/usr/sbin/にあります)

/usr/sbin/a2enmod cgi

systemctl restart apache2

今正しい! !これで、.shまたは.pyスクリプトを/usr/lib/cgi-binフォルダに入れてrootにし、実行権限がある場合はURLからアクセスできます。

http://machine_address/cgi-bin/script.py

スクリプトの先頭にshebangを入れる必要があります。

#!/usr/bin/python3
print("Content-Type: text/html;charset=utf-8")
print ("Content-type:text/html\r\n")
print("<H1> Hello, From python server :) </H1>")

さらに一歩進んでください。

  • ホームディレクトリやリポジトリなど、編集がより便利な場所にスクリプトを保存し、/usr/lib/cgi-binに接続することをエミュレートできます。全体またはルートを維持しながら、グループをユーザーグループに分類し、権限を次のように設定します。 775話

  • 次の方法を使用して、送信されたGETパラメータのクエリURLにアクセスできます。 (osをインポートした後)

    queryString = os.environ.get('QUERY_STRING')
    
  • cgiスクリプトを実行するにはrootが所有する必要がありますが、Pythonスクリプト内のすべてのコードはユーザーwww-data(デフォルトのApacheユーザー)として実行されます。大丈夫かもしれませんが、「一般」ユーザーアカウントなど、他のユーザーに必要な場合(私が調査した)1つのオプションは、cgiスクリプトを実行するユーザーを指定できるmod_suexecです。しかし、Apacheが実行しているデフォルトユーザーをデフォルトユーザーアカウントに変更する方が簡単であることがわかりました。より高速で簡単で、rootとしてログインしなくてもエラーログファイルにアクセスし(Pythonエラーを参照)、デフォルトファイルと対話できます。 user/grp 設定: (その後、再起動)

    /etc/apache2/envvars
    
  • CGIパス、シンボリックリンク権限などの設定をカスタマイズできます。

     /etc/apache2/conf-enabled/serve-cgi-bin.conf
    
  • スクリプトの上に次を追加すると、Apache error.logの代わりにページに素晴らしいhtml形式でPythonエラーを出力できます。

    import cgitb
    cgitb.enable()
    

おすすめ記事