4 Commits
13 changed files with 120 additions and 44 deletions

No files matched your search

+8 -8
View File
@@ -1,19 +1,19 @@
# postgres settings
DB_HOST=localhost
DB_PORT=5432
POSTGRES_PASSWORD=
POSTGRES_USER=
#POSTGRES_PASSWORD=
POSTGRES_USER=nocturne
POSTGRES_DB=nocturne
POSTGRES_HOST=postgres
# backend settings
#GIT_WORK_DIR=../blog_posts_git
#LOG_ROOT_DIR=/var/log/nocturne
BLOG_ENDPOINT=https://github.com/Lumither/blog-posts.git
WORK_DIR=~/.nocturne
BACKEND_PORT=3001
#BLOG_ENDPOINT=https://github.com/Lumither/blog-posts.git
BLOG_GIT_URL=https://github.com/Lumither/blog-posts.git
WORK_DIR=/nocturne
#BACKEND_PORT=3001
# frontend settings
API_LOCAL_URL=http://localhost:3001
API_LOCAL_URL=http://backend:3001
API_REMOTE_URL=https://lumither.com/api
+13 -3
View File
@@ -1,6 +1,16 @@
ddev:
ARCH := $(shell uname -m)
ifeq ($(ARCH), arm64)
ARCH := aarch64
endif
all: release
release:
docker compose -f prod.compose.yaml build --build-arg ARCH=$(ARCH)
dev:
docker-compose -f dev.compose.yaml up --build
dclean:
docker-compose -f dev.compose.yaml rm -fsv
clean:
docker-compose -f prod.compose.yaml -f dev.compose.yaml rm -fsv
+2 -4
View File
@@ -1,14 +1,12 @@
# `Nocturne: personal website & CMS`
> This is the last working version
This is the code repo of my personal website, and [here](https://github.com/Lumither/blog-posts/) is the link of the
content repo.
Powered by Next.js and Rust, built with passion and love
<p align="center">
<img src="https://avatars.githubusercontent.com/u/46409277?v=4" alt="GitHub Avatar"/>
</p>
*will add more here in the future
## Nav:
+2
View File
@@ -1 +1,3 @@
/target
/Cargo.lock
+1 -1
View File
@@ -7,7 +7,7 @@ pub mod check_update;
pub fn get_tasks(db_connection: Pool<Postgres>) -> Vec<Box<dyn Task>> {
let db_conn_clone = db_connection.clone();
vec![
BasicTask::new(move || check_update::task(&db_conn_clone), "0 * * * * *")
BasicTask::new(move || check_update::task(&db_conn_clone), "0/15 * * * * *")
.unwrap()
.to_task(),
]
+10
View File
@@ -0,0 +1,10 @@
FROM rust:latest AS builder
WORKDIR /app
COPY . .
RUN ["cargo", "build", "-r"]
FROM gcr.io/distroless/cc AS production
ARG ARCH
COPY --from=builder /app/target/release/api_server ./api_server
COPY --from=builder /usr/lib/${ARCH}-linux-gnu/libz.so.1 /usr/lib/${ARCH}-linux-gnu/
ENTRYPOINT ["./api_server"]
+15
View File
@@ -0,0 +1,15 @@
FROM node:22 AS builder
WORKDIR /app
ENV NEXT_TELEMETRY_DISABLED=1
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build
FROM gcr.io/distroless/nodejs22 AS production
ENV NEXT_TELEMETRY_DISABLED=1
COPY --from=builder /app/next.config.mjs ./
COPY --from=builder /app/.next/standalone ./
COPY --from=builder /app/.next/static ./.next/static
ENV HOSTNAME="0.0.0.0"
CMD ["./server.js"]
+2 -2
View File
@@ -5,7 +5,7 @@ services:
dockerfile: ../container/dev/frontend.containerfile
restart: always
ports:
- 3000:3000
- "3000:3000"
volumes:
- ./frontend:/app
- /app/node_modules
@@ -22,7 +22,7 @@ services:
dockerfile: ../container/dev/backend.containerfile
restart: always
ports:
- 3001:3001
- "3001:3001"
volumes:
- ./blog_posts_git:/app/blog_posts_git:ro
env_file:
+2 -2
View File
@@ -1,7 +1,7 @@
/node_modules
/.next/
/out/
/.next
/out
/build
.DS_Store
+11 -9
View File
@@ -17,7 +17,7 @@ const Footer = (props: Props) => {
const author = post['meta']['author'] ?? 'Tao';
const author_link = post['meta']['author_link'] ?? '/about';
const post_date = new Date(post['first_update']);
const update_date = new Date(post['last_update']);
const update_date: Date | undefined = post['last_update'] ? new Date(post['last_update']) : undefined;
const cc = post['meta']['cc'] ?? 'by-nc-sa';
@@ -55,14 +55,16 @@ const Footer = (props: Props) => {
year: `numeric`
}) }</p>
</div>
<div>
<p className={ 'text-lg font-bold' }>Updated on</p>
<p>{ update_date.toLocaleString('default', {
month: `long`,
day: `numeric`,
year: `numeric`
}) }</p>
</div>
{ update_date &&
<div>
<p className={ 'text-lg font-bold' }>Updated on</p>
<p>{ update_date.toLocaleString('default', {
month: `long`,
day: `numeric`,
year: `numeric`
}) }</p>
</div>
}
<div>
<p className={ 'text-lg font-bold' }>Published under</p>
<Link href={ `https://creativecommons.org/licenses/${ cc }/4.0/` }>
+14 -13
View File
@@ -3,7 +3,16 @@
import React, { useEffect, useState } from 'react';
import { Button } from '@nextui-org/react';
import Image from 'next/image';
import { IoHome, IoInformationCircle, IoLink, IoLogoGithub, IoMail, IoPencil, IoSearch } from 'react-icons/io5';
import {
IoFlask,
IoHome,
IoInformationCircle,
IoLink,
IoLogoGithub,
IoMail,
IoPencil,
IoSearch
} from 'react-icons/io5';
import Link from 'next/link';
import ThemeSwitcher from '@/components/ThemeSwitcher';
import { usePathname } from 'next/navigation';
@@ -34,6 +43,10 @@ const entries: { display_name: string; href: string; icon: React.ReactNode }[] =
icon: <IoSearch size={ `20px` }></IoSearch>,
display_name: 'Search',
href: '/search'
}, {
icon: <IoFlask size={ '20px' } />,
display_name: 'Lab',
href: 'https://lab.lmt.moe'
}
];
@@ -51,18 +64,6 @@ const connections: { label: string, href: string, icon: React.ReactNode }[] = [
];
function Navbar() {
// const [ scrolled, setScrolled ] = useState(false);
// useEffect(() => {
// const handleScroll = () => {
// const isScrolled = window.scrollY > 0;
// setScrolled(isScrolled);
// };
// window.addEventListener('scroll', handleScroll);
// return () => {
// window.removeEventListener('scroll', handleScroll);
// };
// }, []);
const path = usePathname();
const [ shownPath, setShownPath ] = useState(path);
+2 -2
View File
@@ -11,8 +11,8 @@ const nextConfig = {
hostname: 'pic.re'
}
]
}
// output: 'standalone'
},
output: 'standalone'
};
export default nextConfig;
+38
View File
@@ -0,0 +1,38 @@
services:
frontend:
depends_on:
- backend
build:
context: ./frontend
dockerfile: ../container/release/frontend.containerfile
restart: always
ports:
- "3000:3000"
env_file:
- ./.env
backend:
depends_on:
- postgres
build:
context: ./backend
dockerfile: ../container/release/backend.containerfile
args:
ARCH: ${ARCH}
restart: always
ports:
- "3001:3001"
env_file:
- ./.env
- ./.env.local
dns:
- 1.1.1.1
postgres:
image: postgres:16.3
ports:
- "5432:5432"
env_file:
- ./.env
- ./.env.local