嬉しいことにDiscordで
「開発者募集してますか?面白そうなのでコントリビュートしたいです」
とおっしゃってくださる方が現れまして
コントリビュートってのが何なのか分からないですけどマンモスうれぴーです!
そんな感じなのでポータルサイトをローカル(手元のパソコン)で動かす方法について簡単に書いていきます。
これは開発中のプロジェクトを走らせる方法なので、説明は最低限です。
ある程度ITの知識は必須な記事なのでご了承ください。
事前にインストールしておくもの
OSによってインストールの方法は違うと思います。
そこらへんは各自で調べてください。
Pythonに関してはHerokuというクラウド環境(後述)で動かしている関係で私が動作確認をしている 3.6.7 のバージョンを選んでください。
それぞれをインストールした後にターミナル(Windowsでいうところのコマンドプロンプト)を起動して
python pip postgres createuser createdb
このコマンドが叩ければ問題ないです。
python, pipコマンドはpythonをインストールしたら多分使えます。
postgres, createdb, createuserコマンドはPostgreSQLをインストールしたら多分使えます。
もしエラーが出る場合はパスを確認してみたりGoogle先生に聞いてみたりしてください。
プロジェクトをダウンロード
https://github.com/EVEKatsu/portal-dev
このURLを開いて
"Download ZIP"をクリックします。もちろんgit cloneでも構いません。
ダウンロードしたファイルを解凍して、適当な作業フォルダに移します。
ツイッター開発者登録
https://developer.twitter.com/en/apps
ツイッター開発者ページを開きます。ここでツイッターアプリの作成をしてください。
やり方についてはインターネッツに沢山記事があるので検索してください。
こんな感じでトークンを4つ取得できたら成功です。このトークンは外部に漏洩しないようにしてください(Heroku上で動かす時に入力するのは大丈夫です)
データベースの作成と環境変数の設定
postgres -D /usr/local/var/postgresターミナルからPostgreSQLを起動します。このコマンドはmacOSで動かす時のもので、Windowsとか他の環境ではどうなのかは分かりません。
プロジェクトを走らせてる時は常にPostgreSQLを起動している必要がありますので、これは放置して別のターミナルを起動します。
※もしかしたらWindowsとかではPostgreSQLを常駐できるツールみたいなのがあるかもです。
ターミナルをプロジェクトのパスまで移動します。
これからの作業は全てプロジェクト上のパスで行っています。
createuser -P ユーザー名 createdb データベース名 -O ユーザー名
まずはユーザーとデータベースを新しく作成します。名前とパスワードは適当なのでいいです(どうせ手元の環境で遊ぶだけなので)
# PostgreSQLのURL(Herokuでは自動的に設定される) export DATABASE_URL=データベース名 # ツイッターアプリを作成した時に取得できる4つのトークン export CONSUMER_KEY=xxxxxxxxxxxxxxx export CONSUMER_SECRET=xxxxxxxxxxxxxxx export ACCESS_TOKEN_KEY=xxxxxxxxxxxxxxx export ACCESS_TOKEN_SECRET= xxxxxxxxxxxxxxx # デバッグ用のフラグです # ローカルでサイトを立ち上げた後に # コードを書き換えた時に自動的にリロードしてくれます export EVEKATSU_DEBUG=true
こんな感じで環境変数を設定します(このサンプルは私が ~/.bash_profile に書いているものです)
環境変数を設定の仕方が分からない場合はGoogle先生に聞いてください。
postgresql+psycopg2://ユーザー名:ユーザーパスワード@127.0.0.1:5432/データベース名
データベースへのURLはPostgreSQLを通常起動してればこのようになります。もしかしたらホストとポートが違うかもですが各自で確認してください。
例えばユーザー名が evekatsu パスワードが evepass データベース名が evekatsu-db だとすればDATABASE_URLは
postgresql+psycopg2://evekatsu:evepass@127.0.0.1:5432/evekatsu-db
こんな感じになります。
プロジェクト用の環境を構築(任意)
※pyenvとvirtualenvで環境を分けている人向けです(環境を分けていない人は関係ありません)
pyenv virtualenv 3.6.7 evekatsu-portal-dev pyenv local evekatsu-portal-dev
私はこんな感じでpyenvを使って環境を分けて開発しています。
データベースのマイグレーション
pip install -r requirements.txt python manager.py db upgrade
これでデータベースのテーブルが作成されます。
PostgreSQLの中身を確認できる人は見てみてください。
python scheduler_by_every_10_minutes.py
ツイートを収集してデータベースに格納します。
python app.py
これでWebサーバーが立ち上がります。
ブラウザでlocalhostにアクセスしたら繋がります。
環境変数のEVEKATSU_DEBUGをtrueにしていなかった場合のデフォルトのポート番号は3000だったような気はします(忘れた)
これでローカル環境でサイトを立ち上げることができました。
クラウド上で走らせる
当然ですがローカル環境でサイトを立ち上げてもローカルネットワーク外の人からはアクセスできません。
そこでHerokuというクラウドサービスを使います。
ユーザー登録をした後にHerokuを操作するための何らかのツールをインストールしてください。
クレジットカードの登録はしなくてもいいですが、した場合は無料で使える容量が増えます(有料プランに変えない限り支払いは発生しません)
次にGitというソフトウェアをインストールします。
gitを使う時はSourcetreeというのがオススメです(確かSourcetreeの中にはgitも入ってたと思います)
heroku git
この2つのコマンドが叩ければ大丈夫です
git init git add . git commit -m "Test commit" heroku create heroku addons:create scheduler:standard heroku addons:add heroku-postgresql git push heroku master heroku run python manager.py db upgrade
これでデプロイは終わりです。次にデータベースの構築とツイートを自動取得するスケジューラーの設定をします。
https://dashboard.heroku.com/apps
ダッシュボードからアプリ名を選択します。
すると画像のようなページが表示されます。Overviewタブから『Heroku Scheduler』というリンクに飛んでください。
このように定期的に自動でスクリプトを走らせれるように設定ができます。
・FREQUENCYをEvery 10 minutesに選択
python scheduler_by_every_10_minutes.py
・FREQUENCYをDailyに選択
python scheduler_by_daily.py
画像を参考にそれぞれ追加します。
最後にSettingタブからHeroku上での環境変数を設定します。
DATABASE_URLはHeroku側が追加してくれているのでそのままでOKです。
ツイッターアプリを動かすために必要な4つのトークンをそれぞれ追加してください。
heroku run python scheduler_by_every_10_minutes.py
ツイートを収集するスクリプトは自動で走ってくれますが、こちらの任意のタイミングでスクリプトを走らせることもできます。
今回は動作確認のために1度走らせてみます。
heroku open
ブラウザが開いてサイトが表示されていればデプロイ成功です。
おわり
開発環境
- Python 3.6.7(開発言語)
- PostgreSQL(データーベース)
- SQLAlchemy(O/Rマッパー)
- Flask(Webフレームワーク)
- Jinja2(テンプレートエンジン)
- Bootstrap(HTML/CSSフレームワーク)
- Heroku(デプロイ先のクラウド)
遊んでてよく分からないところがあったら、ここらへんを検索ワードにして調べてみてくだしゃい!
なにか質問があればDiscordの方へどうぞ!
お問い合わせや質問など
Discord: EVE Japanese IT
Twitter: @evekatsu
IT系に興味がある人はぜひDiscordの方に遊びにきてみてください。
また、面白いアイデアも随時募集しています!
Twitterの方はフォロー外にDMを解放しています。