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 樣嘢:
- php 就係隻 Backend
啲 program 喺哂喱度,隻 image 係直接用官方提供嘅,如果你要改,咁就唔係今次嘅話題,要另外搵篇 post 先得。 - 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。 - elk 係隻 ElasticSearch
當 Open Loyalty 開動嘅時後,絕大部份嘅資料會存咗喺喱度,雖然可以增快個 response,不過做 backup 嘅時候就要小心。 - db 係隻 PostgreSQL
仲係用 version 9,我冇去查查係咪可以用新啲嘅版本,為免麻煩,都係照樣用住先。 - 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 用。
準備好,開始安裝
暫時算係咁,至於 Open Loyalty 嘅詳細功能要日後慢慢再講,係咁先,拜拜 👋