backups
This commit is contained in:
@@ -1,11 +1,4 @@
|
||||
export default {
|
||||
/**
|
||||
* Do not remove the labels "Math Courses Start"
|
||||
* and "Math Courses End" and "CSE Courses Start" and "CSE Courses End"
|
||||
* or the separated builds will not work.
|
||||
*
|
||||
* WE USE THESE LABELS TO BUILD THE SEPARATED WEBSITES FOR MATH AND CSE COURSES.
|
||||
*/
|
||||
menu: {
|
||||
title: 'Home',
|
||||
type: 'menu',
|
||||
@@ -24,43 +17,6 @@ export default {
|
||||
}
|
||||
},
|
||||
},
|
||||
/* Load link with relative path */
|
||||
Math3200_link: {
|
||||
title: 'Math3200',
|
||||
type: 'page',
|
||||
href: '/Math3200'
|
||||
},
|
||||
Math429_link: {
|
||||
title: 'Math429',
|
||||
type: 'page',
|
||||
href: '/Math429'
|
||||
},
|
||||
Math4111_link: {
|
||||
title: 'Math4111',
|
||||
type: 'page',
|
||||
href: '/Math4111'
|
||||
},
|
||||
Math4121_link: {
|
||||
title: 'Math4121',
|
||||
type: 'page',
|
||||
href: '/Math4121'
|
||||
},
|
||||
Math4201_link: {
|
||||
title: 'Math4201',
|
||||
type: 'page',
|
||||
href: '/Math4201'
|
||||
},
|
||||
Math416_link: {
|
||||
title: 'Math416',
|
||||
type: 'page',
|
||||
href: '/Math416'
|
||||
},
|
||||
Math401_link: {
|
||||
title: 'Math401',
|
||||
type: 'page',
|
||||
href: '/Math401'
|
||||
},
|
||||
/* Math Courses Start */
|
||||
Math3200: {
|
||||
title: 'Math3200',
|
||||
type: 'page',
|
||||
@@ -110,43 +66,6 @@ export default {
|
||||
timestamp: true,
|
||||
}
|
||||
},
|
||||
/* Math Courses End */
|
||||
CSE332S_link: {
|
||||
title: 'CSE332S',
|
||||
type: 'page',
|
||||
href: '/CSE332S'
|
||||
},
|
||||
CSE347_link: {
|
||||
title: 'CSE347',
|
||||
type: 'page',
|
||||
href: '/CSE347'
|
||||
},
|
||||
CSE442T_link: {
|
||||
title: 'CSE442T',
|
||||
type: 'page',
|
||||
href: '/CSE442T'
|
||||
},
|
||||
CSE5313_link: {
|
||||
title: 'CSE5313',
|
||||
type: 'page',
|
||||
href: '/CSE5313'
|
||||
},
|
||||
CSE510_link: {
|
||||
title: 'CSE510',
|
||||
type: 'page',
|
||||
href: '/CSE510'
|
||||
},
|
||||
CSE559A_link: {
|
||||
title: 'CSE559A',
|
||||
type: 'page',
|
||||
href: '/CSE559A'
|
||||
},
|
||||
CSE5519_link: {
|
||||
title: 'CSE5519',
|
||||
type: 'page',
|
||||
href: '/CSE5519'
|
||||
},
|
||||
/* CSE Courses Start */
|
||||
CSE332S: {
|
||||
title: 'CSE332S',
|
||||
type: 'page',
|
||||
@@ -196,7 +115,6 @@ export default {
|
||||
timestamp: true,
|
||||
}
|
||||
},
|
||||
/* CSE Courses End */
|
||||
Swap: {
|
||||
display: 'hidden',
|
||||
theme:{
|
||||
|
||||
11
distribute/prebuild.sh
Normal file
11
distribute/prebuild.sh
Normal file
@@ -0,0 +1,11 @@
|
||||
# This is pre-build script that cleans up resources and compiles for selected pages, then finally you may combine those subdirectories into one via nginx.
|
||||
|
||||
echo 'Currently compiling pages: $KEEP_PAGES'
|
||||
|
||||
# Rewrite base _meta.js and next.config.js for export pages
|
||||
echo 'Rewrite base _meta.js and keeping $KEEP_PAGES'
|
||||
|
||||
sed 's/(\w+\d+.):(\s*{\n.+\n.+)\n.+\n.+\n.+(\n.+},)/$1_link:$2\n href:'/$1'$3/g' -i ../content/_meta.js
|
||||
|
||||
echo 'First step replaced file:'
|
||||
cat ../content/_meta.js
|
||||
111
docker/Jenkinsfile
vendored
111
docker/Jenkinsfile
vendored
@@ -1,111 +0,0 @@
|
||||
pipeline {
|
||||
environment {
|
||||
registry = "trance0/notenextra"
|
||||
version = "1.2"
|
||||
NODE_OPTIONS = "--max-old-space-size=8192"
|
||||
// NEXT_SEARCH_ALGOLIA_APP_ID = "${NEXT_SEARCH_ALGOLIA_APP_ID}"
|
||||
// NEXT_SEARCH_ALGOLIA_API_KEY = "${NEXT_SEARCH_ALGOLIA_API_KEY}"
|
||||
// NEXT_SEARCH_ALGOLIA_INDEX_NAME = "${NEXT_SEARCH_ALGOLIA_INDEX_NAME}"
|
||||
}
|
||||
|
||||
agent any
|
||||
|
||||
stages {
|
||||
stage("Cleanup Workspace") {
|
||||
steps {
|
||||
// Using Workspace Cleanup Plugin (if installed and configured)
|
||||
cleanWs()
|
||||
}
|
||||
}
|
||||
stage("Checkout") {
|
||||
steps {
|
||||
checkout([
|
||||
$class: "GitSCM",
|
||||
branches: [[ name: "*/main" ]],
|
||||
userRemoteConfigs: [[
|
||||
url: "https://github.com/Trance-0/NoteNextra",
|
||||
]]
|
||||
])
|
||||
}
|
||||
}
|
||||
stage("Build and test"){
|
||||
parallel {
|
||||
stage("Build Math") {
|
||||
steps {
|
||||
script {
|
||||
echo "Building docker image ${registry}-math:${version}.${env.BUILD_ID}"
|
||||
def customImage = docker.build("${registry}-math:v${version}.${env.BUILD_ID}","-f ./docker/math/Dockerfile --no-cache --progress=plain .")
|
||||
echo "Logging in to docker hub"
|
||||
// docker.withRegistry("https://registry.hub.docker.com", "docker-hub-creds") {
|
||||
// echo "Pushing docker image ${registry}:v${version}.${env.BUILD_ID}"
|
||||
// customImage.push()
|
||||
// }
|
||||
echo "skipping push due to conflicted servers"
|
||||
}
|
||||
}
|
||||
}
|
||||
stage("Build CSE") {
|
||||
steps {
|
||||
script {
|
||||
echo "Building docker image ${registry}-cse:${version}.${env.BUILD_ID}"
|
||||
def customImage = docker.build("${registry}-cse:v${version}.${env.BUILD_ID}","-f ./docker/cse/Dockerfile --no-cache --progress=plain .")
|
||||
echo "Logging in to docker hub"
|
||||
// docker.withRegistry("https://registry.hub.docker.com", "docker-hub-creds") {
|
||||
// echo "Pushing docker image ${registry}:v${version}.${env.BUILD_ID}"
|
||||
// customImage.push()
|
||||
// }
|
||||
echo "skipping push due to conflicted servers"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
stage("Cleanup Docker tags") {
|
||||
steps {
|
||||
script {
|
||||
echo "1. Stopping existing container"
|
||||
sh "docker compose -f ./docker/docker-compose.yaml down"
|
||||
// Using Workspace Cleanup Plugin (if installed and configured)
|
||||
echo "2. Removing existing images"
|
||||
def imageNameMath = "${registry}-math:latest"
|
||||
def imageNameCSE = "${registry}-cse:latest"
|
||||
def oldImageIDMath = sh(
|
||||
script: "docker images -qf reference=\${imageNameMath}",
|
||||
returnStdout: true
|
||||
)
|
||||
def oldImageIDCSE = sh(
|
||||
script: "docker images -qf reference=\${imageNameCSE}",
|
||||
returnStdout: true
|
||||
)
|
||||
if ( "${oldImageIDMath}" != "" ) {
|
||||
echo "Removing old image ${oldImageIDMath}"
|
||||
echo "Image Name: " + "${imageNameMath}"
|
||||
echo "Old Image: ${oldImageIDMath}"
|
||||
sh "docker rmi ${oldImageIDMath}"
|
||||
}else{
|
||||
echo "Warning: ${imageNameMath} does not exist"
|
||||
}
|
||||
if ( "${oldImageIDCSE}" != "" ) {
|
||||
echo "Removing old image ${oldImageIDCSE}"
|
||||
echo "Image Name: " + "${imageNameCSE}"
|
||||
echo "Old Image: ${oldImageIDCSE}"
|
||||
sh "docker rmi ${oldImageIDCSE}"
|
||||
}else{
|
||||
echo "Warning: ${imageNameCSE} does not exist"
|
||||
}
|
||||
echo "3. Assigned new tags to the images"
|
||||
sh "docker tag ${registry}-math:v${version}.${env.BUILD_ID} ${registry}-math:latest"
|
||||
sh "docker tag ${registry}-cse:v${version}.${env.BUILD_ID} ${registry}-cse:latest"
|
||||
}
|
||||
}
|
||||
}
|
||||
stage("Deploy") {
|
||||
steps {
|
||||
script {
|
||||
echo "Deploying docker image ${registry}-math:${version}.${env.BUILD_ID} and ${registry}-cse:${version}.${env.BUILD_ID} with docker compose"
|
||||
sh "docker compose -f ./docker/docker-compose.yaml up -d"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,73 +0,0 @@
|
||||
# Dockerfile for Math folders
|
||||
|
||||
# Source: https://github.com/vercel/next.js/blob/canary/examples/with-docker-multi-env/docker/production/Dockerfile
|
||||
# syntax=docker.io/docker/dockerfile:1
|
||||
|
||||
FROM node:20-alpine AS base
|
||||
|
||||
ENV NODE_OPTIONS="--max-old-space-size=8192"
|
||||
|
||||
# 1. Install dependencies only when needed
|
||||
FROM base AS deps
|
||||
# Check https://github.com/nodejs/docker-node/tree/b4117f9333da4138b03a546ec926ef50a31506c3#nodealpine to understand why libc6-compat might be needed.
|
||||
RUN apk add --no-cache libc6-compat git
|
||||
|
||||
WORKDIR /app
|
||||
|
||||
# Install dependencies based on the preferred package manager
|
||||
COPY package.json yarn.lock* package-lock.json* pnpm-lock.yaml* .npmrc* ./
|
||||
RUN \
|
||||
if [ -f yarn.lock ]; then yarn --frozen-lockfile; \
|
||||
elif [ -f package-lock.json ]; then npm ci; \
|
||||
elif [ -f pnpm-lock.yaml ]; then corepack enable pnpm && pnpm i; \
|
||||
else echo "Lockfile not found, use default npm install" && npm i; \
|
||||
fi
|
||||
|
||||
# 2. Rebuild the source code only when needed
|
||||
FROM base AS builder
|
||||
WORKDIR /app
|
||||
COPY --from=deps /app/node_modules ./node_modules
|
||||
COPY . .
|
||||
RUN ls -la
|
||||
|
||||
# 2.1 Remove unnecessary files for build with title starting with CSE
|
||||
RUN cd ./content && find . -maxdepth 1 -type d -name "Math*" -exec rm -rf {} +
|
||||
RUN cd ./public && find . -maxdepth 1 -type d -name "Math*" -exec rm -rf {} +
|
||||
|
||||
# 2.1.1 Check the updated folders
|
||||
RUN cd ./content && ls -la
|
||||
RUN cd ./public && ls -la
|
||||
|
||||
# 2.2 Update the _meta.js files in the content folder
|
||||
RUN sed -i '/\/\* Math Courses Start \*\//,/\/\* Math Courses End \*\//d' ./content/_meta.js
|
||||
|
||||
# 2.2.1 Check the updated _meta.js file
|
||||
RUN cat ./content/_meta.js
|
||||
|
||||
# This will do the trick, use the corresponding env file for each environment.
|
||||
# COPY .env.production.sample .env.production
|
||||
RUN npm run build
|
||||
|
||||
# 3. Production image, copy all the files and run next
|
||||
FROM base AS runner
|
||||
WORKDIR /app
|
||||
|
||||
ENV NODE_ENV=production
|
||||
|
||||
RUN addgroup -g 1001 -S nodejs
|
||||
RUN adduser -S nextjs -u 1001
|
||||
|
||||
COPY --from=builder /app/public ./public
|
||||
|
||||
# Automatically leverage output traces to reduce image size
|
||||
# https://nextjs.org/docs/advanced-features/output-file-tracing
|
||||
COPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./
|
||||
COPY --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static
|
||||
|
||||
USER nextjs
|
||||
|
||||
EXPOSE 4200
|
||||
|
||||
ENV PORT=4200
|
||||
|
||||
CMD HOSTNAME="0.0.0.0" node server.js
|
||||
@@ -1 +0,0 @@
|
||||
sudo docker build -t trance-0/notenextra-cse:v1.2.0 -f ./docker/cse/Dockerfile --no-cache --progress=plain .
|
||||
@@ -1 +0,0 @@
|
||||
docker compose -f docker/docker-compose.yaml up -d --build notenextra-math notenextra-cse
|
||||
@@ -1,33 +0,0 @@
|
||||
name: notenextra
|
||||
services:
|
||||
# you may need to update relative directories if you move this file
|
||||
# default created directories is /docker/docker-compose.yaml
|
||||
notenextra-math:
|
||||
image: trance0/notenextra-math:latest
|
||||
build:
|
||||
context: ../
|
||||
dockerfile: ./docker/math/Dockerfile
|
||||
tags:
|
||||
- trance0/notenextra-math:latest
|
||||
restart: on-failure:5
|
||||
ports:
|
||||
- 13001:4200
|
||||
notenextra-cse:
|
||||
image: trance0/notenextra-cse:latest
|
||||
build:
|
||||
context: ../
|
||||
dockerfile: ./docker/cse/Dockerfile
|
||||
tags:
|
||||
- trance0/notenextra-cse:latest
|
||||
restart: on-failure:5
|
||||
ports:
|
||||
- 13002:4200
|
||||
nginx:
|
||||
image: nginx:latest
|
||||
ports:
|
||||
- 13000:80
|
||||
volumes:
|
||||
- ./nginx.conf:/etc/nginx/nginx.conf
|
||||
depends_on:
|
||||
- notenextra-math
|
||||
- notenextra-cse
|
||||
@@ -1,73 +0,0 @@
|
||||
# Dockerfile for Math folders
|
||||
|
||||
# Source: https://github.com/vercel/next.js/blob/canary/examples/with-docker-multi-env/docker/production/Dockerfile
|
||||
# syntax=docker.io/docker/dockerfile:1
|
||||
|
||||
FROM node:20-alpine AS base
|
||||
|
||||
ENV NODE_OPTIONS="--max-old-space-size=8192"
|
||||
|
||||
# 1. Install dependencies only when needed
|
||||
FROM base AS deps
|
||||
# Check https://github.com/nodejs/docker-node/tree/b4117f9333da4138b03a546ec926ef50a31506c3#nodealpine to understand why libc6-compat might be needed.
|
||||
RUN apk add --no-cache libc6-compat git
|
||||
|
||||
WORKDIR /app
|
||||
|
||||
# Install dependencies based on the preferred package manager
|
||||
COPY package.json yarn.lock* package-lock.json* pnpm-lock.yaml* .npmrc* ./
|
||||
RUN \
|
||||
if [ -f yarn.lock ]; then yarn --frozen-lockfile; \
|
||||
elif [ -f package-lock.json ]; then npm ci; \
|
||||
elif [ -f pnpm-lock.yaml ]; then corepack enable pnpm && pnpm i; \
|
||||
else echo "Lockfile not found, use default npm install" && npm i; \
|
||||
fi
|
||||
|
||||
# 2. Rebuild the source code only when needed
|
||||
FROM base AS builder
|
||||
WORKDIR /app
|
||||
COPY --from=deps /app/node_modules ./node_modules
|
||||
COPY . .
|
||||
RUN ls -la
|
||||
|
||||
# 2.1 Remove unnecessary files for build with title starting with CSE
|
||||
RUN cd ./content && find . -maxdepth 1 -type d -name "CSE*" -exec rm -rf {} +
|
||||
RUN cd ./public && find . -maxdepth 1 -type d -name "CSE*" -exec rm -rf {} +
|
||||
|
||||
# 2.1.1 Check the updated folders
|
||||
RUN cd ./content && ls -la
|
||||
RUN cd ./public && ls -la
|
||||
|
||||
# 2.2 Update the _meta.js files in the content folder
|
||||
RUN sed -i '/\/\* CSE Courses Start \*\//,/\/\* CSE Courses End \*\//d' ./content/_meta.js
|
||||
|
||||
# 2.2.1 Check the updated _meta.js file
|
||||
RUN cat ./content/_meta.js
|
||||
|
||||
# This will do the trick, use the corresponding env file for each environment.
|
||||
# COPY .env.production.sample .env.production
|
||||
RUN npm run build
|
||||
|
||||
# 3. Production image, copy all the files and run next
|
||||
FROM base AS runner
|
||||
WORKDIR /app
|
||||
|
||||
ENV NODE_ENV=production
|
||||
|
||||
RUN addgroup -g 1001 -S nodejs
|
||||
RUN adduser -S nextjs -u 1001
|
||||
|
||||
COPY --from=builder /app/public ./public
|
||||
|
||||
# Automatically leverage output traces to reduce image size
|
||||
# https://nextjs.org/docs/advanced-features/output-file-tracing
|
||||
COPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./
|
||||
COPY --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static
|
||||
|
||||
USER nextjs
|
||||
|
||||
EXPOSE 4200
|
||||
|
||||
ENV PORT=4200
|
||||
|
||||
CMD HOSTNAME="0.0.0.0" node server.js
|
||||
@@ -1 +0,0 @@
|
||||
sudo docker build -t trance-0/notenextra-math:v1.2.0 -f ./docker/math/Dockerfile --no-cache --progress=plain .
|
||||
@@ -1,102 +0,0 @@
|
||||
# Example for conf.d/default.conf
|
||||
user www-data;
|
||||
worker_processes 1;
|
||||
|
||||
error_log /var/log/nginx/error.log;
|
||||
pid /var/run/nginx.pid;
|
||||
|
||||
events {
|
||||
worker_connections 1024;
|
||||
}
|
||||
|
||||
http {
|
||||
|
||||
upstream notenextra-math {
|
||||
server notenextra-math:4200;
|
||||
}
|
||||
|
||||
upstream notenextra-cse {
|
||||
server notenextra-cse:4200;
|
||||
}
|
||||
|
||||
# Decide where to send /_pagefind* based on the page that made the request
|
||||
map $http_referer $load_upstream {
|
||||
default http://notenextra-cse;
|
||||
~*://[^/]+/Math(?:/|$) http://notenextra-math;
|
||||
~*://[^/]+/CSE(?:/|$) http://notenextra-cse;
|
||||
}
|
||||
|
||||
|
||||
include /etc/nginx/mime.types;
|
||||
|
||||
# add extra types
|
||||
|
||||
types {
|
||||
text/javascript mjs;
|
||||
}
|
||||
|
||||
default_type application/octet-stream;
|
||||
|
||||
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
|
||||
'$status $body_bytes_sent "$http_referer" '
|
||||
'"$http_user_agent" "$http_x_forwarded_for"';
|
||||
|
||||
access_log /var/log/nginx/access.log main;
|
||||
|
||||
server {
|
||||
listen 80;
|
||||
server_name localhost;
|
||||
|
||||
rewrite ^/.well-known/carddav /remote.php/dav/ permanent;
|
||||
rewrite ^/.well-known/caldav /remote.php/dav/ permanent;
|
||||
|
||||
location = /robots.txt {
|
||||
allow all;
|
||||
log_not_found off;
|
||||
access_log off;
|
||||
}
|
||||
|
||||
# Send all next or additional assets (/_pagefind.js and /_pagefind/*) to the chosen app
|
||||
# ^~ /_pagefind matches both "/_pagefind.js" and "/_pagefind/..."
|
||||
location ^~ /_(.*)$ {
|
||||
proxy_pass $load_upstream; # leaves URI intact (/_pagefind.js, /_pagefind/manifest.json, etc.)
|
||||
proxy_set_header Host $host;
|
||||
proxy_set_header X-Real-IP $remote_addr;
|
||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||
proxy_set_header X-Forwarded-Proto $scheme;
|
||||
}
|
||||
|
||||
location ~ ^/(build|tests|config|lib|3rdparty|templates|data)/ {
|
||||
deny all;
|
||||
}
|
||||
|
||||
location ~ ^/(?:\.|autotest|occ|issue|indie|db_|console) {
|
||||
deny all;
|
||||
}
|
||||
|
||||
location ~ ^/Math(.*)$ {
|
||||
proxy_pass http://notenextra-math/Math$1;
|
||||
proxy_set_header Host $host;
|
||||
proxy_set_header X-Real-IP $remote_addr;
|
||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||
proxy_set_header X-Forwarded-Proto $scheme;
|
||||
}
|
||||
|
||||
location ~ ^/CSE(.*)$ {
|
||||
proxy_pass http://notenextra-cse/CSE$1;
|
||||
proxy_set_header Host $host;
|
||||
proxy_set_header X-Real-IP $remote_addr;
|
||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||
proxy_set_header X-Forwarded-Proto $scheme;
|
||||
}
|
||||
|
||||
location / {
|
||||
proxy_pass http://notenextra-math;
|
||||
proxy_set_header Host $host;
|
||||
proxy_set_header X-Real-IP $remote_addr;
|
||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||
proxy_set_header X-Forwarded-Proto $scheme;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -20,13 +20,14 @@ const bundleAnalyzer = withBundleAnalyzer({
|
||||
})
|
||||
|
||||
export default bundleAnalyzer(withNextra({
|
||||
output: 'standalone',
|
||||
// output: 'standalone',
|
||||
|
||||
// static export start
|
||||
// output: 'export',
|
||||
// images: {
|
||||
// unoptimized: true // mandatory, otherwise won't export
|
||||
// },
|
||||
output: 'export',
|
||||
images: {
|
||||
unoptimized: true // mandatory, otherwise won't export
|
||||
},
|
||||
basePath: '/',
|
||||
// static export end
|
||||
|
||||
// eslint: {
|
||||
|
||||
Reference in New Issue
Block a user