Add GitLab CI, Dockerfile, and demo-1

* Configured GitLab CI for Docker image builds and added a Dockerfile with the necessary setup for the main website and demo-1.
* Updated URL and removed duplicate entry in `demos.ts` to resolve conflicts.
* Integrated `.run` configuration for lawfirm-demo1 to streamline local development.
This commit is contained in:
2025-06-07 09:04:12 +02:00
parent fce60ba750
commit 863e8cedbf
5 changed files with 81 additions and 13 deletions

10
.gitlab-ci-template.yml Normal file
View File

@@ -0,0 +1,10 @@
.docker-login:
before_script:
- echo "$CI_REGISTRY_PASSWORD" | docker login "$CI_REGISTRY" -u "$CI_REGISTRY_USER" --password-stdin
docker-build-template:
image: docker:20.10@sha256:2967f0819c84dd589ed0a023b9d25dcfe7a3c123d5bf784ffbb77edf55335f0c
extends: .docker-login
script:
- docker build --build-arg WORKDIR_PATH=$WORKDIR_PATH -t $CI_REGISTRY_IMAGE/$IMAGE_NAME:$CI_COMMIT_REF_SLUG -f $DOCKERFILE_PATH .
- docker push $CI_REGISTRY_IMAGE/$IMAGE_NAME:$CI_COMMIT_REF_SLUG

28
.gitlab-ci.yml Normal file
View File

@@ -0,0 +1,28 @@
image: docker:20.10
include:
- local: '.gitlab-ci-template.yml'
stages:
- dockerize
variables:
CI_REGISTRY_IMAGE: $CI_REGISTRY/$CI_PROJECT_PATH
PROJECT_NAME: $CI_PROJECT_NAME
TAG: $CI_COMMIT_REF_SLUG
# Main Website
build_main_website:
stage: dockerize
extends: .docker-build-template
variables:
IMAGE_NAME: main-website
WORKDIR_PATH: ./main-website
# Demo 1
build_demo_1:
stage: dockerize
extends: .docker-build-template
variables:
IMAGE_NAME: ld1
WORKDIR_PATH: ./lawfirm-demos/demo-1

View File

@@ -0,0 +1,14 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="lawfirm-demo1" type="js.build_tools.npm">
<package-json value="$PROJECT_DIR$/lawfirm-demos/demo-1/package.json" />
<command value="run" />
<scripts>
<script value="dev" />
</scripts>
<node-interpreter value="project" />
<envs>
<env name="PORT" value="5101" />
</envs>
<method v="2" />
</configuration>
</component>

28
Dockerfile Normal file
View File

@@ -0,0 +1,28 @@
# Use a lightweight Node.js 20 Alpine image (digest-pinned for reproducibility)
FROM node:20-alpine@sha256:9bef0ef1e268f60627da9ba7d7605e8831d5b56ad07487d24d1aa386336d1944
# Accept a build argument for the working directory
ARG WORKDIR_PATH
# Set the working directory inside the container
WORKDIR /app
# Copy only the production-ready files built in CI
# These files must be passed as GitLab artifacts:
# - .next/ → built Next.js app
# - public/ → static assets
# - package.json → app manifest
# - package-lock.json → to lock dependencies for reproducibility
COPY ${WORKDIR_PATH}/.next .next
COPY ${WORKDIR_PATH}/public public
COPY ${WORKDIR_PATH}/package.json package.json
COPY ${WORKDIR_PATH}/package-lock.json package-lock.json
# Install only production dependencies to reduce image size
RUN npm ci --omit=dev
# Expose the port that Next.js serves on (default is 3000)
EXPOSE 3000
# Start the Next.js app in production mode
CMD ["npm", "run", "start"]

View File

@@ -14,7 +14,7 @@ export const demoCategories = [
},
{
name: 'Anwaltskanzlei Demo 2',
url: 'http://localhost:5102',
url: 'http://localhost:5101',
preview: '/previews/lawfirm-1.png',
description: [
'Modernes Design',
@@ -23,18 +23,6 @@ export const demoCategories = [
'Optimiert für Rechtsanwälte 1',
],
},
{
name: 'Anwaltskanzlei Demo 2',
url: 'http://localhost:5102',
preview: '/previews/lawfirm-1.png',
description: [
'Modernes Design',
'Dunkles Layout',
'Optimiert für Rechtsanwälte',
'Optimiert für Rechtsanwälte 2',
'Optimiert für Rechtsanwälte 3',
],
},
],
},
{