dockerized

This commit is contained in:
Sergey Yarkov 2026-02-25 14:02:13 +03:00
parent adf3238fe3
commit 9611adb2e0
10 changed files with 62 additions and 7 deletions

View File

View File

@ -0,0 +1,14 @@
node_modules
dist
.astro
.env
.env.example
.git
.gitignore
dockerfile
.dockerignore
.vscode
.prettierrc
codegen.ts
schema.graphql
README.md

View File

@ -1,3 +1,4 @@
ASTRO_TELEMETRY_DISABLED=1
DIRECTUS_URL= DIRECTUS_URL=
DIRECTUS_URL_GRAPHQL= DIRECTUS_URL_GRAPHQL=
DIRECTUS_TOKEN= DIRECTUS_TOKEN=

19
Dockerfile Normal file
View File

@ -0,0 +1,19 @@
ARG NODE_IMAGE=node:24.0.0-alpine
FROM ${NODE_IMAGE} AS build
WORKDIR /app
COPY package*.json .
RUN npm ci
COPY . .
RUN npm run build
FROM ${NODE_IMAGE} AS production
WORKDIR /app
COPY --from=build /app/dist ./dist
COPY --from=build /app/package*.json .
RUN npm ci --omit=dev
EXPOSE 9966
CMD [ "node", "./dist/server/entry.mjs"]

View File

@ -0,0 +1,17 @@
services:
yarkov-tech-node:
container_name: yarkov-tech-node
restart: unless-stopped
image: sergeyyarkov/yarkovtech:latest
networks:
- nginx_net
env_file: .env
build:
context: ./
dockerfile: Dockerfile
ports:
- 9966
networks:
nginx_net:
external: true

View File

View File

@ -22,14 +22,15 @@ const { articles } = Astro.props;
(a) => (a) =>
a && ( a && (
<a <a
href={`${createRelativeArticleUrl({ slug: a.slug, articleLang: `${a.languages_code?.code.split("-")[0]}`, pubDate: a.pub_date })}`}>{`${a.languages_code?.name}`}</a> href={`${createRelativeArticleUrl({ slug: a.slug, articleLang: `${a.languages_code?.code.split("-")[0]}`, pubDate: a.pub_date })}`}
>{`${a.languages_code?.name}`}</a>
) )
)} )}
</div> </div>
) )
} }
<style lang='scss'> <style lang="scss">
div { div {
margin: 10px 0; margin: 10px 0;
font-size: var(--font-size-lg); font-size: var(--font-size-lg);

View File

@ -12,7 +12,11 @@ export function getLanguageKeys(): Array<string> {
} }
export function getLanguageFromURL(pathname: string): LanguageKeys { export function getLanguageFromURL(pathname: string): LanguageKeys {
const lang = pathname.split("/")[1] as LanguageKeys; const splittedPathName = pathname.split("/");
let lang = splittedPathName[1] as LanguageKeys;
if ((lang as string) === "blog") lang = splittedPathName[2] as LanguageKeys;
if (Object.hasOwn(languages, lang)) return lang; if (Object.hasOwn(languages, lang)) return lang;
return DEFAULT_LANGUAGE; return DEFAULT_LANGUAGE;
} }

View File

@ -2,7 +2,6 @@
import ArticleLayout from "@root/layouts/article.astro"; import ArticleLayout from "@root/layouts/article.astro";
import { getArticleTranslationsBySlug, incArticleTranslationViews } from "@/src/queries"; import { getArticleTranslationsBySlug, incArticleTranslationViews } from "@/src/queries";
// Example of an URL: https://website.com/blog/01-01-2025/my-article/
const { url } = Astro.params as { url: string }; const { url } = Astro.params as { url: string };
const slug = url.split("/").at(-1); const slug = url.split("/").at(-1);

View File

@ -31,7 +31,7 @@ export function filterArticlesByPageLang<
/** /**
* This will create a relative url based on article entry. * This will create a relative url based on article entry.
* `/en/blog/2023-01-01/my-first-article` * `/blog/en/2023-01-01/my-first-article`
*/ */
export function createRelativeArticleUrl( export function createRelativeArticleUrl(
params: { slug: string; articleLang: string; pubDate: string }, params: { slug: string; articleLang: string; pubDate: string },
@ -40,7 +40,7 @@ export function createRelativeArticleUrl(
const { pubDate, articleLang, slug } = params; const { pubDate, articleLang, slug } = params;
const date = pubDate.split("T")[0]; const date = pubDate.split("T")[0];
const lang = articleLang !== DEFAULT_LANGUAGE ? "/" + articleLang : ""; const lang = articleLang !== DEFAULT_LANGUAGE ? "/" + articleLang : "";
return `${lang}/${prefix}/${date}/${slug}`; return `/${prefix}${lang}/${date}/${slug}`;
} }
export function formatToArticleBlocks(articles: ArticleQuery["article"][0]["translations"]) { export function formatToArticleBlocks(articles: ArticleQuery["article"][0]["translations"]) {