Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Install HH Server

If you get eror database query eror “clause is not in GROUP BY clause ….” run this code on your SQL console:

set global sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
set session sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';

Setting up Environment and App Config

Add JWT on /config

you can find the example of JWT key on config/jwt_private.test.key and config/jwt_public.test.key

jwt_private.key

jwt_public.key

create ~/.credentials/google_credentials.json

google_credentials (1).json

create .env to populate ENV

you can copy the existing .env.test to create new .env example :

APP_TROTTHLE_REQUEST=false
APP_USE_CLEVERTAP_SIMILAR_RESTAURANTS=false
SIDEKIQ_ASK_GOOGLE_TO_SCRAPE_RESTAURANT_PAGE=false
SIDEKIQ_CREATE_GOOGLE_CALENDAR_EVENT=false
WEB_V2_HOST_URL=https://web-staging.hungryhub.com
MYSQL_SERVER_HOST=db
MYSQL_PORT=3306
MYSQL_DATABASE=hungryhub_dev
MYSQL_USER=root
MYSQL_PASSWORD=root
MEMCACHED_HOST=localhost
MEMCACHED_URL=http://localhost:11211
REDIS_LRU_URL=redis://localhost:6379/2
REDIS_LRU_RO_URL=redis://localhost:6379/2
PERSISTENT_REDIS_PRIMARY=localhost:6379
PERSISTENT_REDIS_READER=localhost:6379
INV_REDIS_PRIMARY=localhost:6379
INV_REDIS_READER=localhost:6379
IS_LOCAL=true
HH_HOST_URL=http://localhost:3000
DYNAMIC_HOST_URL=//localhost
ROLLBAR_TOKEN=826f10c64a68466abaeb0a02c82f5e7b
ENABLE_ROLLBAR=false
MANDRILL_KEY=EfLfrh4-5LroJIY26Y00SQ
RECAPTCHA_SITE_KEY=6Le3KSgTAAAAAKUV0uR20yK4cHyWXB7Mv5K0YnY7
RECAPTCHA_SECRET_KEY=6Le3KSgTAAAAAJUhXH9FV-utIkdjkn-KErFSjb_o
USE_THAILAND_TIME=true
ENABLE_SSL=false
RACK_TIMEOUT_SERVICE_TIMEOUT=40
SIDEKIQ_HOSTNAME=localhost
SIDEKIQ_PORT=6379
SIDEKIQ_NAMESPACE=9
CLEVERTAP_ACCOUNT_ID=TEST-844-867-765Z
CLEVERTAP_PASS_TOKEN=SAA-KIX-IEKL
GOOGLE_MAP_API_KEY=AIzaSyA3WZ0bV6UlI_6P29L3oy2a5RN3nVXEy9E
GOOGLE_MAP_API_KEY_WEB=AIzaSyDC3MLZzvottC2IzXiZ69RUqcOWyOfIslw
GOOGLE_APPLICATION_CREDENTIALS=secrets/google_credentials.json
EDITOR=vim
LOGSTASHER_SOURCE=localhost
FARADAY_DEPRECATE=warn
ACTIVE_SUPPORT_DEPRECATION=log
APP_FIREBASE_MODE=development
FIREBASE_API_KEY=AIzaSyA4v4bdhjqwpTswYUXfMkmLno97XZXYaBA
FIREBASE_AUTH_DOMAIN=hungry-hub-dev.firebaseapp.com
FIREBASE_DATABASE_URL=https://hungry-hub-dev.firebaseio.com/
FIREBASE_STORAGE_BUCKET=hungry-hub-dev.appspot.com
FIREBASE_SERVER_KEY="AAAAOXBgQBk:-LIRHC2lHcuIB5uP"
FIREBASE_STAFF_SERVER_KEY="AAAA0Crx0QM:c5bS56IcNof0yF6StQV2OZxIgdmBWW7"
IS_PRECOMPILE=0
FACEBOOK_GRAPH_VERSION=3.3
ENABLE_WEB_NEW_UI=false
CDN_URL=http://localhost:3000
ENABLE_CDN=false
IOS_APP_ID=8Z9PJ6LL32.dev.com.HungryHubiOSApp
ROLLBAR_TOKEN_CLIENT=f011f58fbab244838b9f3ba67a9c709d
FIREBASE_WEB_API_KEY=AIzaSyDnt9gpQqOeD4xLbcmdVFJ4rp9vQ5twlmc
FIREBASE_DYNAMIC_LINK_DOMAIN=https://k4mu4.app.goo.gl
HH_SHORT_URL=hhub.ly
FACEBOOK_APP_ID=449643878804004
FACEBOOK_APP_SECRET=51830e80176d0688b53398d24684c8cb
FACEBOOK_EVENT_ACCESS_TOKEN=randomstring
OLD_WP_SITE_URL=https://www.hungryhub.com
ENABLE_GOOGLE_SIGN_IN=false
G_ADMIN_AUTH_CLIENT_ID=37828374863-he3717ktq5o3c7d07i1d1fkfnpthdtu1.apps.googleusercontent.com
G_ADMIN_AUTH_SECRET_KEY=I48b8E5ZmPQsh4N33Is3VtdX
EARLY_BIRD_MAX_REVIEWS=5
EARLY_BIRD_ACTIVATE=true
EARLY_BIRD_REWARDS_AMOUNT=150
AWS_ACCESS_KEY_ID=123
AWS_SECRET_KEY=dW1RKwUoTi5MnV+zEh7bAeJsDzArgTn+cz8RZlL0
AWS_REGION=ap-southeast-1
AWS_BUCKET=hh-img-backup
AWS_DOCS_BUCKET=hh-docs-prod
ENABLE_GOOGLE_SHORTENER=false
ENABLE_GOOGLE_ANALYTICS=false
ENABLE_SMS_NOTIFICATION=false
SECRET_KEY_BASE=48fe2cf7976eaccc113c5ff343fe272e96f438afc13e0cc638dfa52a6c84e0edd8682f3ed5db034ae4f627441c2410b2dda2dbdc8c52b42761a9a16f8157c5aaL
LALAMOVE_SECRET_KEY=MCwCAQACBQDXViVdAgMBAAECBAyd5AECAwD6BwIDANx7AgIYfwICQOUCAwDm
LALAMOVE_API_KEY=fdcb60fbf98340b5a4f2234bbbfe9cda
LALAMOVE_HOSTNAME=https://sandbox-rest.lalamove.com
PUSHER_APP_ID=1002895
PUSHER_KEY=3d669c6a8cfc80cdc37e
PUSHER_SECRET=9dc71d74bc7d410d77da
PUSHER_CLUSTER=ap1
GB_PRIMEPAY_TOKEN=VlL8SzIIx4Y4CNNFylVpCA3dHkxtr5tww/a5X4cCi8FRcWwuq64xm13VBv10bpUIjx9R5o/qXNqas9mGgdBN/7x63q0CpFXaPrHSKQs/Hi/vaKoboqBnmskSSUi5J6+r4stPJ7GvYz82sGmM9Xht0u+dFV3OOZNUWoaBPlWrW2bEfTQK
GB_PRIMEPAY_WEBHOOK_URL=http://localhost:3000/api/webhook/gb_primepay
MAILER_PROVIDER=ses
GB_PRIMEPAY_SECRET_KEY=E1umcfzVu1ehD8wx40AmnIEgCTTihTF5
GB_PRIMEPAY_PUBLIC_KEY=TwzTlFYYT8rdPttm7CCjkJyKM8XGOtCQ
APP_GB_PRIMEPAY_MODE=development
IMGPROXY_ENDPOINT=imgproxy-staging.hungryhub.com
IMGPROXY_KEY=68756e6772796875626b6579
IMGPROXY_SALT=68756e67727968756273616c74
SHOPEEPAY_CLIENT_ID=17081945
SHOPEEPAY_CLIENT_SECRET=super-secret-client-secret
SHOPEEPAY_MERCHANT_ID=hungryhub_merchant
SHOPEEPAY_STORE_ID=hungryhub_store
NOCODB_API_TOKEN=HbZkpAg7eLj89p3DPzGGO9CHu23aslHW123
MONGO_DB_URL
MONGO_DB_DATA_SOURCE
MONGO_DB_DATABASE_NAME
MONGO_DB_USER_NAME
MONGO_DB_PASSWORD
PORTAL_FE_URL=https://partners.hungryhub.com
OPENRICE_WEBHOOK_CLIENT_TOKEN=access-token
TAGTHAI_API_URL='https://backend-api-dev.tagthai.com/api'
TAGTHAI_SSO_USER_URL='https://backend-api-dev.tagthai.com/api/service-public/auth-sso-service/user-info'
TAGTHAI_API_KEY='$2a$10$xdHq25exEevdBCW1EQQvx.r/Ms03./HzcQW40H1XnqJluVZoDGWWi'
TAGTHAI_WEBHOOK_URL='https://backend-api-dev.tagthai.com/api/backend/ota-service/hungryhub/booking/callback'
HOMESECTION_WEBHOOK_URL='https://api.netlify.com/build_hooks/659531ca89d89983812180e0'
TABLECHECK_AUTH_ID=auth-id
SEVEN_ROOMS_CLIENT_ID=client-id
SEVEN_ROOMS_CLIENT_SECRET=client-secret
AWS_TRANSLATE_REGION=us-east-1
AWS_TRANSLATE_ACCESS_KEY_ID=AKIARFIAEKSM7CBCPC7I
AWS_TRANSLATE_SECRET_KEY=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
ALIBABA_ACCESS_KEY_ID=access-key-id
ALIBABA_ACCESS_KEY_SECRET=access-key-secret
SILVERSTREET_USERNAME=username
SILVERSTREET_PASSWORD=password
KALEYRA_IO_SID_KEY=kaleyra-io-sid-key
KALEYRA_IO_API_KEY=kaleyra-io-api-key
URL_RWG=sftp://partnerupload.google.com
PORT_RWG=19321
MERCHANTS_FEED_USER_RWG=feeds-xxxx
SERVICES_FEED_USER_RWG=feeds-xxxx
AVAILABILITY_FEED_USER_RWG=feeds-xxxx
RWG_E2E_BOOKING_SERVER_USERNAME=xxxx
RWG_E2E_BOOKING_SERVER_PASSWORD=xxxx
RWG_E2E_RTU_SERVICE_CREDENTIAL=secrets/rwg_e2e_rtu_service_credential.json
RWG_E2E_RTU_SERVICE_PARTNER_ID=20001920
RWG_RTU_WEBHOOK_URL='https://partnerdev-mapsbooking.googleapis.com/v1alpha/notification/partners/'
ROLLBAR_SYN_TOKEN=random
FIREBASE_PROJECT_ID_USER=hungry-hub-dev
FIREBASE_PROJECT_ID_PARTNER=hh-partner-dev
KARAFKA_BOOTSTRAP_SERVERS='127.0.0.1:9092'
NETCORE_API_KEY=random-api-key
ENABLE_ELASTIC_APM=false
GENERATED_SEO_DATA_URL='https://1i3odgcpz2.execute-api.ap-southeast-1.amazonaws.com/test/get-seo-data'
PARTNER_URL='https://partners.hungryhub.com'
OMISE_SKEY_TH=skey_xxx
OMISE_VAULT_KEY_TH=pkey_xxx
OMISE_SKEY_SG=skey_xxx
OMISE_VAULT_KEY_SG=pkey_xxx
DAYS_IN_ADVANCE_FOR_SEARCH_PDT=30
WEELOY_AUTH_ID=auth-id
YOUTUBE_API_KEY=xxx
  • ENV mongodb for local
