Build instructions
This commit is contained in:
parent
f9485be59d
commit
c942d2325b
351
README.md
Normal file
351
README.md
Normal file
@ -0,0 +1,351 @@
|
|||||||
|
# Build instructions
|
||||||
|
|
||||||
|
This document is aiming to setup single all-in-one dedicated docker container to harbour CordaChecers development environment. It can also be used as a lazy man way of building & running production environmnent.
|
||||||
|
|
||||||
|
# Create 'corda-prod' container
|
||||||
|
|
||||||
|
```bash
|
||||||
|
[luke@BB8 ~]$ docker run -it --name corda-prod ubuntu
|
||||||
|
root@a9a041421f99:/# exit
|
||||||
|
|
||||||
|
[luke@BB8 ~]$ docker start corda-prod
|
||||||
|
[luke@BB8 ~]$ docker attach corda-prod
|
||||||
|
root@a9a041421f99:/#
|
||||||
|
```
|
||||||
|
|
||||||
|
## APT
|
||||||
|
|
||||||
|
```bash
|
||||||
|
root@a9a041421f99:/ apt update
|
||||||
|
root@a9a041421f99:/ apt install software-properties-common
|
||||||
|
root@a9a041421f99:/ apt install nano
|
||||||
|
```
|
||||||
|
|
||||||
|
# Corda CSDE
|
||||||
|
## Java Azul Zulu 11
|
||||||
|
|
||||||
|
Template [tutorial](https://www.fosstechnix.com/install-zulu-openjdk-version-11/)
|
||||||
|
|
||||||
|
### Import the Zulu Repository Key for Ubuntu
|
||||||
|
|
||||||
|
```bash
|
||||||
|
root@a9a041421f99:~ apt install gnupg
|
||||||
|
|
||||||
|
root@a9a041421f99:~ apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 0xB1998361219BD9C9
|
||||||
|
```
|
||||||
|
|
||||||
|
### Add Zulu apt Repository
|
||||||
|
|
||||||
|
```bash
|
||||||
|
root@a9a041421f99:~ sudo apt-add-repository 'deb http://repos.azulsystems.com/ubuntu stable main'
|
||||||
|
```
|
||||||
|
|
||||||
|
### Install Zulu OpenJDK Version 11 on Ubuntu
|
||||||
|
|
||||||
|
```bash
|
||||||
|
root@a9a041421f99:~ apt install zulu-11
|
||||||
|
|
||||||
|
root@a9a041421f99:~ java -version
|
||||||
|
openjdk version "11.0.8" 2020-07-14 LTS
|
||||||
|
OpenJDK Runtime Environment Zulu11.41+23-CA (build 11.0.8+10-LTS)
|
||||||
|
OpenJDK 64-Bit Server VM Zulu11.41+23-CA (build 11.0.8+10-LTS, mixed mode)
|
||||||
|
```
|
||||||
|
|
||||||
|
## Corda CLI
|
||||||
|
|
||||||
|
[Official](https://docs.r3.com/en/platform/corda/5.0/developing-applications/tooling/installing-corda-cli.html) documemtation.
|
||||||
|
|
||||||
|
### Use python web server to share the CLI binaries
|
||||||
|
|
||||||
|
```bash
|
||||||
|
oxbee@MacBook % cd corda-cli-installer-5.0.0.0
|
||||||
|
oxbee@MacBook corda-cli-installer-5.0.0.0 % python3 -m http.server
|
||||||
|
```
|
||||||
|
|
||||||
|
### Install WGET on to the 'corda-prpd'
|
||||||
|
|
||||||
|
```bash
|
||||||
|
root@a9a041421f99:/ apt-get install wget
|
||||||
|
```
|
||||||
|
|
||||||
|
### Download CordaCli installer onto the 'corda-prod'
|
||||||
|
|
||||||
|
```bash
|
||||||
|
root@a9a041421f99:/ cd
|
||||||
|
root@a9a041421f99:~ ls
|
||||||
|
root@a9a041421f99:~ pwd
|
||||||
|
/root
|
||||||
|
|
||||||
|
root@a9a041421f99:~ wget -r corda-cli-installer-5.0.0.0 192.168.10.121:8000
|
||||||
|
...
|
||||||
|
Downloaded: 14 files, 178M in 16s (11.4 MB/s)
|
||||||
|
|
||||||
|
root@a9a041421f99:~/192.168.10.121:8000# ls
|
||||||
|
corda-cli.jar index.html install.ps1 install.sh plugins
|
||||||
|
```
|
||||||
|
|
||||||
|
### Run the installer
|
||||||
|
|
||||||
|
```bash
|
||||||
|
root@a9a041421f99:~/192.168.10.121:8000 install.sh
|
||||||
|
|
||||||
|
root@a9a041421f99:~/.corda/cli# pwd
|
||||||
|
/root/.corda/cli
|
||||||
|
|
||||||
|
root@a9a041421f99:~/.corda/cli# ls -la
|
||||||
|
total 27380
|
||||||
|
drwxr-xr-x 4 root root 4096 Nov 28 10:33 .
|
||||||
|
drwxr-xr-x 3 root root 4096 Nov 28 10:24 ..
|
||||||
|
-rw-r--r-- 1 root root 27999276 Nov 28 10:24 corda-cli.jar
|
||||||
|
-rwxr-xr-x 1 root root 91 Nov 28 10:24 corda-cli.sh
|
||||||
|
-rw-r--r-- 1 root root 1195 Nov 28 10:24 install.ps1
|
||||||
|
-rwxr-xr-x 1 root root 416 Nov 28 10:24 install.sh
|
||||||
|
drwxr-xr-x 2 root root 4096 Nov 28 10:33 logs
|
||||||
|
drwxr-xr-x 2 root root 4096 Nov 28 10:24 plugins
|
||||||
|
-rw-r--r-- 1 root root 8 Nov 28 10:33 profile.yaml
|
||||||
|
```
|
||||||
|
|
||||||
|
### Add corda-cli.sh to the PATH
|
||||||
|
|
||||||
|
- Creat an `alias`
|
||||||
|
```bash
|
||||||
|
root@BB8:/$ nano ~/.bash_aliases
|
||||||
|
+ alias corda-cli=${HOME}/.corda/cli/corda-cli.sh
|
||||||
|
source ~/.bashrc
|
||||||
|
```
|
||||||
|
|
||||||
|
- Modifying `.bashrc`
|
||||||
|
```bash
|
||||||
|
nano ~/.bashrc
|
||||||
|
+ export PATH=~/.corda/cli/:${PATH}
|
||||||
|
source ~/.bashrc
|
||||||
|
```
|
||||||
|
|
||||||
|
- Creating a symlink via `ln -s source_file symbolic_link`
|
||||||
|
```bash
|
||||||
|
root@BB8:~/.corda/cli echo $PATH
|
||||||
|
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
|
||||||
|
|
||||||
|
root@BB8:~/.corda/cli ln -s ~/.corda/cli/corda-cli.sh /usr/local/bin/corda-cli
|
||||||
|
|
||||||
|
root@BB8:~/.corda/cli corda-cli -h
|
||||||
|
Usage: corda-cli [-h] [COMMAND]
|
||||||
|
-h, -?, -help, --help Display help and exit.
|
||||||
|
```
|
||||||
|
|
||||||
|
## Docker inside Docker
|
||||||
|
|
||||||
|
We need to go deeper ;)
|
||||||
|
|
||||||
|
### Create an image from a container
|
||||||
|
|
||||||
|
`docker commit container_id imagename`
|
||||||
|
|
||||||
|
```bash
|
||||||
|
[luke@BB8 ~]$ docker commit a9a041421f99 corda-cherckers
|
||||||
|
sha256:bd9e801599214c3e3d4b0cb1884bc94b76f085bbe8fc86fbde42c0077c4cb0ab
|
||||||
|
|
||||||
|
[luke@BB8 ~]$ docker image ls
|
||||||
|
REPOSITORY TAG IMAGE ID CREATED SIZE
|
||||||
|
corda-cherckers latest bd9e80159921 23 seconds ago 781MB
|
||||||
|
gitea/gitea latest c24cd4cd2ad5 7 weeks ago 273MB
|
||||||
|
```
|
||||||
|
|
||||||
|
### Mount your host's Docker socket to the container
|
||||||
|
|
||||||
|
```bash
|
||||||
|
[luke@BB8 ~]$ docker container rm corda-prod
|
||||||
|
[luke@BB8 ~]$ docker run -itd --name corda-prod -v /var/run/docker.sock:/var/run/docker.sock corda-cherckers
|
||||||
|
5676046d2dc2b82472230b3d028ba42aa37e9c5a9aeaaa420c167483beb5abd6
|
||||||
|
|
||||||
|
[luke@BB8 ~]$ docker ps
|
||||||
|
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
|
||||||
|
5676046d2dc2 corda-cherckers "/bin/bash" 10 seconds ago Up 9 seconds corda-prod
|
||||||
|
|
||||||
|
[luke@BB8 ~]$ docker exec -it corda-prod /bin/bash
|
||||||
|
root@5676046d2dc2:/# corda-cli -h
|
||||||
|
Usage: corda-cli [-h] [COMMAND]
|
||||||
|
-h, -?, -help, --help Display help and exit.
|
||||||
|
```
|
||||||
|
|
||||||
|
### Install Docker
|
||||||
|
|
||||||
|
[Official](https://docs.docker.com/engine/install/ubuntu/#install-using-the-repository) documentation. Use apt option. Eventually, you shall be able to run docker command inside container.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
root@5babbb69aaa4:/# docker ps
|
||||||
|
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
|
||||||
|
5babbb69aaa4 corda-cherckers "/bin/bash" 9 minutes ago Up 9 minutes corda-prod
|
||||||
|
f8cf3e498010 gitea/gitea:latest "/usr/bin/entrypoint…" 6 weeks ago Up 2 weeks gitea-front-1
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Optional
|
||||||
|
|
||||||
|
Create `corda` user that has access to docker and owns the /sources directory.
|
||||||
|
|
||||||
|
> [!INFO]
|
||||||
|
> Password: `corda`
|
||||||
|
|
||||||
|
```bash
|
||||||
|
root@b9a8b2a71d7d:/# groupadd docker
|
||||||
|
root@b9a8b2a71d7d:/# adduser corda
|
||||||
|
root@5babbb69aaa4:/# usermod -aG docker corda
|
||||||
|
root@b9a8b2a71d7d:/# chown corda /sources/
|
||||||
|
```
|
||||||
|
|
||||||
|
## CordaApp
|
||||||
|
### Clone source code repo
|
||||||
|
|
||||||
|
It looks that for some reason git was already installed. It is extremely important to have network mode set to HOST.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
[luke@BB8 ~]$ docker run -itd --name corda-prod -v /var/run/docker.sock:/var/run/docker.sock -v corda-checkers-src:/sources --network host corda-checkers
|
||||||
|
b8b724b99be40077455cd57e50919b7baf0c8bb435faef596b07a44dd811e720
|
||||||
|
|
||||||
|
luke@BB8 ~]$ docker exec -it corda-prod /bin/bash
|
||||||
|
root@BB8:/# cd /sources/corda/
|
||||||
|
|
||||||
|
root@BB8:/$ cd /sources/
|
||||||
|
root@BB8:/sources$ git clone http://192.168.8.55:3000/HQLAx/CordaCheckers.git .
|
||||||
|
```
|
||||||
|
|
||||||
|
Commentout java path in `gradle.properties`, we have only one java version installed, so it will be used by default:
|
||||||
|
```bash
|
||||||
|
corda@b9a8b2a71d7d:/sources/corda$ nano gradle.properties
|
||||||
|
```
|
||||||
|
|
||||||
|
### Build & run
|
||||||
|
|
||||||
|
```bash
|
||||||
|
oxbee@MacBook backend % ssh luke@bb8
|
||||||
|
[luke@BB8 ~]$ docker exec -it corda-prod2 /bin/bash
|
||||||
|
root@BB8:/ cd /source/cord
|
||||||
|
root@BB8:/ ./gradlew startCorda #run CSDE worker (shall not quit)
|
||||||
|
root@BB8:/ ./gradlew 5-vNodesSetup # deploy&run your Cordapp
|
||||||
|
```
|
||||||
|
|
||||||
|
# SpringBoot
|
||||||
|
|
||||||
|
Aka middle ware server.
|
||||||
|
|
||||||
|
## Java17
|
||||||
|
|
||||||
|
Yes, we need two different Java versions for this to work :(
|
||||||
|
|
||||||
|
```bash
|
||||||
|
apt-get update
|
||||||
|
apt install openjdk-17-jdk
|
||||||
|
```
|
||||||
|
|
||||||
|
Check available java versions:
|
||||||
|
```bash
|
||||||
|
update-alternatives --config java
|
||||||
|
```
|
||||||
|
or
|
||||||
|
```bash
|
||||||
|
update-java-alternatives -l
|
||||||
|
```
|
||||||
|
|
||||||
|
## Commit changes to the docker image
|
||||||
|
|
||||||
|
```bash
|
||||||
|
Processing triggers for libgdk-pixbuf-2.0-0:amd64 (2.42.8+dfsg-1ubuntu0.2) ...
|
||||||
|
root@BB8:/# exit
|
||||||
|
exit
|
||||||
|
|
||||||
|
[luke@BB8 ~]$ docker ps
|
||||||
|
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
|
||||||
|
eb0679d30d0b corda-checkers "/bin/bash" 3 minutes ago Up 3 minutes corda-prod
|
||||||
|
|
||||||
|
[luke@BB8 ~]$ docker commit -m "commit msg" eb0679 corda-checkers
|
||||||
|
```
|
||||||
|
|
||||||
|
## Build & Run
|
||||||
|
|
||||||
|
We have to tell gradle where to find proper java version.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
root@BB8:/sources/backend> ./gradlew --stop #stop current server
|
||||||
|
root@BB8:/sources/backend> ./gradlew bootrun -Dorg.gradle.java.home=/usr/lib/jvm/java-17-openjdk-amd64
|
||||||
|
```
|
||||||
|
|
||||||
|
# Frontend
|
||||||
|
|
||||||
|
## Node.js
|
||||||
|
|
||||||
|
[Official](https://github.com/nodesource/distributions#installation-instructions) instructions on how to install latest version.
|
||||||
|
|
||||||
|
### Download and import the Nodesource GPG key
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sudo apt-get update
|
||||||
|
sudo apt-get install -y ca-certificates curl gnupg
|
||||||
|
sudo mkdir -p /etc/apt/keyrings
|
||||||
|
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | sudo gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
|
||||||
|
```
|
||||||
|
|
||||||
|
### Create deb repository
|
||||||
|
|
||||||
|
```shell
|
||||||
|
NODE_MAJOR=20
|
||||||
|
echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_$NODE_MAJOR.x nodistro main" | sudo tee /etc/apt/sources.list.d/nodesource.list
|
||||||
|
```
|
||||||
|
|
||||||
|
>[!OPTIONAL] `NODE_MAJOR` can be changed depending on the version you need
|
||||||
|
NODE_MAJOR=16
|
||||||
|
NODE_MAJOR=18
|
||||||
|
NODE_MAJOR=20
|
||||||
|
NODE_MAJOR=21
|
||||||
|
|
||||||
|
### Run Update and Install
|
||||||
|
|
||||||
|
```shell
|
||||||
|
sudo apt-get update
|
||||||
|
sudo apt-get install nodejs -y
|
||||||
|
```
|
||||||
|
|
||||||
|
Check the versions
|
||||||
|
```bash
|
||||||
|
root@BB8:/sources/webapp> nodejs -v
|
||||||
|
v20.10.0
|
||||||
|
root@BB8:/sources/webapp> npm -v
|
||||||
|
10.2.3
|
||||||
|
```
|
||||||
|
## NPM
|
||||||
|
|
||||||
|
NPM shall be installed by the previous step. And we are going to use SpringBoot to server JS as a set of static resources. So no additional SW installation needed (like `npm install -g serve`)
|
||||||
|
|
||||||
|
>[!NOTE]
|
||||||
|
> At this point, you probably should make another commit to the docker image.
|
||||||
|
>
|
||||||
|
> The final size of an image is about 2.2 Gig:
|
||||||
|
> ```bash
|
||||||
|
> [luke@BB8 ~]$ docker images
|
||||||
|
REPOSITORY TAG IMAGE ID CREATED SIZE
|
||||||
|
corda-checkers latest 76eddb47d7c5 54 seconds ago 2.16GB
|
||||||
|
> ```
|
||||||
|
|
||||||
|
### Project dependancies
|
||||||
|
|
||||||
|
```bash
|
||||||
|
root@BB8:/sources/webapp> rm -rf build/ node_modules/ package-lock.json
|
||||||
|
root@BB8:/sources/webapp> npm install
|
||||||
|
```
|
||||||
|
|
||||||
|
### Build and run
|
||||||
|
|
||||||
|
Build the release version of frontend
|
||||||
|
```bash
|
||||||
|
root@BB8:/sources/webapp> npm run build
|
||||||
|
```
|
||||||
|
|
||||||
|
Copy build directory to the `backend`
|
||||||
|
```bash
|
||||||
|
root@BB8:/sources/webapp> cp -r build/* ../backend/src/main/resources/static
|
||||||
|
```
|
||||||
|
|
||||||
|
You have to restart Springboot in order for changes to take effect.
|
||||||
|
```bash
|
||||||
|
root@BB8:/sources/backend> ./gradlew --stop
|
||||||
|
root@BB8:/sources/backend> ./gradlew bootrun -Dorg.gradle.java.home=/usr/lib/jvm/java-17-openjdk-amd64
|
||||||
|
```
|
Loading…
Reference in New Issue
Block a user