> For the complete documentation index, see [llms.txt](https://docs.venuzle.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.venuzle.com/manager-api/installation.md).

# Installation

## Requirements

Before proceeding with the installation, you should make sure the following requirements are installed on your machine:

* Git
* Docker
* MySQL

## Cloning the repository

The first step is to clone the repository via HTTPS or SSH.

```
git clone git@bitbucket.org:venuzle/venuzle-manager-api.git
```

## Install Composer dependencies and create the .env file

Move to the directory in which the project was cloned

```bash
cd venuzle-manager-api
```

Install the Composer dependencies

```bash
sudo docker-compose run --rm -w /var/www/html/venuzle-manager-api app composer install
```

Create the .env file

```bash
sudo docker-compose run --rm -w /var/www/html/venuzle-manager-api app cp .env.example .env
```

## Generate the application key

Each Laravel application must have a secret key that is used to encrypt and decrypt passwords, cookies, etc. Generate one by running the following command:

```bash
sudo docker-compose run --rm -w /var/www/html/venuzle-manager-api app php artisan key:generate
```

## Create the Database and add the details to the .env file

The Manager API is built around a central database and one separate database for each partner. You only need to create the central database. The default name should be `manager` but you are free to choose any name you want. Run the following command from the MySQL command line (or your MySQL client) to create the database:

```sql
create database manager;
```

Next, open the `.env` file and replace the database details with your valid details.

{% code title=".env" %}

```sql
MANAGER_DB_HOST=host.docker.internal
MANAGER_DB_PORT=3306
MANAGER_DB_DATABASE=manager
MANAGER_DB_USERNAME=root
MANAGER_DB_PASSWORD=secret
```

{% endcode %}

{% hint style="info" %}
Since the database is running on your machine and the API in a Docker container, you need to be able to access the host of your machine from the docker container. For macOS this can be done using `host.docker.internal`
{% endhint %}

## Set the session driver

The API is using Laravel Sanctum for authentication which requires a cookie session driver. Open the `.env` file and change the session driver:

{% code title=".env" %}

```bash
SESSION_DRIVER=cookie
```

{% endcode %}

## Running the migrations

At this point, if the database details are ok, you should be able to run the migrations. To do so, execute the following command:

```bash
sudo docker-compose run --rm -w /var/www/html/venuzle-manager-api app php artisan migrate --path=database/migrations/manager
```

This will create all the required tables in the main database.

## Starting and stopping the container

In order to have the API running, you must start the container. To do so, run:

```bash
sudo docker-compose up -d
```

In order to stop the container, run:

```bash
sudo docker-compose down
```

## Port binding

By default, the docker container binds the port `80` on your machine. This means that you can access the API by using the URL `localhost:80` . Often, this port is already taken by something else (the frontend instance for example). In order to solve the problem, from the `docker-compose.yml` file you can bind any port you want. As an example, let's bind the port `8084` (line 13)

{% code title="docker-compose.yml" %}

```bash
version: '2'
services:
  app:
    build:
      context: ./docker/app
      dockerfile: Dockerfile
    image: manager.venuzle.com/app
    restart: always
    volumes:
     - .:/var/www/html/venuzle-manager-api:cached
     - ./storage/logs/nginx:/var/log/nginx:cached
    ports:
     - "8084:80" # port is binded here
    networks:
     - sdnet
networks:
  sdnet:
    driver: "bridge"

```

{% endcode %}

After that change, you are able to access the API via the URL `localhost:8084`
