The installation wizard

The first time GrandNode starts without a database, every request is redirected to /install. The installation wizard is a single page: you fill it in once, press Install, and GrandNode creates the database, the administrator account, the default store and — if you want — a complete demo shop. This article goes through every field.

Before you start

  • MongoDB is running and reachable from the application (see System requirements).
  • You know the server address, and the user name and password if your MongoDB requires authentication — or you have a full connection string, for example from MongoDB Atlas.
  • The database you will name is empty or does not exist yet. The wizard stops with “This database already exists and has GrandNode installed on it. Choose different database.” otherwise.

The page, top to bottom

The page is titled grandnode installation. In the top right corner there is a language selector: it changes the language of the wizard itself (English and Polish are shipped; the browser language is picked by default). It does not decide the languages of your store.

Company information

FieldWhat it does
Company nameSaved on the default store as the company name, used on invoices and in emails. Optional.
Company addressSaved on the default store. Optional.
Company phone numberSaved on the default store. Optional.
Company emailSaved on the default store. Optional.

All four can be changed later under Configuration → Stores.

Store information

FieldWhat it does
Admin user emailThe email of the first administrator; you sign in with it. Prefilled with admin@yourstore.com — change it to a real address. Required, must be a valid email.
Admin user passwordThe administrator's password. Required.
Confirm the passwordMust match the password, otherwise the wizard shows “Passwords must be equals”.

Data provider

Choose MongoDB (the default), CosmosDB, DocumentDB or LiteDB. Choosing CosmosDB or DocumentDB switches the form to the connection string field, because those services are reached with a connection string. LiteDB needs no connection details, but it works only when Database:UseLiteDb is set to true in App_Data/appsettings.json; the database file is then the one named in Database:LiteDbConnectionString. Mixing them up is caught: installing MongoDB while UseLiteDb is on (or LiteDB while it is off) stops with a message telling you which setting to change.

Create sample data

Tick Create sample data to install a demo shop: categories, brands, collections, products with pictures and attributes, a vendor, warehouses, pickup points, discounts, blog posts, news, knowledgebase articles, checkout attributes, affiliates and order tags. With sample data the storefront uses the Nordic theme; without it the Default theme and an empty catalog. Sample data is ideal for evaluation and training. For a production store leave it unticked — removing hundreds of demo products later is more work than adding your own.

Some things are installed in both cases: the store, English language, currencies (US Dollar is primary, Euro is published, several more unpublished), countries and states, measures, tax categories, the shipping methods Ground, Next Day Air and 2nd Day Air, message templates, a sample email account, landing pages, layouts, schedule tasks, merchandise return reasons, order statuses and permissions.

Database information

FieldWhat it does
MongoDB Server nameHost name and optional port, for example localhost, localhost:27017 or mongo in the Docker setup. Required.
Database nameThe database GrandNode creates and uses, for example grandnode. Required.
CollationThe language rules MongoDB uses to compare and sort text (see below).
MongoDB Server UsernameOnly when your server requires authentication.
MongoDB Server PasswordOnly when your server requires authentication.

Instead of the separate fields you can tick Connection string and paste a full MongoDB connection string, for example mongodb+srv://user:password@cluster0.abc.mongodb.net/grandnode?retryWrites=true&w=majority. Include the database name in the connection string.

Collation

The collation list contains over a hundred languages plus -None-. When you pick one, GrandNode creates every collection with that MongoDB collation, so names are compared and sorted by the rules of that language (accented letters, alphabetical order). The entry matching the wizard's language is preselected. Pick the main language of your catalog; choose -None- to keep MongoDB's default binary comparison. The collation is fixed when the collections are created, so decide before you install.

Installing

  1. Fill in the fields and press Install. An overlay with “Installing grandnode...” appears; with sample data this takes a minute or two.
  2. If something is wrong — the server cannot be reached, a required field is empty, the database already holds GrandNode — the page comes back with the error at the top. Fix it and press Install again.
  3. On success the page shows “Application has been installed successfully. Please restart the application.” Restart the application (stop and start the process, docker restart, or restart the service).
  4. Open the store address. The storefront appears; the Admin panel is at /admin.

During installation GrandNode writes the database connection to App_Data/Settings.cfg (unless you supplied it in appsettings.json) and installs every plugin present in the Plugins folder. The default store is named “Your store name” and its URL is taken from the address you used to open the wizard.

The Restart installation button clears the wizard's cached values by stopping the application; your hosting (IIS, systemd, Docker with a restart policy) starts it again.

After installation

  • The success message recommends switching the installer off: set "Grand.Module.Installer": false under FeatureManagement in App_Data/appsettings.json. An installed site already redirects /install to the home page, but a module that is not loaded cannot be misused.
  • Back up App_Data/Settings.cfg together with your database.
  • To install again from scratch, delete Settings.cfg, restart, and use a new database name.

Question not answered here? Ask the community on GitHub Discussions ↗