Personal website / portfolio https://www.ironoc.net/
Java 21 (LTS), Spring Boot 3.4, ReactJs 18, Maven 3.8 or later, HTML5+CSS, Docker / Bash, AWS, minikube, & kubectl.
docker run -d --restart=always -p 8080:8080 conorheffron/ironoc
% aws configure
% aws iam get-user
% aws sts get-session-token
mvn clean package
View in browser at http://localhost:63342/ironoc/target/site/jacoco/index.html?_ijt=s0hqlj2p4s6554gldritju13qr&_ij_reload=RELOAD_ON_SAVE
Note: Change port as needed/identifier as this is URL generated during build process & opened via IDE window.
mvn -DAWS_ACCESS_KEY_ID="<val1>" \
-DAWS_REGION=<val2> \
-DAWS_SECRET_ACCESS_KEY="<val3>" \
-DAWS_SESSION_TOKEN="<val4>" \
spring-boot:run
docker image build -t ironoc .
docker compose up -d
docker logs ironoc-portfolio-1 -f
docker-compose down
MiniKube Install Notes for mac users
brew install kubectl
brew install virtualbox
brew install minikube
Oracle VirtualBox Manager v7.1.4
% kubectl version
Client Version: v1.30.2
Kustomize Version: v5.0.4-0.20230601165947-6ce0bf390ce3
Server Version: v1.31.0
% minikube version
minikube version: v1.34.0
commit: 210b148df93a80eb872ecbeb7e35281b3c582c61
% docker version
Client:
Version: 27.3.1
API version: 1.47
Go version: go1.22.7
Git commit: ce12230
Built: Fri Sep 20 11:38:18 2024
OS/Arch: darwin/amd64
Context: desktop-linux
- Open terminal
% minikube start --driver=docker
π minikube v1.34.0 on Darwin 15.1.1
β Both driver=docker and vm-driver=virtualbox have been set.
Since vm-driver is deprecated, minikube will default to driver=docker.
If vm-driver is set in the global config, please run "minikube config unset vm-driver" to resolve this warning.
β¨ Using the docker driver based on user configuration
π Using Docker Desktop driver with root privileges
π Starting "minikube" primary control-plane node in "minikube" cluster
π Pulling base image v0.0.45 ...
π₯ Creating docker container (CPUs=2, Memory=4000MB) ...
π³ Preparing Kubernetes v1.31.0 on Docker 27.2.0 ...
βͺ Generating certificates and keys ...
βͺ Booting up control plane ...
βͺ Configuring RBAC rules ...
π Configuring bridge CNI (Container Networking Interface) ...
π Verifying Kubernetes components...
βͺ Using image gcr.io/k8s-minikube/storage-provisioner:v5
π Enabled addons: storage-provisioner, default-storageclass
π Done! kubectl is now configured to use "minikube" cluster and "default" namespace by default
% kubectl cluster-info
Kubernetes control plane is running at https://127.0.0.1:62645
CoreDNS is running at https://127.0.0.1:62645/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.
% minikube dashboard
π Enabling dashboard ...
βͺ Using image docker.io/kubernetesui/dashboard:v2.7.0
βͺ Using image docker.io/kubernetesui/metrics-scraper:v1.0.8
π‘ Some dashboard features require the metrics-server addon. To enable all features please run:
minikube addons enable metrics-server
π€ Verifying dashboard health ...
π Launching proxy ...
π€ Verifying proxy health ...
π Opening http://127.0.0.1:62706/api/v1/namespaces/kubernetes-dashboard/services/http:kubernetes-dashboard:/proxy/ in your default browser...
% docker image build -t ironoc .
[+] Building 100.5s (11/11) FINISHED docker:desktop-linux
=> [internal] load build definition from Dockerfile 0.0s
=> => transferring dockerfile: 284B 0.0s
=> [internal] load metadata for docker.io/library/eclipse-temurin:21-jdk 2.0s
=> [auth] library/eclipse-temurin:pull token for registry-1.docker.io 0.0s
=> [internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
.
.
.
% minikube image load ironoc:latest
% kubectl create ns ironoc-ns
namespace/ironoc-ns created
% kubectl apply -f k8s/ironoc.yaml --namespace=ironoc-ns
deployment.apps/ironoc-app-deployment created
horizontalpodautoscaler.autoscaling/ironoc-app-deployment-hpa-kbij created
% kubectl get pods --namespace=ironoc-ns
NAME READY STATUS RESTARTS AGE
ironoc-app-deployment-6d84f75b44-5xvgj 1/1 Running 0 8s
% kubectl get deployment --namespace=ironoc-ns
NAME READY UP-TO-DATE AVAILABLE AGE
ironoc-app-deployment 1/1 1 1 105s
% kubectl expose deployment ironoc-app-deployment --type=NodePort --namespace=ironoc-ns
service/ironoc-app-deployment exposed
% kubectl get svc --namespace=ironoc-ns
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
ironoc-app-deployment NodePort 10.98.229.246 <none> 8080:31602/TCP 6s
% minikube service ironoc-app-deployment --url --namespace=ironoc-ns
http://127.0.0.1:63455
β Because you are using a Docker driver on darwin, the terminal needs to be open to run it.
% kubectl get pods --namespace=ironoc-ns
NAME READY STATUS RESTARTS AGE
ironoc-app-deployment-6d84f75b44-5xvgj 1/1 Running 0 3m28s
% kubectl logs ironoc-app-deployment-6d84f75b44-5xvgj -f --namespace=ironoc-ns
java -jar /app.war
Standard Commons Logging discovery in action with spring-jcl: please remove commons-logging.jar from classpath in order to avoid potential conflicts
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v3.4.0)
2024-12-14T17:50:40.926Z INFO 7 --- [ main] n.i.p.App : Starting App v5.4.6 using Java 21.0.5 with PID 7 (/app.war started by root in /)
2024-12-14T17:50:41.028Z INFO 7 --- [ main] n.i.p.App : No active profile set, falling back to 1 default profile: "default"
2024-12-14T17:50:48.042Z INFO 7 --- [ main] o.s.b.w.e.t.TomcatWebServer : Tomcat initialized with port 8080 (http)
2024-12-14T17:50:48.109Z INFO 7 --- [ main] o.a.c.c.StandardService : Starting service [Tomcat]
2024-12-14T17:50:48.112Z INFO 7 --- [ main] o.a.c.c.StandardEngine : Starting Servlet engine: [Apache Tomcat/10.1.33]
2024-12-14T17:51:26.598Z INFO 7 --- [ main] o.a.j.s.TldScanner : At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time.
2024-12-14T17:51:27.320Z INFO 7 --- [ main] o.a.c.c.C.[.[.[/] : Initializing Spring embedded WebApplicationContext
2024-12-14T17:51:27.323Z INFO 7 --- [ main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 45872 ms
2024-12-14T17:51:28.210Z INFO 7 --- [ main] n.i.p.l.AbstractLogger : GitDetailsRunnable running for userIds=[conorheffron]
2024-12-14T17:51:28.696Z INFO 7 --- [ main] n.i.p.l.AbstractLogger : Triggering GET request: url=https://api.github.com/users/conorheffron/repos?per_page=100&page=1
2024-12-14T17:51:34.776Z WARN 7 --- [ main] n.i.p.c.GitClient : GIT token not set, the lower request rate will apply
2024-12-14T17:51:35.912Z WARN 7 --- [ main] n.i.p.l.AbstractLogger : Input stream already closed.
2024-12-14T17:51:35.912Z INFO 7 --- [ main] n.i.p.l.AbstractLogger : Running GIT details job for userIds=[conorheffron], repositoryDetailDtos=[]
2024-12-14T17:51:35.914Z INFO 7 --- [ main] n.i.p.l.AbstractLogger : GitDetailsRunnable completed for userIds=[conorheffron]
2024-12-14T17:51:36.925Z INFO 7 --- [ main] o.s.b.a.w.s.WelcomePageHandlerMapping : Adding welcome page: class path resource [static/index.html]
2024-12-14T17:51:40.857Z INFO 7 --- [ main] o.s.b.w.e.t.TomcatWebServer : Tomcat started on port 8080 (http) with context path '/'
2024-12-14T17:51:40.911Z INFO 7 --- [ main] n.i.p.App : Started App in 62.867 seconds (process running for 68.625)
% minikube delete
π₯ Deleting "minikube" in docker ...
π₯ Deleting container "minikube" ...
π₯ Removing /Users/conorheffron/.minikube/machines/minikube ...
π Removed all traces of the "minikube" cluster.