Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

docs: improve admin documentation #6117

Merged
merged 6 commits into from
Jan 22, 2024
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
103 changes: 0 additions & 103 deletions www/apps/docs/content/admin/configuration.md

This file was deleted.

337 changes: 337 additions & 0 deletions www/apps/docs/content/admin/configuration.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,337 @@
---
description: "In this document, you'll learn about the different ways you can configure the admin dashboard."
---

import ParameterTypes from "@site/src/components/ParameterTypes"

# Admin Configuration

In this document, you'll learn about the different ways you can configure the admin dashboard.

## Plugin Options

The plugin accepts the following options:

```js title=medusa-config.js
const plugins = [
// ...
{
resolve: "@medusajs/admin",
/** @type {import('@medusajs/admin').PluginOptions} */
options: {
serve: true,
autoRebuild: true,
backend: "https://example.com",
path: "/app",
outDir: "build",
develop: {
open: true,
port: 7001,
logLevel: "error",
stats: "normal",
allowedHosts: "auto",
webSocketURL: undefined,
},
},
},
]
```

<ParameterTypes parameters={[
{
name: "serve",
type: "boolean",
optional: true,
defaultValue: "true",
description: "Whether to serve the admin dashboard when the Medusa backend starts. If set to `false`, you can serve the admin dashboard using the [dev command](#develop-command-options).",
expandable: false,
children: []
},
{
name: "autoRebuild",
type: "boolean",
optional: true,
defaultValue: "false",
description: "Whether the admin UI should be rebuilt if there are any changes or if a missing build is detected when the backend starts. If not set, you must [manually build the admin dashboard](#build-command-options).",
expandable: false,
children: []
},
{
name: "backend",
type: "string",
optional: true,
defaultValue: "",
description: "The URL of the Medusa backend. Its value is only used if the `serve` option is set to `false`.",
expandable: false,
children: []
},
{
name: "path",
type: "string",
optional: true,
defaultValue: "/app",
description: "The path the admin server should run on when running the Medusa backend in production. It must be prefixed with a slash `/`, but it can't end with a `/`, which throws an error. It also can't be one of the reserved paths: \"admin\" and \"store\".",
expandable: false,
children: []
},
{
name: "outDir",
type: "string",
optional: true,
defaultValue: "",
description: "The directory to output the admin build to. By default, the plugin builds the admin to the `build` directory in the root of the Medusa backend directory.",
expandable: false,
children: []
},
{
name: "develop",
type: "object",
optional: true,
defaultValue: "",
description: "Options for the admin development server.",
expandable: false,
children: [
{
name: "open",
type: "boolean",
optional: true,
defaultValue: "true",
description: "Whether the browser should be opened when the admin development server starts.",
expandable: false,
children: []
},
{
name: "port",
type: "number",
optional: true,
defaultValue: "7001",
description: "The port the admin dashboard runs on.",
expandable: false,
children: []
},
{
name: "logLevel",
type: "\"error\" \\| \"none\" \\| \"warn\" \\| \"info\" \\| \"log\" \\| \"verbose\"",
optional: true,
defaultValue: "error",
description: "The log level of the admin development server.",
expandable: false,
children: []
},
{
name: "stats",
type: "\"normal\" \\| \"debug\"",
optional: true,
defaultValue: "normal",
description: "The verbosity of the admin development server.",
expandable: false,
children: []
},
{
name: "allowedHosts",
type: "\"auto\" \\| \"all\" \\| string[]",
optional: true,
defaultValue: "auto",
description: "The development server's allowed hosts.",
expandable: false,
children: []
},
{
name: "webSocketURL",
type: "string \\| object \\| undefined",
optional: true,
defaultValue: "",
description: "The URL to a web socket server",
expandable: false,
children: [
{
name: "hostname",
type: "string",
optional: true,
defaultValue: "",
description: "The web socket's hostname.",
expandable: false,
children: []
},
{
name: "password",
type: "string",
optional: true,
defaultValue: "",
description: "The web socket's password.",
expandable: false,
children: []
},
{
name: "path name",
type: "string",
optional: true,
defaultValue: "",
description: "The web socket's path name.",
expandable: false,
children: []
},
{
name: "port",
type: "string",
optional: true,
defaultValue: "",
description: "The web socket's port.",
expandable: false,
children: []
},
{
name: "username",
type: "string",
optional: true,
defaultValue: "",
description: "The web socket's username.",
expandable: false,
children: []
},
]
},
]
}
]} />

---

## Admin CLI

### Build Command Options

The `build` command in the admin CLI allows you to manually build the admin dashboard. If you intend to use it, you should typically add it to the `package.json` of the Medusa backend:

```json title="package.json"
{
"scripts": {
// other scripts...
"build:admin": "medusa-admin build"
}
}
```

