Ha4go ã‚’å‚ç…§ã—ã¦ãã ã•ã„。
本アプリåŠã³ã‚½ãƒ¼ã‚¹ã‚³ãƒ¼ãƒ‰ã®è‘—作権ã¯Code for Kanazawaã«å¸°å±žã—ã¾ã™ã€‚ 但ã—ã€ã“ã®ã‚½ãƒ¼ã‚¹ã‚³ãƒ¼ãƒ‰ã¯MPL 2.0ã®ã‚‚ã¨é…布ã•れã¦ã„ã¾ã™ã€‚MPLã«å¾“ãˆã°ã€ã©ãªãŸã§ã‚‚åˆ©ç”¨ã€æ”¹å¤‰ã€åŠã³å†é…布ãŒå¯èƒ½ã§ã™ã€‚
本リãƒã‚¸ãƒˆãƒªã® issues
経由ã§ã”連絡ãã ã•ã„。
本リãƒã‚¸ãƒˆãƒªã‚’フォークã—ã¦ä½œæ¥ã—ã€ãƒ‡ãƒ—ãƒã‚¤å¯èƒ½ãªçŠ¶æ…‹ã«ãªã‚Šã¾ã—ãŸã‚‰ GitHub 上ã‹ã‚‰ master
プルリクエストをãã ã•ã„。本リãƒã‚¸ãƒˆãƒªé‹ç”¨ãƒãƒ¼ãƒ ãŒå¯¾å¿œã„ãŸã—ã¾ã™ã€‚開発環境ã®ä½œæˆã¯ã€å¾Œè¿°ã™ã‚‹ "ãƒãƒ¼ã‚«ãƒ«ç’°å¢ƒã§ã®é–‹ç™ºç’°å¢ƒä½œæˆ" åŠã³ "heroku ã§ã®é–‹ç™ºç’°å¢ƒä½œæˆ" ã‚’å‚ç…§ã—ã¦ãã ã•ã„。
様々ãªå›£ä½“ãªã©ã«å¯¾å¿œã§ãるよã†ã« Code for Kanazawa ä¾å˜ã®éƒ¨åˆ†ã¯ãªãã€ãƒ•ォーク & 環境変数ã§ã™ã¹ã¦ã‚«ã‚¹ã‚¿ãƒ å¯èƒ½ãªã‚ˆã†ã«ä½œã£ã¦ã‚りã¾ã™ã€‚プルリクエスト時ã«ã¯ã“ã®åŽŸå‰‡ã‚’å®ˆã£ã¦ã„ãŸã ã‘るよã†ãŠé¡˜ã„ã—ã¾ã™ã€‚
ブランãƒå | æ¦‚è¦ |
---|---|
master |
デプãƒã‚¤å¯èƒ½ãªçŠ¶æ…‹ã®ã‚‚ã®ã§ã™ |
release |
Code for Kanazawa å‘ã‘ã«ãƒ‡ãƒ—ãƒã‚¤ã—ãŸéš›ã€ã“ã“ã«ãƒžãƒ¼ã‚¸ã—ã¾ã™ |
gh-pages |
コードã¨ã¯ç‹¬ç«‹ã—㟠Ha4go ã«ã¤ã„ã¦ã®ãƒ‰ã‚ュメント(orphan branch ) |
heroku_master |
master ã¸ã®ãƒžãƒ¼ã‚¸å‰ã«ãƒ‡ã‚¶ã‚¤ãƒŠç¢ºèªç”¨ãƒ–ランム|
上記以外ã¯å„自ã«ã¾ã‹ã›ã¾ã™ã€‚
下記ã®ãƒ„ールやサーãƒã«ä¾å˜ã—ã¦ã„ã¾ã™ã€‚å„è‡ªã§æº–å‚™ã—ã¦ãã ã•ã„(準備方法ã¯å¾Œè¿°ã—ã¦ã‚りã¾ã™)。
- Ruby on Rails 4
- MySQL サーãƒ
- SMTP サーãƒ
- Facebook アプリ
$ git clone https://github.com/codeforkanazawa-org/ha4go.git
$ cd ha4go
$ bundle install --path vendor/bundle
Ha4goをカスタムã™ã‚‹ãƒ‡ãƒ¼ã‚¿ã®ã„ãã¤ã‹ã¯ç’°å¢ƒå¤‰æ•°ã‚’経由ã—ã¦æŒ‡å®šã—ã¾ã™ã€‚ dotenv
を採用ã—ã¦ã„ã‚‹ã®ã§é–‹ç™ºã«ã¯ cp .env.sample .env
ã—ã€å†…容を変更ã—ã¦ä½¿ã£ã¦ä¸‹ã•ã„ã€‚ç¾æ™‚点ã§ã¯å…¨ã¦ã®å€¤ã‚’è¨å®šã™ã‚‹å¿…è¦ãŒã‚りã¾ã™(çœç•¥ã§ãã¾ã›ã‚“ã€å®Ÿéš›ã«å˜åœ¨ã™ã‚‹smtpサーãƒãªã©ã‚’指定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™)
$ cp .env.sample .env
$ vim .env
ç¾æ™‚点ã§ã¯ä»¥ä¸‹ã®ãƒ‡ãƒ¼ã‚¿ã‚’用æ„ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚入力ã™ã‚‹å€¤ã¯å¾Œè¿°ã™ã‚‹å„準備を確èªã—ã¦ãã ã•ã„。
FACEBOOK_APP_ID=12341234
FACEBOOK_APP_SECRET="hogehogehoge"
DELIVERY_METHOD=letter_opener_web
SMTP_SERVER='smtp.gmail.com'
SMTP_PORT=587
SMTP_DOMAIN='googleapps.domain'
SMTP_USER='notifier_user@googleapps.domain'
SMTP_PASSWORD='password_of_notifier_user'
APP_HOST=localhost:3000
MYSQL_HOST=127.0.0.1
MYSQL_USER=ha4go
MYSQL_PW=ha4goha4go
USE_HTTPS=0
Facebook ã«ãƒ†ã‚¹ãƒˆç”¨ã‚¢ãƒ—リã¨ã—ã¦ç™»éŒ²(OAuthèªè¨¼ã®ãŸã‚ç™»éŒ²å¿…é ˆ)ã—ã¦ãã ã•ã„。
Facebook Developers https://developers.facebook.com/
- メニュー > My Apps > Add a New App
- 種別ã®ä¸ã‹ã‚‰ã€ã€Œã‚¦ã‚§ãƒ–サイト(www)ã€ã‚’é¸æŠž
- アプリã®åå‰ã‚’入力(ha4go-devãªã©)
- カテゴリをé©å½“ã«é¸æŠžã—ã¦Create App ID ã§ID発行
- Quick Startã¨ã—ã¦ã‚³ãƒ¼ãƒ‰ãŒå‡ºã¦ãã‚‹ãŒã€ã“ã“ã¯é£›ã°ã—ã¦ä»¥ä¸‹ã‚’入力ã—ã¦Next
- "Tell us about your website"
- Site URL:
http://localhost:3000/
- Mobile Site URL:
http://localhost:3000/
- メニュー > My Appsã«3ã§å…¥åŠ›ã—ãŸã‚¢ãƒ—リåãŒå‡ºã‚‹ã®ã§ãã“ã‹ã‚‰ãƒ€ãƒƒã‚·ãƒ¥ãƒœãƒ¼ãƒ‰ã¸
- "App ID" 㨠"App Secret"を控ãˆã¦ãŠã„ã¦ã€
.env
ã‚„ 環境変数ã§ç”¨ã„ã¦ä¸‹ã•ã„
FACEBOOK_APP_ID={App ID}"
FACEBOOK_APP_SECRET={App Secret}
nginxãªã©ã®ãƒªãƒãƒ¼ã‚¹ãƒ—ãƒã‚シを使ã„ã€ãƒãƒ¼ã‚«ãƒ«ä»¥å¤–ã«ãƒ‡ãƒ—ãƒã‚¤ã—ã¦HTTPSを用ã„ã‚‹å ´åˆã€
USE_HTTPS=1
ã¨ã—ã¦ãã ã•ã„。内部的ã«ãƒªãƒ³ã‚¯ã‚’作æˆã™ã‚‹éš›ã€ https://
ãŒæŽ¡ç”¨ã•れるよã†ã«ãªã‚Šã¾ã™ã€‚
DELIVERY_METHOD=
ã§ãƒ¡ãƒ¼ãƒ«é€ä¿¡æ–¹æ³•ã‚’é¸æŠžã—ã¾ã™ã€‚
開発時ã«ã¯ letter_opener_web
ãŒæŒ‡å®šã§ãã¾ã™ã€‚ã“れを指定ã™ã‚‹ã¨ãƒ¡ãƒ¼ãƒ«ã¯é€ä¿¡ã•れãšã€ã‚µãƒ¼ãƒã®ç”¨æ„ã‚‚å¿…è¦ã‚りã¾ã›ã‚“ã€‚åŠ ãˆã¦ http://localhost:3000/letter_opener
ã§æ“¬ä¼¼çš„ã«é€ä¿¡ã—ãŸãƒ¡ãƒ¼ãƒ«ã‚’確èªã™ã‚‹ã“ã¨ãŒã§ãã¾ã™(開発時ã®ã¿æœ‰åйãªURLã§ã™)。ã“ã®å ´åˆã¯ SMTP_
ã‹ã‚‰ã¯ã˜ã¾ã‚‹å…¨ã¦ã®ç’°å¢ƒå¤‰æ•°ã¯ç„¡è¦–ã•れã¾ã™ã€‚
é‹ç”¨é…ç½®ãªã©å®Ÿãƒ¡ãƒ¼ãƒ«ã‚’用ã„ã‚‹å ´åˆã«ã¯ smtp
を指定ã—ã¦ã€ãƒ¡ãƒ¼ãƒ«ã‚µãƒ¼ãƒã‚’用æ„ã—ã¦ãã ã•ã„。GmailãŒãã®ã¾ã¾ä½¿ãˆã‚‹ã®ã§ã€ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã‚’å–å¾—ã—ã¦è¨å®šã™ã‚‹ã¨æ¥½ã§ã™ã€‚(Gmailã®å ´åˆã® SMTP_DOMAIN㯠smtp.gmail.com
ã§ã™)
DELIVERY_METHOD=smtp
ç¾åœ¨ã€ç’°å¢ƒãŒ production
ã ã‚ã†ãŒ development
ã ã‚ã†ãŒã€MySQL を用ã„ã¦ã„ã¾ã™ã€‚以下ã®3ã¤ã®æ–¹æ³•ã‹ã‚‰ã€å¥½ããªã‚‚ã®ã‚’使ã£ã¦ä¸‹ã•ã„。
MySQLをインストールã—〠init.sql
ã‚’å‚考ã«ã—㦠db 㨠Ha4go用ユーザーを 作æˆã—ã¦ãã ã•ã„。下記㯠OSX ã§ä¸€ç•ªç°¡å˜ãªä¾‹ã§ã™ã€‚
mysql.server start # start mysql
mysql -uroot -p < init.sql # create db & user
export MYSQL_HOST=localhost # (or edit .env)
bundle exec rake db:setup # setup database
MySQLをビルドã—ã€ç”¨ã„ã¾ã™ã€‚ docker-machine
ãªã©ã‚’用ã„ã¦ã„ã‚‹å ´åˆã€ãƒªãƒ¢ãƒ¼ãƒˆãƒ›ã‚¹ãƒˆã®æŽ¥ç¶šåˆ¶é™ã§ãƒ¦ãƒ¼ã‚¶ root
ã§ã‚¢ã‚¯ã‚»ã‚¹ã§ãã¾ã›ã‚“。
注æ„ã“ã®MySQLã¯å…¬å¼Dockerã®rootパスワードãã®ã¾ã¾ãªã©å®‰å…¨ã§ã¯ãªã„ã§ã™ã®ã§é‹ç”¨ã«ã¯å……分気をã¤ã‘ã¦ä¸‹ã•ã„
bundle exec rake -f Rakefile.deploy build[db] # image build
bundle exec rake -f Rakefile.deploy run[db,DEBUG] # start mysql
export MYSQL_HOST=`docker-machine ip default` # docker-machineã®å ´åˆã€Linuxã®å ´åˆã¯ 127.0.0.1 ãªã©
mysql -uroot -h$MYSQL_HOST -p < init.sql # create db & user
bundle exec rake db:setup
以後㯠bundle exec rake -f Rakefile.deploy run[db,DEBUG]
ã§é–‹å§‹ã§ãã¾ã™ã€‚
後述ã™ã‚‹ã‚¢ãƒ—リã®èµ·å‹•ã§åŒæ™‚ã«è¡Œãˆã¾ã™ã€‚
bundle exec rails s
ãã®å¾Œã€ãƒ–ラウザ㧠http://localhost:3000
ã§ç”»é¢ãŒè¦‹ãˆã‚Œã°æˆåŠŸã€‚ãƒ¡ãƒ¼ãƒ«é€ä¿¡ãƒ»SNSã¸ãƒã‚¹ãƒˆãªã©éžåŒæœŸå®Ÿè¡Œã™ã‚‹ã‚‚ã®ã¯ä»¥ä¸‹ã®ã‚³ãƒžãƒ³ãƒ‰ã§Active Jobã‚’å‹•ã‹ã—ã¦ãã ã•ã„。
bundle exec rake jobs:work
開発をスムーズã«ã™ã‚‹ãŸã‚ã€db/seeds/モデルå.yml.sample
ã«è¨˜è¿°ã•れã¦ã„るダミーデータを開発用ã«åˆ©ç”¨ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚
以下ã®ã‚³ãƒžãƒ³ãƒ‰ã‹ã‚‰ãƒ€ãƒŸãƒ¼ãƒ‡ãƒ¼ã‚¿ã‚’入れるã“ã¨ãŒå¯èƒ½ã§ã™ã€‚
bundle exec rake db:seed:unlock_yml
bundle exec rake db:seed
ha4go 㯠Facebook ãƒã‚°ã‚¤ãƒ³ã‚’利用ã—ã¦ã„ã‚‹ãŸã‚〠uid
ã¯ãã® Facebook ãŒæ‰•ã„出ã—ãŸIDを本æ¥ç”¨ã„ãªã„ã¨ã„ã‘ã¾ã›ã‚“ãŒã€db/seeds/users.yml.sample ã§ã¯ãƒ€ãƒŸãƒ¼ã®å€¤ã‚’用ã„ã¦ã¾ã™ã€‚ã“ã®å€¤ã‚’使ã£ã¦ã‚‚ Facebook ã¨é€£æºã¯ã¨ã‚Œã¾ã›ã‚“。
(ç¾åœ¨æº–å‚™ä¸ã€å¾Œè¿°ã™ã‚‹ docker-compose を使ã†ã“ã¨ã‚’ãŠè–¦ã‚ã—ã¾ã™)
docker-compose を使ã†ã¨ã€db 㨠web 両方ã®ç’°å¢ƒã‚’ç«‹ã¡ä¸Šã’ã¦ãれã¾ã™.env
ファイル㯠MYSQL_HOST=db
ã¨ã—ã¦ãŠã„ã¦ãã ã•ã„。
注æ„ã“ã®MySQLã¯å…¬å¼Dockerã®rootパスワードãã®ã¾ã¾ãªã©å®‰å…¨ã§ã¯ãªã„ã§ã™ã®ã§é‹ç”¨ã«ã¯å……分気をã¤ã‘ã¦ä¸‹ã•ã„
eval $(docker-machine env) # docker-machineを用ã„ã¦ã„ã‚‹å ´åˆ
docker-compose build
docker-compose up
export MYSQL_HOST=`docker-machine ip default` # docker-machineã®å ´åˆã€Linuxã®å ´åˆã¯ 127.0.0.1 ãªã©
mysql -uroot -h$MYSQL_HOST -p < init.sql # create db & user
db ã®åˆæœŸè¨å®šã¯ä»¥ä¸‹ã®æ‰‹é †ã§è¡Œã£ã¦ãã ã•ã„。
docker-compose run --rm web bundle exec rake db:setup # dbã®ä½œæˆ, migrate, seed ã®æŠ•å…¥
ã“ã®çŠ¶æ…‹ã§ã€docker-machine ip
:3000 ã«ãƒ–ラウザã§ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ã¨ãƒšãƒ¼ã‚¸ãŒè¦‹ã‚Œã‚‹ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚
基本的ã«ã€rails コマンドãªã©ä»–ã®ã‚‚ã®ã‚’実行ã—ãŸã„å ´åˆã‚‚ã€ä¸Šè¨˜ã®ã‚ˆã†ã«docker-compose run --rm web bundle exec
ã®å¾Œã«ã¤ã‘れã°å®Ÿè¡Œã§ãã¾ã™ã€‚
ã§ãã¾ã™! 3306ãƒãƒ¼ãƒˆã‚’マッピングã—ã¦ã‚りã¾ã™ã®ã§ã€docker-machine ip
ã§å–å¾—ã§ãã‚‹IPアドレスã®3306番ã«ã‚¢ã‚¯ã‚»ã‚¹ã—ã¦ãã ã•ã„。
docker-compose up
を実行ã—ã¦ã„るプãƒã‚»ã‚¹ã‚’ã€Ctrl+C ã§æ¢ã‚ã¦ã€å†åº¦ docker-compose up
を実行ã—ã¦ãã ã•ã„。
macOS ã‚’å‰æã¨ã—ã¦æ›¸ã„ã¦ã„ã¾ã™ã€‚ãŠãらã Ubuntu ãªã©ã§ã‚‚ã§ãã‚‹ã¨æ€ã„ã¾ã™ã€‚
アカウントå–å¾—ã—ã€CLIツールã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã‚’行ã£ã¦ãã ã•ã„。
Heroku Command Line | Heroku Dev Center
heroku version
ã§å•題ãªãツールã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’å–å¾—ã§ãã‚‹ã“ã¨ã‚’確èªã—ã¦ãã ã•ã„。
$ git clone https://github.com/codeforkanazawa-org/ha4go.git
$ cd ha4go
$ bundle install --path vendor/bundle
clone ã—ãŸãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã«ç§»ã‚Šã€ã‚¢ãƒ—リ作æˆã€DBè¨å®šãªã©ä¸‹è¨˜ã®ç”¨ã«è¡Œã„ã¾ã™
$ cd ha4go # å‰è¿°ã® bundle install ã—㟠ディレクトリã§ã™
$ heroku create
$ heroku config | grep CLEARDB_DATABASE_URL # ã“れ㧠mysql://.+ を確èª
$ heroku config:set DATABASE_URL=mysql2://(上ã®.+ã®å€¤ã‚’用ã„ã‚‹)
å‰è¿°ã—㟠ãƒãƒ¼ã‚«ãƒ«ç’°å¢ƒã¸ã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«æ‰‹é †
ã® .env ãƒ•ã‚¡ã‚¤ãƒ«ã®æº–å‚™
ã§æŒ‡å®šã™ã‚‹å†…容を準備ã—ã¦è¨å®šã—ã¾ã™ã€‚
ä¸å¿…è¦ãªã‚‚ã®ã‚‚ã‚ã‚‹ã®ã§ã€ä¸‹è¨˜ã®å†…容ã®ã¿ã‚’å„自ã®ç”¨æ„ã—ãŸå€¤ã§è¡Œã£ã¦ãã ã•ã„。
$ heroku config:set FACEBOOK_APP_ID=12341234
$ heroku config:set FACEBOOK_APP_SECRET=hogehogehoge
$ heroku config:set SMTP_SERVER=smtp.gmail.com
$ heroku config:set SMTP_PORT=587
$ heroku config:set SMTP_DOMAIN=googleapps.domain
$ heroku config:set SMTP_USER=notifier_user@googleapps.domain
$ heroku config:set SMTP_PASSWORD=password_of_notifier_user
$ heroku config:set DELIVERY_METHOD=smtp
$ git push heroku # デプãƒã‚¤
$ heroku run rake db:setup # データベースマイグレーション & åˆæœŸå€¤ã®è¨å®š
$ heroku open # ブラウザã§é–‹ã„ã¦ã¿ã‚‹
$ heroku logs # ãƒã‚°ã®ç¢ºèª
$ heroku run rake db:migrate # 以é™ã‚¤ãƒ†ãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³æ™‚ã«å¿…è¦ã‚れã°
åŒãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã§ git push heroku
ã‚’ã™ã‚Œã°ãƒ‡ãƒ—ãƒã‚¤ã•れã¾ã™ã€‚データベースã®ãƒžã‚¤ã‚°ãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³ã‚„åˆæœŸãƒ‡ãƒ¼ã‚¿ã®è¨å®šã‚’行ã†å¿…è¦ãŒã‚ã‚‹å ´åˆ(最åˆã®ãƒ‡ãƒ—ãƒã‚¤æ™‚ã«ã¯å¿…ãšå¿…è¦ã§ã™)ã«ã¯ heroku run rake db:setup
ã‚’åŒãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã§è¡Œã£ã¦ãã ã•ã„。
をクリックã™ã‚‹ã“ã¨ã§Herokuデプãƒã‚¤ãŒå®¹æ˜“ã«ã§ãã¾ã™ã€‚
ãã®å ´åˆã€
- ç”»åƒä¿å˜ã§åˆ©ç”¨ã™ã‚‹ãƒ•ァイルストレージã®è¨å®šï¼ˆãƒ‡ãƒ•ォルトã§ã¯Amazon S3を指定ã—ã¦ã„ã¾ã™ï¼‰
- メールé…信サービスã®è¨å®šï¼ˆãƒ‡ãƒ•ォルトã§ã¯SendGridを指定ã—ã¦ã„ã¾ã™ã€‚è¨å®šæ–¹æ³•)
- データベースã®è¨å®š
ãŒå¿…è¦ã«ãªã‚Šã¾ã™ã€‚
é‹ç”¨æ™‚ã«ã¯SSL証明書を用ã„ã‚‹ã“ã¨ã‚’å¼·ãæŽ¨å¥¨ã—ã¾ã™ã€‚
<団体å>.ha4go.net
ã§é‹ç”¨ã—ãŸã„å ´åˆã«ã¯DNSã‚’è¨å®šã—ã¾ã™ã®ã§Issues · codeforkanazawa-org/ha4go経由ã§ä¸‹è¨˜ã‚’明記ã®ä¸Šé€£çµ¡ãã ã•ã„。確èªã§ã次第è¨å®šã„ãŸã—ã¾ã™ã€‚
- 団体åã¨é€£çµ¡å…ˆ
- è¨å®šã—ãŸã„団体å(
<団体å>.ha4go.net
ã¨ãªã‚Šã¾ã™) - IPアドレスもã—ãã¯CNAME
SSL証明書ã«ã¤ã„ã¦ã¯ *.ha4go.net
ã‚’EV証明書をå–å¾—ã—ã¦é‹ç”¨ã—㦠ãŠã‚Šã¾ã›ã‚“ ã®ã§ã€å„自ã§é‹ç”¨ã—ãŸã„ <団体å>.ha4go.net
ã®è¨¼æ˜Žæ›¸ã‚’å–得・é‹ç”¨ã—ã¦ãã ã•ã„。