安裝 Open Loyalty

Open Loyalty 係一款開源嘅  loyalty program,包含咗 Admin(後台管理)、Client(客戶端)、POS(門市),3 種不同嘅獨立登入畫面,同時提供了一個全功能的 API,於是 Open Loyalty 可以獨立運作或者同你嘅 shopping cart 結合,打通網上網下的渠道,等你華麗轉身成為「全通道零售」。

尚欠嘅係 mobile 版(或者係 PWA 版),喱個係我哋嘅強項,留番俾我哋無限發揮啦!

先嚟講安裝

Open Loyalty 需要用到 PostgreSQL、ElasticSearch、Mailhog,而且有分開 Frontend 同 Backend,所以最理想係用 Docker 嚟搞,一台機裝哂咁多個種嘢,成本低同埋可以分開嚟管理,有起事上嚟,風險低啲,當然如果隻 Docker 出事,咁就一鑊熟。😀

我己經用 Ubuntu 18.04 裝咗 Docker+Portainer,第一步係去 GitHub clone Open Loyalty 落嚟你部機度:

git clone https://github.com/DivanteLtd/open-loyalty open-loyalty

佢都有教你點樣安裝嘅,不過我係根據我自己嘅需求再改下啲安裝步驟啫,俾你參考下,同埋,我搞咗成兩個禮拜,佢嘅步驟冇我嗰個咁清楚,而且,我個係 work 嘅,佢嗰個搞極都有啲麻煩,好似有心要你改用佢哋嘅收費版咁。😂

原裝嘅 docker/docker-compose.yml 係咁嘅:

version: "2"

services:
  php:
    container_name: openloyalty_backend
    image: divante/open-loyalty-fpm
    links:
      - db
      - elk
      - mail
    depends_on:
      - db
    env_file:
        - .env
  nginx:
    container_name: openloyalty_frontend
    image: divante/open-loyalty-web
    links:
      - php
    ports:
      - "80:80"
      - "8182:3001"
      - "8183:3002"
      - "8184:3003"
  elk:
    container_name: openloyalty_elk
    image: divante/open-loyalty-elasticsearch:2.2.0
  db:
    container_name: openloyalty_db
    image: postgres:9
    env_file:
        - .env
  mail:
    container_name: openloyalty_mail
    image: mailhog/mailhog
    ports:
      - "8186:8025"

 

首先 docker-compose 嘅版本比較舊,仲係 version 2,最好改用新啲嘅版本啦,services 入而面有 5 樣嘢:

  1. php 就係隻 Backend
    啲 program 喺哂喱度,隻 image 係直接用官方提供嘅,如果你要改,咁就唔係今次嘅話題,要另外搵篇 post 先得。
  2. nginx 就係隻 Frontend
    佢嘅作用係 redirect 啲 http request 去不同嘅 backend,因為我自己有隻獨立嘅 nginx 做 reverse proxy,我有諗過係咪可以取消?我隻 proxy 識得點樣用 folder 轉 ports,即係 http://domain.com/admin 轉去 http://server.ip:8182,不過當 Open Loyalty 會交叉用唔同 ports 嘅時候我就搞唔掂,暫時要照用住先。個 port 80 係俾 API 用嘅,port 8182 係 admin,port 8183 係 client,而 port 8184 就係 POS。
  3. elk 係隻 ElasticSearch
    當 Open Loyalty 開動嘅時後,絕大部份嘅資料會存咗喺喱度,雖然可以增快個 response,不過做 backup 嘅時候就要小心。
  4. db 係隻 PostgreSQL
    仲係用 version 9,我冇去查查係咪可以用新啲嘅版本,為免麻煩,都係照樣用住先。
  5. mail 係隻 Mailhog
    Mailhog 係用嚟模擬 email server,當 Open Loyalty 要發電郵嘅時候,佢就接收哂啲電郵,你可以用 http://server.ip:8186 去個 web 畫面檢查啲電郵正唔正確。我冇用,我用 Mailgun 免費 account 直接 send 啲電郵,所以我會取消喱個部分。

會用到 environment variables (docker/.env):

POSTGRES_DB=openloyalty
POSTGRES_USER=openloyalty
POSTGRES_PASSWORD=openloyalty

APP_DB_HOST=db
APP_DB_PORT=5432
APP_DB_USER=openloyalty
APP_DB_PASSWORD=openloyalty
APP_DB_NAME=openloyalty

ELK_HOST=elk

冇咩特別要改嘅地方,照用或者改用你自己覺得容易記嘅名同密碼都得,悉隨尊便。

😋  我就改成咁:

version: "3.5"