You can add the following option to the `medusa-admin build` command:

- `--deployment`: a boolean value indicating that the build should be ready for deployment. When this option is added, options are not loaded from `medusa-config.js` anymore, and it means the admin will be built to be hosted on an external host. This also means that the backend URL is loaded from the `MEDUSA_ADMIN_BACKEND_URL` environment variable. For example, `medusa-admin build --deployment`.

### Develop Command Options

The `develop` command in the admin CLI allows you to run the admin dashboard in development separately from the Medusa backend. If you intend to use it, you should typically add it to the `package.json` of the Medusa backend:

```json title="package.json"
{
"scripts": {
// other scripts...
"dev:admin": "medusa-admin develop"
}
}
```

You can add the following options to the `medusa-admin develop` command:

- `--backend` or `-b`: a string specifying the URL of the Medusa backend. By default, it's the value of the environment variable `MEDUSA_ADMIN_BACKEND_URL`. For example, `medusa-admin develop --backend example.com`.
- `--port` or `-p`: the port to run the admin on. By default, it's `7001`. For example, `medusa-admin develop --port 8000`.

---

## Change Backend URL

### In Development

To change the backend's URL that the admin sends request to in development, you must disable the `serve` plugin option and set the `backend` option to the URL of your Medusa backend.

However, this requires you to also set-up the [develop command](#develop-command-options) as the admin will no longer start with the Medusa backend.

For example:

```js title=medusa-config.js
const plugins = [
// ...
{
resolve: "@medusajs/admin",
/** @type {import('@medusajs/admin').PluginOptions} */
options: {
serve: false,
backend: "http://localhost:9001",
// other options...
},
},
]
```

### In Production

:::note

This assumes that you've deployed the admin separately and you're passing the `--deployment` option to the [build command](#build-command-options).

:::

To change the backend's URL that the admin sends request to in production, set the environment variable `MEDUSA_ADMIN_BACKEND_URL` to the backend's URL.

For example:

```bash
MEDUSA_ADMIN_BACKEND_URL=https://example.com
```

---

## Custom Environment Variables

If you want to set environment variables that you want to access in your admin dashboard's customizations (such as in [widgets](./widgets.md) or [UI routes](./routes.md)), your environment variables must be prefixed with `MEDUSA_ADMIN_`. Otherwise, it won't be loaded within the admin.

For example:

```bash
MEDUSA_ADMIN_CUSTOM_API_KEY=123...
```

---

## Custom Webpack Configurations

:::note

Plugins cannot include webpack customizations.

:::

The admin dashboard uses [Webpack](https://webpack.js.org/) to define the necessary configurations for both the core admin plugin and your extensions. So, for example, everything works out of the box with Tailwind CSS, the admin dependencies, and more.

However, you may have some advanced case where you need to tweak the webpack configurations. For example, you want to support styling your extensions with CSS Modules.

For such use cases, you can extend the default webpack configurations defined in the admin plugin to add your custom configurations.

To do that, create the file `src/admin/webpack.config.js` that uses the `withCustomWebpackConfig` method imported from `@medusajs/admin` to export the extended configurations. The method accepts a callback function that must return an object of [webpack configuration](https://webpack.js.org/configuration/). The callback function accepts two parameters:

1. `config`: the first parameter is an object that holds the default webpack configuration. You should add your configurations to this object, then return it. Not returning the default configurations will lead to the application breaking.
2. `webpack`: the second parameter is the webpack instance.

:::warning

This is an advanced feature and requires knowledge of configuring webpack. If configured wrongly, it may lead to the admin application breaking.

:::

For example:

```js title="src/admin/webpack.config.js"
import { withCustomWebpackConfig } from "@medusajs/admin"

export default withCustomWebpackConfig((config, webpack) => {
config.plugins.push(
new webpack.DefinePlugin({
"process.env": {
NODE_ENV: JSON.stringify("production"),
API_URL:
JSON.stringify("https://api.medusa-commerce.com"),
},
})
)

return config
})
```
26 changes: 4 additions & 22 deletions www/apps/docs/content/admin/quickstart.mdx
Original file line number Diff line number Diff line change
@@ -69,28 +69,10 @@ const plugins = [
]
```

The plugin accepts the following options:

1. `serve`: (default: `true`) a boolean indicating whether to serve the admin dashboard when the Medusa backend starts. If set to `false`, you can serve the admin dashboard using the [dev command](./configuration.md#dev-command-options).
2. `path`: (default: `app`) a string indicating the path the admin server should run on when running the Medusa backend in production. It must be prefixed with a slash `/`, but it can't end with a `/`, which throws an error. It also can't be one of the reserved paths: "admin" and "store".
3. `outDir`: Optional path for where to output the admin build files.
4. `autoRebuild`: (default: `false`) a boolean indicating whether the admin UI should be rebuilt if there are any changes or if a missing build is detected when the backend starts. If not set, you must [manually build the admin dashboard](./configuration.md#build-command-options).
5. `develop`: An optional object that accepts the following properties:
- `open`: (default: `true`) a boolean value that indicates if the browser should be opened when the medusa project is first started.
- `port`: (default: `7001`) a number indicating the port the admin dashboard runs on.

### Optional: Manually Building Admin Dashboard

If you have `autoRebuild` disabled, you must build your admin dashboard before starting the Medusa backend. Refer to the [build command](./configuration.md#build-command-options) for more details.
Check [this documentation](./configuration.mdx#plugin-options) for a full list of available options.

### Step 3: Test the Admin Dashboard

:::tip

If you disabled the `serve` option, you need to run the admin dashboard separately using the [dev command](./configuration.md#dev-command-options)

:::

You can test the admin dashboard by running the following command in the directory of the Medusa backend:

```bash
@@ -112,14 +94,14 @@ This starts the Medusa Backend and the admin dashboard in a development environm

:::note

This doesn't apply if you have the `serve` option disabled.
This doesn't apply if you have the `serve` option disabled or you're deploying the admin separately.

:::

When you run the Medusa project in a production environment (such as with the `npx medusa start` command), the admin dashboard will be available at `<MEDUSA_URL>/<ADMIN_PATH>`, where:

1. `<MEDUSA_URL>` is the URL of your Medusa backend. By default, it'll be `localhost:9000` locally.
2. `<ADMIN_PATH>` is the path you define in the [admin's configurations](#step-2-add-admin-to-medusa-configurations).
2. `<ADMIN_PATH>` is the path you define in the [admin plugin's configurations](./configuration.mdx#plugin-options).

So, if you simulate a production environment locally, the admin dashboard will run by default on `localhost:9000/app`.

@@ -196,6 +178,6 @@ Can't find your language? Learn how you can contribute by translating the admin

## See Also

- [Admin Configuration](./configuration.md)
- [Admin Configuration](./configuration.mdx)
- [Admin widgets](./widgets.md)
- [Admin UI routes](./routes.md)
6 changes: 3 additions & 3 deletions www/apps/docs/content/create-medusa-app.mdx
Original file line number Diff line number Diff line change
@@ -18,7 +18,7 @@ import EaddrinuseSection from './troubleshooting/eaddrinuse.md'
import InvalidTokenError from './troubleshooting/create-medusa-app-errors/_no-browser-token-error.md'
import PostgresDockerError from './troubleshooting/database-errors/_docker.md'
import DbUrlError from './troubleshooting/create-medusa-app-errors/_db-url-error.md'
import PortError from './troubleshooting/create-medusa-app-errors/_port.md'
import ForwardingError from './troubleshooting/create-medusa-app-errors/_forwarding.md'

# Install Medusa with create-medusa-app

@@ -220,8 +220,8 @@ Based on what you're building, you can find a development path for you in the Re
<DetailsList
sections={[
{
title: "Admin Login or User Errors",
content: <PortError />
title: "Errors when using VSCode or GitHub Codespaces",
content: <ForwardingError />
},
{
title: 'Can\'t connect to database with --db-url option',
Original file line number Diff line number Diff line change
@@ -282,7 +282,7 @@ You can access `/health` to get health status of your deployed backend.

:::note

Make sure to either set the `autoRebuild` option of the admin plugin to `true` or add its [build](../../admin/configuration.md#build-command-options) command as part of the start command of your backend.
Make sure to either set the `autoRebuild` option of the admin plugin to `true` or add its [build](../../admin/configuration.mdx#build-command-options) command as part of the start command of your backend.

:::

Original file line number Diff line number Diff line change
@@ -250,7 +250,7 @@ You can access `/health` to get health status of your deployed backend.

:::note

Make sure to either set the `autoRebuild` option of the admin plugin to `true` or add its [build](../../admin/configuration.md#build-command-options) command as part of the `serve` command of your backend.
Make sure to either set the `autoRebuild` option of the admin plugin to `true` or add its [build](../../admin/configuration.mdx#build-command-options) command as part of the `serve` command of your backend.

:::

Original file line number Diff line number Diff line change
@@ -110,7 +110,7 @@ You can access `/health` to get health status of your deployed backend.

:::note

Make sure to either set the `autoRebuild` option of the admin plugin to `true` or add its [build](../../admin/configuration.md#build-command-options) command as part of the start command of your backend.
Make sure to either set the `autoRebuild` option of the admin plugin to `true` or add its [build](../../admin/configuration.mdx#build-command-options) command as part of the start command of your backend.

:::

Original file line number Diff line number Diff line change
@@ -221,7 +221,7 @@ You can access `/health` to get health status of your deployed backend.

:::note

Make sure to either set the `autoRebuild` option of the admin plugin to `true` or add its [build](../../admin/configuration.md#build-command-options) command as part of the start command of your backend.
Make sure to either set the `autoRebuild` option of the admin plugin to `true` or add its [build](../../admin/configuration.mdx#build-command-options) command as part of the start command of your backend.

:::

Original file line number Diff line number Diff line change
@@ -54,7 +54,9 @@ export const ProductRepository = dataSource
.extend({
// it is important to spread the existing repository here.
// Otherwise you will end up losing core properties
...Object.assign(MedusaProductRepository, { target: Product }),
...Object.assign(MedusaProductRepository, {
target: Product,
}),

/**
* Here you can create your custom function
2 changes: 1 addition & 1 deletion www/apps/docs/content/troubleshooting/cors-issues.md
Original file line number Diff line number Diff line change
@@ -8,7 +8,7 @@ You might see a log in your browser console, that looks like this:

![CORS error log](https://res.cloudinary.com/dza7lstvk/image/upload/v1668003322/Medusa%20Docs/Other/jnHK115_udgf2n.png)

In your `medusa-config.js` , you should ensure that you've configured your CORS settings correctly. By default, the Medusa starter runs on port `9000`, Medusa Admin runs on port `7000`, and the storefront starters run on port `8000`.
In your `medusa-config.js` , you should ensure that you've configured your CORS settings correctly. By default, the Medusa starter runs on port `9000`, Medusa Admin runs on port `7001`, and the storefront starters run on port `8000`.

The default configuration uses the following CORS settings:

Original file line number Diff line number Diff line change
@@ -7,17 +7,17 @@ import OtherErrors from './create-medusa-app-errors/_other-errors.mdx'
import InvalidTokenError from './create-medusa-app-errors/_no-browser-token-error.md'
import DockerSection from "./database-errors/_docker.md"
import DbUrlError from './create-medusa-app-errors/_db-url-error.md'
import PortError from './create-medusa-app-errors/_port.md'
import ForwardingError from './create-medusa-app-errors/_forwarding.md'

## TypeError: cmd is not a function

<TypeError />

---

## Admin Login or User Errors
## Errors when using VSCode or GitHub Codespaces

<PortError />
<ForwardingError />

---

Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
If you're running the Medusa backend through tools like VSCode or GitHub Codespaces, you must ensure that:

1. Port forwarding is configured for ports `9000` and `7001`. Refer to the following resources on how to configure forwarded ports:
1. [VSCode local development.](https://code.visualstudio.com/docs/editor/port-forwarding)
2. [VSCode remote development.](https://code.visualstudio.com/docs/remote/ssh#_forwarding-a-port-creating-ssh-tunnel)
3. [GitHub Codespaces.](https://docs.github.com/en/codespaces/developing-in-a-codespace/forwarding-ports-in-your-codespace)
2. If your tool or IDE exposes an address other than `localhost`, such as `127.0.0.1`, make sure to add that address to the [admin_cors](../../development/backend/configurations.md#admin_cors-and-store_cors) Medusa configuration. Your tool will show you what the forwarded address is.

After setting these configurations, run your Medusa backend and try again. If you couldn't create an admin user before, run the following command in the root directory of your Medusa project to create an admin user:

```bash
npx medusa user -e admin@medusa-test.com -p supersecret
```

This file was deleted.

2 changes: 1 addition & 1 deletion www/apps/docs/content/troubleshooting/eaddrinuse.md
Original file line number Diff line number Diff line change
@@ -14,5 +14,5 @@ port: 9000

This means that there's another process running at port `9000`. You need to either:

- Change the default port used by the Medusa backend. You can do that by setting the `PORT` environment variable to a new port. When you do this, make sure to change the port used in other apps that interact with your Medusa backend, such as in your [admin](../admin/configuration.md#build-command-options) or [storefront](../starters/nextjs-medusa-starter.mdx#changing-medusa-backend-url).
- Change the default port used by the Medusa backend. You can do that by setting the `PORT` environment variable to a new port. When you do this, make sure to change the port used in other apps that interact with your Medusa backend, such as in your [admin](../admin/configuration.mdx#build-command-options) or [storefront](../starters/nextjs-medusa-starter.mdx#changing-medusa-backend-url).
- Terminate other processes running on port `9000`.
2 changes: 1 addition & 1 deletion www/apps/docs/sidebars.js
Original file line number Diff line number Diff line change
@@ -187,7 +187,7 @@ module.exports = {
items: [
{
type: "doc",
label: "Admin Custom Configuration",
label: "Admin Configuration",
id: "admin/configuration",
},
{