diff --git a/.caddy/Caddyfile.dev b/.caddy/Caddyfile.dev index e69de29..c049014 100644 --- a/.caddy/Caddyfile.dev +++ b/.caddy/Caddyfile.dev @@ -0,0 +1,5 @@ +dev.timmypidashev.dev { + tls internal + + reverse_proxy web:3000 +} diff --git a/.caddy/Caddyfile.release b/.caddy/Caddyfile.release index e69de29..3f62207 100644 --- a/.caddy/Caddyfile.release +++ b/.caddy/Caddyfile.release @@ -0,0 +1,5 @@ +timmypidashev.dev { + tls pidashev.tim@gmail.com + + reverse_proxy web:3000 +} diff --git a/.docker/Dockerfile.dev b/.docker/Dockerfile.dev new file mode 100644 index 0000000..cb697e5 --- /dev/null +++ b/.docker/Dockerfile.dev @@ -0,0 +1,27 @@ +FROM node:22-alpine + +ARG CONTAINER_WEB_VERSION +ARG ENVIRONMENT +ARG BUILD_DATE +ARG GIT_COMMIT + +RUN set -eux \ + & apk add \ + --no-cache \ + nodejs \ + curl + +RUN curl -L https://unpkg.com/@pnpm/self-installer | node + +WORKDIR /app + +COPY . . + +RUN echo "PUBLIC_VERSION=${CONTAINER_WEB_VERSION}" > /app/.env && \ + echo "PUBLIC_ENVIRONMENT=${ENVIRONMENT}" >> /app/.env && \ + echo "PUBLIC_BUILD_DATE=${BUILD_DATE}" >> /app/.env && \ + echo "PUBLIC_GIT_COMMIT=${GIT_COMMIT}" >> /app/.env + +EXPOSE 3000 + +CMD pnpm install && pnpm run dev diff --git a/.docker/Dockerfile.release b/.docker/Dockerfile.release new file mode 100644 index 0000000..aeeb6dd --- /dev/null +++ b/.docker/Dockerfile.release @@ -0,0 +1,32 @@ +from node:22-alpine + +WORKDIR /app + +RUN set -eux \ + & apk add \ + --no-cache \ + nodejs \ + curl + +COPY package.json pnpm-lock.yaml ./ + +ARG CONTAINER_WEB_VERSION +ARG ENVIRONMENT +ARG BUILD_DATE +ARG GIT_COMMIT + +RUN echo "PUBLIC_VERSION=${CONTAINER_FHCC_VERSION}" > /app/.env && \ + echo "PUBLIC_ENVIRONMENT=${ENVIRONMENT}" >> /app/.env && \ + echo "PUBLIC_BUILD_DATE=${BUILD_DATE}" >> /app/.env && \ + echo "PUBLIC_GIT_COMMIT=${GIT_COMMIT}" >> /app/.env + +RUN pnpm install --frozen-lockfile --production +RUN pnpm run build + +FROM node:22-alpine +WORKDIR /app + +EXPOSE 3000 + +CMD node ./dist/server/entry.mjs +COPY --from=builder /app/.dist ./ diff --git a/.gitignore b/.gitignore index 6678019..99fc54d 100644 --- a/.gitignore +++ b/.gitignore @@ -3,6 +3,7 @@ # dependencies node_modules/ /.pnp +.pnpm-store .pnp.js .yarn/install-state.gz diff --git a/Makefile b/Makefile index 22d6e2d..4abccdb 100644 --- a/Makefile +++ b/Makefile @@ -8,7 +8,7 @@ PROJECT_ORGANIZATION := "org.opencontainers" CONTAINER_WEB_NAME := "web" CONTAINER_WEB_VERSION := "v1.0.0" -CONTAINER_WEB_LOCATION := "src/web" +CONTAINER_WEB_LOCATION := "src/" CONTAINER_WEB_DESCRIPTION := "My portfolio website!" .DEFAULT_GOAL := help @@ -17,7 +17,7 @@ CONTAINER_WEB_DESCRIPTION := "My portfolio website!" help: @echo "Available targets:" - @echo " run - Runs the docker compose file with the specified environment (dev or prod)" + @echo " run - Runs the docker compose file with the specified environment (dev or release)" @echo " build - Builds the specified docker image with the appropriate environment" @echo " push - Pushes the built docker image to the registry" @echo " prune - Removes all built and cached docker images and containers" @@ -25,19 +25,19 @@ help: run: # Arguments: - # [environment]: 'dev' or 'prod' + # [environment]: 'dev' or 'release' # # Explanation: - # * Runs the docker compose file with the specified environment(compose.dev.yml, or compose.prod.yml) + # * Runs the docker compose file with the specified environment(compose.dev.yml, or compose.release.yml) # * Passes all generated arguments to the compose file. # Make sure we have been given proper arguments. @if [ "$(word 2,$(MAKECMDGOALS))" = "dev" ]; then \ echo "Running in development environment"; \ - elif [ "$(word 2,$(MAKECMDGOALS))" = "prod" ]; then \ - echo "Running in production environment"; \ + elif [ "$(word 2,$(MAKECMDGOALS))" = "release" ]; then \ + echo "Running in release environment"; \ else \ - echo "Invalid usage. Please use 'make run dev' or 'make run prod'"; \ + echo "Invalid usage. Please use 'make run dev' or 'make run release'"; \ exit 1; \ fi @@ -47,7 +47,7 @@ run: build: # Arguments # [container]: Build context(which container to build ['all' to build every container defined]) - # [environment]: 'dev' or 'prod' + # [environment]: 'dev' or 'release' # # Explanation: # * Builds the specified docker image with the appropriate environment. @@ -161,16 +161,16 @@ define container_build @echo "Environment: $(ENVIRONMENT)" @echo "Version: $(VERSION)" - @if [ "$(strip $(ENVIRONMENT))" != "dev" ] && [ "$(strip $(ENVIRONMENT))" != "prod" ]; then \ - echo "Invalid environment. Please specify 'dev' or 'prod'"; \ + @if [ "$(strip $(ENVIRONMENT))" != "dev" ] && [ "$(strip $(ENVIRONMENT))" != "release" ]; then \ + echo "Invalid environment. Please specify 'dev' or 'release'"; \ exit 1; \ fi - $(if $(filter $(strip $(ENVIRONMENT)),prod), \ + $(if $(filter $(strip $(ENVIRONMENT)),release), \ $(eval TAG := $(PROJECT_REGISTRY)/$(CONTAINER):$(VERSION)), \ ) - docker buildx build --load -t $(TAG) -f $(strip $(subst $(SPACE),,$(call container_location,$(CONTAINER))))/Dockerfile.$(ENVIRONMENT) ./$(strip $(subst $(SPACE),,$(call container_location,$(CONTAINER))))/. $(ARGS) $(call labels,$(shell echo $(CONTAINER_NAME) | tr '[:lower:]' '[:upper:]')) --no-cache + docker buildx build --load -t $(TAG) -f .docker/Dockerfile.$(ENVIRONMENT) ./$(strip $(subst $(SPACE),,$(call container_location,$(CONTAINER))))/. $(ARGS) $(call labels,$(shell echo $(CONTAINER_NAME) | tr '[:lower:]' '[:upper:]')) --no-cache endef define container_location diff --git a/compose.dev.yml b/compose.dev.yml index e69de29..4916073 100644 --- a/compose.dev.yml +++ b/compose.dev.yml @@ -0,0 +1,33 @@ +services: + caddy: + container_name: proxy + image: caddy:latest + ports: + - 80:80 + - 443:443 + volumes: + - ./.caddy/Caddyfile.dev:/etc/caddy/Caddyfile:rw + networks: + - proxy + depends_on: + - web + + web: + container_name: web + image: web:dev + volumes: + - ./src/astro.config.mjs:/app/astro.config.mjs + - ./src/sandbox.config.json:/app/sandbox.config.json + - ./src/tailwind.config.cjs:/app/tailwind.config.cjs + - ./src/tsconfig.json:/app/tsconfig.json + - ./src/pnpm-lock.yaml:/app/pnpm-lock.yaml + - ./src/package.json:/app/package.json + - ./src/public:/app/public + - ./src/src:/app/src + networks: + - proxy + +networks: + proxy: + name: proxy + external: true diff --git a/src/package.json b/src/package.json index 85af060..d3e0bed 100644 --- a/src/package.json +++ b/src/package.json @@ -1,13 +1,11 @@ { "name": "src", - "version": "0.0.1", + "version": "v1.0.1", "private": true, "scripts": { - "dev": "astro dev", - "start": "astro dev", + "dev": "astro dev --host", "build": "astro build", - "preview": "astro preview", - "astro": "astro" + "preview": "astro preview" }, "devDependencies": { "@astrojs/tailwind": "3.1.1", @@ -17,4 +15,4 @@ "postcss": "8.4.21", "tailwindcss": "3.2.7" } -} \ No newline at end of file +}