# Ruby Stack

The example below demonstrates a composition of Ruby, PostgreSQL & Redis with the pre-defined Sidecar.

<img src="https://3706867246-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F0tGo33otNRgIhFn6lpgU%2Fuploads%2FP3wSZyekJOcBmzooIxbY%2Fpostgresql.png?alt=media&#x26;token=f29a86fb-3916-4124-b394-1da5ba071d02" alt="" data-size="line">![](https://3706867246-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F0tGo33otNRgIhFn6lpgU%2Fuploads%2FUSS5oQGSWDLCt550dAuu%2Ficons8-jewel-24.png?alt=media\&token=8b681755-49ef-4dfc-a4c8-54dfc0060124)<img src="https://3706867246-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F0tGo33otNRgIhFn6lpgU%2Fuploads%2FOuJ3PqhWCkvKEOxu14eq%2Ficons8-redis-48.png?alt=media&#x26;token=d07991cb-26cb-4fd6-986f-858790f289c9" alt="" data-size="line">

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

```docker
# Docker Compose Example code for Ruby
 image: industryapps.azurecr.io/<<app-name>>
    restart: always
    ports:
      - 8080:8080
    environment:
      DATABASE_HOST: db
      DATABASE_NAME: <<db-name>>
      DATABASE_USERNAME: <<db-user>>
      DATABASE_PASSWORD: <<db-password>>
      DATABASE_PORT: 5432
      REDIS_URL: redis://redis:6379/0
      INAPPS_AUTH_API_BASE_URI: https://auth.uat.industryapps.netplea
      INAPPS_AASGATEWAY_API_BASE_URI: https://aasgateway.uat.industryapps.net
      INAPPS_CLIENT_CREDENTIALS_ID: <<app-id>>
      INAPPS_CLIENT_CREDENTIALS_SECRET: <<app-secret-code>>
      INAPPS_APP_CODE: /<<app-code>>
      RAILS_ENV: production
      RAILS_LOG_TO_STDOUT: "true"
      INAPPS_MASTER_API_BASE_URI: https://democustomer.uat.industryapps.net/masterMiddleware
    logging:
      driver: "json-file"
      options:
        max-file: "5"
        max-size: "10m"
  db:
    image: postgres:13.4-alpine
    restart: always
    environment:
      POSTGRES_USER: <<db-user>>
      POSTGRES_PASSWORD: <<db-password>>
    volumes:
      - ./db-data:/var/lib/postgresql/data
  redis:
    image: redis
    restart: always

  sidecar:
    image: industryapps.azurecr.io/service-discovery-sidecar
    container_name: { my-apps-name-sidecar }
    restart: always
    environment:
      NODE_ENV: production
      DEPLOYMENT_MODE: public
      EUREKA_INSTANCE_IP: { IP }
      EUREKA_INSTANCE_PORT: 8080 # PORT
      EUREKA_INSTANCE_APP: { APPCODE }
      EUREKA_INSTANCE_HOST_NAME: <your_domain>/
      EUREKA_INSTANCE_HOME_PAGE_URL: https://<your_domain>/{APPCODE}
      EUREKA_HOST: servicediscovery.uat.industryapps.net
      EUREKA_PORT: 443
      
```

{% endcode %}

Inside the `docker-compose.yml` file, add the necessary information which is tagged with curly braces ' `{  }` '.&#x20;

* **`IP`** -> The IP of the web service which you are running, such as on AWS EC2 Ubuntu, Lightsail instance or Azure Web services as an example.
* **`PORT`** -> The port which the app client-side is served at (e.g. Port 80).
* **`APPCODE`** -> Navigate to Developer dashboard > Applications > {App Name} > App Data, the Application code will be available there.
* **`HOSTNAME`** -> Can be found on the Developer dashboard, the boilerplate is the hostname  of the application: `https://<your_domain>/{APPCODE}`

{% hint style="info" %}
If the application container is pushed onto IndustryApps, the HOSTNAME is the Application ID.
{% endhint %}

[Additional information about Production deployment can be found here.](https://docs.industryapps.net/connect-to-the-platform/production-deployment)


---

# 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.industryapps.net/docker-information/ruby-stack.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.
