summaryrefslogtreecommitdiffstats
path: root/docker-compose/README.md
blob: 3e6ab8367ed963f29fadc12d05fad585914b74f7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
<!--
  ============LICENSE_START=======================================================
   Copyright (C) 2020 Pantheon.tech
   Modifications Copyright (C) 2020-2021 Nordix Foundation.
   Modifications Copyright (C) 2021 Bell Canada.
  ================================================================================
  Licensed under the Apache License, Version 2.0 (the "License");
  you may not use this file except in compliance with the License.
  You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.

  SPDX-License-Identifier: Apache-2.0
  ============LICENSE_END=========================================================
-->

# Building and running CPS locally

## Building Java Archive only

Following command builds all Java components to `cps-application/target/cps-application-x.y.z-SNAPSHOT.jar` JAR file
without generating any docker images:

```bash
mvn clean install -Pcps-docker -Pncmp-docker -Pcps-ncmp-docker -Djib.skip
```

## Building Java Archive and Docker images

* Following command builds the JAR file and also generates the Docker image for all CPS components:

```bash
mvn clean install -Pcps-docker -Pncmp-docker -Pcps-ncmp-docker
```

* Following command builds the JAR file and generates the Docker image for specified CPS component:
  (with `<docker-profile>` being one of `cps-docker`, `ncmp-docker` or `cps-ncmp-docker`):

```bash
mvn clean install -P<docker-profile>
```

## Running Docker containers

`docker-compose/docker-compose.yml` file is provided to be run with `docker-compose` tool and images previously built.
It starts both Postgres database and CPS services.

1. Edit `docker-compose.yml`
   1. uncomment desired service to be deployed, by default `cps-and-ncmp` is enabled. You can comment it and uncomment `cps-standalone` or `ncmp-standalone`.
   2. To send data-updated events to kafka,
      * uncomment the `zookeeper` and `kafka` services.
      * uncomment environment variables
        * `notification.data-updated.enabled: 'true'`
        * `KAFKA_BOOTSTRAP_SERVER: kafka:9092`
        * `NOTIFICATION_DATASPACE_FILTER_PATTERNS: '.*'`
2. Execute following command from `docker-compose` folder:

Use one of the below version type that has been generated in the local system's docker image list after the build.
```bash
VERSION=latest DB_USERNAME=cps DB_PASSWORD=cps docker-compose up -d
or
VERSION=<version> DB_USERNAME=cps DB_PASSWORD=cps docker-compose up -d
```

## Running or debugging Java built code

Before running CPS, a Postgres database instance needs to be started. This can be done with following
command:

```bash
docker run --name postgres -p 5432:5432 -d \
  -e POSTGRES_DB=cpsdb -e POSTGRES_USER=cps -e POSTGRES_PASSWORD=cps \
  postgres:12.4-alpine
```

Then CPS can be started either using a Java Archive previously built or directly from Intellij IDE.

### Running from Jar Archive

Following command starts the application using JAR file:

```bash
DB_HOST=localhost DB_USERNAME=cps DB_PASSWORD=cps CPS_USERNAME=cpsuser CPS_PASSWORD=cpsr0cks! \
  java -jar cps-application/target/cps-application-x.y.z-SNAPSHOT.jar
```

### Running from IntelliJ IDE

Here are the steps to run or debug the application from Intellij:

1. Enable the desired maven profile form Maven Tool Window
2. Run a configuration from `Run -> Edit configurations` with following settings:
   * `Environment variables`: `DB_HOST=localhost;DB_USERNAME=cps;DB_PASSWORD=cps
                                CPS_USERNAME=cpsuser CPS_PASSWORD=cpsr0cks!`

## Accessing services

Swagger UI and Open API specifications are available to discover service endpoints and send requests.

* `http://localhost:<port-number>/swagger-ui.html`
* `http://localhost:<port-number>/api-docs/cps-core/openapi.yaml`
* `http://localhost:<port-number>/api-docs/cps-ncmp/openapi.yaml`
* `http://localhost:<port-number>/api-docs/cps-ncmp/openapi-inventory.yaml`

with <port-number> being either `8080` if running the plain Java build or retrieved using following command
if running from `docker-compose`:

```bash
docker inspect \
  --format='{{range $p, $conf := .NetworkSettings.Ports}} {{$p}} -> {{(index $conf 0).HostPort}} {{end}}' \
  <cps-docker-container>
```

Enjoy CPS !