{"ArticleId":null,"Name":"The installation wizard","Content":"\u003Cp\u003EThe first time GrandNode starts without a database, every request is redirected to \u003Ccode\u003E/install\u003C/code\u003E. The installation wizard is a single page: you fill it in once, press \u003Cstrong\u003EInstall\u003C/strong\u003E, and GrandNode creates the database, the administrator account, the default store and \u2014 if you want \u2014 a complete demo shop. This article goes through every field.\u003C/p\u003E\n\n\u003Ch2 id=\u0022before-you-start\u0022\u003EBefore you start\u003C/h2\u003E\n\u003Cul\u003E\n\u003Cli\u003EMongoDB is running and reachable from the application (see \u003Ca href=\u0022/getting-started-system-requirements\u0022\u003ESystem requirements\u003C/a\u003E).\u003C/li\u003E\n\u003Cli\u003EYou know the server address, and the user name and password if your MongoDB requires authentication \u2014 or you have a full connection string, for example from MongoDB Atlas.\u003C/li\u003E\n\u003Cli\u003EThe database you will name is empty or does not exist yet. The wizard stops with \u201CThis database already exists and has GrandNode installed on it. Choose different database.\u201D otherwise.\u003C/li\u003E\n\u003C/ul\u003E\n\n\u003Ch2 id=\u0022the-page\u0022\u003EThe page, top to bottom\u003C/h2\u003E\n\u003Cp\u003EThe page is titled \u003Cstrong\u003Egrandnode installation\u003C/strong\u003E. 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.\u003C/p\u003E\n\n\u003Ch3 id=\u0022company-information\u0022\u003ECompany information\u003C/h3\u003E\n\u003Ctable\u003E\n\u003Cthead\u003E\u003Ctr\u003E\u003Cth\u003EField\u003C/th\u003E\u003Cth\u003EWhat it does\u003C/th\u003E\u003C/tr\u003E\u003C/thead\u003E\n\u003Ctbody\u003E\n\u003Ctr\u003E\u003Ctd\u003ECompany name\u003C/td\u003E\u003Ctd\u003ESaved on the default store as the company name, used on invoices and in emails. Optional.\u003C/td\u003E\u003C/tr\u003E\n\u003Ctr\u003E\u003Ctd\u003ECompany address\u003C/td\u003E\u003Ctd\u003ESaved on the default store. Optional.\u003C/td\u003E\u003C/tr\u003E\n\u003Ctr\u003E\u003Ctd\u003ECompany phone number\u003C/td\u003E\u003Ctd\u003ESaved on the default store. Optional.\u003C/td\u003E\u003C/tr\u003E\n\u003Ctr\u003E\u003Ctd\u003ECompany email\u003C/td\u003E\u003Ctd\u003ESaved on the default store. Optional.\u003C/td\u003E\u003C/tr\u003E\n\u003C/tbody\u003E\n\u003C/table\u003E\n\u003Cp\u003EAll four can be changed later under \u003Cstrong\u003EConfiguration \u2192 Stores\u003C/strong\u003E.\u003C/p\u003E\n\n\u003Ch3 id=\u0022store-information\u0022\u003EStore information\u003C/h3\u003E\n\u003Ctable\u003E\n\u003Cthead\u003E\u003Ctr\u003E\u003Cth\u003EField\u003C/th\u003E\u003Cth\u003EWhat it does\u003C/th\u003E\u003C/tr\u003E\u003C/thead\u003E\n\u003Ctbody\u003E\n\u003Ctr\u003E\u003Ctd\u003EAdmin user email\u003C/td\u003E\u003Ctd\u003EThe email of the first administrator; you sign in with it. Prefilled with \u003Ccode\u003Eadmin@yourstore.com\u003C/code\u003E \u2014 change it to a real address. Required, must be a valid email.\u003C/td\u003E\u003C/tr\u003E\n\u003Ctr\u003E\u003Ctd\u003EAdmin user password\u003C/td\u003E\u003Ctd\u003EThe administrator\u0027s password. Required.\u003C/td\u003E\u003C/tr\u003E\n\u003Ctr\u003E\u003Ctd\u003EConfirm the password\u003C/td\u003E\u003Ctd\u003EMust match the password, otherwise the wizard shows \u201CPasswords must be equals\u201D.\u003C/td\u003E\u003C/tr\u003E\n\u003C/tbody\u003E\n\u003C/table\u003E\n\n\u003Ch3 id=\u0022data-provider\u0022\u003EData provider\u003C/h3\u003E\n\u003Cp\u003EChoose \u003Cstrong\u003EMongoDB\u003C/strong\u003E (the default), \u003Cstrong\u003ECosmosDB\u003C/strong\u003E, \u003Cstrong\u003EDocumentDB\u003C/strong\u003E or \u003Cstrong\u003ELiteDB\u003C/strong\u003E. 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 \u003Ccode\u003EDatabase:UseLiteDb\u003C/code\u003E is set to \u003Ccode\u003Etrue\u003C/code\u003E in \u003Ccode\u003EApp_Data/appsettings.json\u003C/code\u003E; the database file is then the one named in \u003Ccode\u003EDatabase:LiteDbConnectionString\u003C/code\u003E. Mixing them up is caught: installing MongoDB while \u003Ccode\u003EUseLiteDb\u003C/code\u003E is on (or LiteDB while it is off) stops with a message telling you which setting to change.\u003C/p\u003E\n\n\u003Ch3 id=\u0022create-sample-data\u0022\u003ECreate sample data\u003C/h3\u003E\n\u003Cp\u003ETick \u003Cstrong\u003ECreate sample data\u003C/strong\u003E 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 \u2014 removing hundreds of demo products later is more work than adding your own.\u003C/p\u003E\n\u003Cp\u003ESome 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.\u003C/p\u003E\n\n\u003Ch3 id=\u0022database-information\u0022\u003EDatabase information\u003C/h3\u003E\n\u003Ctable\u003E\n\u003Cthead\u003E\u003Ctr\u003E\u003Cth\u003EField\u003C/th\u003E\u003Cth\u003EWhat it does\u003C/th\u003E\u003C/tr\u003E\u003C/thead\u003E\n\u003Ctbody\u003E\n\u003Ctr\u003E\u003Ctd\u003EMongoDB Server name\u003C/td\u003E\u003Ctd\u003EHost name and optional port, for example \u003Ccode\u003Elocalhost\u003C/code\u003E, \u003Ccode\u003Elocalhost:27017\u003C/code\u003E or \u003Ccode\u003Emongo\u003C/code\u003E in the Docker setup. Required.\u003C/td\u003E\u003C/tr\u003E\n\u003Ctr\u003E\u003Ctd\u003EDatabase name\u003C/td\u003E\u003Ctd\u003EThe database GrandNode creates and uses, for example \u003Ccode\u003Egrandnode\u003C/code\u003E. Required.\u003C/td\u003E\u003C/tr\u003E\n\u003Ctr\u003E\u003Ctd\u003ECollation\u003C/td\u003E\u003Ctd\u003EThe language rules MongoDB uses to compare and sort text (see below).\u003C/td\u003E\u003C/tr\u003E\n\u003Ctr\u003E\u003Ctd\u003EMongoDB Server Username\u003C/td\u003E\u003Ctd\u003EOnly when your server requires authentication.\u003C/td\u003E\u003C/tr\u003E\n\u003Ctr\u003E\u003Ctd\u003EMongoDB Server Password\u003C/td\u003E\u003Ctd\u003EOnly when your server requires authentication.\u003C/td\u003E\u003C/tr\u003E\n\u003C/tbody\u003E\n\u003C/table\u003E\n\u003Cp\u003EInstead of the separate fields you can tick \u003Cstrong\u003EConnection string\u003C/strong\u003E and paste a full MongoDB connection string, for example \u003Ccode\u003Emongodb\u002Bsrv://user:password@cluster0.abc.mongodb.net/grandnode?retryWrites=true\u0026amp;w=majority\u003C/code\u003E. Include the database name in the connection string.\u003C/p\u003E\n\n\u003Ch3 id=\u0022collation\u0022\u003ECollation\u003C/h3\u003E\n\u003Cp\u003EThe collation list contains over a hundred languages plus \u003Cstrong\u003E-None-\u003C/strong\u003E. 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\u0027s language is preselected. Pick the main language of your catalog; choose \u003Cstrong\u003E-None-\u003C/strong\u003E to keep MongoDB\u0027s default binary comparison. The collation is fixed when the collections are created, so decide before you install.\u003C/p\u003E\n\n\u003Ch2 id=\u0022installing\u0022\u003EInstalling\u003C/h2\u003E\n\u003Col\u003E\n\u003Cli\u003EFill in the fields and press \u003Cstrong\u003EInstall\u003C/strong\u003E. An overlay with \u201CInstalling grandnode...\u201D appears; with sample data this takes a minute or two.\u003C/li\u003E\n\u003Cli\u003EIf something is wrong \u2014 the server cannot be reached, a required field is empty, the database already holds GrandNode \u2014 the page comes back with the error at the top. Fix it and press \u003Cstrong\u003EInstall\u003C/strong\u003E again.\u003C/li\u003E\n\u003Cli\u003EOn success the page shows \u201CApplication has been installed successfully. Please restart the application.\u201D Restart the application (stop and start the process, \u003Ccode\u003Edocker restart\u003C/code\u003E, or restart the service).\u003C/li\u003E\n\u003Cli\u003EOpen the store address. The storefront appears; the Admin panel is at \u003Ccode\u003E/admin\u003C/code\u003E.\u003C/li\u003E\n\u003C/ol\u003E\n\u003Cp\u003EDuring installation GrandNode writes the database connection to \u003Ccode\u003EApp_Data/Settings.cfg\u003C/code\u003E (unless you supplied it in \u003Ccode\u003Eappsettings.json\u003C/code\u003E) and installs every plugin present in the \u003Ccode\u003EPlugins\u003C/code\u003E folder. The default store is named \u201CYour store name\u201D and its URL is taken from the address you used to open the wizard.\u003C/p\u003E\n\u003Cp\u003EThe \u003Cstrong\u003ERestart installation\u003C/strong\u003E button clears the wizard\u0027s cached values by stopping the application; your hosting (IIS, systemd, Docker with a restart policy) starts it again.\u003C/p\u003E\n\n\u003Ch2 id=\u0022after-installation\u0022\u003EAfter installation\u003C/h2\u003E\n\u003Cul\u003E\n\u003Cli\u003EThe success message recommends switching the installer off: set \u003Ccode\u003E\u0022Grand.Module.Installer\u0022: false\u003C/code\u003E under \u003Ccode\u003EFeatureManagement\u003C/code\u003E in \u003Ccode\u003EApp_Data/appsettings.json\u003C/code\u003E. An installed site already redirects \u003Ccode\u003E/install\u003C/code\u003E to the home page, but a module that is not loaded cannot be misused.\u003C/li\u003E\n\u003Cli\u003EBack up \u003Ccode\u003EApp_Data/Settings.cfg\u003C/code\u003E together with your database.\u003C/li\u003E\n\u003Cli\u003ETo install again from scratch, delete \u003Ccode\u003ESettings.cfg\u003C/code\u003E, restart, and use a new database name.\u003C/li\u003E\n\u003C/ul\u003E\n\n\u003Ch2 id=\u0022related\u0022\u003ERelated\u003C/h2\u003E\n\u003Cul\u003E\n\u003Cli\u003E\u003Ca href=\u0022/getting-started-admin-tour\u0022\u003EA tour of the Admin panel\u003C/a\u003E\u003C/li\u003E\n\u003Cli\u003E\u003Ca href=\u0022/getting-started-first-steps\u0022\u003EFirst steps for a new store\u003C/a\u003E\u003C/li\u003E\n\u003C/ul\u003E","ParentCategoryId":"6abdec6c83d2816248229ea1","SeName":"getting-started-installation-wizard","MetaKeywords":null,"MetaDescription":"Every field of the GrandNode installation wizard: company details, admin account, data provider, MongoDB connection, collation and sample data.","MetaTitle":null,"AllowComments":false,"Captcha":{"ReCaptchaChallengeField":null,"ReCaptchaResponseField":null,"ReCaptchaResponseValue":null,"ReCaptchaResponse":null},"RelatedArticles":[],"CategoryBreadcrumb":[{"Name":"Getting started","Description":null,"IsCurrent":false,"Children":null,"Parent":null,"SeName":"docs-getting-started","Id":"6abdec6c83d2816248229ea1","UserFields":[]}],"AddNewComment":{"CommentText":null,"DisplayCaptcha":false,"Id":null,"UserFields":[]},"Comments":[],"Id":"6abdec6c83d2816248229ea9","UserFields":[]}