|
|
@@ -0,0 +1,172 @@
|
|
|
+---
|
|
|
+title: "Configuration"
|
|
|
+showtoc: true
|
|
|
+---
|
|
|
+
|
|
|
+# Configuration
|
|
|
+
|
|
|
+Every aspect of the Vendure server is configured via a single, central `VendureConfig` object. This object is passed into the [`bootstrap`]({{< relref "bootstrap" >}}) and [`bootstrapWorker`]({{< relref "bootstrap-worker" >}}) functions to start up the Vendure server and worker respectively.
|
|
|
+
|
|
|
+The `VendureConfig` object is organised into sections, grouping related settings together. For example, [`VendureConfig.apiOptions`]({{< relref "api-options" >}}) contains all the config for the GraphQL APIs, whereas [`VendureConfig.authOptions`]({{< relref "auth-options" >}}) deals with authentication.
|
|
|
+
|
|
|
+## Working with the VendureConfig object
|
|
|
+
|
|
|
+Since the VendureConfig is just a JavaScript object, it can be managed and manipulated according to your needs. For example:
|
|
|
+
|
|
|
+### Using environment variables
|
|
|
+
|
|
|
+Environment variables can be used when you don't want to hard-code certain values which may change, e.g. depending on whether running locally, in staging or in production:
|
|
|
+
|
|
|
+```TypeScript
|
|
|
+export const config: VendureConfig = {
|
|
|
+ apiOptions: {
|
|
|
+ hostname: process.env.HOSTNAME,
|
|
|
+ port: process.env.PORT,
|
|
|
+ }
|
|
|
+ // ...
|
|
|
+};
|
|
|
+```
|
|
|
+
|
|
|
+They are also useful so that sensitive credentials do not need to be hard-coded and committed to source control:
|
|
|
+
|
|
|
+```TypeScript
|
|
|
+export const config: VendureConfig = {
|
|
|
+ dbConnectionOptions: {
|
|
|
+ type: 'postgres',
|
|
|
+ username: process.env.DB_USERNAME,
|
|
|
+ password: process.env.DB_PASSWORD,
|
|
|
+ database: 'vendure',
|
|
|
+ },
|
|
|
+ // ...
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+### Splitting config across files
|
|
|
+
|
|
|
+If the config object grows too large, you can split it across several files. For example, the `plugins` array in a real-world project can easily grow quite big:
|
|
|
+
|
|
|
+```TypeScript
|
|
|
+// vendure-config-plugins.ts
|
|
|
+
|
|
|
+export const plugins: VendureConfig['plugins'] = [
|
|
|
+ CustomPlugin,
|
|
|
+ AssetServerPlugin.init({
|
|
|
+ route: 'assets',
|
|
|
+ assetUploadDir: path.join(__dirname, 'assets'),
|
|
|
+ port: 5002,
|
|
|
+ }),
|
|
|
+ DefaultJobQueuePlugin,
|
|
|
+ ElasticsearchPlugin.init({
|
|
|
+ host: 'localhost',
|
|
|
+ port: 9200,
|
|
|
+ }),
|
|
|
+ EmailPlugin.init({
|
|
|
+ // ...lots of lines of config
|
|
|
+ }),
|
|
|
+];
|
|
|
+```
|
|
|
+
|
|
|
+```TypeScript
|
|
|
+// vendure-config.ts
|
|
|
+
|
|
|
+import { plugins } from 'vendure-config-plugins';
|
|
|
+
|
|
|
+export const config: VendureConfig = {
|
|
|
+ plugins,
|
|
|
+ // ...
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+## Important Configuration Settings
|
|
|
+
|
|
|
+In this guide we will take a look at those configuration options needed for getting the server up-and-running.
|
|
|
+
|
|
|
+{{< alert "primary" >}}
|
|
|
+A description of every available configuration option can be found in the [VendureConfig API documentation]({{< relref "vendure-config" >}}).
|
|
|
+{{< /alert >}}
|
|
|
+
|
|
|
+### Specifying API hostname & port etc
|
|
|
+
|
|
|
+The [`VendureConfig.apiOptions`]({{< relref "api-options" >}}) object is used to set the hostname, port, as well as other API-related concerns. Express middleware and Apollo Server plugins may also be specified here.
|
|
|
+
|
|
|
+Example:
|
|
|
+
|
|
|
+```TypeScript
|
|
|
+export const config: VendureConfig = {
|
|
|
+ apiOptions: {
|
|
|
+ hostname: 'localhost',
|
|
|
+ port: 3000,
|
|
|
+ adminApiPath: '/admin',
|
|
|
+ shopApiPath: '/shop',
|
|
|
+ middleware: [{
|
|
|
+ // add some Express middleware to the Shop API route
|
|
|
+ handler: timeout('5s'),
|
|
|
+ route: 'shop',
|
|
|
+ }]
|
|
|
+ },
|
|
|
+ // ...
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+### Connecting to the database
|
|
|
+
|
|
|
+The database connection is configured with the `VendureConfig.dbConnectionOptions` object. This object is actually the [TypeORM configuration object](https://typeorm.io/#/connection-options) and is passed directly to TypeORM.
|
|
|
+
|
|
|
+Example:
|
|
|
+
|
|
|
+```TypeScript
|
|
|
+export const config: VendureConfig = {
|
|
|
+ dbConnectionOptions: {
|
|
|
+ type: 'postgres',
|
|
|
+ host: process.env.DB_HOST,
|
|
|
+ port: process.env.DB_PORT,
|
|
|
+ synchronize: false,
|
|
|
+ username: process.env.DB_USERNAME,
|
|
|
+ password: process.env.DB_PASSWORD,
|
|
|
+ database: 'vendure',
|
|
|
+ migrations: [path.join(__dirname, 'migrations/*.ts')],
|
|
|
+ },
|
|
|
+ // ...
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+### Configuring authentication
|
|
|
+
|
|
|
+Authentication settings are configured with [`VendureConfig.authOptions`]({{< relref "auth-options" >}}). The most important setting here is whether the storefront client will use cookies or bearer tokens to manage user sessions. For more detail on this topic, see [the Authentication & Sessions guide]({{< relref "authentication-and-sessions" >}}).
|
|
|
+
|
|
|
+The username and default password of the superadmin user can also be specified here. In production, it is advisable to use environment variables for these settings.
|
|
|
+
|
|
|
+Example:
|
|
|
+
|
|
|
+```TypeScript
|
|
|
+export const config: VendureConfig = {
|
|
|
+ authOptions: {
|
|
|
+ tokenMethod: 'cookie',
|
|
|
+ sessionSecret: process.env.COOKIE_SESSION_SECRET,
|
|
|
+ requireVerification: true,
|
|
|
+ superadminCredentials: {
|
|
|
+ identifier: process.env.SUPERADMIN_USERNAME,
|
|
|
+ password: process.env.SUPERADMIN_PASSWORD,
|
|
|
+ },
|
|
|
+ },
|
|
|
+ // ...
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+### Connecting to the worker
|
|
|
+
|
|
|
+The Vendure worker is configured with [`VendureConfig.workerOptions`]({{< relref "worker-options" >}}). The worker is a [Nestjs microservice](https://docs.nestjs.com/microservices/basics) which runs in another process (and can be located on another server or in another container) from the main server.
|
|
|
+
|
|
|
+By default, the worker communication happens over TCP. If you want to run the worker in a separate container or physical server to the server, please see the [deployment guide]({{< relref "deployment" >}}#deploying-the-worker).
|
|
|
+
|
|
|
+```TypeScript
|
|
|
+export const config: VendureConfig = {
|
|
|
+ workerOptions: {
|
|
|
+ options: {
|
|
|
+ host: 'localhost',
|
|
|
+ port: 3020,
|
|
|
+ },
|
|
|
+ },
|
|
|
+ // ...
|
|
|
+}
|
|
|
+```
|