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_GRAPHQL=
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
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>
)
}
<style lang='scss'>
<style lang="scss">
div {
margin: 10px 0;
font-size: var(--font-size-lg);

View File

@ -12,7 +12,11 @@ export function getLanguageKeys(): Array<string> {
}
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;
return DEFAULT_LANGUAGE;
}
@ -22,7 +26,7 @@ export function isPageLangSupported(Astro: Readonly<AstroGlobal>) {
const params = Astro.params as { lang: string };
if (SUPPORTED_LANGUAGES.includes(params.lang as LanguageKeys)) return true;
return false;
}
}
export function removeLangFromURL(pathname: string): string {
const splittedPath = pathname.split("/");

View File

@ -2,7 +2,6 @@
import ArticleLayout from "@root/layouts/article.astro";
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 slug = url.split("/").at(-1);

View File

@ -31,7 +31,7 @@ export function filterArticlesByPageLang<
/**
* 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(
params: { slug: string; articleLang: string; pubDate: string },
@ -40,7 +40,7 @@ export function createRelativeArticleUrl(
const { pubDate, articleLang, slug } = params;
const date = pubDate.split("T")[0];
const lang = articleLang !== DEFAULT_LANGUAGE ? "/" + articleLang : "";
return `${lang}/${prefix}/${date}/${slug}`;
return `/${prefix}${lang}/${date}/${slug}`;
}
export function formatToArticleBlocks(articles: ArticleQuery["article"][0]["translations"]) {