mirror of
https://github.com/sergeyyarkov/yarkov.tech.git
synced 2026-10-11 10:29:21 +03:00
dockerized
This commit is contained in:
parent
adf3238fe3
commit
9611adb2e0
@ -0,0 +1,14 @@
|
|||||||
|
node_modules
|
||||||
|
dist
|
||||||
|
.astro
|
||||||
|
.env
|
||||||
|
.env.example
|
||||||
|
.git
|
||||||
|
.gitignore
|
||||||
|
dockerfile
|
||||||
|
.dockerignore
|
||||||
|
.vscode
|
||||||
|
.prettierrc
|
||||||
|
codegen.ts
|
||||||
|
schema.graphql
|
||||||
|
README.md
|
||||||
@ -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
19
Dockerfile
Normal 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"]
|
||||||
17
compose.yml
17
compose.yml
@ -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
|
||||||
@ -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);
|
||||||
|
|||||||
@ -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;
|
||||||
}
|
}
|
||||||
@ -22,7 +26,7 @@ export function isPageLangSupported(Astro: Readonly<AstroGlobal>) {
|
|||||||
const params = Astro.params as { lang: string };
|
const params = Astro.params as { lang: string };
|
||||||
if (SUPPORTED_LANGUAGES.includes(params.lang as LanguageKeys)) return true;
|
if (SUPPORTED_LANGUAGES.includes(params.lang as LanguageKeys)) return true;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
export function removeLangFromURL(pathname: string): string {
|
export function removeLangFromURL(pathname: string): string {
|
||||||
const splittedPath = pathname.split("/");
|
const splittedPath = pathname.split("/");
|
||||||
|
|||||||
@ -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);
|
||||||
|
|
||||||
|
|||||||
@ -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"]) {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user