ุฃูุงุตู ุงูุชุฑููุฌ ูุฑุงุจุท ุงูุฅุญุงูุฉ ุงูุฎุงุต ุจู ุฅูู ู
ููุฑ IaaS Exostate ูุฃูุฏู
ุงูู
ูุงูุฉ ุงูุซุงููุฉ ู
ู ุญู
ูุชู ุงูุฅุนูุงููุฉ. ูู ุงูู
ูุงูุฉ ุงูุฃููู ุ ูุดุฑุช ููุดุฑุช ุชุทุจูู " ูุงุฌูุฉ ุงูู
ุชุฌุฑ " ูุฎุงุฏู
ู
ููุตู ุ ุฏูู ุฃู ูุฑุชุจุท ุจุฃู ุจูุงูุงุช ุ ูุฃุฎููุช ุจูุฐู ุงูุทุฑููุฉ ุงูุณุฎููุฉ ุงูุชู
ุงู
ู ุงูุชุฌุงุฑู ูู ุจูุน ุฎุฏู
ุงุช Exoscale. ุชู
ูุชุญ ู
ุญุงููุงุชู ุงูู
ุซูุฑุฉ ููุดููุฉ ุจูุฌุงุญ ู
ู ูุจู ุฒู
ูู aol-nnov ูุชู
ุฃุฎุฐู ูุชูุธูู ุงูู
ูุงู. ุญุณููุง ุ ูุง ุชุฎุชูู ุงูู
ุฑุญูุฉ ุงูุซุงููุฉ ู
ู ุญู
ูุชู ุงูุฅุนูุงููุฉ ุนู ุงูู
ุฑุญูุฉ ุงูุฃููู - ููู ููุณ ุงูุตูุญุฉ ุงูุชู ุจูุง ุฎุทุฃ:

ูุชู
ุฑุจุท ุงููุงุฌูุฉ ุงูุฃู
ุงู
ูุฉ ุงูุขู ุจุงููุงุฌูุฉ ุงูุฎูููุฉ (' vue-storefront-api ') ุ ููู ุงูุฑุณุงูุฉ ุงููุงุชู
ุฉ ููุณูุง " ููุงู ุฎุทุฃ ู
ุง ... " ูู ู
ุชุตูุญ ุงูุนู
ูู. ูุฐูู ุ ุจุนุฏ ุฃู ุชุฌุงููุช ุงูุชูุงุถุน ุงูุฎุงุทุฆ ุ ูู
ุช ุจุชูุฏูู
ุฑุงุจุท ุงูุฅุญุงูุฉ ุงูุฎุงุต ุจู ุฅูู kat ุ ููู
ุช ุจุฅุฎูุงุก ุงูู
ุธูุฑ ุจุงููุงู
ู ุชุญุช kat - ุชูุงุตูู ุนู ููููุฉ ุฏู
ุฌ "Vue Storefront" ู
ุน "Vue Storefront API".
ูุฏู
ูู ูุฐู ุงูู
ุฑุญูุฉ ุ ูู
ุช ุจุชุนููู ู
ูู
ุฉ ุฑูุน ุฎูููุฉ ูุธูููุฉ ุฅูู ุงูุญุฏ ุงูุฃุฏูู ูุฅุบูุงู ุงููุงุฌูุฉ ุนูููุง.
shemka
ูุฌุนููุง ุฃูุซุฑ ูุถูุญูุง ุ ุฃุนุทู ุตูุฑุฉ ูู
ุช ุจุชุทููุฑูุง ุงุณุชูุงุฏูุง ุฅูู ุชุญููู ุชููููุงุช ุงูุชุทุจูู:

vue-storefront
ูุดุฑ vue-storefront
ุฃุดุฑุช ุฅูููุง ูู ู
ูุงู ุณุงุจู . ูุจุงูุชุงูู ุ ูุฌุจ ุฑูุน vue-storefront-api
ู Elasticsearch ู Redis. ุจูุงุกู ุนูู ุงูุนููุงู / ุงูู
ููุฐ ูู configQL ุ ูุฅู vue-storefront-api
storefront vue-storefront-api
ูู ุงูู
ุณุคููุฉ ุนู GraphQL ููุณูุง.
ุจูุฆุฉ ุงูุนู
ู
ุจุงููุณุจุฉ ุฅูู ูุฐู ุงูู
ุฑุญูุฉ ุ ูุงู ูุฏู ุฃูุถูุง ุฅุตุฏุงุฑ ุตุบูุฑ ู
ู ุฎุงุฏู
Linux Ubuntu 18.04 LTS 64 ุจุช (ูุญุฏุฉ ุงูู
ุนุงูุฌุฉ ุงูู
ุฑูุฒูุฉ 2x 2198 ู
ูุฌุงูุฑุชุฒ ุ ุฐุงูุฑุฉ ูุตูู ุนุดูุงุฆู 2 ุฌูุฌุงุจุงูุช ุ ูุฑุต 10 ุฌูุฌุงุจุงูุช). ู
ุง ูู ูุทูู ูู IaaS ูู ุงููุฏุฑุฉ ุนูู ุงูุจุฏุก ู
ุฑุงุฑูุง ูุชูุฑุงุฑูุง ู
ู ููุทุฉ ุงูุตูุฑ ุ ูุฅููุงุก ุงูุชุฌุงุฑุจ ุงููุงุดูุฉ ุงูุณุงุจูุฉ ูู ุณูุฉ ุงูู
ูู
ูุงุช.
ุงูู
ุฑุญูุฉ ุงูุงููู
ูู ู
ุง ููู ุงููุต ุงูุจุฑู
ุฌู ูุชูุฑุงุฑ ุฎุทูุงุช ุงูุฎุทูุฉ ุงูุฃููู:
ุณูููู ู
ู ุงูุถุฑูุฑู ุงูุชุทูุน ุฅูู ุงููุดุฑ ุงูุชููุงุฆู vue-storefront
ุ ุฏูู ุชุฏุฎู ุจุดุฑู. ูููู ุงูุขู ุ ู
ุซู ูุฐุง ุ ู
ุน vsf
.
ุชุซุจูุช Elasticsearch
# apt install openjdk-11-jre-headless -y # java -version openjdk version "11.0.4" 2019-07-16 OpenJDK Runtime Environment (build 11.0.4+11-post-Ubuntu-1ubuntu218.04.3) OpenJDK 64-Bit Server VM (build 11.0.4+11-post-Ubuntu-1ubuntu218.04.3, mixed mode, sharing) # apt-get install apt-transport-https # wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add - # add-apt-repository "deb https://artifacts.elastic.co/packages/7.x/apt stable main" # apt update # apt install elasticsearch -y
ูุจู ุจุฏุก ุงูุฎุฏู
ุฉ ุ ุชุญุชุงุฌ ุฅูู ุชุบููุฑ ุชูููู Elasticsearch ุญุชู ุชุชู
ูู ู
ู ุงููุตูู ุฅูู ุงูุฎุฏู
ุฉ ู
ู ุงูุฎุงุฑุฌ (ูุฐุง ููุณ ุถุฑูุฑููุง ุ ููููู ุฃูุซุฑ ู
ูุงุกู
ุฉ ุจุงููุณุจุฉ ูู):
$ sudo nano /etc/elasticsearch/elasticsearch.yml cluster.name: habr_demo node.name: exo01 path.data: /var/lib/elasticsearch path.logs: /var/log/elasticsearch network.host: 0.0.0.0 discovery.seed_hosts: []
ุฅุทูุงู ุงูุฎุฏู
ุฉ:
# service elasticsearch restart
ูุงูุชุญูู ู
ู ุฃุฏุงุฆูุง:
$ curl -X GET "http://localhost:9200/?pretty" { "name" : "exo01", "cluster_name" : "habr_demo", "cluster_uuid" : "_na_", "version" : { "number" : "7.4.2", "build_flavor" : "default", "build_type" : "deb", "build_hash" : "2f90bbf7b93631e52bafb59b3b049cb44ec25e96", "build_date" : "2019-10-28T20:40:44.881551Z", "build_snapshot" : false, "lucene_version" : "8.2.0", "minimum_wire_compatibility_version" : "6.8.0", "minimum_index_compatibility_version" : "6.0.0-beta1" }, "tagline" : "You Know, for Search" }
ุชุซุจูุช Redis
# apt install redis-server -y
ุชู
ุงู
ูุง ู
ุซู Elasticsearch ุ ุฃููู
ุจุชูููู Redis ููููู ู
ุชุงุญูุง ู
ู ุงูุฎุงุฑุฌ:
# nano /etc/redis/redis.conf bind 0.0.0.0 # service redis-server start
ุฃุจุฏุฃ ุงูุฎุฏู
ุฉ ูุชุญูู ู
ู ุฃุฏุงุฆูุง:
# service redis-server start # redis-cli > set test "It's working!" > get test > exit
ุชุซุจูุช vue-storefront-api
$ cd ~ $ git clone https://github.com/DivanteLtd/vue-storefront-api.git
ุฑุจุท ุงูุฌุจูุฉ ุฅูู ุงูุฎูููุฉ
ุงูุชูููู ุงูุฃู
ุงู
ู
ูู
ูู ุงูุนุซูุฑ ุนูู ุฎูุงุฑุงุช ุงูุชูููู ุงูุฃู
ุงู
ูุฉ ุงูู
ุชุงุญุฉ ูู ~/vue-storefront/config/default.json
. ููุฏ ุชุฌุงูุฒุช ุจุนุถ ุงูุฎูุงุฑุงุช ูู ~/vue-storefront/config/local.json
:
{ "server": { "host": "0.0.0.0", "port": 3000 }, "redis": { "host": "194.182.181.149", "port": 6379, "db": 0 }, "graphql": { "host": "194.182.181.149", "port": 8080 }, "api": { "url": "http://194.182.181.149:8080" }, "elasticsearch": {} }
server.host|.port
- ุฃููู
ุจุฑุจุท ุฎุงุฏู
nodejs ุจุฅุฎุฑุงุฌ ู
ุญุชูู ูููุงุฌูุฉ ุงูุฃู
ุงู
ูุฉ ูุฌู
ูุน ุนูุงููู IP ุงูู
ุชุงุญุฉ ุนูู ุงูู
ููุฐ ุงูู
ูุงุจู.
redis
ู graphql
- ุฑุจุท ุนููุงู IP ุงูุฎุงุฑุฌู ูุฎุงุฏู
ุงูุงุฎุชุจุงุฑ ุงูุฎุงุต ุจู. ูุง ุฃุนุฑู ู
ุง ุฅุฐุง ูุงู ุฎุงุฏู
nodejs ุงูุฐู ุฃุตุฏุฑ ุงูู
ุญุชูู ูุณุชุฎุฏู
ูุฐู ุงูุฅุนุฏุงุฏุงุช ุ ุฃู ู
ุง ุฅุฐุง ูุงูุช ูุฐู ุงูุฅุนุฏุงุฏุงุช ู
ุณุชุฎุฏู
ุฉ ู
ู ุฌุงูุจ ุงูุนู
ูู ูู ุงูู
ุชุตูุญ ุ ูุฐูู ุฃุถุน ุงูุนููุงู ุงูุฎุงุฑุฌู.
api.uri
- ููุง ุชุญุชุงุฌ ุจุงูุชุฃููุฏ ุฅูู ุชุณุฌูู ุนููุงู IP ููุฎุงุฏู
ุ ูู ุงูู
ุฑุญูุฉ ุงูุณุงุจูุฉ ุ ุฑุฃูุช ู
ูุงูู
ุงุช API ู
ู ุงูู
ุชุตูุญ (ุชุทุจููุงุช PWA) ูู ุณุฌูุงุช ุงูุทูุจุงุช (ุนูุงู
ุฉ ุชุจููุจ Network
ูู ุดุฑูุท ุงูุฃุฏูุงุช). ูุฐุง ูู ุนููุงู ุงูู
ููุฐ ุงูุฐู ุณูุนูู ุนููู ุฎุงุฏู
nodejs ู
ู ุชุทุจูู vue-storefront-api
storefront vue-storefront-api
.
ุงูุชูููู ุงูุฎููู
ูู
ูู ุฃูุถูุง ุนุฑุถ ุฎูุงุฑุงุช ุงูุชูููู ุงูู
ุชุงุญุฉ ูู ~/vue-storefront-api/config/default.json
. ููู
ุง ููู ุงูุฎูุงุฑุงุช ุงูุชู ุชู
ุชุฌุงูุฒูุง ูู ~/vue-storefront-api/config/local.json
:
{ "server": { "host": "0.0.0.0", "port": 8080 }, "elasticsearch": { "host": "localhost", "port": 9200 }, "redis": { "host": "localhost", "port": 6379 } }
server.host|.port
- ุฃููู
ุจุฑุจุท ุฎุงุฏู
nodejs ุงูุฐู ุณูููุฑ ู
ุญุชูู ููุงุฌูุฉ ุจุฑู
ุฌุฉ ุงูุชุทุจููุงุช ูุฌู
ูุน ุนูุงููู IP ุงูู
ุชุงุญุฉ ุนูู ุงูู
ููุฐ ุงูู
ูุงุจู.
ุชูุฌุฏ redis
ู redis
ุนูู ููุณ ุงูู
ุถูู ู
ุซู ุฎุงุฏู
API ุ ูุฐูู ุฃูุฏ ููุท ุชูุฑุงุฑ ุงูู
ุนูู
ุงุช ุงูุงูุชุฑุงุถูุฉ.
ุจูุงุก ุงูุชุทุจูู
ุฌุจูุฉ
$ cd ~/vue-storefront $ yarn install $ yarn build
ุงูุฎูููุฉ
$ cd ~/vue-storefront-api $ yarn install $ yarn build
ุจุฏุก ูุฅููุงู ุงูุชุทุจููุงุช
$ cd ~/vue-storefront-api $ yarn start ... $ cd ~/vue-storefront $ yarn start ... [PM2][WARN] Applications server not running, starting... [PM2] App [server] launched (4 instances) โโโโโโโโโโโโฌโโโโโฌโโโโโโโโโโฌโโโโโโโฌโโโโโโโโโฌโโโโโโโโโโฌโโโโโโโโโฌโโโโโโโโฌโโโโโโโโโโโโฌโโโโโโโโโฌโโโโโโโโโโโ โ App name โ id โ mode โ pid โ status โ restart โ uptime โ cpu โ mem โ user โ watching โ โโโโโโโโโโโโผโโโโโผโโโโโโโโโโผโโโโโโโผโโโโโโโโโผโโโโโโโโโโผโโโโโโโโโผโโโโโโโโผโโโโโโโโโโโโผโโโโโโโโโผโโโโโโโโโโโค โ api โ 0 โ fork โ 3690 โ online โ 0 โ 11s โ 0% โ 85.2 MB โ ubuntu โ disabled โ โ o2m โ 1 โ fork โ 3696 โ online โ 0 โ 11s โ 0% โ 48.4 MB โ ubuntu โ disabled โ โ server โ 2 โ cluster โ 3763 โ online โ 0 โ 0s โ 26.7% โ 66.9 MB โ ubuntu โ disabled โ โ server โ 3 โ cluster โ 3770 โ online โ 0 โ 0s โ 0% โ 68.1 MB โ ubuntu โ disabled โ โ server โ 4 โ cluster โ 3785 โ online โ 0 โ 0s โ 0% โ 40.9 MB โ ubuntu โ disabled โ โ server โ 5 โ cluster โ 3796 โ online โ 0 โ 0s โ 0% โ 40.9 MB โ ubuntu โ disabled โ โโโโโโโโโโโโดโโโโโดโโโโโโโโโโดโโโโโโโดโโโโโโโโโดโโโโโโโโโโดโโโโโโโโโดโโโโโโโโดโโโโโโโโโโโโดโโโโโโโโโดโโโโโโโโโโโ Use `pm2 show <id|name>` to get more details about an app Done in 1.49s.
ููู:
$ pm2 stop all
ุนุฑุถ ุงูุณุฌูุงุช:
$ pm2 log
ุงุชุตุงู ุงูุชุทุจูู
ุนููุงู ุงูุชุทุจูู: http://194.182.181.149//000/ ููุชูุฌุฉ ูุฐูู ุ ูุฏููุง ุฑุณุงูุฉ ุฎุทุฃ ูู ุงูู
ุชุตูุญ ูู ุงูุจุฏุงูุฉ ุ ูููู ูู ุณุฌูุงุช ุฎุงุฏู
API ูู
ูููุง ุชุณุฌูู ู
ูุงูู
ุงุช ุงูู
ุชุตูุญ ุฅูู ูุงุฌูุฉ ุจุฑู
ุฌุฉ ุงูุชุทุจููุงุช:
$ pm2 log 3|server | 2019-11-16 07:44:33: Error during render : / 3|server | 2019-11-16 07:44:33: Error: FetchError in request to ES: FetchError: invalid json response body at http://194.182.181.149:8080/api/catalog/vue_storefront_catalog/product/_search?_source_exclude=%2A.msrp_display_actual_price_type%2Crequired_options%2Cupdated_at%2Ccreated_at%2Cattribute_set_id%2Coptions_container%2Cmsrp_display_actual_price_type%2Chas_options%2Cstock.manage_stock%2Cstock.use_config_min_qty%2Cstock.use_config_notify_stock_qty%2Cstock.stock_id%2Cstock.use_config_backorders%2Cstock.use_config_enable_qty_inc%2Cstock.enable_qty_increments%2Cstock.use_config_manage_stock%2Cstock.use_config_min_sale_qty%2Cstock.notify_stock_qty%2Cstock.use_config_max_sale_qty%2Cstock.use_config_max_sale_qty%2Cstock.qty_increments%2Csmall_image%2Csgn%2C%2A.sgn&from=0&request=%7B%22query%22%3A%7B%22bool%22%3A%7B%22filter%22%3A%7B%22bool%22%3A%7B%22must%22%3A%5B%7B%22terms%22%3A%7B%22category.name.keyword%22%3A%5B%22Tees%22%5D%7D%7D%2C%7B%22terms%22%3A%7B%22visibility%22%3A%5B2%2C3%2C4%5D%7D%7D%2C%7B%22terms%22%3A%7B%22status%22%3A%5B0%2C1%5D%7D%7D%5D%7D%7D%7D%7D%7D&size=8&sort=created_at%3Adesc reason: Unexpected end of JSON input 3|server | at w (core/server-entry.ts:23:25) 3|server | at server-bundle.js:1:468554 3|server | at processTicksAndRejections (internal/process/task_queues.js:93:5) 3|server | 2019-11-16 07:44:33: whole request [/error]: 56ms 0|api | 2019-11-16 07:44:34: OPTIONS /api/cart/create?token= 204 1.320 ms - 0 0|api | 2019-11-16 07:44:34: POST /api/cart/create?token= 200 465.416 ms - 56 0|api | 2019-11-16 07:44:34: OPTIONS /api/cart/pull?token=&cartId=35bea3b7dcf8fb841187d69489fe8c51 204 0.239 ms - 0 0|api | 2019-11-16 07:44:34: GET /api/cart/pull?token=&cartId=35bea3b7dcf8fb841187d69489fe8c51 200 103.949 ms - 24
2Cattribute_set_idูช 2Coptions_containerูช 2Cmsrp_display_actual_price_typeูช 2Chas_optionsูช 2Cstock.manage_stockูช 2Cstock.use_config_min_qtyูช 2Cstock.use_config_notify_stock_qtyูช 2Cstock.stock_idูช 2Cstock.use_config_backordersูช 2Cstock.use_config_enable_qty_incูช 2Cstock.enable_qty_incrementsูช 2Cstock.use_config_manage_stockูช 2Cstock $ pm2 log 3|server | 2019-11-16 07:44:33: Error during render : / 3|server | 2019-11-16 07:44:33: Error: FetchError in request to ES: FetchError: invalid json response body at http://194.182.181.149:8080/api/catalog/vue_storefront_catalog/product/_search?_source_exclude=%2A.msrp_display_actual_price_type%2Crequired_options%2Cupdated_at%2Ccreated_at%2Cattribute_set_id%2Coptions_container%2Cmsrp_display_actual_price_type%2Chas_options%2Cstock.manage_stock%2Cstock.use_config_min_qty%2Cstock.use_config_notify_stock_qty%2Cstock.stock_id%2Cstock.use_config_backorders%2Cstock.use_config_enable_qty_inc%2Cstock.enable_qty_increments%2Cstock.use_config_manage_stock%2Cstock.use_config_min_sale_qty%2Cstock.notify_stock_qty%2Cstock.use_config_max_sale_qty%2Cstock.use_config_max_sale_qty%2Cstock.qty_increments%2Csmall_image%2Csgn%2C%2A.sgn&from=0&request=%7B%22query%22%3A%7B%22bool%22%3A%7B%22filter%22%3A%7B%22bool%22%3A%7B%22must%22%3A%5B%7B%22terms%22%3A%7B%22category.name.keyword%22%3A%5B%22Tees%22%5D%7D%7D%2C%7B%22terms%22%3A%7B%22visibility%22%3A%5B2%2C3%2C4%5D%7D%7D%2C%7B%22terms%22%3A%7B%22status%22%3A%5B0%2C1%5D%7D%7D%5D%7D%7D%7D%7D%7D&size=8&sort=created_at%3Adesc reason: Unexpected end of JSON input 3|server | at w (core/server-entry.ts:23:25) 3|server | at server-bundle.js:1:468554 3|server | at processTicksAndRejections (internal/process/task_queues.js:93:5) 3|server | 2019-11-16 07:44:33: whole request [/error]: 56ms 0|api | 2019-11-16 07:44:34: OPTIONS /api/cart/create?token= 204 1.320 ms - 0 0|api | 2019-11-16 07:44:34: POST /api/cart/create?token= 200 465.416 ms - 56 0|api | 2019-11-16 07:44:34: OPTIONS /api/cart/pull?token=&cartId=35bea3b7dcf8fb841187d69489fe8c51 204 0.239 ms - 0 0|api | 2019-11-16 07:44:34: GET /api/cart/pull?token=&cartId=35bea3b7dcf8fb841187d69489fe8c51 200 103.949 ms - 24
2Cstock.qty_incrementsูช 2Csmall_imageูช 2Csgnูช 2Cูช 2A.sgn ูู
ู = $ pm2 log 3|server | 2019-11-16 07:44:33: Error during render : / 3|server | 2019-11-16 07:44:33: Error: FetchError in request to ES: FetchError: invalid json response body at http://194.182.181.149:8080/api/catalog/vue_storefront_catalog/product/_search?_source_exclude=%2A.msrp_display_actual_price_type%2Crequired_options%2Cupdated_at%2Ccreated_at%2Cattribute_set_id%2Coptions_container%2Cmsrp_display_actual_price_type%2Chas_options%2Cstock.manage_stock%2Cstock.use_config_min_qty%2Cstock.use_config_notify_stock_qty%2Cstock.stock_id%2Cstock.use_config_backorders%2Cstock.use_config_enable_qty_inc%2Cstock.enable_qty_increments%2Cstock.use_config_manage_stock%2Cstock.use_config_min_sale_qty%2Cstock.notify_stock_qty%2Cstock.use_config_max_sale_qty%2Cstock.use_config_max_sale_qty%2Cstock.qty_increments%2Csmall_image%2Csgn%2C%2A.sgn&from=0&request=%7B%22query%22%3A%7B%22bool%22%3A%7B%22filter%22%3A%7B%22bool%22%3A%7B%22must%22%3A%5B%7B%22terms%22%3A%7B%22category.name.keyword%22%3A%5B%22Tees%22%5D%7D%7D%2C%7B%22terms%22%3A%7B%22visibility%22%3A%5B2%2C3%2C4%5D%7D%7D%2C%7B%22terms%22%3A%7B%22status%22%3A%5B0%2C1%5D%7D%7D%5D%7D%7D%7D%7D%7D&size=8&sort=created_at%3Adesc reason: Unexpected end of JSON input 3|server | at w (core/server-entry.ts:23:25) 3|server | at server-bundle.js:1:468554 3|server | at processTicksAndRejections (internal/process/task_queues.js:93:5) 3|server | 2019-11-16 07:44:33: whole request [/error]: 56ms 0|api | 2019-11-16 07:44:34: OPTIONS /api/cart/create?token= 204 1.320 ms - 0 0|api | 2019-11-16 07:44:34: POST /api/cart/create?token= 200 465.416 ms - 56 0|api | 2019-11-16 07:44:34: OPTIONS /api/cart/pull?token=&cartId=35bea3b7dcf8fb841187d69489fe8c51 204 0.239 ms - 0 0|api | 2019-11-16 07:44:34: GET /api/cart/pull?token=&cartId=35bea3b7dcf8fb841187d69489fe8c51 200 103.949 ms - 24
ุงุณุชูุชุงุฌ
ุชู
ุช ุฅุฏุงุฑุชู ุฎุทูุฉ ูุงุญุฏุฉ ุฅูู ุงูุฃู
ุงู
- Vue Storefront PWA ุชุชุตู ุจู Vue Storefront API. ุจุนุฏ ุฐูู ุ ุชุญุชุงุฌ ุฅูู ุงูุชุนุงู
ู ู
ุน ู
ุญุชูู ุงููุงุฌูุฉ ุงูุฎูููุฉ. ู
ุง ูู ุงูุจูุงูุงุช ุงูู
ููุฑุณุฉ ูู Elasticsearch ุ ูููู ุชุตู ุฅูู ููุงู ูููู ูุชู
ุงุณุชุฑุฏุงุฏูุง.
ุดูุฑุง ุนูู ุงููุฑุงุกุฉ ูุงููุฑ ุนูู ุฑุงุจุท ุงูุฅุญุงูุฉ ุงูุฎุงุต ุจู. ุญุณููุง ุ ุงููุนูุฉ ุ ู
ู ุฃุฌููุง ุ ูุงุฌู
ูู ูุฐุง ููุง.