MONGO_DB_URL='<https://data.mongodb-api.com/app/data-ppgjh/endpoint/data/v1>'
MONGO_DB_API_KEY='bAD0v7FbgEB914OPTtJgRqRdhfNMdJfI8uStOVVgJ5f9c40VnEdSgvohyQSdmblO'
MONGO_DB_DATA_SOURCE='HungryHub'
MONGO_DB_DATABASE_NAME='huy-test'
MONGO_DB_USER_NAME='huy_phan_madison_hungryhub'
MONGO_DB_PASSWORD='l6ECKaPU1iRvRnG9'

setting database.yml

default: &default
  adapter: mysql2
  encoding: utf8mb4
  charset: utf8mb4
  collation: utf8mb4_bin
  database:
  pool: <%= ENV.fetch('DB_POOL') { raise('undefined pool value') } %>
  username: <%= ENV.fetch('DB_USERNAME') { raise('undefined db username') } %>
  password: <%= ENV.fetch('DB_PASSWORD') { raise('undefined db password') } %>
  socket: <%= ENV.fetch('DB_SOCKET') { raise('undefined db socket') } %>
  connect_timeout: 1
  read_timeout: 1
  write_timeout: 1
  checkout_timeout: 1

development:
  <<: *default
  database: booking_development

test:
  <<: *default
  database: booking_test

production:
  adapter: <%= ENV.fetch('DB_ADAPTER') { 'mysql2' } %>
  encoding: utf8mb4
  charset: utf8mb4
  collation: utf8mb4_unicode_ci
  username: <%= ENV['MYSQL_USER'] || raise('undefined db username') %>
  password: <%= ENV['MYSQL_PASSWORD'] || raise('undefined db password') %>
  database: booking_production
  host: <%= ENV['MYSQL_SERVER_HOST'] %>
  port: <%= ENV['MYSQL_PORT'] %>
  pool: 25
  sslca: /data/hh-server/config/rds.pem
  makara:
    id: mysql
    blacklist_duration: 5
    primary_ttl: 5
    primary_strategy: round_robin
    sticky: true
    connections:
      - role: master
        host: xxxx
        url: 'mysql2://xxx:xxx@xxxxx:3306/xxxx'
      - role: slave
        host: xxxx
        url: 'mysql2://xxx:xxx@xxxxx:3306/xxxx'
      - role: slave
        host: xxxx
        url: 'mysql2://xxx:xxx@xxxxx:3306/xxxx'