# OroCRM Application

This is an example of a fully functional [OroCRM][1] application which can be used as is or customized to meet
your business needs.

## System Requirements

Before starting the installation process, please prepare infrastructure environment based on the [system requirements][2]. 

## Installation

- Clone OroCRM application repository:

```bash
    git clone -b x.y.z https://github.com/orocrm/crm-application.git
```

where x.y.z is the latest [release tag](https://github.com/orocrm/crm-application/releases) or use the latest master:

```bash
    git clone https://github.com/orocrm/crm-application.git
```


- Install [Composer][3] globally following the  official Composer [installation documentation][4].

- Install [Node.js][5].

- Install application dependencies running the following command from the application folder:

```bash
    composer install --prefer-dist --no-dev
```

- Create the database with the name specified in the previous step (default name is "oro_crm").

- Install the application and the admin user with the Installation Wizard by opening install.php in the browser or from CLI:

```bash  
php app/console oro:install --env=prod
```

- Configure the Web Socket server process and the Message Queue consumer process in [Supervisor][6]:

```ini

[program:orocrm_web_socket]
command=/path/to/app/console clank:server --env=prod
numprocs=1
autostart=true
startsecs=0
user=www-data
redirect_stderr=true

[program:orocrm_message_consumer]
command=/path/to/app/console oro:message-queue:consume --env=prod
process_name=%(program_name)s_%(process_num)02d
numprocs=5
autostart=true
autorestart=true
startsecs=0
user=www-data
redirect_stderr=true
```

or run them manually:

```bash
php /path/to/app/console clank:server --env=prod
php /path/to/app/console oro:message-queue:consume --env=prod
```

**Note:** the port used by Web Socket must be open in the firewall for outgoing/incoming connections.

- Configure crontab:

```bash
*/1 * * * * /path/to/app/console oro:cron --env=prod
```

or scheduled tasks execution to run the command below every minute:

```bash
php /path/to/app/console oro:cron --env=prod
```
 
**Note:** ``/path/to/app/console`` is a full path to `app/console` script in your application.

### Opcache

Recommended configuration

```
;512Mb for php5
opcache.memory_consumption=512

;256Mb for php7
opcache.memory_consumption=256
opcache.max_accelerated_files=32531
opcache.interned_strings_buffer=32
```

See [Symfony Performance](http://symfony.com/doc/current/performance.html)


## Using Redis for application caching

To use Redis for application caching, follow the corresponding [configuration instructions][7]

[1]:    https://github.com/orocrm/crm
[2]:    https://www.orocrm.com/documentation/index/current/system-requirements
[3]:    https://getcomposer.org/
[4]:    https://getcomposer.org/download/
[5]:    https://nodejs.org/en/download/package-manager/
[6]:    http://supervisord.org/
[7]:    https://github.com/orocrm/redis-config#configuration
