From cb8643b405a41536917e04cf33b04b0a6fe9d63e Mon Sep 17 00:00:00 2001 From: louiscklaw Date: Sat, 24 May 2025 08:21:33 +0800 Subject: [PATCH] ```update Add Docker build and deployment workflow for CMS and Ionic Mobile, update docker-compose.yml with new service images, and enhance documentation with strategy diagram and endpoint table``` --- .../Requirements/REQ0021/index.md | 16 ++ 002_source/.gitignore | 2 + 002_source/cms/.dockerignore | 40 ++++ 002_source/cms/Dockerfile | 11 +- 002_source/cms/package.json | 7 +- 002_source/cms/scripts/003_build_w.sh | 5 +- 002_source/cms/scripts/docker/entrypoint.sh | 16 +- 002_source/cms/src/lib/pb.ts | 6 +- 002_source/docker/docker-compose.yml | 59 +++--- 002_source/ionic_mobile/.dockerignore | 40 ++++ 002_source/ionic_mobile/Dockerfile | 16 +- 002_source/ionic_mobile/package-lock.json | 176 +++++++++++++++++- 002_source/ionic_mobile/package.json | 16 +- .../ionic_mobile/scripts/docker/entrypoint.sh | 34 ++-- 002_source/pocketbase/package.json | 85 +++++++++ 002_source/scripts/dc_up.sh | 18 +- 16 files changed, 462 insertions(+), 85 deletions(-) create mode 100644 002_source/cms/.dockerignore create mode 100644 002_source/ionic_mobile/.dockerignore create mode 100644 002_source/pocketbase/package.json diff --git a/001_documentation/Requirements/REQ0021/index.md b/001_documentation/Requirements/REQ0021/index.md index 5143932..6419b58 100644 --- a/001_documentation/Requirements/REQ0021/index.md +++ b/001_documentation/Requirements/REQ0021/index.md @@ -6,6 +6,22 @@ tags: docker docker and public endpoint +## strategy + +```mermaid +graph LR + A["next build"] + B["docker build"] + A --> B --> deploy --> run +``` + +1. build on develop machine +1. docker build on develop machine (include source code) +1. push image to production machine +1. run image to production machine + +## endpoint table + | function | address | | | -------- | ---------------------------- | ---- | | DB | demo_ls_db.louislabs.com | 3013 | diff --git a/002_source/.gitignore b/002_source/.gitignore index 5f5a1a4..618a8d4 100644 --- a/002_source/.gitignore +++ b/002_source/.gitignore @@ -2,3 +2,5 @@ **/*.log **/_archive **/_del + +**/*copy* diff --git a/002_source/cms/.dockerignore b/002_source/cms/.dockerignore new file mode 100644 index 0000000..d4d8f1e --- /dev/null +++ b/002_source/cms/.dockerignore @@ -0,0 +1,40 @@ +# Ignore all files and directories by default + +- + +# Except for the following: + +!.dockerignore +!.gitignore +!.env.example +!.git/ +!.env +!.vscode/ +!.idea/ + +# Node.js specific + +node_modules/ + +# Build artifacts + +dist/ +build/ + +# Logs + +logs/ +\*.log + +# Environment files + +.env\* + +# Cache files + +\*.cache + +# OS generated files + +.DS_Store +Thumbs.db diff --git a/002_source/cms/Dockerfile b/002_source/cms/Dockerfile index b9a5065..d7b4988 100644 --- a/002_source/cms/Dockerfile +++ b/002_source/cms/Dockerfile @@ -4,11 +4,14 @@ FROM node:22-slim # Install pnpm globally RUN npm install -g pnpm +# Copy your application code (optional, comment out if not needed) +COPY . /app + +RUN cd /app && pnpm i +RUN cd /app && pnpm run build + # Set working directory WORKDIR /app -# Copy your application code (optional, comment out if not needed) -# COPY . . - # Default command (optional) -CMD ["node"] +CMD ["./scripts/docker/entrypoint.sh"] diff --git a/002_source/cms/package.json b/002_source/cms/package.json index 47bd08c..9c3f8e4 100644 --- a/002_source/cms/package.json +++ b/002_source/cms/package.json @@ -10,7 +10,10 @@ "dev": "next dev -H 0.0.0.0", "build": "next build", "build:w": "pnpx nodemon --ext ts,tsx,json,mjs,js,jsx --delay 15 --exec \"pnpm run build\"", - "start": "next start", + "docker:push": "docker push 192.168.10.61:5000/demo_ls_cms ", + "docker:build": "docker build -t 192.168.10.61:5000/demo_ls_cms .", + "build:docker": "pnpm run build && pnpm run docker:build && pnpm run docker:push", + "start": "next start -H 0.0.0.0", "lint": "next lint --quiet", "lint:fix": "next lint --fix", "lint:w": "pnpx nodemon --ext ts,tsx,json,mjs,js,jsx --delay 5 --exec \"pnpm run lint\"", @@ -117,4 +120,4 @@ "protobufjs" ] } -} +} \ No newline at end of file diff --git a/002_source/cms/scripts/003_build_w.sh b/002_source/cms/scripts/003_build_w.sh index 7c78aa1..f23ab96 100755 --- a/002_source/cms/scripts/003_build_w.sh +++ b/002_source/cms/scripts/003_build_w.sh @@ -4,9 +4,10 @@ set -ex reset -rm -rf .next +# rm -rf .next # pnpm run typecheck -# pnpm run lint:w +# pnpm run lint +# echo "check ok" pnpm run build diff --git a/002_source/cms/scripts/docker/entrypoint.sh b/002_source/cms/scripts/docker/entrypoint.sh index 67be973..3674115 100755 --- a/002_source/cms/scripts/docker/entrypoint.sh +++ b/002_source/cms/scripts/docker/entrypoint.sh @@ -1,22 +1,14 @@ #!/usr/bin/env bash -# set -x - -# nvm use 20 -# pnpm run build - -pnpm i - -pnpm run build - -echo "build done" +set -x while true; do pnpm run start - echo "server restarted" + echo "command restarted" + + sleep 5 - sleep 3 done # pnpm i -D diff --git a/002_source/cms/src/lib/pb.ts b/002_source/cms/src/lib/pb.ts index a0646f2..fc974ff 100644 --- a/002_source/cms/src/lib/pb.ts +++ b/002_source/cms/src/lib/pb.ts @@ -1,6 +1,10 @@ import PocketBase from 'pocketbase'; -if (!process.env.NEXT_PUBLIC_POCKETBASE_URL) throw new Error('the pocketbase url cannot empty'); +if (process.env.NEXT_PUBLIC_POCKETBASE_URL) { + console.log(process.env.NEXT_PUBLIC_POCKETBASE_URL); +} else { + throw new Error('the pocketbase url cannot empty'); +} export const POCKETBASE_URL: string = process.env.NEXT_PUBLIC_POCKETBASE_URL; export const pb = new PocketBase(process.env.NEXT_PUBLIC_POCKETBASE_URL); diff --git a/002_source/docker/docker-compose.yml b/002_source/docker/docker-compose.yml index 183c98c..99cbc9b 100644 --- a/002_source/docker/docker-compose.yml +++ b/002_source/docker/docker-compose.yml @@ -2,7 +2,7 @@ services: cms: - image: 192.168.10.61:5000/demo_cms_ubuntu + image: 192.168.10.61:5000/demo_ls_cms build: ../cms env_file: - .env @@ -89,33 +89,32 @@ services: # reservations: # cpus: 0.01 - # ionic_mobile: - # # image: node:20-bullseye-slim - # image: 192.168.10.61:5000/demo_ionic_mobile - # build: ../ionic_mobile - # # user: 1000:1000 - # env_file: - # - .env - # volumes: - # - ../ionic_mobile:/app - # ports: - # - 3012:5173 - # - 8081:8080 - # working_dir: /app - # command: /app/scripts/docker/entrypoint.sh - # depends_on: - # pocketbase: - # condition: service_healthy - # healthcheck: - # #optional (recommended) since v0.10.0 - # test: wget --no-verbose --tries=1 --spider http://localhost:5173 || exit 1 - # interval: 5s - # timeout: 5s - # retries: 5 + ionic_mobile: + # image: node:20-bullseye-slim + image: 192.168.10.61:5000/demo_ionic_mobile + build: ../ionic_mobile + # user: 1000:1000 + env_file: + - .env + volumes: + - ../ionic_mobile:/app + ports: + - 3012:8080 + working_dir: /app + command: /app/scripts/docker/entrypoint.sh + depends_on: + pocketbase: + condition: service_healthy + healthcheck: + #optional (recommended) since v0.10.0 + test: wget --no-verbose --tries=1 --spider http://localhost:5173 || exit 1 + interval: 5s + timeout: 5s + retries: 5 - # deploy: - # resources: - # limits: - # cpus: '0.5' - # reservations: - # cpus: '0.01' + deploy: + resources: + limits: + cpus: '0.5' + reservations: + cpus: '0.01' diff --git a/002_source/ionic_mobile/.dockerignore b/002_source/ionic_mobile/.dockerignore new file mode 100644 index 0000000..d4d8f1e --- /dev/null +++ b/002_source/ionic_mobile/.dockerignore @@ -0,0 +1,40 @@ +# Ignore all files and directories by default + +- + +# Except for the following: + +!.dockerignore +!.gitignore +!.env.example +!.git/ +!.env +!.vscode/ +!.idea/ + +# Node.js specific + +node_modules/ + +# Build artifacts + +dist/ +build/ + +# Logs + +logs/ +\*.log + +# Environment files + +.env\* + +# Cache files + +\*.cache + +# OS generated files + +.DS_Store +Thumbs.db diff --git a/002_source/ionic_mobile/Dockerfile b/002_source/ionic_mobile/Dockerfile index b6aebb7..008beae 100644 --- a/002_source/ionic_mobile/Dockerfile +++ b/002_source/ionic_mobile/Dockerfile @@ -1,5 +1,17 @@ -FROM 192.168.10.61:5000/nvm_ubuntu:latest +# Use official Node 18 base image +FROM node:22-slim +# Install pnpm globally +RUN npm install -g pnpm + +# Copy your application code (optional, comment out if not needed) +COPY . /app + +RUN cd /app && npm i +RUN cd /app && npm run build + +# Set working directory WORKDIR /app -RUN nvm install 22 +# Default command (optional) +CMD ["./scripts/docker/entrypoint.sh"] diff --git a/002_source/ionic_mobile/package-lock.json b/002_source/ionic_mobile/package-lock.json index aaf700d..7cbcb52 100644 --- a/002_source/ionic_mobile/package-lock.json +++ b/002_source/ionic_mobile/package-lock.json @@ -28,6 +28,7 @@ "@types/react-router": "^5.1.20", "@types/react-router-dom": "^5.3.3", "axios": "^1.8.1", + "http-serve": "^1.0.1", "i18next": "^24.2.0", "ionicons": "^7.0.0", "lodash": "^4.17.21", @@ -5815,6 +5816,15 @@ "dev": true, "license": "MIT" }, + "node_modules/colors": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz", + "integrity": "sha512-pFGrxThWcWQ2MsAz6RtgeWe4NK2kUE1WfsrvvlctdII745EW9I0yflqhe7++M5LEc7bV2c/9/5zc8sFcpL0Drw==", + "license": "MIT", + "engines": { + "node": ">=0.1.90" + } + }, "node_modules/combined-stream": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", @@ -6653,6 +6663,15 @@ "node": ">= 0.10" } }, + "node_modules/corser": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/corser/-/corser-2.0.1.tgz", + "integrity": "sha512-utCYNzRSQIZNPIcGZdQc92UVJYAhtGAteCFg0yRaFm8f0P+CPtyGyHXJcGXnffjCybUCEx3FQ2G7U3/o9eIkVQ==", + "license": "MIT", + "engines": { + "node": ">= 0.4.0" + } + }, "node_modules/create-require": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", @@ -7383,6 +7402,22 @@ "safer-buffer": "^2.1.0" } }, + "node_modules/ecstatic": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/ecstatic/-/ecstatic-2.2.2.tgz", + "integrity": "sha512-F1g29y3I+abOS+M0AiK2O9R96AJ49Bc3kH696HtqnN+CL3YhpUnSzHNoUBQL03qDsN9Lr1XeKIxTqEH3BtiBgg==", + "deprecated": "This package is unmaintained and deprecated. See the GH Issue 259.", + "license": "MIT", + "dependencies": { + "he": "^1.1.1", + "mime": "^1.2.11", + "minimist": "^1.1.0", + "url-join": "^2.0.2" + }, + "bin": { + "ecstatic": "lib/ecstatic.js" + } + }, "node_modules/ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", @@ -8037,6 +8072,12 @@ "dev": true, "license": "MIT" }, + "node_modules/eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "license": "MIT" + }, "node_modules/eventsource": { "version": "3.0.7", "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-3.0.7.tgz", @@ -9681,7 +9722,6 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "dev": true, "license": "MIT", "bin": { "he": "bin/he" @@ -9814,6 +9854,20 @@ "node": ">= 0.8" } }, + "node_modules/http-proxy": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", + "license": "MIT", + "dependencies": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, "node_modules/http-proxy-agent": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", @@ -9829,6 +9883,26 @@ "node": ">= 6" } }, + "node_modules/http-serve": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/http-serve/-/http-serve-1.0.1.tgz", + "integrity": "sha512-dlIVvTQitN2q/KX9s3r2flAiByI3jqjoIoJ90Qtin+u9m7oWNM88qjwrNxeEVfsI+AE3bQAAdC73WE/0RtnVaQ==", + "license": "MIT", + "dependencies": { + "colors": "1.0.3", + "corser": "~2.0.0", + "ecstatic": "^2.0.0", + "http-proxy": "^1.8.1", + "opener": "~1.4.0", + "optimist": "0.6.x", + "portfinder": "0.4.x", + "union": "~0.4.3" + }, + "bin": { + "hs": "bin/http-serve", + "http-serve": "bin/http-serve" + } + }, "node_modules/http-signature": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.4.0.tgz", @@ -12461,6 +12535,18 @@ "node": ">=8.6" } }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/mime-db": { "version": "1.52.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", @@ -12532,7 +12618,6 @@ "version": "1.2.8", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "dev": true, "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" @@ -13074,6 +13159,40 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/opener": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/opener/-/opener-1.4.3.tgz", + "integrity": "sha512-4Im9TrPJcjAYyGR5gBe3yZnBzw5n3Bfh1ceHHGNOpMurINKc6RdSIPXMyon4BZacJbJc36lLkhipioGbWh5pwg==", + "license": "(WTFPL OR MIT)", + "bin": { + "opener": "opener.js" + } + }, + "node_modules/optimist": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", + "integrity": "sha512-snN4O4TkigujZphWLN0E//nQmm7790RYaE53DdL7ZYwee2D8DDo9/EyYiKUfN3rneWUjhJnueija3G9I2i0h3g==", + "license": "MIT/X11", + "dependencies": { + "minimist": "~0.0.1", + "wordwrap": "~0.0.2" + } + }, + "node_modules/optimist/node_modules/minimist": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", + "integrity": "sha512-iotkTvxc+TwOm5Ieim8VnSNvCDjCK9S8G3scJ50ZthspSxa7jx50jkhYduuAtAjvfDUwSgOwf8+If99AlOEhyw==", + "license": "MIT" + }, + "node_modules/optimist/node_modules/wordwrap": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", + "integrity": "sha512-1tMA907+V4QmxV7dbRvb4/8MaRALK6q9Abid3ndMYnbyo8piisCmeONVqVSXqQA3KaP4SLt5b7ud6E2sqP8TFw==", + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/optionator": { "version": "0.9.4", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", @@ -13454,6 +13573,36 @@ "integrity": "sha512-WBBeOgz4Jnrd7a1KEzSBUJqpTortKKCcp16j5KoF+4tNIyQHsmynj+qRSvS56/RVacVMbAqO8Qkfj3N84fpzEw==", "license": "MIT" }, + "node_modules/portfinder": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-0.4.0.tgz", + "integrity": "sha512-SZ3hp61WVhwNSS0gf0Fdrx5Yb/wl35qisHuPVM1S0StV8t5XlVZmmJy7/417OELJA7t6ecEmeEzvOaBwq3kCiQ==", + "license": "MIT/X11", + "dependencies": { + "async": "0.9.0", + "mkdirp": "0.5.x" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/portfinder/node_modules/async": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/async/-/async-0.9.0.tgz", + "integrity": "sha512-XQJ3MipmCHAIBBMFfu2jaSetneOrXbSyyqeU3Nod867oNOpS+i9FEms5PWgjMxSgBybRf2IVVLtr1YfrDO+okg==" + }, + "node_modules/portfinder/node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "license": "MIT", + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, "node_modules/possible-typed-array-names": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", @@ -14804,7 +14953,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", - "dev": true, "license": "MIT" }, "node_modules/resize-observer-polyfill": { @@ -16887,6 +17035,22 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/union": { + "version": "0.4.6", + "resolved": "https://registry.npmjs.org/union/-/union-0.4.6.tgz", + "integrity": "sha512-2qtrvSgD0GKotLRCNYkIMUOzoaHjXKCtbAP0kc5Po6D+RWTBb+BxlcHlHCYcf+Y+YM7eQicPgAg9mnWQvtoFVA==", + "dependencies": { + "qs": "~2.3.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/union/node_modules/qs": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-2.3.3.tgz", + "integrity": "sha512-f5M0HQqZWkzU8GELTY8LyMrGkr3bPjKoFtTkwUEqJQbcljbeK8M7mliP9Ia2xoOI6oMerp+QPS7oYJtpGmWe/A==" + }, "node_modules/unique-string": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", @@ -17039,6 +17203,12 @@ "punycode": "^2.1.0" } }, + "node_modules/url-join": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/url-join/-/url-join-2.0.5.tgz", + "integrity": "sha512-c2H1fIgpUdwFRIru9HFno5DT73Ok8hg5oOb5AT3ayIgvCRfxgs2jyt5Slw8kEB7j3QUr6yJmMPDT/odjk7jXow==", + "license": "MIT" + }, "node_modules/url-parse": { "version": "1.5.10", "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", diff --git a/002_source/ionic_mobile/package.json b/002_source/ionic_mobile/package.json index 9df6e2c..7cc9329 100644 --- a/002_source/ionic_mobile/package.json +++ b/002_source/ionic_mobile/package.json @@ -3,12 +3,20 @@ "private": true, "version": "0.0.1", "type": "module", + "engines": { + "node": "==22" + }, "scripts": { "dev": "vite --host --cors --force --strictPort --clearScreen", "build": "tsc && vite build && npx cap copy", + "build:docker": "pnpm run build && pnpm run docker:build && pnpm run docker:push", + "build:w": "npx nodemon --ext ts,tsx,json,mjs,js,jsx --delay 15 --exec \"pnpm run build\"", + "docker:push": "docker push 192.168.10.61:5000/demo_ionic_mobile", + "docker:build": "docker build -t 192.168.10.61:5000/demo_ionic_mobile .", "ionic_build": "npx vite build && npx cap copy", "ionic_sync": "npx cap sync --inline", "ionic_pre_android_studio": "npm run ionic_build && npm run ionic_sync", + "start": "npx http-serve dist", "preview": "vite preview", "test.e2e": "cypress run", "test.unit": "vitest", @@ -43,6 +51,7 @@ "@types/react-router": "^5.1.20", "@types/react-router-dom": "^5.3.3", "axios": "^1.8.1", + "http-serve": "^1.0.1", "i18next": "^24.2.0", "ionicons": "^7.0.0", "lodash": "^4.17.21", @@ -89,8 +98,5 @@ "vite": "~5.2.0", "vitest": "^0.34.6" }, - "description": "An Ionic project", - "engines": { - "node": "==22" - } -} + "description": "An Ionic project" +} \ No newline at end of file diff --git a/002_source/ionic_mobile/scripts/docker/entrypoint.sh b/002_source/ionic_mobile/scripts/docker/entrypoint.sh index 36a8631..de9d749 100755 --- a/002_source/ionic_mobile/scripts/docker/entrypoint.sh +++ b/002_source/ionic_mobile/scripts/docker/entrypoint.sh @@ -1,19 +1,27 @@ #!/usr/bin/env bash -set -ex +set -x -nvm use 22 -node -v +while true; do + npm run start + + echo "command restarted" + + sleep 5 + +done # sleep infinity -while true; do - if [ "$NODE_ENV" = "development" ]; then - npm i -D - npm run dev - else - # temp solution - npm run dev - fi - sleep 1 -done +# # sleep infinity +# while true; do +# if [ "$NODE_ENV" = "development" ]; then +# npm i -D +# npm run dev +# else +# # temp solution +# npm run dev +# fi + +# sleep 1 +# done diff --git a/002_source/pocketbase/package.json b/002_source/pocketbase/package.json new file mode 100644 index 0000000..54cb390 --- /dev/null +++ b/002_source/pocketbase/package.json @@ -0,0 +1,85 @@ +{ + "name": "lettersoup_app_poc", + "private": true, + "version": "0.0.1", + "type": "module", + "engines": { + "node": "==22" + }, + "scripts": { + "dev": "vite --host --cors --force --strictPort --clearScreen", + "build:docker": "pnpm run docker:build && pnpm run docker:push", + "build:w": "not implemented", + "docker:push": "docker push 192.168.10.61:5000/demo_ls_db", + "docker:build": "docker build --build-arg VERSION=0.26.6 -t 192.168.10.61:5000/demo_ls_db ./docker" + }, + "dependencies": { + "@capacitor/android": "^6.2.0", + "@capacitor/app": "6.0.2", + "@capacitor/core": "6.2.0", + "@capacitor/filesystem": "^6.0.2", + "@capacitor/haptics": "6.0.2", + "@capacitor/keyboard": "6.0.3", + "@capacitor/splash-screen": "^6.0.3", + "@capacitor/status-bar": "6.0.2", + "@hookform/resolvers": "3.3.4", + "@ionic/prettier-config": "^4.0.0", + "@ionic/react": "^8.0.0", + "@ionic/react-router": "^8.0.0", + "@ionic/storage": "^4.0.0", + "@lifeomic/attempt": "^3.1.0", + "@tanstack/react-query": "^5.74.4", + "@tanstack/react-query-devtools": "^5.74.6", + "@types/lodash": "^4.17.16", + "@types/react-router": "^5.1.20", + "@types/react-router-dom": "^5.3.3", + "axios": "^1.8.1", + "http-serve": "^1.0.1", + "i18next": "^24.2.0", + "ionicons": "^7.0.0", + "lodash": "^4.17.21", + "pocketbase": "^0.26.0", + "qr-code-styling": "^1.9.2", + "react": "^18.2.0", + "react-dom": "^18.2.0", + "react-hook-form": "7.50.1", + "react-i18next": "^15.2.0", + "react-markdown": "^9.0.3", + "react-router": "^5.3.4", + "react-router-dom": "^5.3.4", + "react-use": "^17.6.0", + "react-use-audio-player": "^2.3.0-alpha.1", + "remark-gfm": "^4.0.0", + "zod": "3.22.4" + }, + "devDependencies": { + "@capacitor/assets": "^3.0.5", + "@capacitor/cli": "6.2.0", + "@ianvs/prettier-plugin-sort-imports": "^4.4.1", + "@testing-library/dom": ">=7.21.4", + "@testing-library/jest-dom": "^5.16.5", + "@testing-library/react": "^16.2.0", + "@testing-library/user-event": "^14.4.3", + "@types/react": "^18.0.27", + "@types/react-dom": "^18.0.10", + "@vitejs/plugin-legacy": "^5.0.0", + "@vitejs/plugin-react": "^4.0.1", + "cypress": "^13.5.0", + "eslint": "^9.20.1", + "eslint-plugin-react": "^7.32.2", + "eslint-plugin-react-hooks": "^5.1.0", + "eslint-plugin-react-refresh": "^0.4.19", + "globals": "^15.15.0", + "jsdom": "^22.1.0", + "prettier": "^3.4.2", + "prettier-plugin-organize-imports": "^4.1.0", + "prettier-plugin-unused-imports-configurable": "^1.14.2", + "sass": "^1.88.0", + "terser": "^5.4.0", + "typescript": "^5.1.6", + "typescript-eslint": "^8.24.0", + "vite": "~5.2.0", + "vitest": "^0.34.6" + }, + "description": "An Ionic project" +} \ No newline at end of file diff --git a/002_source/scripts/dc_up.sh b/002_source/scripts/dc_up.sh index 40637d0..6da7f1d 100755 --- a/002_source/scripts/dc_up.sh +++ b/002_source/scripts/dc_up.sh @@ -2,19 +2,15 @@ set -ex -# docker compose build +# DOCKER_COMPOSE_FILES="-f docker-compose.db.yml" +DOCKER_COMPOSE_FILES="-f ./docker-compose.db.yml -f ./docker-compose.yml" -# cd cms -# # nvm use 18 -# npm run build -# cd - +cd docker + docker compose $DOCKER_COMPOSE_FILES build + docker compose $DOCKER_COMPOSE_FILES up -d -# cd ionic_mobile -# npm run build -# cd - + docker compose $DOCKER_COMPOSE_FILES exec -it cms bash +cd .. -docker compose up -d - -docker compose logs -f echo "done"