Refactor Docker (#254)
Some checks failed
continuous-integration/drone/push Build is failing
Some checks failed
continuous-integration/drone/push Build is failing
Refactor docker to use makefile build commands Reviewed-on: #254 Co-authored-by: Rhys Lloyd <krakow20@gmail.com> Co-committed-by: Rhys Lloyd <krakow20@gmail.com>
This commit was merged in pull request #254.
This commit is contained in:
109
.drone.yml
109
.drone.yml
@@ -7,7 +7,43 @@ platform:
|
|||||||
arch: amd64
|
arch: amd64
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: api
|
- name: build-backend
|
||||||
|
image: golang:1.24.0
|
||||||
|
environment:
|
||||||
|
GIT_USER:
|
||||||
|
from_secret: GIT_USER
|
||||||
|
GIT_PASS:
|
||||||
|
from_secret: GIT_PASS
|
||||||
|
commands:
|
||||||
|
- echo "machine git.itzana.me login $${GIT_USER} password $${GIT_PASS}" > ~/.netrc
|
||||||
|
- chmod 600 ~/.netrc
|
||||||
|
- make build-backend
|
||||||
|
when:
|
||||||
|
branch:
|
||||||
|
- master
|
||||||
|
- staging
|
||||||
|
|
||||||
|
- name: build-validator
|
||||||
|
image: clux/muslrust:1.86.0-stable
|
||||||
|
commands:
|
||||||
|
- make build-validator
|
||||||
|
when:
|
||||||
|
branch:
|
||||||
|
- master
|
||||||
|
- staging
|
||||||
|
|
||||||
|
- name: build-frontend
|
||||||
|
image: oven/bun:1.2.8
|
||||||
|
commands:
|
||||||
|
- apt-get update
|
||||||
|
- apt-get install make
|
||||||
|
- make build-frontend
|
||||||
|
when:
|
||||||
|
branch:
|
||||||
|
- master
|
||||||
|
- staging
|
||||||
|
|
||||||
|
- name: image-backend
|
||||||
image: plugins/docker
|
image: plugins/docker
|
||||||
settings:
|
settings:
|
||||||
registry: registry.itzana.me
|
registry: registry.itzana.me
|
||||||
@@ -19,8 +55,10 @@ steps:
|
|||||||
from_secret: REGISTRY_USER
|
from_secret: REGISTRY_USER
|
||||||
password:
|
password:
|
||||||
from_secret: REGISTRY_PASS
|
from_secret: REGISTRY_PASS
|
||||||
dockerfile: Containerfile
|
dockerfile: Dockerfile
|
||||||
context: .
|
context: .
|
||||||
|
depends_on:
|
||||||
|
- build-backend
|
||||||
when:
|
when:
|
||||||
branch:
|
branch:
|
||||||
- master
|
- master
|
||||||
@@ -28,7 +66,7 @@ steps:
|
|||||||
event:
|
event:
|
||||||
- push
|
- push
|
||||||
|
|
||||||
- name: frontend
|
- name: image-frontend
|
||||||
image: plugins/docker
|
image: plugins/docker
|
||||||
settings:
|
settings:
|
||||||
registry: registry.itzana.me
|
registry: registry.itzana.me
|
||||||
@@ -42,6 +80,8 @@ steps:
|
|||||||
from_secret: REGISTRY_PASS
|
from_secret: REGISTRY_PASS
|
||||||
dockerfile: web/Containerfile
|
dockerfile: web/Containerfile
|
||||||
context: web
|
context: web
|
||||||
|
depends_on:
|
||||||
|
- build-frontend
|
||||||
when:
|
when:
|
||||||
branch:
|
branch:
|
||||||
- master
|
- master
|
||||||
@@ -49,7 +89,7 @@ steps:
|
|||||||
event:
|
event:
|
||||||
- push
|
- push
|
||||||
|
|
||||||
- name: validator
|
- name: image-validator
|
||||||
image: plugins/docker
|
image: plugins/docker
|
||||||
settings:
|
settings:
|
||||||
registry: registry.itzana.me
|
registry: registry.itzana.me
|
||||||
@@ -63,6 +103,8 @@ steps:
|
|||||||
from_secret: REGISTRY_PASS
|
from_secret: REGISTRY_PASS
|
||||||
dockerfile: validation/Containerfile
|
dockerfile: validation/Containerfile
|
||||||
context: validation
|
context: validation
|
||||||
|
depends_on:
|
||||||
|
- build-validator
|
||||||
when:
|
when:
|
||||||
branch:
|
branch:
|
||||||
- master
|
- master
|
||||||
@@ -83,9 +125,9 @@ steps:
|
|||||||
PASSWORD:
|
PASSWORD:
|
||||||
from_secret: ARGO_PASS
|
from_secret: ARGO_PASS
|
||||||
depends_on:
|
depends_on:
|
||||||
- api
|
- image-backend
|
||||||
- frontend
|
- image-frontend
|
||||||
- validator
|
- image-validator
|
||||||
when:
|
when:
|
||||||
branch:
|
branch:
|
||||||
- master
|
- master
|
||||||
@@ -94,64 +136,19 @@ steps:
|
|||||||
- push
|
- push
|
||||||
|
|
||||||
# pr dry run
|
# pr dry run
|
||||||
- name: api-pr
|
|
||||||
image: plugins/docker
|
|
||||||
settings:
|
|
||||||
registry: registry.itzana.me
|
|
||||||
repo: registry.itzana.me/strafesnet/maptest-validator
|
|
||||||
tags:
|
|
||||||
- ${DRONE_BRANCH}-${DRONE_BUILD_NUMBER}
|
|
||||||
- ${DRONE_BRANCH}
|
|
||||||
dockerfile: Containerfile
|
|
||||||
context: .
|
|
||||||
dry_run: true
|
|
||||||
when:
|
|
||||||
event:
|
|
||||||
- pull_request
|
|
||||||
|
|
||||||
- name: frontend-pr
|
|
||||||
image: plugins/docker
|
|
||||||
settings:
|
|
||||||
registry: registry.itzana.me
|
|
||||||
repo: registry.itzana.me/strafesnet/maptest-validator
|
|
||||||
tags:
|
|
||||||
- ${DRONE_BRANCH}-${DRONE_BUILD_NUMBER}
|
|
||||||
- ${DRONE_BRANCH}
|
|
||||||
dockerfile: web/Containerfile
|
|
||||||
context: web
|
|
||||||
dry_run: true
|
|
||||||
when:
|
|
||||||
event:
|
|
||||||
- pull_request
|
|
||||||
|
|
||||||
- name: validator-pr
|
|
||||||
image: plugins/docker
|
|
||||||
settings:
|
|
||||||
registry: registry.itzana.me
|
|
||||||
repo: registry.itzana.me/strafesnet/maptest-validator
|
|
||||||
tags:
|
|
||||||
- ${DRONE_BRANCH}-${DRONE_BUILD_NUMBER}
|
|
||||||
- ${DRONE_BRANCH}
|
|
||||||
dockerfile: validation/Containerfile
|
|
||||||
context: validation
|
|
||||||
dry_run: true
|
|
||||||
when:
|
|
||||||
event:
|
|
||||||
- pull_request
|
|
||||||
|
|
||||||
- name: build-pr
|
- name: build-pr
|
||||||
image: alpine
|
image: alpine
|
||||||
commands:
|
commands:
|
||||||
- echo "Success!"
|
- echo "Success!"
|
||||||
depends_on:
|
depends_on:
|
||||||
- api-pr
|
- build-backend
|
||||||
- frontend-pr
|
- build-validator
|
||||||
- validator-pr
|
- build-frontend
|
||||||
when:
|
when:
|
||||||
event:
|
event:
|
||||||
- pull_request
|
- pull_request
|
||||||
---
|
---
|
||||||
kind: signature
|
kind: signature
|
||||||
hmac: 11e6d7f1eb839d3798fdcb642ca5523c011bd14c1f3a0343a9c3106bab9ef142
|
hmac: 9880a1bb4725c81e38b5d185bbfccaf70ddf8021299557d1815f78e78817c5e6
|
||||||
|
|
||||||
...
|
...
|
||||||
|
|||||||
1
.gitignore
vendored
1
.gitignore
vendored
@@ -1,2 +1,3 @@
|
|||||||
|
build
|
||||||
.idea
|
.idea
|
||||||
/target
|
/target
|
||||||
|
|||||||
@@ -1,33 +0,0 @@
|
|||||||
# Stage 1: Build
|
|
||||||
FROM registry.itzana.me/docker-proxy/golang:1.24 AS builder
|
|
||||||
|
|
||||||
# Set the working directory in the container
|
|
||||||
WORKDIR /app
|
|
||||||
|
|
||||||
# Copy go.mod and go.sum files
|
|
||||||
COPY go.mod go.sum ./
|
|
||||||
|
|
||||||
# Copy the entire project
|
|
||||||
COPY . .
|
|
||||||
|
|
||||||
# Build the Go application
|
|
||||||
RUN CGO_ENABLED=0 GOOS=linux go build -o service ./cmd/maps-service/service.go
|
|
||||||
|
|
||||||
# Stage 2: Run
|
|
||||||
FROM registry.itzana.me/docker-proxy/alpine:3.21
|
|
||||||
|
|
||||||
# Set up a non-root user for security
|
|
||||||
RUN addgroup -S appgroup && adduser -S appuser -G appgroup
|
|
||||||
USER appuser
|
|
||||||
|
|
||||||
# Set the working directory in the container
|
|
||||||
WORKDIR /home/appuser
|
|
||||||
|
|
||||||
# Copy the built application from the builder stage
|
|
||||||
COPY --from=builder /app/service .
|
|
||||||
|
|
||||||
# Expose application port (adjust if needed)
|
|
||||||
EXPOSE 8081
|
|
||||||
|
|
||||||
# Command to run the application
|
|
||||||
ENTRYPOINT ["./service"]
|
|
||||||
3
Dockerfile
Normal file
3
Dockerfile
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
FROM alpine
|
||||||
|
COPY build/server /
|
||||||
|
ENTRYPOINT ["/server"]
|
||||||
46
Makefile
46
Makefile
@@ -1,12 +1,42 @@
|
|||||||
submissions:
|
clean:
|
||||||
DOCKER_BUILDKIT=1 docker build . -f Containerfile -t maps-service-submissions
|
rm -rf build
|
||||||
|
rm -rf web/build
|
||||||
|
|
||||||
web:
|
# build
|
||||||
docker build web -f web/Containerfile -t maps-service-web
|
build-backend:
|
||||||
|
CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o build/server cmd/maps-service/service.go
|
||||||
|
|
||||||
validation:
|
build-validator:
|
||||||
docker build validation -f validation/Containerfile -t maps-service-validation
|
cargo build --release --target x86_64-unknown-linux-musl --bin maps-validation
|
||||||
|
|
||||||
all: submissions web validation
|
build-frontend:
|
||||||
|
rm -rf web/build
|
||||||
|
cd web && bun install --frozen-lockfile
|
||||||
|
cd web && bun run build
|
||||||
|
|
||||||
.PHONY: submissions web validation
|
build: build-backend build-validator build-frontend
|
||||||
|
|
||||||
|
# image
|
||||||
|
image-backend:
|
||||||
|
docker build . -t maptest-api
|
||||||
|
|
||||||
|
image-validator:
|
||||||
|
docker build . -f validation/Containerfile -t maptest-validator
|
||||||
|
|
||||||
|
image-frontend:
|
||||||
|
docker build web -f web/Containerfile -t maptest-frontend
|
||||||
|
|
||||||
|
# docker
|
||||||
|
docker-backend:
|
||||||
|
make build-backend
|
||||||
|
make image-backend
|
||||||
|
docker-validator:
|
||||||
|
make build-validator
|
||||||
|
make image-validator
|
||||||
|
docker-frontend:
|
||||||
|
make build-frontend
|
||||||
|
make image-frontend
|
||||||
|
|
||||||
|
docker: docker-backend docker-validator docker-frontend
|
||||||
|
|
||||||
|
.PHONY: clean build-backend build-validator build-frontend build image-backend image-validator image-frontend docker-backend docker-validator docker-frontend docker
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ services:
|
|||||||
|
|
||||||
submissions:
|
submissions:
|
||||||
image:
|
image:
|
||||||
maps-service-submissions
|
maptest-api
|
||||||
container_name: submissions
|
container_name: submissions
|
||||||
command: [
|
command: [
|
||||||
# debug
|
# debug
|
||||||
@@ -45,7 +45,7 @@ services:
|
|||||||
|
|
||||||
web:
|
web:
|
||||||
image:
|
image:
|
||||||
maps-service-web
|
maptest-frontend
|
||||||
networks:
|
networks:
|
||||||
- maps-service-network
|
- maps-service-network
|
||||||
ports:
|
ports:
|
||||||
@@ -56,7 +56,7 @@ services:
|
|||||||
|
|
||||||
validation:
|
validation:
|
||||||
image:
|
image:
|
||||||
maps-service-validation
|
maptest-validator
|
||||||
container_name: validation
|
container_name: validation
|
||||||
env_file:
|
env_file:
|
||||||
- ../auth-compose/strafesnet_staging.env
|
- ../auth-compose/strafesnet_staging.env
|
||||||
|
|||||||
@@ -1,24 +1,3 @@
|
|||||||
# Using the `rust-musl-builder` as base image, instead of
|
FROM alpine:3.21 AS runtime
|
||||||
# the official Rust toolchain
|
COPY /target/x86_64-unknown-linux-musl/release/maps-validation /
|
||||||
FROM registry.itzana.me/docker-proxy/clux/muslrust:1.86.0-stable AS chef
|
ENTRYPOINT ["/maps-validation"]
|
||||||
USER root
|
|
||||||
RUN cargo install cargo-chef
|
|
||||||
WORKDIR /app
|
|
||||||
|
|
||||||
FROM chef AS planner
|
|
||||||
COPY . .
|
|
||||||
RUN cargo chef prepare --recipe-path recipe.json
|
|
||||||
|
|
||||||
FROM chef AS builder
|
|
||||||
COPY --from=planner /app/recipe.json recipe.json
|
|
||||||
COPY api ./api
|
|
||||||
# Notice that we are specifying the --target flag!
|
|
||||||
RUN cargo chef cook --release --target x86_64-unknown-linux-musl --recipe-path recipe.json
|
|
||||||
COPY . .
|
|
||||||
RUN cargo build --release --target x86_64-unknown-linux-musl --bin maps-validation
|
|
||||||
|
|
||||||
FROM registry.itzana.me/docker-proxy/alpine:3.21 AS runtime
|
|
||||||
RUN addgroup -S myuser && adduser -S myuser -G myuser
|
|
||||||
COPY --from=builder /app/target/x86_64-unknown-linux-musl/release/maps-validation /usr/local/bin/
|
|
||||||
USER myuser
|
|
||||||
ENTRYPOINT ["/usr/local/bin/maps-validation"]
|
|
||||||
|
|||||||
Reference in New Issue
Block a user