Basic Docker and Docker Compose containerization working.

This commit is contained in:
Jesse Brault 2024-09-30 19:17:13 -05:00
parent 03efb5aa3d
commit 02e3b6df66
5 changed files with 94 additions and 7 deletions

3
.gitignore vendored
View File

@ -35,3 +35,6 @@ out/
### VS Code ###
.vscode/
# Custom
.env

11
Dockerfile Normal file
View File

@ -0,0 +1,11 @@
FROM gradle:8.8.0-jdk21 AS build
WORKDIR /mme-api
COPY . /mme-api
RUN gradle build
FROM eclipse-temurin:21
WORKDIR /mme-api
COPY --from=build /mme-api/build/libs/api-0.1.0-SNAPSHOT.jar .
COPY dev-data ./dev-data/
EXPOSE 8080
CMD ["java", "-jar", "api-0.1.0-SNAPSHOT.jar", "--spring.profiles.active=dev"]

17
README.md Normal file
View File

@ -0,0 +1,17 @@
# Meals Made Easy API
## Getting Started
First, create a `.env` file with the following environment variables:
- `MINIO_ROOT_PASSWORD=<put something here>`
- `MYSQL_ROOT_PASSWORD=<put something here>`
- `MYSQL_PASSWORD=<put something here>`
Then run `docker compose up -d --build`. The `--build` option can be omitted if you
have already built the `api` from `Dockerfile`. Once Docker Compose has finished
starting everything, navigate to `http://localhost:8080/greeting`.
You should see a simple "Hello, World!" greeting.
**N.b.: the current configuration of the app is to use the `dev` Spring-Boot profile,
which seeds the app with some simple recipes whose sources are located in the
`dev-data` directory.**

56
compose.yaml Normal file
View File

@ -0,0 +1,56 @@
name: meals-made-easy-api
services:
db:
image: mysql:latest
ports:
- '55001:3306'
- '55000:33060'
env_file: .env
environment:
MYSQL_DATABASE: meals_made_easy_api
MYSQL_USER: meals-made-easy-api-user
healthcheck:
test: mysqladmin ping -u $$MYSQL_USER --password=$$MYSQL_PASSWORD
interval: 5s
timeout: 10s
retries: 10
volumes:
- mysql-data:/var/lib/mysql
minio:
image: minio/minio:latest
ports:
- 9000:9000
- 9001:9001
env_file:
- .env
environment:
MINIO_ROOT_USER: minio-root
volumes:
- minio-data:/data
command:
- server
- /data
- --console-address
- :9001
api:
build: .
depends_on:
db:
condition: service_healthy
minio:
condition: service_started
env_file:
- .env
environment:
MYSQL_HOST: db
MYSQL_PORT: 3306
MYSQL_DATABASE: meals_made_easy_api
MYSQL_USERNAME: meals-made-easy-api-user
MINIO_HOST: minio
MINIO_PORT: 9000
MINIO_ROOT_USER: minio-root
ports:
- 8080:8080
volumes:
mysql-data:
minio-data:

View File

@ -1,13 +1,13 @@
spring.application.name=meals-made-easy-api
spring.jpa.hibernate.ddl-auto=create-drop
spring.datasource.url=jdbc:mysql://localhost:55001/meals_made_easy_api
spring.datasource.username=meals-made-easy-api-user
spring.datasource.password=devpass
spring.datasource.url=jdbc:mysql://${MYSQL_HOST:localhost}:${MYSQL_PORT:3306}/${MYSQL_DATABASE:meals_made_easy_api}
spring.datasource.username=${MYSQL_USERNAME:meals-made-easy-api-user}
spring.datasource.password=${MYSQL_PASSWORD}
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
app.mealsmadeeasy.api.baseUrl=http://localhost:8080
app.mealsmadeeasy.api.security.access-token-lifetime=60
app.mealsmadeeasy.api.security.refresh-token-lifetime=3600
app.mealsmadeeasy.api.minio.endpoint=http://localhost:9000
app.mealsmadeeasy.api.minio.accessKey=minio-root
app.mealsmadeeasy.api.minio.secretKey=test0123
app.mealsmadeeasy.api.minio.endpoint=http://${MINIO_HOST:localhost}:${MINIO_PORT:9000}
app.mealsmadeeasy.api.minio.accessKey=${MINIO_ROOT_USER}
app.mealsmadeeasy.api.minio.secretKey=${MINIO_ROOT_PASSWORD}
app.mealsmadeeasy.api.images.bucketName=images