4
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

ConoHa WingでAPI公開

Last updated at Posted at 2021-12-12

#経緯
「やっとレンタルサーバー借りれた!1発目はAPI作ろう!!!」
と思ったは良いもののConoHa Wingが比較的新しいこともあり情報が少なく苦戦した。
同じ事をやろうと思っている人向けに書く。

#環境
端末: MacBook Pro M1
サーバー: ConoHa Wing
言語: Python3.6
フレームワーク: Flask

#1, SSH接続
https://enginyaa.com/conoha-wing-ssh/

ここの記事がわかりやすかったです

#2, Pythonを使えるようにする

「ConoHa Wing Python」と検索するとpyenvをインストールして使用する方法が紹介されてます。
自分の環境ではなぜかうまくいかなかったのでサーバーに標準で入っているPython3.6を使用できるようにしました。

Pythonのパスを通す

[xxxxxxx@web0000 ~]$ export PATH=/opt/alt/python36/bin:$PATH

Pythonのパスが通った事を確認

[xxxxxxx@web0000 ~]$ which python
/usr/local/bin/python

.bashrcのパスを通す

[xxxxxxx@web0000 ~]$ echo 'export PATH=/opt/alt/python36/bin:$PATH' >> $HOME/.bashrc

パスが通った事を確認

[xxxxxxx@web0000 ~]$ which pip3
/opt/alt/python36/bin/pip3

これでPythonとpip3が使えるようになりました。

#3, Flaskをサーバー上で機能させる
用意するファイルは3つです

  • .htaccess
  • app.py
  • index.cgi
.htaccess
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ /index.cgi/$1 [QSA,L]
<Files ~ "\.py$">
  deny from all
</Files>
app.py
#!/opt/alt/python36/bin/python3.6

from flask import Flask, jsonify
 
app = Flask(__name__)

@app.route('/', methods=['GET'])
def hello_world():
    return jsonify({'message': 'Hello world'})
 
if __name__ == "__main__":
    app.run()
index.cgi
#!/opt/alt/python36/bin/python3.6

import cgitb
cgitb.enable()

from wsgiref.handlers import CGIHandler
from app import app
from sys import path

path.insert(0, '/public_html/')# index.cgiのパス
from app import app
class ProxyFix(object):
  def __init__(self, app):
      self.app = app
  def __call__(self, environ, start_response):
      environ['SERVER_NAME'] = "1111.conoha.ne.jp"# ← ホスト名
      environ['SERVER_PORT'] = "0000"# ← ポート番号
      #GETとPOSTの両方がある場合は消す↓
      environ['REQUEST_METHOD'] = "GET"
      environ['SERVER_PROTOCOL'] = "HTTP/1.1"
      return self.app(environ, start_response)
if __name__ == '__main__':
   app.wsgi_app = ProxyFix(app.wsgi_app)
   CGIHandler().run(app)

スクリーンショット 2021-12-12 13.31.56.png

ホスト名とポート番号はSSHで確認できます

最後に「index.cgi」を選択して右クリックで属性変更を押します。
パーミッションを「755」に変更すれば無事API公開成功です。

スクリーンショット 2021-12-12 16.52.27.png

#おわり
質問があったら@_SNQにDMください。

作ったAPIでTwitterBot作りました。
TwitterのShadowBanをチェックできるBotです。
DMに反応します。
@Shadow_Ban_Bot

4
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?