> For the complete documentation index, see [llms.txt](https://weeego.gitbook.io/chat-app/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://weeego.gitbook.io/chat-app/master.md).

# How To Install Chat App

## 1. Backend launch

To start the backend you need to install `docker` and `docker-compose` \
[How to install docker](https://docs.docker.com/v17.09/engine/installation/) and [How to install docker-compose](https://docs.docker.com/compose/install/)&#x20;

The entire backend is launched with a single command. Run the command in the root directory

```bash
$ docker-compose -f docker-compose.development.yml up --build
```

And then you need to wait until all the images are downloaded and build After executing this command, will run `redis`, `mongodb`, `socker server` and api server

After launch, you will have available services \
<http://localhost:5000/graphql> (api) \
&#x20;<http://localhost:4000> (socket server)

{% hint style="info" %}
By executing this command you start all services with development configuration
{% endhint %}

#### For start with production configuration use command

```bash
$ docker-compose -f docker-compose.production.yml up --build
```

#### To run only `redis` and `mongodb` use command

```bash
$ docker-compose -f docker-compose.environment.yml up --build
```

{% hint style="info" %}
In this case, you need to perform some actions:&#x20;
{% endhint %}

1. Go to `messenger-api/src/config.ts`  and change development configuration.(replace `mongoURI` with `mongodb://localhost:27017/messenger` and `redis.host` with `localhost`)
2. Go to `messenger-socket/src/config.js`  and change development configuration. (replace `redis.host` with `localhost`)
3. In `messenger-api` directory run command:
   1. `$ yarn install`&#x20;
   2. `$ yarn start`
4. In `messenger-socket` directory run command:
   1. `$ yarn install`&#x20;
   2. `$ yarn start`

{% hint style="info" %}
Before the deployment, make sure the data in the configuration files is correct, specify the correct hosts.
{% endhint %}

## 2. Messenger App launch

In `messenger-app` directory run command&#x20;

```bash
$ yarn install
$ yarn start
```

And in terminal press **`i`** for run on iOS Simulator or press **`a`** for run on Android Emulator (make sure you are already running emulator)&#x20;

> Note: If you run API Server in development configuration you can login and register with any phone number and with any code from SMS, in this mode the twilio does not work

For launch with a production configuration see [here](https://docs.expo.io/versions/latest/workflow/development-mode/). And [How to build](https://docs.expo.io/versions/latest/distribution/building-standalone-apps/)

You can also use applications without an expo, [more details here](https://docs.expo.io/versions/latest/expokit/eject/).

## 3. Configure AWS S3 for upload photo

[How to create bucket ](<https://medium.com/@shamnad.p.s/how-to-create-an-s3-bucket-and-aws-access-key-id-and-secret-access-key-for-accessing-it-5653b6e54337 >)

Go to `messenger-api/src/config.ts` and put your AWS Account data

```bash
const AWS = {
  bucket: '',
  accessKey: '',
  secretKey: '',
  region: ''
};
```

{% hint style="info" %}
You need add policy to your bucket. [How to add Policy](https://docs.aws.amazon.com/en_us/AmazonS3/latest/user-guide/add-bucket-policy.html)&#x20;
{% endhint %}

Paste this policy

```bash
{
  "Version": "2012-10-17",
  "Id": "Policy1478209136055",
  "Statement": [
    {
      "Sid": "Stmt1478209120479",
      "Effect": "Allow",
      "Principal": "*",
      "Action": "s3:*",
      "Resource": "arn:aws:s3:::<your-bucket-name>/*"
    }
  ]
}
```

Replace `<your-bucket-name>`

## 4. Configure Twilio for send SMS Authentication

Go to `messenger-api/src/config.ts` and put your twilio data. [See more](https://www.twilio.com/docs/sms/quickstart/node)

```bash
production: {
  ...
  twilio: {
    sid: '<sid>',
    token: '<token>',
    from: '<phone number>' // From which number will SMS be sent
  },
  ... 
},
```

{% hint style="info" %}
SMS sending only works when API in production mode
{% endhint %}