services:
  php:
    container_name: x7-loyalty_backend
    image: divante/open-loyalty-fpm
    links:
      - db
      - elk
      # - mail
    depends_on:
      - db
    env_file:
        - .env
    environment:
      # 192.168.12.150 係我隻 docker 嘅 IP address,8183 係 client 登入接口
      - frontend_customer_panel_url=http://192.168.12.150:8183/
      - frontend_password_reset_url=192.168.12.150:8183/#!/password/reset
    extra_hosts:
      - "openloyalty.localhost:127.0.0.1"
    volumes:
    # 要改 parameters.yml 內的 SMTP 資料,所以將佢放出嚟
      - app_data:/var/www/openloyalty/app/config
    networks:
      - backend

  nginx:
    container_name: x7-loyalty_frontend
    image: divante/open-loyalty-web
    depends_on: 
      - php
    ports:
      - "8180:80"     # API
      - "8182:3001"   # Admin
      - "8183:3002"   # Client
      - "8184:3003"   # POS
    extra_hosts:
      - "openloyalty.localhost:127.0.0.1"
    volumes:
      - web_data:/etc/nginx/conf.d
  # 192.168.12.150 係我隻 docker 嘅 IP address,8183 係 API1 接口
    command: bash -c "sed -i -e 's@"http://openloyalty.localhost/api"@'\"http://192.168.12.150:8180/api\"'@g' /var/www/openloyalty/front/config.js && nginx -g 'daemon off;'"
    networks:
      - backend

  elk:
    container_name: x7-loyalty_elk
    image: divante/open-loyalty-elasticsearch:2.2.0
    volumes:
      - elk_data:/usr/share/elasticsearch/data
    networks:
      - backend

  db:
    container_name: x7-loyalty_db
    image: postgres:9
    ports:
      - "5443:5432"
    expose:
      - "5432"
    volumes:
      - db_data:/var/lib/postgresql/data

    env_file:
        - .env
    networks:
      - backend

  # 我直接用 Mailgun 發 emails,唔使安裝 Mailhug
  # mail:
  #   container_name: x7-loyalty_mail
  #   image: mailhog/mailhog
  #   ports:
  #     - "8186:8025"
  #   networks:
  #    - backend

networks:
  backend:
    name: $VIRTUAL_NETWORK
    driver: bridge 

volumes:
  app_data:
    name: x7-loyalty-back
  web_data:
    name: x7-loyalty-front
  db_data:
    name: x7-loyalty-db
  elk_data:
    name: x7-loyalty-elk

 

解釋一下:

  • #15~#18
    因為我要用 server IP 嚟指住隻 Open Loyalty server,所以要較番正個 URL。
  • #19~#20
    Open Loyalty default 係要用 openloyalty.localhost 嚟指住隻 server 嘅,用 extra_hosts 可以直接加個 host record,咁就唔使下下去 edit 隻 etc/hosts。
  • #21~#23
    因為有要修改嘅檔案,根據 docker 嘅要求,如果唔想每次都 reset 咗,你就要開個 Volume 裝住佢,docker 嘅叫法係 persistent storage。
  • #30 & #31
    隻 nginx 要確定隻 php Start 咗先,否則會有機會自己停咗,要手動再 start 過,加咗喱句就冇出過停機問題。
  • #41 & #42
    都係因為我要用 docker 嘅 IP number 嚟指住隻 Open Loyalty server。

我個 .env 係咁:

VIRTUAL_NETWORK=x7-dev

POSTGRES_DB=openloyalty
POSTGRES_USER=openloyalty
POSTGRES_PASSWORD=openloyalty

APP_DB_HOST=x7-loyalty_db
APP_DB_PORT=5432
APP_DB_USER=openloyalty
APP_DB_PASSWORD=openloyalty
APP_DB_NAME=openloyalty

ELK_HOST=elk

冇咩新嘢,淨係多咗個 VIRTUAL_NETWORK 用嚟同共其他 container 分開 network 用。

準備好,開始安裝

cd docker
docker-compose up -d

跳入個 sub-folder 唔使打咁多字

安裝完,咩都唔好搞住,立馬去改隻 parameters.yml,我係改啲 mailer 資料,採用 Mailgun 幫手做 SMTP Relay Server 發電郵
ls -al var/cache
rm -rf var/cache/*

清除已經有嘅 cache data

docker-compose -t docker-compose.yml exec --user=www-data php phing setup

安裝 sample data,如果唔想要太多 data 可以用 basic-setup 取代 setup

安裝正常畫面 可以去 Mailgun 查下,因為當setup 加啲 data 嘅時候會產生 email,於是 Mailgun 會顯示收到幾多待發電郵
Admin login 可以用 default 用戶 = admin,密碼 = open Admin welcome 畫面係 Dashboard
第一步係去 Account > Edit your account 改改你個 Admin 密碼 😇
客戶端登入 申請一個你私人 account,同時可以明白下個系統嘅操作
個密碼款式係有限制嘅,要有大細草同數字同符號,之類之類。 順利登記
會收到兩封 emails 第一封,新登記送你 100 分
第二封,請你激活你個 account,留意,你要 access 倒個 Open Loyalty server 先可以 click 個 Activation button 你可以用個 email 或者你個電話號碼登入
順利登入 POS login 就唔可以由用戶登記嚟開 account 嘅,要由 admin 搞,先 create POS 然後 create Merchant,位 merchant 登入就係 POS 畫面
POS 登入 順利登入 POS 畫面

暫時算係咁,至於 Open Loyalty 嘅詳細功能要日後慢慢再講,係咁先,拜拜 👋