{"id":5635,"date":"2024-06-29T20:00:10","date_gmt":"2024-06-29T12:00:10","guid":{"rendered":"https:\/\/www.baishitou.cn\/?p=5635"},"modified":"2024-06-29T20:00:10","modified_gmt":"2024-06-29T12:00:10","slug":"%e5%a6%82%e4%bd%95%e5%9c%a8-ubuntu-%e4%b8%8a%e5%ae%89%e8%a3%85vendure-22-04","status":"publish","type":"post","link":"https:\/\/www.baishitou.cn\/5635.html","title":{"rendered":"\u5982\u4f55\u5728 Ubuntu \u4e0a\u5b89\u88c5Vendure 22.04"},"content":{"rendered":"
Vendure \u662f\u4e00\u4e2a\u5f00\u6e90\u7684\u65e0\u5934\u5546\u52a1\u6846\u67b6\uff0c\u5141\u8bb8\u6784\u5efa\u7531 Node.js\u3001TypeScript \u548c GraphQL \u63d0\u4f9b\u652f\u6301\u7684\u751f\u4ea7\u5c31\u7eea\u7535\u5b50\u5546\u52a1\u5e94\u7528\u7a0b\u5e8f\u3002\u5b83\u7684\u5de5\u4f5c\u539f\u7406\u662f\u901a\u8fc7 API \u516c\u5f00\u6240\u6709\u5e94\u7528\u7a0b\u5e8f\u529f\u80fd\u3002Vendure \u5728 GraphQL API \u4e0a\u516c\u5f00\u4e86\u6240\u6709\u5546\u5e97\u524d\u7aef\u529f\u80fd\uff0c\u5e76\u4e14\u4e0d\u63d0\u4f9b\u9ed8\u8ba4\u7684\u5546\u5e97\u524d\u7aef\u754c\u9762\u3002\u8fd9\u63d0\u9ad8\u4e86\u5f00\u53d1\u4eba\u5458\u7684\u7075\u6d3b\u6027\uff0c\u56e0\u4e3a\u5b83\u5141\u8bb8\u60a8\u4f7f\u7528\u4efb\u4f55\u524d\u7aef\u6280\u672f\u521b\u5efa\u5e97\u9762\u3002<\/p>\n
\u672c\u6587\u4ecb\u7ecd\u5982\u4f55\u5728 Ubuntu 22.04 Vultr \u670d\u52a1\u5668\u4e0a\u90e8\u7f72 Vendure\u3002\u60a8\u9700\u8981\u5c06\u8be5\u6846\u67b6\u4e0e Vultr Object Storage\uff08PostgreSQL \u6258\u7ba1\u6570\u636e\u5e93\uff09\u548c Redis\u00ae \u96c6\u6210\uff0c\u4ee5\u6784\u5efa\u751f\u4ea7\u5c31\u7eea\u578b\u5e94\u7528\u7a0b\u5e8f\u3002<\/p>\n
\u51c6\u5907\u5de5\u4f5c\uff1a<\/p>\n
# su example_user<\/code><\/pre>\n<\/li>\n- \u5b89\u88c5 PostgreSQL \u6570\u636e\u5e93\u670d\u52a1\u5668<\/li>\n
- \u5728\u670d\u52a1\u5668\u4e0a\u5b89\u88c5 s3cmd\uff1a\n
$ sudo apt install s3cmd<\/code><\/pre>\n<\/li>\n- \u914d\u7f6e s3cmd \u4ee5\u4f7f\u7528 Vultr \u5bf9\u8c61\u5b58\u50a8<\/li>\n<\/ul>\n
\u5b89\u88c5Node.js<\/h2>\n
Vendure \u9700\u8981 Node.js \u7248\u672c 16.x \u6216\u66f4\u9ad8\u7248\u672c\u3002\u6309\u7167\u4ee5\u4e0b\u6b65\u9aa4\u4e2d\u7684\u8bf4\u660e\u5b89\u88c5\u6700\u65b0\u7684 Node.js \u7248\u672c\u3002<\/p>\n
\n- \u66f4\u65b0\u670d\u52a1\u5668\n
$ sudo apt update<\/code><\/pre>\n<\/li>\n- \u521b\u5efa\u76ee\u5f55
keyrings<\/code>\n $ sudo mkdir -p \/etc\/apt\/keyrings<\/code><\/pre>\n<\/li>\n- \u4e0b\u8f7d\u8282\u70b9\u6e90 GPG \u5bc6\u94a5\u5e76\u5c06\u5176\u6dfb\u52a0\u5230\u670d\u52a1\u5668\u5bc6\u94a5\n
curl -fsSL https:\/\/deb.nodesource.com\/gpgkey\/nodesource-repo.gpg.key | sudo gpg --dearmor -o \/etc\/apt\/keyrings\/nodesource.gpg<\/code><\/pre>\n<\/li>\n- \u5c06Node.js\u5b58\u50a8\u5e93\u6dfb\u52a0\u5230\u6e90\u5217\u8868\u4e2d\u3002\u66ff\u6362\u4e3a\u60a8\u60f3\u8981\u7684\u7248\u672c
apt<\/code>20<\/code>\n NODE_MAJOR=20\r\n echo \"deb [signed-by=\/etc\/apt\/keyrings\/nodesource.gpg] https:\/\/deb.nodesource.com\/node_$NODE_MAJOR.x nodistro main\" | sudo tee \/etc\/apt\/sources.list.d\/nodesource.list<\/code><\/pre>\n<\/li>\n- \u66f4\u65b0\u670d\u52a1\u5668\u7a0b\u5e8f\u5305\n
$ sudo apt update<\/code><\/pre>\n<\/li>\n- \u5b89\u88c5Node.js\n
$ sudo apt install nodejs -y<\/code><\/pre>\n<\/li>\n- \u9a8c\u8bc1\u5df2\u5b89\u88c5\u7684Node.js\u7248\u672c\n
$ nodejs --version<\/code><\/pre>\n\u8f93\u51fa\uff1a<\/p>\n
v20.5.1<\/code><\/pre>\n<\/li>\n<\/ol>\n\u8bbe\u7f6e\u672c\u5730 PostgreSQL \u6570\u636e\u5e93\u670d\u52a1\u5668<\/h2>\n
\u8981\u5728\u670d\u52a1\u5668\u4e0a\u5b89\u88c5 Vendure\uff0c\u60a8\u9700\u8981\u5c06\u5e94\u7528\u7a0b\u5e8f\u6570\u636e\u4e34\u65f6\u4fdd\u5b58\u5728\u672c\u5730 PostgreSQL \u6570\u636e\u5e93\u670d\u52a1\u5668\u4e0a\u3002\u7a0d\u540e\uff0c\u60a8\u53ef\u4ee5\u5148\u5c06\u6570\u636e\u8fc1\u79fb\u5230 Vultr Managed Database for MySQL\uff0c\u7136\u540e\u518d\u5c06\u5e94\u7528\u7a0b\u5e8f\u90e8\u7f72\u5230\u751f\u4ea7\u73af\u5883\u3002\u5982\u4e0b\u6240\u8ff0\u8bbe\u7f6e\u672c\u5730\u6570\u636e\u5e93\u3002<\/p>\n
\u5728 PostgreSQL \u4e0a\u542f\u7528\u5bc6\u7801\u8eab\u4efd\u9a8c\u8bc1<\/h3>\n\n- \u9a8c\u8bc1\u5df2\u5b89\u88c5\u7684 PostgreSQL \u7248\u672c\n
$ psql --version<\/code><\/pre>\n\u8f93\u51fa\uff1a<\/p>\n
psql (PostgreSQL) 14.16 (Ubuntu 14.16-0ubuntu0.22.04.1)<\/code><\/pre>\n<\/li>\n- \u6839\u636e\u60a8\u7684 PostgreSQL \u7248\u672c\uff0c\u4f7f\u7528\u6587\u672c\u7f16\u8f91\u5668\u7f16\u8f91\u6587\u4ef6\uff0c\u4f8b\u5982
pg_hba.conf<\/code>nano<\/code>\n $ sudo nano \/etc\/postgresql\/14\/main\/pg_hba.conf<\/code><\/pre>\n<\/li>\n- \u67e5\u627e\u4ee5\u4e0b\u914d\u7f6e\u884c\n
# \"local\" is for Unix domain socket connections only\r\n local all all peer<\/code><\/pre>\n<\/li>\n- \u5c06\u8eab\u4efd\u9a8c\u8bc1\u65b9\u6cd5\u66f4\u6539\u4e3a
peer<\/code>md5<\/code>\n local all all md5<\/code><\/pre>\n\u4fdd\u5b58\u5e76\u5173\u95ed\u6587\u4ef6<\/li>\n
- \u91cd\u65b0\u542f\u52a8 PostgreSQL \u6570\u636e\u5e93\u670d\u52a1\u5668\n
$ sudo systemctl restart postgresql<\/code><\/pre>\n<\/li>\n<\/ol>\n\u521b\u5efa\u65b0\u7684 PostgreSQL \u6570\u636e\u5e93<\/h3>\n\n- \u767b\u5f55PostgreSQL\u6570\u636e\u5e93\u670d\u52a1\u5668\n
$ sudo -u postgres psql<\/code><\/pre>\n<\/li>\n- \u521b\u5efa\u65b0\u6570\u636e\u5e93\n
postgres=# CREATE DATABASE vendure_db;<\/code><\/pre>\n\u8f93\u51fa\uff1a<\/p>\n
CREATE DATABASE<\/code><\/pre>\n<\/li>\n- \u4f7f\u7528\u5f3a\u5bc6\u7801\u521b\u5efa\u65b0\u7684\u6570\u636e\u5e93\u7528\u6237\n
postgres=# CREATE USER vendure_user WITH ENCRYPTED PASSWORD 'strong-password';<\/code><\/pre>\n\u8f93\u51fa\uff1a<\/p>\n
CREATE ROLE<\/code><\/pre>\n<\/li>\n- \u6388\u4e88\u7528\u6237\u5bf9 Vendure \u6570\u636e\u5e93\u7684\u5b8c\u5168\u6743\u9650\n
postgres=# GRANT ALL PRIVILEGES ON DATABASE vendure_db TO vendure_user;<\/code><\/pre>\n\u8f93\u51fa\uff1a<\/p>\n
GRANT<\/code><\/pre>\n<\/li>\n- \u9000\u51fa PostgreSQL \u63a7\u5236\u53f0\n
postgres-# \\q<\/code><\/pre>\n<\/li>\n<\/ol>\n\u5b89\u88c5 Vendure<\/h2>\n\n- \u4f7f\u7528 Node.js \u5de5\u5177\uff0c\u4f7f\u7528\u8be5\u5de5\u5177\u5b89\u88c5 Vendure\u3002
npx<\/code>@vendure\/create<\/code>\n $ npx @vendure\/create vendure-app<\/code><\/pre>\n<\/li>\n- \u56de\u590d\u6bcf\u4e2a\u5b89\u88c5\u63d0\u793a\uff0c\u5982\u4e0b\u6240\u8ff0\u6309 \u5b89\u88c5\u8f6f\u4ef6\u5305Y<\/kbd>
@vendure\/create<\/code>\n Need to install the following packages:\r\n @vendure\/create@2.0.2\r\n Ok to proceed? (y) y<\/code><\/pre>\n\u9009\u62e9\u4e3a\u6b63\u5728\u4f7f\u7528\u7684\u6570\u636e\u5e93Postgres<\/code><\/p>\n \u25c6 Which database are you using?\r\n \u2502 \u25cb MySQL\r\n \u2502 \u25cb MariaDB\r\n \u2502 \u25cf Postgres\r\n \u2502 \u25cb SQLite\r\n \u2502 \u25cb SQL.js<\/code><\/pre>\n\u6309\u4e0b\u53ef\u8bbe\u7f6e\u4e3a PostgreSQL \u4e3b\u673a\u540dENTER<\/kbd>localhost<\/code><\/p>\n \u25c6 What's the database host address?\r\n \u2502 localhost<\/code><\/pre>\n\u6309\u4e0b\u53ef\u4fdd\u7559\u4e3a PostgreSQL \u7aef\u53e3\u53f7ENTER<\/kbd>5432<\/code><\/p>\n \u25c6 What port is the database listening on?\r\n \u2502 5432<\/code><\/pre>\n\u8f93\u5165\u60a8\u4e4b\u524d\u521b\u5efa\u7684 PostgreSQL \u6570\u636e\u5e93\u540d\u79f0<\/p>\n
\u25c6 What's the name of the database?\r\n \u2502 vendure_db<\/code><\/pre>\n\u6309\u4e0b\u53ef\u5c06 PostgreSQL \u67b6\u6784\u8bbe\u7f6e\u4e3a publicENTER<\/kbd><\/p>\n What's the schema name we should use?\r\n \u2502 public<\/code><\/pre>\n\u8f93\u5165\u60a8\u4e4b\u524d\u521b\u5efa\u7684 PostgreSQL \u7528\u6237<\/p>\n
\u25c7 What's the database user name?\r\n \u2502 vendure_user<\/code><\/pre>\n\u8f93\u5165\u60a8\u4e4b\u524d\u521b\u5efa\u7684 PostgreSQL \u6570\u636e\u5e93\u7528\u6237\u5bc6\u7801<\/p>\n
\u25c7 What's the database password?\r\n \u2502 strong-password<\/code><\/pre>\n\u6309\u4e0b\u53ef\u4fdd\u7559\u4e3a\u9ed8\u8ba4\u7ba1\u7406\u5458\u7528\u6237\u540d\u3002\u5c06\u7528\u6237\u540d\u66f4\u6539\u4e3a\u6240\u9700\u503cENTER<\/kbd>superadmin<\/code><\/p>\n \u25c7 What identifier do you want to use for the superadmin user?\r\n \u2502 superadmin\r\n \u2502<\/code><\/pre>\n\u8f93\u5165\u60a8\u60f3\u8981\u7684\u8d85\u7ea7\u7ba1\u7406\u5458\u7528\u6237\u540d\u6216\u6309\u4e0b\u4ee5\u4f7f\u7528\u9ed8\u8ba4\u5bc6\u7801ENTER<\/kbd><\/p>\n \u25c7 What password do you want to use for the superadmin user?\r\n \u2502 superadmin\r\n \u2502<\/code><\/pre>\nSelect\u00a0and press\u00a0to populate the database with sample product datayes<\/code>ENTER<\/kbd><\/p>\n \u25c6 Populate with some sample product data?\r\n \u2502 \u25cf yes\r\n \u2502 \u25cb no<\/code><\/pre>\n<\/li>\n- When successful, the installation process should complete with the following output:\n
\u25c7 Server successfully initialized and populated\r\n \u2502\r\n \u25c7 \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256e\r\n \u2502 \u2502\r\n \u2502 Success! Created a new Vendure server at: \u2502\r\n \u2502 \u2502\r\n \u2502 \u2502\r\n \u2502 \/home\/example_user\/vendure-app \u2502\r\n \u2502 \u2502\r\n \u2502 \u2502\r\n \u2502 We suggest that you start by typing: \u2502\r\n \u2502 \u2502\r\n \u2502 \u2502\r\n \u2502 $ cd vendure-app \u2502\r\n \u2502 $ npm run dev \u2502\r\n \u2502 \u2502\r\n \u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256f\r\n \u2502\r\n \u2514 Happy hacking!<\/code><\/pre>\n<\/li>\n- List files in your working directory\n
$ ls<\/code><\/pre>\nOutput:<\/p>\n
vendure-app<\/code><\/pre>\nVerify that a new\u00a0directory is available on the listvendure-app<\/code><\/li>\n<\/ol>\nSet Up the Vultr Managed Database for PostgreSQL<\/h2>\n\n- Log in to your Vultr Managed Database for PostgreSQL. Replace\u00a0,\u00a0,\u00a0with your actual values
vultradmin<\/code>1234<\/code>host.vultrdb.com<\/code>\n $ psql -h host.vultrdb.com -d postgres -U vultradmin<\/code><\/pre>\nOr, copy and use your database connection string from your Vultr Managed Database for PostgreSQL control panel<\/p>\n
<\/li>\n
- When logged in, create a new database\n
defaultdb=> CREATE DATABASE venduredb;<\/code><\/pre>\nOutput:<\/p>\n
CREATE DATABASE<\/code><\/pre>\n<\/li>\n- Quit PostgreSQL console\n
defaultdb=> \\q<\/code><\/pre>\n<\/li>\n<\/ol>\n\u5c06\u672c\u5730 PostgreSQL \u6570\u636e\u5e93\u6570\u636e\u8fc1\u79fb\u5230 Vultr PostgreSQL \u6258\u7ba1\u6570\u636e\u5e93<\/h3>\n\n- \u4f7f\u7528\u4e4b\u524d\u521b\u5efa\u7684\u7528\u6237\u548c\u6570\u636e\u5e93\u5c06 PostgreSQL \u6570\u636e\u5e93\u5907\u4efd\u5230\u6587\u4ef6
venduredb.sql<\/code>\n $ pg_dump --no-owner -U vendure_user -d vendure_db -W > venduredb.sql<\/code><\/pre>\n\u51fa\u73b0\u63d0\u793a\u65f6\uff0c\u8f93\u5165\u60a8\u4e4b\u524d\u8bbe\u7f6e\u7684\u6b63\u786e\u7684 Vendure \u7528\u6237\u6570\u636e\u5e93\u5bc6\u7801<\/li>\n
- \u4f7f\u7528\u5907\u4efd\u6587\u4ef6\uff0c\u5c06\u6570\u636e\u5e93\u8fd8\u539f\u5230 Vultr PostgreSQL \u6258\u7ba1\u6570\u636e\u5e93\u3002\u5c06 \uff0c\uff0c \u66ff\u6362\u4e3a\u60a8\u7684\u5b9e\u9645\u8be6\u7ec6\u4fe1\u606f\u3002
host.vultrdb.com<\/code>vendure_db<\/code>vultradmin<\/code>\n $ psql -h host.vultrdb.com -d vendure_db -U vultradmin < venduredb.sql<\/code><\/pre>\n<\/li>\n- \u6062\u590d\u5b8c\u6210\u540e\uff0c\u8bbf\u95ee Vultr Managed Database for PostgreSQL\n
$ psql -h host.vultrdb.com -d vendure_db -U vultradmin <\/code><\/pre>\n<\/li>\n- \u67e5\u770b Vendure \u6570\u636e\u5e93\u8868\n
vendure_db=> \\dt<\/code><\/pre>\n\u8f93\u51fa\uff1a<\/p>\n
List of relations\r\n Schema | Name | Type | Owner \r\n --------+---------------------------------------------+-------+-------\r\n public | address | table | vultradmin\r\n public | administrator | table | vultradmin\r\n public | asset | table | vultradmin\r\n public | asset_channels_channel | table | vultradmin\r\n public | asset_tags_tag | table | vultradmin\r\n public | authentication_method | table | vultradmin\r\n public | channel | table | vultradmin\r\n public | collection | table | vultradmin\r\n public | collection_asset | table | vultradmin\r\n public | collection_channels_channel | table | vultradmin\r\n public | collection_closure | table | vultradmin\r\n public | collection_product_variants_product_variant | table | vultradmin\r\n public | collection_translation | table | vultradmin\r\n public | customer | table | vultradmin\r\n public | customer_channels_channel | table | vultradmin\r\n public | customer_group | table | vultradmin\r\n public | customer_groups_customer_group | table | vultradmin\r\n public | facet | table | vultradmin\r\n public | facet_channels_channel | table | vultradmin\r\n :<\/code><\/pre>\nEnter \u9000\u51fa PostgreSQL \u5bfb\u547c\u673aQ<\/kbd><\/li>\n- \u9000\u51fa PostgreSQL \u63a7\u5236\u53f0\n
# \\q<\/code><\/pre>\n<\/li>\n- \u5728 Vultr \u5ba2\u6237\u95e8\u6237\u4e2d\uff0c\u4e0b\u8f7d Vultr Managed Database for PostgreSQL \u7b7e\u540d\u8bc1\u4e66\u6587\u4ef6
ca-certificate.crt<\/code>
<\/li>\n- \u4e0b\u8f7d\u540e\uff0c\u5728\u7ec8\u7aef\u4f1a\u8bdd\u4e2d\u4f7f\u7528\u6587\u4ef6\u5e76\u5c06\u5176\u4e0a\u4f20\u5230\u670d\u52a1\u5668
scp<\/code>\n $ scp ca-certificate.crt example_user@SERVER-IP:\/home\/example_user\/<\/code><\/pre>\n<\/li>\n- \u4e0a\u4f20\u65f6\uff0c\u8bf7\u9a8c\u8bc1\u8bc1\u4e66\u6587\u4ef6\u5728\u7528\u6237\u4e3b\u76ee\u5f55\u4e2d\u662f\u5426\u53ef\u7528\n
$ ls<\/code><\/pre>\n\u8f93\u51fa\uff1a<\/p>\n
ca-certificate.crt<\/code><\/pre>\n<\/li>\n- \u5c06\u8bc1\u4e66\u6587\u4ef6\u79fb\u52a8\u5230\u76ee\u5f55\u4e2d\u3002
\/usr\/local\/share\/ca-certificates\/<\/code>\n $ sudo mv ca-certificate.crt \/usr\/local\/share\/ca-certificates\/<\/code><\/pre>\n<\/li>\n- \u7f16\u8f91\u6587\u4ef6
vendure-config.ts<\/code>\n $ nano src\/vendure-config.ts<\/code><\/pre>\n<\/li>\n- \u4ece\u6587\u4ef6\u9876\u90e8\u5bfc\u5165\u65b9\u6cd5
readFileSync<\/code>node:fs<\/code>\n import { readFileSync } from 'node:fs';<\/code><\/pre>\n<\/li>\n- \u5c06\u4ee5\u4e0b\u58f0\u660e\u6dfb\u52a0\u5230\u8be5\u90e8\u5206
dbConnectionOptions<\/code>\n ssl: {\r\n rejectUnauthorized: true,\r\n ca: readFileSync('\/usr\/local\/share\/ca-certificates\/ca-certificate.crt').toString(),\r\n },<\/code><\/pre>\n\u60a8\u7f16\u8f91\u7684\u90e8\u5206\u5e94\u5982\u4e0b\u6240\u793a\uff1adbConnectionOptions<\/code><\/p>\n dbConnectionOptions: {\r\n type: 'postgres',\r\n \/\/ See the README.md \"Migrations\" section for an explanation of\r\n \/\/ the `synchronize` and `migrations` options.\r\n synchronize: false,\r\n migrations: [path.join(__dirname, '.\/migrations\/*.+(js|ts)')],\r\n logging: false,\r\n database: process.env.DB_NAME,\r\n schema: process.env.DB_SCHEMA,\r\n host: process.env.DB_HOST,\r\n port: +process.env.DB_PORT,\r\n username: process.env.DB_USERNAME,\r\n password: process.env.DB_PASSWORD,\r\n ssl: {\r\n rejectUnauthorized: true,\r\n ca: readFileSync('\/usr\/local\/share\/ca-certificates\/ca-certificate.crt').toString(),\r\n },\r\n },<\/code><\/pre>\n\u4fdd\u5b58\u5e76\u5173\u95ed\u6587\u4ef6\u3002<\/li>\n<\/ol>\n
\u5207\u6362 Vendure PostgreSQL \u6570\u636e\u5e93\u914d\u7f6e<\/h3>\n\n- \u5207\u6362\u5230\u76ee\u5f55
vendure-app<\/code>\n $ cd vendure-app<\/code><\/pre>\n<\/li>\n- \u7f16\u8f91\u6587\u4ef6
.env<\/code>\n $ nano .env<\/code><\/pre>\n<\/li>\n- \u4f7f\u7528 Vultr Managed Database for PostgreSQL \u8be6\u7ec6\u4fe1\u606f\u66f4\u65b0\u4ee5\u4e0b\u73b0\u6709\u53d8\u91cf\n
DB_HOST=host.vultrdb.com \r\n DB_PORT=1234\r\n DB_NAME=vendure_db\r\n DB_USERNAME=vultradmin\r\n DB_PASSWORD=managed-db-password<\/code><\/pre>\nSave and close the file.<\/li>\n<\/ol>\n
Store Vendure Assets in Object Storage<\/h2>\nCreate a New Bucket<\/h3>\n\n- Log in to the\u00a0Vultr customer portal<\/a><\/li>\n
- Navigate to\u00a0Products -> Cloud Storage -> Object Storage<\/a>.
<\/li>\n- Access your Vultr Object Storage control panel
<\/li>\n - Navigate to\u00a0Buckets<\/strong>
<\/li>\n- Click the\u00a0Create Bucket<\/strong>\u00a0button, and assign the bucket a name of your choice. For example\u00a0
vendure<\/code>
<\/li>\n<\/ol>\nSync the Assets to Vultr Object Storage<\/h3>\n\n- View your working directory\n