# Installation

#### Create project with composer

```
composer create-project appdezign/lara-cms-project myapp --prefer-dist
```

#### Install NPM

```
cd myapp

npm install
```

#### Publish vendor files

```
php artisan vendor:publish --tag=lara
```

#### Create client theme

```
cp -R ./laracms/themes/demo ./laracms/themes/myclient
```

### The .env file

#### Copy .env

```
cp ./.env.example ./.env
```

#### Edit .env

```
APP_ENV=local

MIX_PARTIAL_PROCESS=
MIX_PROCESS_CSS_ONLY=false

LARA_FRONT_BS_VERSION=5
LARA_PARENT_THEME=base
LARA_CLIENT_THEME=myclient
```

#### Run webpack / mix

```
npm run "mix dev"
```

#### Create database (mysql)

Create a database and a database user, and edit the relevant lines in the .env file. Check the /config/database.php file for the available database connections.&#x20;

```
DB_CONNECTION=mysql57
DB_DATABASE=d80_myapp
DB_HOST=localhost
DB_PASSWORD=secret
DB_PORT=3306
DB_USERNAME=u80_myapp
```

#### Edit the App Url

```
APP_URL=https://www.example.com
```

### Setup

#### Run setup

Make sure that the LARA\_NEEDS\_SETUP is set to true in your .env file, and run setup

```
https://www.example.com/setup
```

If the setup wizard has completed successfully, the LARA\_NEEDS\_SETUP variable will be set to false by the wizard, and you will be redirected to the backend dashboard.

### SASS

{% hint style="info" %}
**Tip:** if you are working on your client theme, you can tell Mix to only process the selected theme. This can make theme development a lot faster. The relevant variables can be found in the .env file. Possible values are: base, demo, client, admin

MIX\_PARTIAL\_PROCESS=client

If you are working on your SCSS files, you can even tell Mix to only process the SCSS files, and skip the JS and assets.

MIX\_PROCESS\_CSS\_ONLY=true&#x20;
{% endhint %}

## Deploy on web server

If you publish the app to a web server, you should move all project folders (except public) **one level down**, and put them in a folder called /laravel. If you are using a shared server (e.g. Plesk) and your server uses a public folder with a different name (e.g. httpdocs), you should move all public files and folders from /public to /httpdocs. You can then delete the (empty) public folder.

Your folder structure should look like this now:

```
/httpdocs
    /assets
/laravel
    /app
    /bootstrap
    /config
    ...
```

You should now edit your .env file:

```
LFM_PUBLIC_BASE_DIR=../httpdocs
```

... and your webpack.mix.js file:

```
const PUBLIC_ASSET_PATH = './../httpdocs/assets/';
```

... and, if necessary, the bootstrap/app.php file

```
$app->usePublicPath(realpath(base_path('../httpdocs')));
```

{% hint style="info" %}
**Tip:** if you are copying your Lara project from your local machine to a web server with FTP, you should exclude the following folders:

/laracms/core

/laracms/themes

/node\_modules

/vendor

Make sure that both composer.json, and composer.lock are copied to your web server, and run **composer install** on your server.

**You should NOT run composer as root.** If you are logged in as root, you should use:

\
`sudo -u [user] composer install`

If you are running composer as **root**, you need to change the ownership of the relevant folders and files:

`chown -R [system_user]:psacln ./httpdocs/assets`\
`chown -R [system_user]:psacln ./laravel/laracms`\
`chown -R [system_user]:psacln ./laravel/resources`\
`chown -R [system_user]:psacln ./laravel/vendor`

OR in one statement:

`chown -R [system_user]:psacln ./httpdocs/assets ./laravel/laracms ./laravel/resources ./laravel/vendor`
{% endhint %}


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.laracms.nl/get-started/installation.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
