From 8116c32346f394b4caab32e6858a9702cad3fb3e Mon Sep 17 00:00:00 2001 From: Paulo Truta Date: Sat, 4 Jul 2026 19:19:13 +0200 Subject: [PATCH 1/6] Add 7 new apps (campfire, collabora, fizzy, hello, memos, rocketchat, writebook) and migrate to docker compose - New edge apps: campfire, collabora, fizzy, hello, memos, rocketchat, writebook - Updated immich to v2.0.1 - Migrated all scripts from docker-compose to docker compose - Updated syncthing VS Code tasks to use docker compose --- .scripts/build.sh | 4 +- .scripts/run.sh | 6 +- .scripts/status.sh | 2 +- .scripts/stop.sh | 6 +- README.md | 2 +- campfire/.dockerignore | 1 + campfire/Dockerfile | 4 ++ campfire/edgeapp.template.env | 3 + campfire/edgebox-compose.yml | 21 +++++++ campfire/edgebox-hosts.txt | 1 + campfire/edgebox.env | 11 ++++ collabora/.dockerignore | 1 + collabora/Dockerfile | 7 +++ collabora/README.md | 31 ++++++++++ collabora/edgebox-compose.yml | 24 ++++++++ collabora/edgebox-hosts.txt | 1 + collabora/edgebox-icon.png | Bin 0 -> 15423 bytes collabora/edgebox-postinstall.sh | 3 + collabora/edgebox-postinstall.txt | 1 + collabora/edgebox.env | 14 +++++ fizzy/.dockerignore | 1 + fizzy/Dockerfile | 4 ++ fizzy/edgeapp.template.env | 9 +++ fizzy/edgebox-compose.yml | 27 ++++++++ fizzy/edgebox-hosts.txt | 1 + fizzy/edgebox.env | 11 ++++ hello/.dockerignore | 1 + hello/Dockerfile | 10 +++ hello/README.md | 31 ++++++++++ hello/edgeapp.template.env | 2 + hello/edgebox-compose.yml | 26 ++++++++ hello/edgebox-hosts.txt | 1 + hello/edgebox-icon.png | Bin 0 -> 15423 bytes hello/edgebox-postinstall.sh | 5 ++ hello/edgebox-postinstall.txt | 1 + hello/edgebox.env | 14 +++++ hello/src/build/hello.conf | 16 +++++ hello/src/install/index.html | 96 +++++++++++++++++++++++++++++ immich/Dockerfile | 2 +- memos/README.md | 30 +++++++++ memos/edgebox-compose.yml | 21 +++++++ memos/edgebox-hosts.txt | 1 + memos/edgebox-postinstall.txt | 4 ++ memos/edgebox.env | 12 ++++ rocketchat/.dockerignore | 1 + rocketchat/Dockerfile | 1 + rocketchat/edgebox-compose.yml | 42 +++++++++++++ rocketchat/edgebox-postinstall.txt | 2 + rocketchat/edgebox.env | 12 ++++ syncthing/.vscode/tasks.json | 6 +- writebook/.dockerignore | 1 + writebook/Dockerfile | 4 ++ writebook/edgebox-compose.yml | 18 ++++++ writebook/edgebox-hosts.txt | 1 + writebook/edgebox.env | 11 ++++ 55 files changed, 554 insertions(+), 14 deletions(-) create mode 100644 campfire/.dockerignore create mode 100644 campfire/Dockerfile create mode 100644 campfire/edgeapp.template.env create mode 100644 campfire/edgebox-compose.yml create mode 100644 campfire/edgebox-hosts.txt create mode 100644 campfire/edgebox.env create mode 100644 collabora/.dockerignore create mode 100644 collabora/Dockerfile create mode 100644 collabora/README.md create mode 100644 collabora/edgebox-compose.yml create mode 100644 collabora/edgebox-hosts.txt create mode 100644 collabora/edgebox-icon.png create mode 100755 collabora/edgebox-postinstall.sh create mode 100644 collabora/edgebox-postinstall.txt create mode 100644 collabora/edgebox.env create mode 100644 fizzy/.dockerignore create mode 100644 fizzy/Dockerfile create mode 100644 fizzy/edgeapp.template.env create mode 100644 fizzy/edgebox-compose.yml create mode 100644 fizzy/edgebox-hosts.txt create mode 100644 fizzy/edgebox.env create mode 100644 hello/.dockerignore create mode 100644 hello/Dockerfile create mode 100644 hello/README.md create mode 100644 hello/edgeapp.template.env create mode 100644 hello/edgebox-compose.yml create mode 100644 hello/edgebox-hosts.txt create mode 100644 hello/edgebox-icon.png create mode 100755 hello/edgebox-postinstall.sh create mode 100644 hello/edgebox-postinstall.txt create mode 100644 hello/edgebox.env create mode 100644 hello/src/build/hello.conf create mode 100644 hello/src/install/index.html create mode 100644 memos/README.md create mode 100644 memos/edgebox-compose.yml create mode 100644 memos/edgebox-hosts.txt create mode 100644 memos/edgebox-postinstall.txt create mode 100644 memos/edgebox.env create mode 100644 rocketchat/.dockerignore create mode 100644 rocketchat/Dockerfile create mode 100644 rocketchat/edgebox-compose.yml create mode 100644 rocketchat/edgebox-postinstall.txt create mode 100644 rocketchat/edgebox.env create mode 100644 writebook/.dockerignore create mode 100644 writebook/Dockerfile create mode 100644 writebook/edgebox-compose.yml create mode 100644 writebook/edgebox-hosts.txt create mode 100644 writebook/edgebox.env diff --git a/.scripts/build.sh b/.scripts/build.sh index 2d8ebd5..73c06a7 100755 --- a/.scripts/build.sh +++ b/.scripts/build.sh @@ -20,7 +20,7 @@ fi echo "πŸ—οΈ Preparing to build edgeapps: $ACTIVE_APPS" -# For each active app, add a `-f /edgebox-compose.yml` argument to the `docker-compose` command +# For each active app, add a `-f /edgebox-compose.yml` argument to the `docker compose` command for app in $ACTIVE_APPS; do DOCKER_COMPOSE_ARGS="$DOCKER_COMPOSE_ARGS -f $app/edgebox-compose.yml" done @@ -29,6 +29,6 @@ DOCKER_COMPOSE_ARGS="$DOCKER_COMPOSE_ARGS -f compose.yml" echo "🐳 Building operations:" echo "" -docker-compose $DOCKER_COMPOSE_ARGS build +docker compose $DOCKER_COMPOSE_ARGS build echo "\n🟒 Operations completed." diff --git a/.scripts/run.sh b/.scripts/run.sh index 12ba291..02df98f 100755 --- a/.scripts/run.sh +++ b/.scripts/run.sh @@ -16,7 +16,7 @@ if [ -n "$1" ]; then ACTIVE_APPS=$1 fi -# For each active app, add a `-f /edgebox-compose.yml` argument to the `docker-compose` command +# For each active app, add a `-f /edgebox-compose.yml` argument to the `docker compose` command DOCKER_COMPOSE_ARGS="$DOCKER_COMPOSE_ARGS -f compose.yml" PUBLISH_DOMAINS="false" hosts_file_content="" @@ -80,8 +80,8 @@ if [ "$PUBLISH_DOMAINS" = "false" ]; then fi echo "🐳 Setting up Containers:\n" -# I want to put a - in front of the first line of output from docker-compose -docker-compose $DOCKER_COMPOSE_ARGS up -d --remove-orphans +# I want to put a - in front of the first line of output from docker compose +docker compose $DOCKER_COMPOSE_ARGS up -d --remove-orphans echo "" # Unpack the domains list as \n - separated string diff --git a/.scripts/status.sh b/.scripts/status.sh index cc85292..206649e 100755 --- a/.scripts/status.sh +++ b/.scripts/status.sh @@ -1,3 +1,3 @@ echo "πŸ—ΊοΈ Status of local edgeapps:" echo "" -docker-compose ps \ No newline at end of file +docker compose ps \ No newline at end of file diff --git a/.scripts/stop.sh b/.scripts/stop.sh index d01dbf8..0925e80 100755 --- a/.scripts/stop.sh +++ b/.scripts/stop.sh @@ -22,7 +22,7 @@ if [ -z "$SERVICES_TO_STOP" ]; then else echo "βœ‹ Stopping local edgeapp services: $SERVICES_TO_STOP" fi -# For each active app, add a `-f /edgebox-compose.yml` argument to the `docker-compose` command +# For each active app, add a `-f /edgebox-compose.yml` argument to the `docker compose` command DOCKER_COMPOSE_ARGS="$DOCKER_COMPOSE_ARGS -f compose.yml" for app in $ACTIVE_APPS; do @@ -31,7 +31,7 @@ done echo "" -# Docker-compose should stop $active_app-* containers for each active app -docker-compose $DOCKER_COMPOSE_ARGS down $SERVICES_TO_STOP +# Docker compose should stop $active_app-* containers for each active app +docker compose $DOCKER_COMPOSE_ARGS down $SERVICES_TO_STOP echo "\n🟒 Operations completed." \ No newline at end of file diff --git a/README.md b/README.md index 885d645..64a2b5f 100644 --- a/README.md +++ b/README.md @@ -97,7 +97,7 @@ $ ./ws -b > To use WS to build these applications manually without a properly working Edgebox system (that includes the `api` and `edgeboxctl`), you need to manually set the desired environment and lock files for each app prior to starting the build process, otherwise it will not work as expected. Check below for more details on manual configuration of apps πŸ‘‡ This will go through each folder in the `/home/system/components/apps/` folder, and configure the containers for each valid app entry. -After running this command, You should have a `docker-compose.yml` file in the the root of the ws repository (it is git igored) with the final generated configuration which will then be used to spawn the containers via the `docker-compose up -d` command. +After running this command, You should have a `docker-compose.yml` file in the the root of the ws repository (it is git igored) with the final generated configuration which will then be used to spawn the containers via the `docker compose up -d` command. The containers will also automatically start, and be available on the configured `VIRTUAL_HOST` of each app, given you've also setup all the necessary dependencies for `ws`. Check the [ws repository](https://github.com/edgebox-iot/ws) for more information on how `ws` works. diff --git a/campfire/.dockerignore b/campfire/.dockerignore new file mode 100644 index 0000000..bdbeb44 --- /dev/null +++ b/campfire/.dockerignore @@ -0,0 +1 @@ +appdata/* diff --git a/campfire/Dockerfile b/campfire/Dockerfile new file mode 100644 index 0000000..50abe21 --- /dev/null +++ b/campfire/Dockerfile @@ -0,0 +1,4 @@ +FROM ghcr.io/basecamp/once-campfire:latest +LABEL org.opencontainers.image.description="Campfire is a simple, self-hosted team chat application." + +EXPOSE 80 443 diff --git a/campfire/edgeapp.template.env b/campfire/edgeapp.template.env new file mode 100644 index 0000000..bcb91da --- /dev/null +++ b/campfire/edgeapp.template.env @@ -0,0 +1,3 @@ +CAMPFIRE_SECRET_KEY_BASE=string|true|Secret key used for cryptographic signing (generate with: openssl rand -hex 64) +CAMPFIRE_VAPID_PUBLIC_KEY=string|false|VAPID public key for Web Push notifications +CAMPFIRE_VAPID_PRIVATE_KEY=string|false|VAPID private key for Web Push notifications diff --git a/campfire/edgebox-compose.yml b/campfire/edgebox-compose.yml new file mode 100644 index 0000000..57ad348 --- /dev/null +++ b/campfire/edgebox-compose.yml @@ -0,0 +1,21 @@ +version: "3" +services: + ############## + # Campfire EdgeApp + ############## + campfire-ws: + image: ghcr.io/edgebox-iot/apps/campfire:1.0.0 + build: + context: "./" + container_name: '${COMPOSE_PROJECT_NAME-edgebox}-campfire-ws' + environment: + VIRTUAL_HOST: ${LOCAL_URL}${INTERNET_URL} + VIRTUAL_PORT: 80 + DISABLE_SSL: "true" + SECRET_KEY_BASE: '${CAMPFIRE_SECRET_KEY_BASE}' + VAPID_PUBLIC_KEY: '${CAMPFIRE_VAPID_PUBLIC_KEY}' + VAPID_PRIVATE_KEY: '${CAMPFIRE_VAPID_PRIVATE_KEY}' + volumes: + - ./appdata/storage:/rails/storage:rw + - /etc/localtime:/etc/localtime:ro + restart: unless-stopped diff --git a/campfire/edgebox-hosts.txt b/campfire/edgebox-hosts.txt new file mode 100644 index 0000000..8ee347c --- /dev/null +++ b/campfire/edgebox-hosts.txt @@ -0,0 +1 @@ +campfire diff --git a/campfire/edgebox.env b/campfire/edgebox.env new file mode 100644 index 0000000..4c495e1 --- /dev/null +++ b/campfire/edgebox.env @@ -0,0 +1,11 @@ +############################################ +# Edgebox api compose environment variables +############################################ + +EDGEAPP_NAME=Campfire +EDGEAPP_DESCRIPTION=Team Chat +EDGEAPP_EXPERIMENTAL=true +EDGEAPP_VERSION=1.0.0 + +# To determine the name of your containers +COMPOSE_PROJECT_NAME=edgebox diff --git a/collabora/.dockerignore b/collabora/.dockerignore new file mode 100644 index 0000000..c1250f7 --- /dev/null +++ b/collabora/.dockerignore @@ -0,0 +1 @@ +appdata/* \ No newline at end of file diff --git a/collabora/Dockerfile b/collabora/Dockerfile new file mode 100644 index 0000000..425a213 --- /dev/null +++ b/collabora/Dockerfile @@ -0,0 +1,7 @@ + +# Base image to base the app container on +FROM collabora/code +LABEL org.opencontainers.image.description Collabora Office is a powerful office suite that supports all major document, spreadsheet and presentation file formats. + +# Port to expose from the container into the host +EXPOSE 9980 \ No newline at end of file diff --git a/collabora/README.md b/collabora/README.md new file mode 100644 index 0000000..f23b229 --- /dev/null +++ b/collabora/README.md @@ -0,0 +1,31 @@ +# Collabora Office Office Suite + +This is a simple edgeapp template that demonstrates how to create an edgeapp that runs "Collabora Office" when accessed. +It makes use of environment files, configurations and directories to demonstrate the customization capabilities for building and expanding self-hosted apps. + +## Directory Structure + +### Editable Files + +These files make the structure of an edgeapp and can be edited to customize the edgeapp installation, runtime, and configuration. + +- /src -> Source directory +- /src/build/ -> Files to be added to the container images build +- /src/install/ -> Files to be used with edgebox-postinstall.sh (ran after install) +- edgebox.env -> Environment file for the edgeapp, used to set container environment variables and meta data +- edgeapp.template.env -> Template environment file for the edgeapp, used to set Dashboard GUI configuration options +- edgebox-postinstall.sh -> Script ran after the edgeapp is fresh installed +- edgebox-hosts.txt -> Subdomain host names to be published by the edgeapp +- edgebox-compose.yml -> Defines the edgeapp services, containers, build, configuration, volumes, etc. +- Dockerfile - The Docker image used to build the edgeapp container image +- /README.md -> This file + +### Dynamically Managed Files + +These files do not exist initially, but can be created dynamically and are managed by the edgeapp and should not be edited manually. + +- /appdata -> Holds running app data, directory used to hold container volumes +- .run -> Placeholder file to indicate this app should run upon edgebox containers status check +- edgeapp.env -> Environment file for the edgeapp, used to set container environment variables +- myedgeapp.env -> Environment file for the externally accessible domain, used to set container internet connectivity and domain configuration +- edgebox-postinstall.done -> Placeholder file to indicate the edgeapp post-install has ben ran previously \ No newline at end of file diff --git a/collabora/edgebox-compose.yml b/collabora/edgebox-compose.yml new file mode 100644 index 0000000..3931ec5 --- /dev/null +++ b/collabora/edgebox-compose.yml @@ -0,0 +1,24 @@ +services: + ############## + # Collabora Office EdgeApp + ############## + collabora-ws: + image: ghcr.io/edgebox-iot/apps/${COMPOSE_APP_SLUG-collabora}:1.0.0 + build: + context: "./" + container_name: '${COMPOSE_PROJECT_NAME-edgebox}-${COMPOSE_APP_SLUG-collabora}-ws' + restart: unless-stopped + environment: + # WS Proxy control varialbles - Do not change + VIRTUAL_HOST: ${LOCAL_URL-collabora.local}${INTERNET_URL-} + VIRTUAL_PORT: 9980 + # Overridable variables (optional) + # VIRTUAL_PORT: 80 + # VIRTUAL_PROTO: https + # VIRTUAL_PATH: / + # VIRTUAL_DEST: / + + volumes: + # Recommended defaults + - /etc/localtime:/etc/localtime:ro + diff --git a/collabora/edgebox-hosts.txt b/collabora/edgebox-hosts.txt new file mode 100644 index 0000000..f398a3a --- /dev/null +++ b/collabora/edgebox-hosts.txt @@ -0,0 +1 @@ +collabora diff --git a/collabora/edgebox-icon.png b/collabora/edgebox-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..e07ed524f2949c6a08e314ffb34d406e601c673d GIT binary patch literal 15423 zcmeHuc|6o@+cy;|MP1#|Vyl!c8p~M5HiVFDWh^nF!C1!F&Dg1ss}!P0mLa4WYs?H8 zOL3JXAvDZb>Y~LmBV;UNdC#fqzMuPk-}`w#&;9v4&-=&wx%mv{{GI1<9>@1s&f_@F zapSy|>F%9}cJlG@?KV4m#)glNpUHb|7X%~mk;-a(eA_sYwiiQfP+>BG!2zB=ShP%N zL?BuQ9q!}F#~03EIUw=V^1If({t~u*`w`jeZ6Ot^@j7d?=T;9Uiv1#)-Hh9XH9fxO zTWE8$gvpKP`+vzvewZ12PRikpO479(E93H9Gd=c~=190#sC5`!od1~n#CT$fd$I8P zrND#4%O_yh%JY<_){`YtRR-e=5POx9TcLA*xod48ks=nb>1Ud#VRF#KSDASIDH+Bl#NJ;~no_VgZ;i+hJ7*M48GEYNaz zy)T0Hawk6V-eYC=BX#*7w#cX{Mab$r%i_*C)kF8(mGq2{e?d1ovtK*J_tV~hf`hlN z&7Bl}7rXQHZw1K9yHxgkyK(X49r~WT+k@0TAY@*hS1a7I<(D0j_SawK@}(q}9QM7d z5s(&`)?3S$5NLR0NdDK$`+En|^bhUUvQ0RC^XxDCGfo{3x@l%}?t%S+!s|nJYDALH zdpB(F@9D(sTI}(pH{L1fi1%2nFE$0_)4|WDwp_QtJig?9?*Yla>}lrp?>oupr zvk;S}hu2F;;(N)A8>ik}x%k_*-*HE-B!~#B2K>c6P`Dv6yPMzc2*3U7Ev0>iySBeH zFgW4-B+7^_0uvvv3ltWg7{11qOA8Th2utH0u9JJbNMWjV`yV5}4ip$reJ#4H?Ob(@ z1|`dMX+WUmTCBkO{Q|wuJe28>4*7{x|z4ue5qyCZCl2Wm*cWK+E z;THsAZU>PkU-y#EQKY;q;E%4`=Qa$;RAfy#$=k$8{VG||0be^Q`6j%Baw$_f6rOmTC{&2oz@%3zF&6yi$}icJR9Mslp=1R`#Ih`g1GJ2H^t`1KzwdEvWIIV zEiMPGReTC48(GS1slbmRH>ivlYV;YYt6t`@vtDk?Gg5X@JvXX?`SjgpOJFcndD7cO z$Q9L?b}Aaj8M+R|m)W<^-e5WOI0zKdzu!8wE~>L~QkwCqc?5*RL?0ug^JYdye~o}3 z?&ZeZfuC(VE%Cw?VQ#E&6u)P0$N9WdzunY4w?FxEA$h+OPWkC~Bky-<#r2vyD+Pq~ z#mYn!-!^F1@4WUw=(n7ljEBj0ms^T^j=qc^k8Pwa)kg_!UxXsMQi4tooI18Y^~TWf z%>&WKd-%Vj4vhSwx_Bn?$ky&ToT#+x>_gp7?l7Uqv?FKNw;R9LTEI^If%{|9()>%K zwS?z!vm<(PQmS9C{hoR$%Q<%ZQs~7G*{EX~4~~iKOMan|$-IAW*S+wYnhzfz`Xua_ zwf`+LcOdwl`fP{mf!DsBK9zkEh7!qVWp?a^k_Jy76njX<6yHDF8~dhB|LbzbM0y8> z-y|i%w!koW?L*u*8nRYd>*I+;x6>b9Q1wl&d{FFpJj7Xg;s>+h+f)rKp{(80R$efR ztSB)~xiaea;g5!rj;Lp!M3lc3n_r(e8~ebpkgt)@3;T3s16klZz^Ztf+9xDqh?xh;sKuhswC2y?p%PM`vj*M`e6G;71+QEtM?;jnLjcXCs5rh)642_efuN zEsvx6dOLN)wE+P?bSO$D+z;y?q8$!D`h%`E_?tJZbX4ZYlu%#z(TkSnWsCxX(K2d^ zYKqDb<8U85^r+rW8QowHPi>nsCV!Fu@8CzhLqh|#m6XE5!W6?)6$663lvK2|w3L*g zN>C^S%z%VM_=lpxA^su9cqD$(ID-yx5B3QR^$GBo;n7671>i#AM~{N%GJoaIFVNER zZ{+<${zL)bp%jh^R8mn?R`T;x`ui0jp~iSX533raI!1ephE(1!R}~dJla3> z*gul6LH~zL{{<3Y`acjbHM2bbHx_u9c=`AR{y+tw{}0@Hxc_ZlATAjDV~&Tr5*my4 z16+jw0agBCeyES$qzjKUJ|g~-{}8SIsUiFHa=e7p&|eGCBZ-D{NxJIx3ttg z6X1^Hv1@h)eiV!-diZ!~Yrzam)KpZUYU&1BDk{dR2Aamon(9VI#+t?kMkZ%eer)`6 zxtV`RD9Ya*{nzC_V7aQMvWK#}n7SwjVe*3i_{Q2s%Rr!{SZ^Jeg) zP{qF+Igdq!dIkjh0nhUB_Xr3J`H#uAK7MFKD2fNNiUw3&U0DMLg=%WSpvvn1G07es z90DwyM^!~x5vum%iHEzk380Armg?h&@gK8Hq2d0I)I$P1L&H$PXag^R0+19q&kspu zPFnc*M}vWm8{@=>M#d3n^7)!emU8lDhk4|QcA5BQ;Hv#FjY@2sJaFe0!5+G z5H%H)8&7d4;C{+lP?)Bsn!Eddt9VeTt+J}NvW7PBjQx>E?)(pa{TaOe2X_FZ|Gmk-gzvxM z`Zrwv5(59y9GfQKkPeKBFPsr~)nkvZ0C&OoU#=sVI z=0|+O_B&*r_^@>DmY^=`aChzPByz~(^71JXdt@ z!|zUflueb3fOJfoHOLZ9XpK}_%Vl)XYe&ag6s}C-mma+(T6=sZAJcQ>@tjH#12xQF`eq&MyPY=S${~q>5t_Of5uZCWax^nv1K6caY z5RbSqc}A9vWV-@uN`bCm*6e2xB|jiTfvzscXl?~WU5%NiJQ_mR!fC4|<6kl){P-K8 z;aqdps(c5mq5)2C4I8{Xu)}E&wfb;89=fwNQS6Z^fQ4rJWiA;KzO=g)U+C;$!}V#g zn8%g*cb8E4jvp#IJ=m%!%J@iFdcpPOsQzk}b<_K%GR0o^>g^n|(N8=3DecrQH*0xrn+%_WsRxGFVid z5Gx$hZ7AHgkvqPbKlwht9om%2?0WoLUn|EpeaQ)}fCcDQ?q(Dw$|gJ0AtHv0E4IgM z$PU5e>|6n+z+U`lfBTlzo&P0b8 znQJ;Qql~Sh+~i<|8M8LXm`ciJDf?D7{aSURWI%K(#eAd`o{Nc${Ix^BL_3u$NQARk z_9iGMjnTSTYb!n<4 zE9{RMY)6zDHsw!g#-5;*H{Pcpqh3DOGQ%AN`$P*f0+2l$!&}0S2J-B52V-vUt)=4Y z%`IsY(&=mF>88w1(Kp-MKXRAap^p+-iDG2eU9I?E%f1ZYe`wzdV8330f#01h&UdhJ zpO-S1y!<4MvgF|f9~1gwgE3*55{*v1C1*iIja+&Fl6i+}#*ZBkrA{r*$+q~>JI$ng z_;p1XuG2@^Hc{R!mR)7*Cn<}j)nKagK5|>hn3-^YJEC1_L$O1@H1kf ziaZ(28QN_DX5;H~hm%-B#0q`7f6YiRx9qfqfMMutLe9DR~J zEx`K5%1Xb4p~Hxu#sioOZBdjmDL%edF{*oymC2F%p2{SoKveYkF1-PH#*5+TFLTO) zNz5yi#Ud5U8n_mY1?gAJuYDyxJU68_IdWaao$l+slV`;F9pQ$Sg>sLHaevjX3l6~7 zPeiLzJl4#lsleW^MNojBmfDeH_9#-XOegKoy)$|GYV1&W!27oaP4~{b;;2DoZrr_* z1i6)nZbw#)7SJUS)3vJ0e0t<=VM1x&C$oCuCE~?ZJaz= z*AkH@d_YwvV{i>XC0x}J#zMPTjVP6bj}GqZk|GRtg-2F6w?$CIYa(4Lra*khGH>D! zctqI<*?mVuxx67CoSKteqR>+h7y2LfZs(7IcRaOK?e{Wk?)=V|{OJ~3n&!$AIKxrZ zd#U(ymtKz{$JNICm8e|AV}Pj3v}_%0&t=^z&Lv=8gNmsNjz92080(OGV%eNx5mNZk z0rXlc1BWsu98`4geeoe z#O~G0aMIShODQ#k>>`aLchFIGBT1}J{rqC<+nYjy0(hc?#C)jS)yg@K$zCpz-Ms6h zr#Dy$f7%p7o)+*EB*Y!Z1#oiu1D6rKS9bvsf{b;_Ps&w1Xp*CZuDQ`%IzxxTyHDDR zv%hy9NMv;r4Zf8k2lK5ZJL~V>cCO?Z)43jzrC!fH)KqfXdJ-O&_;bQt1Cv~o8x_&X6spuK`c1~GFu5Lw( zhI8S#Pw^$EA_q5e8NN|+1Yw|V;sDm9mh4?Wf>Qj&So6?<<+8o0icL;@>Z^I6_DcDcyJCw!it9jl{% zhEbC9_%{&dLhO1u9Ex(2T!*lkiywUsXt%BC3TH>HoI}?{dFq2wu*0I!am51PBCk^Sn!g&4pk%4$*>TZj-by7Y*qIu9iXvdk zKc18Ix_Y`H9)cY^JI|DD@wH=B8$}e6h8zua*6P>!#iUQHxb2~4%+Xo2ovmV@RXmc8 z)WJG>E2mQ)u{)Z3OAG$b^!O^Q$a`sru;2Vz3J7(#t7)+EdwXvvrhU29az5$3e4_?^3t_ z@9*=01R~6m{(MG2Ml@q%Sh}9#f3c%YiA=NPE#bc7Caw^pRDTVj&CpY%&Hj8x^{TCUWnN)|3T zr>8ohqdbBLsP%kT2mORZ9=^jS&UmK@3@9bcW^6bp`zxl(1g*~ z4_b=3yg-;tVwk=6@73zR#vuYjB-l8&n=;h1_j=~^M(A!VoD*hRBW_<9dz6`x1wG`U zz=y01$mG>-W{jX;b5lcjpDisGZ#~`xA9_-vCgilwrspa%kVY8 zl?8+A^h)uT{KtyuD`^}))NzV!w4%DLu?6_BZPIobp1zf^`w$s+9$r(tY778%G4(RVKJ4@A{y{nzmK?5-6oCL!CPiz z#}uM}v~8bjBOV{8BRboyORN&6JQMou1>P^~`Oyt2vw9mfc6AO2O(Rp`a)r8%Y5h@C?p*Z*iDu0OM;UU9U* zSy{g)UZ3^6Y~??`n6W#YyD`fN!A$qj%@oN!&QhCk=hp!@<3_}sz4crt&2_zjUARW) ze+1tc>^>34zt6Y~nJ-NI^lfxQthw#-6#LtP-|tK- z|G5=p1WgayVu|yJW5_e%VHb(<)rq)kc>8Ck$fU&^{lRl(*;ca=nge%qMXDn<1mFkP zM>v$yC`9K6(Jr%3P1ym=F)7V^4bm;JzGLdZ*__u(#;jRGW0hVYL0CINxwYm|wv#JZ zG`EY%DiCGHKs@jR<7J%Cr_Nc-t)(##Z@b#<$a?ertZ$q1Ze^FaM0h~4cB-`X2=mf` zwN{rw{+8S@MmghS{3HMGm%TMadrh{r#6)gC5H1}-_++&;668kPG>}GqI)2kCY3mX&REA_4#F6S&^ ztJThONMo)u=FR20WT`7M*pHP$tmXXCe0z$N@4(FF*}Odi4o}DV=X8F>CS9c=NZ*4@ zBlORGa}#E^$gYG456wDJXwc;iyu4EaWH`1bWwV=Yi7U{{Yf$34P1!#7O4o%JJsf#W zgs(-u5@|6#Xj`lQ=uly^#Rvi3Yq(S@_RPGwbUSje{w9@95Q+|%l1XwvEP1+GvWPL7 z6iH8O5WZIBZ>)$8kKVIw>k}tN)drM2c&KN++vVb+m^gK#BiN53w{%kFh#3Sa3!G$2 z=0ppH#5p~+;n&jSMPnC@_#I*1z7|qqSK*bO>u{o_e;#9 zwjTfy_7`&7diuIYjw$llhC7HTRL(G=Aug&cX|$GNZ&D`iU=uIUj2W1Tqdr?d(pLd@ zJ|zi!)o8IVl0!ZZKL2&*0}Px@4#@3Fo}86ehWOYr#>XegbYxm=1^_S!lip1;)AOxr z(VLEv_ufkloF14dPiutXUTyTnr^V>u*8a#JUXwle`ItwNwH&cG+zYYfWlc?6FG!qu zDpsSQs&~D>c(Bz^kQF{z56(*c5kpR@*~VRl5mQ=Mzx=M6VOQ9zx2rDB=6QUJL72&9 zeMVmy3r9Eo35>>9@dY^Og>Y@mU#u@imj#OwJ?qdtBChx&6bDY3eMfBCq!c4$I%byv zusCM9H`lemZ!ikV(u~yr*=UZe68R>6cDG(}Pu^@AtHrdl;sHDlb7g9_J2nS%{lS?e zl~yqgMQ_vYB|31rxU7jTJUn}#vvd5)e)7WM`ti?{60veQ8}pa5b^ z$GHlZ_EM`a?Dv~ej!%>|P1nt07;!O=`l8qe6Itcw@H!yx=Wn&z#qiIYwWb>`uJ_jj z#a(;>GgCyr>`lHAMFtU}uOM&N#wM$aJiS~8@gSJ*K5(&Pil}&a@A(Cea3hnykXf;> z!5m_tbV6(38mGku8Kq~w`_RROXJ)+c?!MJCfJ9q<-k&~~%$mGoP_2j!9JKOZm>xN+ zGnr84xYV1)#A)EpzmUtuOU9*Z@11(UQ{IS5b4!ELKuomSz_vxVsb*IGg*|?YHD!Y3 zhlN;yvsnF$mx+liF7Y6Fy+6N-Ih`dGP_<(x2)t{ZS{WV1zMZc-D_SR)F6CRO_YTkO zxyp>m>9Dkaa5!jmzC5B)NHx!fT;s_vKH@gz9^-yspA4>&vN4;R5xLAu$8s)(iTolM^)pDXMF4$zU}QaS5>mO$FB$z z`TpJ9q8RxLf*HAL@)*J5azmolJ@QidfzsszO+PZFJHsFYXG0q7Vz>bh89Bo;wzXDg zIo(RbGH1k1ti77po?F72>S+1{e0WM?*VX=mJ#Cnv(X5L0ymn!b<@J;38D<+5a5%kE zv5&p5e?J5e-V|S2;_n1TaG8ZwT zhbkX6B!l2SdtwEOi~7L0g|Y7eda6|zshnP|Zqj%hdjfW_rtX(lb-%oWalatf5527` zfTvHjHfta2`Alh$gc(6fGn2aOqON{tjfA(Bd9uQ&^cF9% zT7Y$o=%+7ADHzFGnKsO)kYk=Ye?b(@>79c}#@%NyLe%@l)g9KIw?VceKbJ`4vfJ{K zT;CjidY8EwlOh|ThLiZzYb!V3Tn9N~5Jq095d+Gv+raNQO8?3pG7-Y9=`dW(^d3>w+iQer3 zK(i|KtIrsHTR2Z;yGyBSr{2tMP1e&?IHDU?PbtFrdX5OuO^Y}C5Fvuz_MW4LjsN$_jN2ZAVcmfyN z5Iu&)I$KZn$3NlwoW&yhXok zwo7r>7OX?|x99c0y2w+-#g)?{#c%au8xvW*whr@w z1=-OF+kgPx~+7IfNmvYQS z6s_4jZ>Ku>;X@$6!o*o&rUR(RE(@12$`N@S_jx^YP=XPN>$PJZk>A}mISN~NwLt9C zda4RWrDL>mnp2{kChbR$G2^7P`l`0#hl3j5ZQ(?ws}emQE7_D9#@xpwH1v!<%9#rS z$xn_Hd7M4`qQ8mJ2EnFMsz>x!Bbc|I<=GjBRiroFozmQ>0%g({NN7v<_vII(=iG)s zV;ft6N@C~t&(9r$cuSwd$)?8RY7ZB!ertSyNzl%ig2pOzw3M2BUcc+4EhW|GJqeb) z$=eF?aD5x<8DMgqjw5-)6$?**8bZ)d?4ER!r@@Ic-+J=ZiNgmP#<$9?rbaa-PI(bgvjKI} zNk9*;Bc;vlczbktd=L44I^D}Ff%V$?G1e<@hJ3eSGg1#{O%-LdSf0qJdry3ucnUz| z8*@dm*eWR!G|T#k$3M|jil|7r@3j7=p(>C}x{$_~L(`?-`+WU{SL}=Q;SM>)sJ_d` zOM)5@E6n5yqL@N|NDbJ|*QTH++|u95IsIO$E1X8~mH4gzxvW&;`8GBO^lYrku-(O( zce9|{j}3XQ&JwF{N(8$hfa&ihF?5KYQ3{St+eQc>(bU8lCd9)U_)-;_zLex$zKaz2 zqp@f=$k{3+hCoK=Tg*pe8oHYg?w@2ur_2$p6o7*f(xZo3Ib#U9GkKug^P*KEUrnL? z`FSk?vxZ8RA-ICk(|bo6DynFO_iPE5sDXjp=}KO4Wf&#}Bmia-0wUUzi1 zx5X0+zf~2p=~ANwsm!F+U~qY%hq;H1`~HW6nc}0&ELBp&?e?vp%c$+0WZo*2q5EKB zK#Xdtaq^Y835x4CwJ}3r;-1*m(gh84%xaE$0KIU`=@iQg8M54lN@mW3uOX*8_OZH! zf~Py%$1zlM)}5wY(B7XbAg#;dUd}C+OD*SnCu{*b4A&PeU&eGS7lM9k>Z3y?oUU*} zhh@Ty=1C=R1!J4uLYeLqYo^yUM98l%ka(A3&Si|bkL$u_Y%`pce){Bxt6SqgtWiWJ zf_g-%HmYx0gE&tIS7nK0^dCW9WS;5j$j5<%C*_eyRk$K0y0O|S&B}jI&G_pTL(Gk3 zTK}G_ONfz|uEiWWK3<5gg);~Il)3SxSd{67aQ`l*3a?$JlZF;OdpG(?L!hKAb0$1` zP*{0;^t~RBpJR&y(^ti)-H+ZHHtW~Lapo3*rG4th=kFtGk)?}4V+vWiQ>+H)I4Y<2 z>M(_nx)J^|34x4}^6gH|DfG47!so|} z@;x6TUeLj%seUo1tNEUGom*KZg^%zNIS|bNN|m{5eh=KF?gz^NDg~94`*k&_gg(jk`N7*heltaM**rBcX2#tr zvG0w&H?aVEF*I=dI7Y^36fK3F=S5?610A1%&-oVyM+uX?w=!_@Lme{Ms$%Vw&2%8f z0zMBEV7wN zDjf9NXVc5W$^TLbTRLIJJzFHnHFs}y8-{ZZLztlxV`}9ILrAK1S0w^B`d7x=0)D2fWPh7_A&K%gjUBm z@k!)3hFs-cMVWTP_*%!w^D-iFC*!CXTLEF7;V5jatFjRVx18a^Or!X^gZ@j|WEnVJ zelRxenJLh?G?L;wd0-E9#>LMHD`>z>Vii@?#5{(N-M&^+<*#&nMXwK0xKUwOPX`^* z3%y%fGe;a>g4p9?0TGu5Wp&_`3+p+jLGO|{$omj9y>s9sv&h?yYfhYbeT(GC3yjVH zypoX@{ZHFdi!;-tF({gT-@YP{Xul^7DS=h=eyw(W>h$UdmHC9FKZKp+7^qrQ?{m(abdy>(?sR@7rLyz!oW zS8Rs%`0~0~4WX3NgP-QzL~lpp!3}@{vk8KA1s<|lu$o7H&EeWVZ_d!(KgH_LB={C# z>|X)loO7$o4i`0u)o`7TM*%(m&~-XPF6s!VYyE{88N_w6K2TeXJ!Kc*^`3#wH2HB9 zX!5Sl-7*Eg6d)e@7zh1iPG|opBM7Gp39zGFsYZ(`}m?#-0Jmdq5;w{Q8SIhhE7(-BFw(HYu%Nv_(lF!fXpmUKAcv(Nc!Vtc5{ zNZ^Xa0+TQLFE1@I7lUZcXMyM3?R^%01c-UjPvX{k@Z2Zcy17ZtmoOVu@0N4(iyqLG z!s&*@`#d1(KUFv7I!UobE0-VHRk>2jq)#YM$MFA`KKAkd_oOS18~WEBzNI}`I`)Dm OshP3WnM%XU*Zvp$KTiGt literal 0 HcmV?d00001 diff --git a/collabora/edgebox-postinstall.sh b/collabora/edgebox-postinstall.sh new file mode 100755 index 0000000..8052e91 --- /dev/null +++ b/collabora/edgebox-postinstall.sh @@ -0,0 +1,3 @@ +# mkdir -p ./appdata/collabora-ws +echo "πŸ“¦ collabora postinstall script" +echo "- Running in $(pwd)" \ No newline at end of file diff --git a/collabora/edgebox-postinstall.txt b/collabora/edgebox-postinstall.txt new file mode 100644 index 0000000..6dfdaa1 --- /dev/null +++ b/collabora/edgebox-postinstall.txt @@ -0,0 +1 @@ +-T collabora-ws pwd diff --git a/collabora/edgebox.env b/collabora/edgebox.env new file mode 100644 index 0000000..53d9633 --- /dev/null +++ b/collabora/edgebox.env @@ -0,0 +1,14 @@ +############################################ +# Edgebox WS and API environment variables +############################################ + +# Metadata values - Used by edgebox api service for UI and update control purposes +EDGEAPP_NAME=Collabora Office +EDGEAPP_DESCRIPTION=Office Suite +EDGEAPP_VERSION=1.0.0 + +# Compose values - Used by edgebox ws service for containers setup +COMPOSE_PROJECT_NAME=edgebox +COMPOSE_APP_SLUG=collabora + + diff --git a/fizzy/.dockerignore b/fizzy/.dockerignore new file mode 100644 index 0000000..bdbeb44 --- /dev/null +++ b/fizzy/.dockerignore @@ -0,0 +1 @@ +appdata/* diff --git a/fizzy/Dockerfile b/fizzy/Dockerfile new file mode 100644 index 0000000..c14a6cb --- /dev/null +++ b/fizzy/Dockerfile @@ -0,0 +1,4 @@ +FROM ghcr.io/basecamp/fizzy:main +LABEL org.opencontainers.image.description="Fizzy is a simple project management tool using Kanban boards." + +EXPOSE 80 443 diff --git a/fizzy/edgeapp.template.env b/fizzy/edgeapp.template.env new file mode 100644 index 0000000..42820fe --- /dev/null +++ b/fizzy/edgeapp.template.env @@ -0,0 +1,9 @@ +FIZZY_SECRET_KEY_BASE=string|true|Secret key used for cryptographic signing (generate with: openssl rand -hex 64) +FIZZY_BASE_URL=string|false|The public URL of your Fizzy instance (e.g. http://fizzy.local) +FIZZY_VAPID_PUBLIC_KEY=string|false|VAPID public key for Web Push notifications +FIZZY_VAPID_PRIVATE_KEY=string|false|VAPID private key for Web Push notifications +FIZZY_SMTP_ADDRESS=string|false|SMTP server address for sending emails +FIZZY_SMTP_PORT=string|false|SMTP server port +FIZZY_SMTP_USERNAME=string|false|SMTP username +FIZZY_SMTP_PASSWORD=string|false|SMTP password +FIZZY_MAILER_FROM_ADDRESS=string|false|From address for emails sent by Fizzy diff --git a/fizzy/edgebox-compose.yml b/fizzy/edgebox-compose.yml new file mode 100644 index 0000000..670094a --- /dev/null +++ b/fizzy/edgebox-compose.yml @@ -0,0 +1,27 @@ +version: "3" +services: + ############## + # Fizzy EdgeApp + ############## + fizzy-ws: + image: ghcr.io/edgebox-iot/apps/fizzy:1.0.0 + build: + context: "./" + container_name: '${COMPOSE_PROJECT_NAME-edgebox}-fizzy-ws' + environment: + VIRTUAL_HOST: ${LOCAL_URL}${INTERNET_URL} + VIRTUAL_PORT: 80 + DISABLE_SSL: "true" + SECRET_KEY_BASE: '${FIZZY_SECRET_KEY_BASE}' + BASE_URL: '${FIZZY_BASE_URL}' + VAPID_PUBLIC_KEY: '${FIZZY_VAPID_PUBLIC_KEY}' + VAPID_PRIVATE_KEY: '${FIZZY_VAPID_PRIVATE_KEY}' + SMTP_ADDRESS: '${FIZZY_SMTP_ADDRESS}' + SMTP_PORT: '${FIZZY_SMTP_PORT}' + SMTP_USERNAME: '${FIZZY_SMTP_USERNAME}' + SMTP_PASSWORD: '${FIZZY_SMTP_PASSWORD}' + MAILER_FROM_ADDRESS: '${FIZZY_MAILER_FROM_ADDRESS}' + volumes: + - ./appdata/storage:/rails/storage:rw + - /etc/localtime:/etc/localtime:ro + restart: unless-stopped diff --git a/fizzy/edgebox-hosts.txt b/fizzy/edgebox-hosts.txt new file mode 100644 index 0000000..5415328 --- /dev/null +++ b/fizzy/edgebox-hosts.txt @@ -0,0 +1 @@ +fizzy diff --git a/fizzy/edgebox.env b/fizzy/edgebox.env new file mode 100644 index 0000000..3af7e78 --- /dev/null +++ b/fizzy/edgebox.env @@ -0,0 +1,11 @@ +############################################ +# Edgebox api compose environment variables +############################################ + +EDGEAPP_NAME=Fizzy +EDGEAPP_DESCRIPTION=Project Management +EDGEAPP_EXPERIMENTAL=true +EDGEAPP_VERSION=1.0.0 + +# To determine the name of your containers +COMPOSE_PROJECT_NAME=edgebox diff --git a/hello/.dockerignore b/hello/.dockerignore new file mode 100644 index 0000000..c1250f7 --- /dev/null +++ b/hello/.dockerignore @@ -0,0 +1 @@ +appdata/* \ No newline at end of file diff --git a/hello/Dockerfile b/hello/Dockerfile new file mode 100644 index 0000000..921a6ad --- /dev/null +++ b/hello/Dockerfile @@ -0,0 +1,10 @@ + +# Base image to base the app container on +FROM nginxdemos/hello:0.4 +LABEL org.opencontainers.image.description Hello is a scaffolding edgeapp template. + +# Add / Replace Files in the Container +ADD ./src/build/hello.conf /etc/nginx/conf.d/ + +# Port to expose from the container into the host +EXPOSE 80 \ No newline at end of file diff --git a/hello/README.md b/hello/README.md new file mode 100644 index 0000000..af276df --- /dev/null +++ b/hello/README.md @@ -0,0 +1,31 @@ +# Hello World Edgeapp Template + +This is a simple edgeapp template that demonstrates how to create an edgeapp that runs a "Hello World" when accessed. +It makes use of environment files, configurations and directories to demonstrate the customization capabilities for building and expanding self-hosted apps. + +## Directory Structure + +### Editable Files + +These files make the structure of an edgeapp and can be edited to customize the edgeapp installation, runtime, and configuration. + +- /src -> Source directory +- /src/build/ -> Files to be added to the container images build +- /src/install/ -> Files to be used with edgebox-postinstall.sh (ran after install) +- edgebox.env -> Environment file for the edgeapp, used to set container environment variables and meta data +- edgeapp.template.env -> Template environment file for the edgeapp, used to set Dashboard GUI configuration options +- edgebox-postinstall.sh -> Script ran after the edgeapp is fresh installed +- edgebox-hosts.txt -> Subdomain host names to be published by the edgeapp +- edgebox-compose.yml -> Defines the edgeapp services, containers, build, configuration, volumes, etc. +- Dockerfile - The Docker image used to build the edgeapp container image +- /README.md -> This file + +### Dynamically Managed Files + +These files do not exist initially, but can be created dynamically and are managed by the edgeapp and should not be edited manually. + +- /appdata -> Holds running app data, directory used to hold container volumes +- .run -> Placeholder file to indicate this app should run upon edgebox containers status check +- edgeapp.env -> Environment file for the edgeapp, used to set container environment variables +- myedgeapp.env -> Environment file for the externally accessible domain, used to set container internet connectivity and domain configuration +- edgebox-postinstall.done -> Placeholder file to indicate the edgeapp post-install has ben ran previously \ No newline at end of file diff --git a/hello/edgeapp.template.env b/hello/edgeapp.template.env new file mode 100644 index 0000000..668e760 --- /dev/null +++ b/hello/edgeapp.template.env @@ -0,0 +1,2 @@ +HELLO_EXAMPLE_BOOLEAN_OPTION=bool|true|Toggle Example Option +HELLO_EXAMPLE_REQUIRED_FIELD_OPTION=string|true|A Required secret option diff --git a/hello/edgebox-compose.yml b/hello/edgebox-compose.yml new file mode 100644 index 0000000..290eada --- /dev/null +++ b/hello/edgebox-compose.yml @@ -0,0 +1,26 @@ +version: "3" +services: + ############## + # Hello World EdgeApp + ############## + hello-ws: + image: ghcr.io/edgebox-iot/apps/${COMPOSE_APP_SLUG-hello}:1.0.0 + build: + context: "./" + container_name: '${COMPOSE_PROJECT_NAME-edgebox}-${COMPOSE_APP_SLUG-hello}-ws' + restart: unless-stopped + environment: + # WS Proxy control varialbles - Do not change + VIRTUAL_HOST: ${LOCAL_URL}${INTERNET_URL} + # Overridable variables (optional) + # VIRTUAL_PORT: 80 + # VIRTUAL_PROTO: https + # VIRTUAL_PATH: / + # VIRTUAL_DEST: / + + volumes: + # Recommended defaults + - /etc/localtime:/etc/localtime:ro + # Host data volume (Modify as needed by the app) + - ./appdata/${COMPOSE_APP_SLUG-hello}-ws:/usr/share/nginx/html/:rw + diff --git a/hello/edgebox-hosts.txt b/hello/edgebox-hosts.txt new file mode 100644 index 0000000..ce01362 --- /dev/null +++ b/hello/edgebox-hosts.txt @@ -0,0 +1 @@ +hello diff --git a/hello/edgebox-icon.png b/hello/edgebox-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..e07ed524f2949c6a08e314ffb34d406e601c673d GIT binary patch literal 15423 zcmeHuc|6o@+cy;|MP1#|Vyl!c8p~M5HiVFDWh^nF!C1!F&Dg1ss}!P0mLa4WYs?H8 zOL3JXAvDZb>Y~LmBV;UNdC#fqzMuPk-}`w#&;9v4&-=&wx%mv{{GI1<9>@1s&f_@F zapSy|>F%9}cJlG@?KV4m#)glNpUHb|7X%~mk;-a(eA_sYwiiQfP+>BG!2zB=ShP%N zL?BuQ9q!}F#~03EIUw=V^1If({t~u*`w`jeZ6Ot^@j7d?=T;9Uiv1#)-Hh9XH9fxO zTWE8$gvpKP`+vzvewZ12PRikpO479(E93H9Gd=c~=190#sC5`!od1~n#CT$fd$I8P zrND#4%O_yh%JY<_){`YtRR-e=5POx9TcLA*xod48ks=nb>1Ud#VRF#KSDASIDH+Bl#NJ;~no_VgZ;i+hJ7*M48GEYNaz zy)T0Hawk6V-eYC=BX#*7w#cX{Mab$r%i_*C)kF8(mGq2{e?d1ovtK*J_tV~hf`hlN z&7Bl}7rXQHZw1K9yHxgkyK(X49r~WT+k@0TAY@*hS1a7I<(D0j_SawK@}(q}9QM7d z5s(&`)?3S$5NLR0NdDK$`+En|^bhUUvQ0RC^XxDCGfo{3x@l%}?t%S+!s|nJYDALH zdpB(F@9D(sTI}(pH{L1fi1%2nFE$0_)4|WDwp_QtJig?9?*Yla>}lrp?>oupr zvk;S}hu2F;;(N)A8>ik}x%k_*-*HE-B!~#B2K>c6P`Dv6yPMzc2*3U7Ev0>iySBeH zFgW4-B+7^_0uvvv3ltWg7{11qOA8Th2utH0u9JJbNMWjV`yV5}4ip$reJ#4H?Ob(@ z1|`dMX+WUmTCBkO{Q|wuJe28>4*7{x|z4ue5qyCZCl2Wm*cWK+E z;THsAZU>PkU-y#EQKY;q;E%4`=Qa$;RAfy#$=k$8{VG||0be^Q`6j%Baw$_f6rOmTC{&2oz@%3zF&6yi$}icJR9Mslp=1R`#Ih`g1GJ2H^t`1KzwdEvWIIV zEiMPGReTC48(GS1slbmRH>ivlYV;YYt6t`@vtDk?Gg5X@JvXX?`SjgpOJFcndD7cO z$Q9L?b}Aaj8M+R|m)W<^-e5WOI0zKdzu!8wE~>L~QkwCqc?5*RL?0ug^JYdye~o}3 z?&ZeZfuC(VE%Cw?VQ#E&6u)P0$N9WdzunY4w?FxEA$h+OPWkC~Bky-<#r2vyD+Pq~ z#mYn!-!^F1@4WUw=(n7ljEBj0ms^T^j=qc^k8Pwa)kg_!UxXsMQi4tooI18Y^~TWf z%>&WKd-%Vj4vhSwx_Bn?$ky&ToT#+x>_gp7?l7Uqv?FKNw;R9LTEI^If%{|9()>%K zwS?z!vm<(PQmS9C{hoR$%Q<%ZQs~7G*{EX~4~~iKOMan|$-IAW*S+wYnhzfz`Xua_ zwf`+LcOdwl`fP{mf!DsBK9zkEh7!qVWp?a^k_Jy76njX<6yHDF8~dhB|LbzbM0y8> z-y|i%w!koW?L*u*8nRYd>*I+;x6>b9Q1wl&d{FFpJj7Xg;s>+h+f)rKp{(80R$efR ztSB)~xiaea;g5!rj;Lp!M3lc3n_r(e8~ebpkgt)@3;T3s16klZz^Ztf+9xDqh?xh;sKuhswC2y?p%PM`vj*M`e6G;71+QEtM?;jnLjcXCs5rh)642_efuN zEsvx6dOLN)wE+P?bSO$D+z;y?q8$!D`h%`E_?tJZbX4ZYlu%#z(TkSnWsCxX(K2d^ zYKqDb<8U85^r+rW8QowHPi>nsCV!Fu@8CzhLqh|#m6XE5!W6?)6$663lvK2|w3L*g zN>C^S%z%VM_=lpxA^su9cqD$(ID-yx5B3QR^$GBo;n7671>i#AM~{N%GJoaIFVNER zZ{+<${zL)bp%jh^R8mn?R`T;x`ui0jp~iSX533raI!1ephE(1!R}~dJla3> z*gul6LH~zL{{<3Y`acjbHM2bbHx_u9c=`AR{y+tw{}0@Hxc_ZlATAjDV~&Tr5*my4 z16+jw0agBCeyES$qzjKUJ|g~-{}8SIsUiFHa=e7p&|eGCBZ-D{NxJIx3ttg z6X1^Hv1@h)eiV!-diZ!~Yrzam)KpZUYU&1BDk{dR2Aamon(9VI#+t?kMkZ%eer)`6 zxtV`RD9Ya*{nzC_V7aQMvWK#}n7SwjVe*3i_{Q2s%Rr!{SZ^Jeg) zP{qF+Igdq!dIkjh0nhUB_Xr3J`H#uAK7MFKD2fNNiUw3&U0DMLg=%WSpvvn1G07es z90DwyM^!~x5vum%iHEzk380Armg?h&@gK8Hq2d0I)I$P1L&H$PXag^R0+19q&kspu zPFnc*M}vWm8{@=>M#d3n^7)!emU8lDhk4|QcA5BQ;Hv#FjY@2sJaFe0!5+G z5H%H)8&7d4;C{+lP?)Bsn!Eddt9VeTt+J}NvW7PBjQx>E?)(pa{TaOe2X_FZ|Gmk-gzvxM z`Zrwv5(59y9GfQKkPeKBFPsr~)nkvZ0C&OoU#=sVI z=0|+O_B&*r_^@>DmY^=`aChzPByz~(^71JXdt@ z!|zUflueb3fOJfoHOLZ9XpK}_%Vl)XYe&ag6s}C-mma+(T6=sZAJcQ>@tjH#12xQF`eq&MyPY=S${~q>5t_Of5uZCWax^nv1K6caY z5RbSqc}A9vWV-@uN`bCm*6e2xB|jiTfvzscXl?~WU5%NiJQ_mR!fC4|<6kl){P-K8 z;aqdps(c5mq5)2C4I8{Xu)}E&wfb;89=fwNQS6Z^fQ4rJWiA;KzO=g)U+C;$!}V#g zn8%g*cb8E4jvp#IJ=m%!%J@iFdcpPOsQzk}b<_K%GR0o^>g^n|(N8=3DecrQH*0xrn+%_WsRxGFVid z5Gx$hZ7AHgkvqPbKlwht9om%2?0WoLUn|EpeaQ)}fCcDQ?q(Dw$|gJ0AtHv0E4IgM z$PU5e>|6n+z+U`lfBTlzo&P0b8 znQJ;Qql~Sh+~i<|8M8LXm`ciJDf?D7{aSURWI%K(#eAd`o{Nc${Ix^BL_3u$NQARk z_9iGMjnTSTYb!n<4 zE9{RMY)6zDHsw!g#-5;*H{Pcpqh3DOGQ%AN`$P*f0+2l$!&}0S2J-B52V-vUt)=4Y z%`IsY(&=mF>88w1(Kp-MKXRAap^p+-iDG2eU9I?E%f1ZYe`wzdV8330f#01h&UdhJ zpO-S1y!<4MvgF|f9~1gwgE3*55{*v1C1*iIja+&Fl6i+}#*ZBkrA{r*$+q~>JI$ng z_;p1XuG2@^Hc{R!mR)7*Cn<}j)nKagK5|>hn3-^YJEC1_L$O1@H1kf ziaZ(28QN_DX5;H~hm%-B#0q`7f6YiRx9qfqfMMutLe9DR~J zEx`K5%1Xb4p~Hxu#sioOZBdjmDL%edF{*oymC2F%p2{SoKveYkF1-PH#*5+TFLTO) zNz5yi#Ud5U8n_mY1?gAJuYDyxJU68_IdWaao$l+slV`;F9pQ$Sg>sLHaevjX3l6~7 zPeiLzJl4#lsleW^MNojBmfDeH_9#-XOegKoy)$|GYV1&W!27oaP4~{b;;2DoZrr_* z1i6)nZbw#)7SJUS)3vJ0e0t<=VM1x&C$oCuCE~?ZJaz= z*AkH@d_YwvV{i>XC0x}J#zMPTjVP6bj}GqZk|GRtg-2F6w?$CIYa(4Lra*khGH>D! zctqI<*?mVuxx67CoSKteqR>+h7y2LfZs(7IcRaOK?e{Wk?)=V|{OJ~3n&!$AIKxrZ zd#U(ymtKz{$JNICm8e|AV}Pj3v}_%0&t=^z&Lv=8gNmsNjz92080(OGV%eNx5mNZk z0rXlc1BWsu98`4geeoe z#O~G0aMIShODQ#k>>`aLchFIGBT1}J{rqC<+nYjy0(hc?#C)jS)yg@K$zCpz-Ms6h zr#Dy$f7%p7o)+*EB*Y!Z1#oiu1D6rKS9bvsf{b;_Ps&w1Xp*CZuDQ`%IzxxTyHDDR zv%hy9NMv;r4Zf8k2lK5ZJL~V>cCO?Z)43jzrC!fH)KqfXdJ-O&_;bQt1Cv~o8x_&X6spuK`c1~GFu5Lw( zhI8S#Pw^$EA_q5e8NN|+1Yw|V;sDm9mh4?Wf>Qj&So6?<<+8o0icL;@>Z^I6_DcDcyJCw!it9jl{% zhEbC9_%{&dLhO1u9Ex(2T!*lkiywUsXt%BC3TH>HoI}?{dFq2wu*0I!am51PBCk^Sn!g&4pk%4$*>TZj-by7Y*qIu9iXvdk zKc18Ix_Y`H9)cY^JI|DD@wH=B8$}e6h8zua*6P>!#iUQHxb2~4%+Xo2ovmV@RXmc8 z)WJG>E2mQ)u{)Z3OAG$b^!O^Q$a`sru;2Vz3J7(#t7)+EdwXvvrhU29az5$3e4_?^3t_ z@9*=01R~6m{(MG2Ml@q%Sh}9#f3c%YiA=NPE#bc7Caw^pRDTVj&CpY%&Hj8x^{TCUWnN)|3T zr>8ohqdbBLsP%kT2mORZ9=^jS&UmK@3@9bcW^6bp`zxl(1g*~ z4_b=3yg-;tVwk=6@73zR#vuYjB-l8&n=;h1_j=~^M(A!VoD*hRBW_<9dz6`x1wG`U zz=y01$mG>-W{jX;b5lcjpDisGZ#~`xA9_-vCgilwrspa%kVY8 zl?8+A^h)uT{KtyuD`^}))NzV!w4%DLu?6_BZPIobp1zf^`w$s+9$r(tY778%G4(RVKJ4@A{y{nzmK?5-6oCL!CPiz z#}uM}v~8bjBOV{8BRboyORN&6JQMou1>P^~`Oyt2vw9mfc6AO2O(Rp`a)r8%Y5h@C?p*Z*iDu0OM;UU9U* zSy{g)UZ3^6Y~??`n6W#YyD`fN!A$qj%@oN!&QhCk=hp!@<3_}sz4crt&2_zjUARW) ze+1tc>^>34zt6Y~nJ-NI^lfxQthw#-6#LtP-|tK- z|G5=p1WgayVu|yJW5_e%VHb(<)rq)kc>8Ck$fU&^{lRl(*;ca=nge%qMXDn<1mFkP zM>v$yC`9K6(Jr%3P1ym=F)7V^4bm;JzGLdZ*__u(#;jRGW0hVYL0CINxwYm|wv#JZ zG`EY%DiCGHKs@jR<7J%Cr_Nc-t)(##Z@b#<$a?ertZ$q1Ze^FaM0h~4cB-`X2=mf` zwN{rw{+8S@MmghS{3HMGm%TMadrh{r#6)gC5H1}-_++&;668kPG>}GqI)2kCY3mX&REA_4#F6S&^ ztJThONMo)u=FR20WT`7M*pHP$tmXXCe0z$N@4(FF*}Odi4o}DV=X8F>CS9c=NZ*4@ zBlORGa}#E^$gYG456wDJXwc;iyu4EaWH`1bWwV=Yi7U{{Yf$34P1!#7O4o%JJsf#W zgs(-u5@|6#Xj`lQ=uly^#Rvi3Yq(S@_RPGwbUSje{w9@95Q+|%l1XwvEP1+GvWPL7 z6iH8O5WZIBZ>)$8kKVIw>k}tN)drM2c&KN++vVb+m^gK#BiN53w{%kFh#3Sa3!G$2 z=0ppH#5p~+;n&jSMPnC@_#I*1z7|qqSK*bO>u{o_e;#9 zwjTfy_7`&7diuIYjw$llhC7HTRL(G=Aug&cX|$GNZ&D`iU=uIUj2W1Tqdr?d(pLd@ zJ|zi!)o8IVl0!ZZKL2&*0}Px@4#@3Fo}86ehWOYr#>XegbYxm=1^_S!lip1;)AOxr z(VLEv_ufkloF14dPiutXUTyTnr^V>u*8a#JUXwle`ItwNwH&cG+zYYfWlc?6FG!qu zDpsSQs&~D>c(Bz^kQF{z56(*c5kpR@*~VRl5mQ=Mzx=M6VOQ9zx2rDB=6QUJL72&9 zeMVmy3r9Eo35>>9@dY^Og>Y@mU#u@imj#OwJ?qdtBChx&6bDY3eMfBCq!c4$I%byv zusCM9H`lemZ!ikV(u~yr*=UZe68R>6cDG(}Pu^@AtHrdl;sHDlb7g9_J2nS%{lS?e zl~yqgMQ_vYB|31rxU7jTJUn}#vvd5)e)7WM`ti?{60veQ8}pa5b^ z$GHlZ_EM`a?Dv~ej!%>|P1nt07;!O=`l8qe6Itcw@H!yx=Wn&z#qiIYwWb>`uJ_jj z#a(;>GgCyr>`lHAMFtU}uOM&N#wM$aJiS~8@gSJ*K5(&Pil}&a@A(Cea3hnykXf;> z!5m_tbV6(38mGku8Kq~w`_RROXJ)+c?!MJCfJ9q<-k&~~%$mGoP_2j!9JKOZm>xN+ zGnr84xYV1)#A)EpzmUtuOU9*Z@11(UQ{IS5b4!ELKuomSz_vxVsb*IGg*|?YHD!Y3 zhlN;yvsnF$mx+liF7Y6Fy+6N-Ih`dGP_<(x2)t{ZS{WV1zMZc-D_SR)F6CRO_YTkO zxyp>m>9Dkaa5!jmzC5B)NHx!fT;s_vKH@gz9^-yspA4>&vN4;R5xLAu$8s)(iTolM^)pDXMF4$zU}QaS5>mO$FB$z z`TpJ9q8RxLf*HAL@)*J5azmolJ@QidfzsszO+PZFJHsFYXG0q7Vz>bh89Bo;wzXDg zIo(RbGH1k1ti77po?F72>S+1{e0WM?*VX=mJ#Cnv(X5L0ymn!b<@J;38D<+5a5%kE zv5&p5e?J5e-V|S2;_n1TaG8ZwT zhbkX6B!l2SdtwEOi~7L0g|Y7eda6|zshnP|Zqj%hdjfW_rtX(lb-%oWalatf5527` zfTvHjHfta2`Alh$gc(6fGn2aOqON{tjfA(Bd9uQ&^cF9% zT7Y$o=%+7ADHzFGnKsO)kYk=Ye?b(@>79c}#@%NyLe%@l)g9KIw?VceKbJ`4vfJ{K zT;CjidY8EwlOh|ThLiZzYb!V3Tn9N~5Jq095d+Gv+raNQO8?3pG7-Y9=`dW(^d3>w+iQer3 zK(i|KtIrsHTR2Z;yGyBSr{2tMP1e&?IHDU?PbtFrdX5OuO^Y}C5Fvuz_MW4LjsN$_jN2ZAVcmfyN z5Iu&)I$KZn$3NlwoW&yhXok zwo7r>7OX?|x99c0y2w+-#g)?{#c%au8xvW*whr@w z1=-OF+kgPx~+7IfNmvYQS z6s_4jZ>Ku>;X@$6!o*o&rUR(RE(@12$`N@S_jx^YP=XPN>$PJZk>A}mISN~NwLt9C zda4RWrDL>mnp2{kChbR$G2^7P`l`0#hl3j5ZQ(?ws}emQE7_D9#@xpwH1v!<%9#rS z$xn_Hd7M4`qQ8mJ2EnFMsz>x!Bbc|I<=GjBRiroFozmQ>0%g({NN7v<_vII(=iG)s zV;ft6N@C~t&(9r$cuSwd$)?8RY7ZB!ertSyNzl%ig2pOzw3M2BUcc+4EhW|GJqeb) z$=eF?aD5x<8DMgqjw5-)6$?**8bZ)d?4ER!r@@Ic-+J=ZiNgmP#<$9?rbaa-PI(bgvjKI} zNk9*;Bc;vlczbktd=L44I^D}Ff%V$?G1e<@hJ3eSGg1#{O%-LdSf0qJdry3ucnUz| z8*@dm*eWR!G|T#k$3M|jil|7r@3j7=p(>C}x{$_~L(`?-`+WU{SL}=Q;SM>)sJ_d` zOM)5@E6n5yqL@N|NDbJ|*QTH++|u95IsIO$E1X8~mH4gzxvW&;`8GBO^lYrku-(O( zce9|{j}3XQ&JwF{N(8$hfa&ihF?5KYQ3{St+eQc>(bU8lCd9)U_)-;_zLex$zKaz2 zqp@f=$k{3+hCoK=Tg*pe8oHYg?w@2ur_2$p6o7*f(xZo3Ib#U9GkKug^P*KEUrnL? z`FSk?vxZ8RA-ICk(|bo6DynFO_iPE5sDXjp=}KO4Wf&#}Bmia-0wUUzi1 zx5X0+zf~2p=~ANwsm!F+U~qY%hq;H1`~HW6nc}0&ELBp&?e?vp%c$+0WZo*2q5EKB zK#Xdtaq^Y835x4CwJ}3r;-1*m(gh84%xaE$0KIU`=@iQg8M54lN@mW3uOX*8_OZH! zf~Py%$1zlM)}5wY(B7XbAg#;dUd}C+OD*SnCu{*b4A&PeU&eGS7lM9k>Z3y?oUU*} zhh@Ty=1C=R1!J4uLYeLqYo^yUM98l%ka(A3&Si|bkL$u_Y%`pce){Bxt6SqgtWiWJ zf_g-%HmYx0gE&tIS7nK0^dCW9WS;5j$j5<%C*_eyRk$K0y0O|S&B}jI&G_pTL(Gk3 zTK}G_ONfz|uEiWWK3<5gg);~Il)3SxSd{67aQ`l*3a?$JlZF;OdpG(?L!hKAb0$1` zP*{0;^t~RBpJR&y(^ti)-H+ZHHtW~Lapo3*rG4th=kFtGk)?}4V+vWiQ>+H)I4Y<2 z>M(_nx)J^|34x4}^6gH|DfG47!so|} z@;x6TUeLj%seUo1tNEUGom*KZg^%zNIS|bNN|m{5eh=KF?gz^NDg~94`*k&_gg(jk`N7*heltaM**rBcX2#tr zvG0w&H?aVEF*I=dI7Y^36fK3F=S5?610A1%&-oVyM+uX?w=!_@Lme{Ms$%Vw&2%8f z0zMBEV7wN zDjf9NXVc5W$^TLbTRLIJJzFHnHFs}y8-{ZZLztlxV`}9ILrAK1S0w^B`d7x=0)D2fWPh7_A&K%gjUBm z@k!)3hFs-cMVWTP_*%!w^D-iFC*!CXTLEF7;V5jatFjRVx18a^Or!X^gZ@j|WEnVJ zelRxenJLh?G?L;wd0-E9#>LMHD`>z>Vii@?#5{(N-M&^+<*#&nMXwK0xKUwOPX`^* z3%y%fGe;a>g4p9?0TGu5Wp&_`3+p+jLGO|{$omj9y>s9sv&h?yYfhYbeT(GC3yjVH zypoX@{ZHFdi!;-tF({gT-@YP{Xul^7DS=h=eyw(W>h$UdmHC9FKZKp+7^qrQ?{m(abdy>(?sR@7rLyz!oW zS8Rs%`0~0~4WX3NgP-QzL~lpp!3}@{vk8KA1s<|lu$o7H&EeWVZ_d!(KgH_LB={C# z>|X)loO7$o4i`0u)o`7TM*%(m&~-XPF6s!VYyE{88N_w6K2TeXJ!Kc*^`3#wH2HB9 zX!5Sl-7*Eg6d)e@7zh1iPG|opBM7Gp39zGFsYZ(`}m?#-0Jmdq5;w{Q8SIhhE7(-BFw(HYu%Nv_(lF!fXpmUKAcv(Nc!Vtc5{ zNZ^Xa0+TQLFE1@I7lUZcXMyM3?R^%01c-UjPvX{k@Z2Zcy17ZtmoOVu@0N4(iyqLG z!s&*@`#d1(KUFv7I!UobE0-VHRk>2jq)#YM$MFA`KKAkd_oOS18~WEBzNI}`I`)Dm OshP3WnM%XU*Zvp$KTiGt literal 0 HcmV?d00001 diff --git a/hello/edgebox-postinstall.sh b/hello/edgebox-postinstall.sh new file mode 100755 index 0000000..98441ce --- /dev/null +++ b/hello/edgebox-postinstall.sh @@ -0,0 +1,5 @@ +# mkdir -p ./appdata/hello-ws +echo "πŸ“¦ Hello World postinstall script" +echo "- Running in $(pwd)" +echo "- Copying files to ./appdata/hello-ws" +cp ./src/install/* ./appdata/hello-ws/ \ No newline at end of file diff --git a/hello/edgebox-postinstall.txt b/hello/edgebox-postinstall.txt new file mode 100644 index 0000000..94b83a3 --- /dev/null +++ b/hello/edgebox-postinstall.txt @@ -0,0 +1 @@ +-T hello-ws pwd diff --git a/hello/edgebox.env b/hello/edgebox.env new file mode 100644 index 0000000..8a825d8 --- /dev/null +++ b/hello/edgebox.env @@ -0,0 +1,14 @@ +############################################ +# Edgebox WS and API environment variables +############################################ + +# Metadata values - Used by edgebox api service for UI and update control purposes +EDGEAPP_NAME=Hello World +EDGEAPP_DESCRIPTION=Edgeapp Template +EDGEAPP_VERSION=1.0.0 + +# Compose values - Used by edgebox ws service for containers setup +COMPOSE_PROJECT_NAME=edgebox +COMPOSE_APP_SLUG=hello + + diff --git a/hello/src/build/hello.conf b/hello/src/build/hello.conf new file mode 100644 index 0000000..e7532f4 --- /dev/null +++ b/hello/src/build/hello.conf @@ -0,0 +1,16 @@ +server { + listen 80; + listen [::]:80; + + root /usr/share/nginx/html; + try_files /index.html =404; + + expires -1; + + sub_filter_once off; + sub_filter 'server_hostname' '$hostname'; + sub_filter 'server_address' '$server_addr:$server_port'; + sub_filter 'server_url' '$request_uri'; + sub_filter 'server_date' '$time_local'; + sub_filter 'request_id' '$request_id'; +} \ No newline at end of file diff --git a/hello/src/install/index.html b/hello/src/install/index.html new file mode 100644 index 0000000..171049f --- /dev/null +++ b/hello/src/install/index.html @@ -0,0 +1,96 @@ + + + +Hello World Edgeapp + + + + + +Edgebox Logo +

This is an example Hello World edgeapp. If you see this page, it means it is running.

+

Developing your app? See docs.edgebox.io for more information.

+
+

Server address: server_address

+

Server name: server_hostname

+

Date: server_date

+

URI: server_url

+
+
Auto Refresh
+ + + diff --git a/immich/Dockerfile b/immich/Dockerfile index d58d4af..cd7f031 100644 --- a/immich/Dockerfile +++ b/immich/Dockerfile @@ -1,3 +1,3 @@ -FROM ghcr.io/immich-app/immich-server:v1.119.1 +FROM ghcr.io/immich-app/immich-server:v2.0.1 EXPOSE 2283 \ No newline at end of file diff --git a/memos/README.md b/memos/README.md new file mode 100644 index 0000000..c9296fd --- /dev/null +++ b/memos/README.md @@ -0,0 +1,30 @@ +# Memos EdgeApp + +A privacy-first, lightweight note-taking service. Easily capture and share your great thoughts. + +## Features + +- Privacy-first and lightweight +- Self-hosted solution +- Simple and intuitive interface +- Markdown support +- Tag-based organization + +## Configuration + +The app runs on port 5230 internally and is accessible via the EdgeBox reverse proxy at `memos.hostname.local`. + +## Data Persistence + +All memos data is stored in `./appdata/memos-ws/` which maps to `/var/opt/memos` inside the container. + +## Environment Variables + +- `MEMOS_MODE`: Set to "prod" for production mode +- `MEMOS_PORT`: Internal port (5230) + +## Access + +After installation, access Memos at: `http://memos.hostname.local` + +For internet access, configure the `INTERNET_URL` in `myedgeapp.env`. \ No newline at end of file diff --git a/memos/edgebox-compose.yml b/memos/edgebox-compose.yml new file mode 100644 index 0000000..7fbb013 --- /dev/null +++ b/memos/edgebox-compose.yml @@ -0,0 +1,21 @@ +version: "3" +services: + ############## + # Memos EdgeApp + ############## + memos-ws: + image: neosmemo/memos:stable + container_name: '${COMPOSE_PROJECT_NAME-edgebox}-${COMPOSE_APP_SLUG-memos}-ws' + restart: unless-stopped + environment: + # WS Proxy control variables - Do not change + VIRTUAL_HOST: ${LOCAL_URL}${INTERNET_URL} + VIRTUAL_PORT: 5230 + # Memos configuration + MEMOS_MODE: prod + MEMOS_PORT: 5230 + volumes: + # Recommended defaults + - /etc/localtime:/etc/localtime:ro + # Host data volume for memos data + - ./appdata/${COMPOSE_APP_SLUG-memos}-ws:/var/opt/memos:rw \ No newline at end of file diff --git a/memos/edgebox-hosts.txt b/memos/edgebox-hosts.txt new file mode 100644 index 0000000..c6f6c75 --- /dev/null +++ b/memos/edgebox-hosts.txt @@ -0,0 +1 @@ +memos diff --git a/memos/edgebox-postinstall.txt b/memos/edgebox-postinstall.txt new file mode 100644 index 0000000..d4446ea --- /dev/null +++ b/memos/edgebox-postinstall.txt @@ -0,0 +1,4 @@ +# Postinstall commands for Memos +# Each line represents a docker exec command to run on the container +# Format: -T +-T memos-ws echo "Memos container started successfully" \ No newline at end of file diff --git a/memos/edgebox.env b/memos/edgebox.env new file mode 100644 index 0000000..1c4a896 --- /dev/null +++ b/memos/edgebox.env @@ -0,0 +1,12 @@ +############################################ +# Edgebox WS and API environment variables +############################################ + +# Metadata values - Used by edgebox api service for UI and update control purposes +EDGEAPP_NAME=Memos +EDGEAPP_DESCRIPTION=Note-taking Service +EDGEAPP_VERSION=1.0.0 + +# Compose values - Used by edgebox ws service for containers setup +COMPOSE_PROJECT_NAME=edgebox +COMPOSE_APP_SLUG=memos \ No newline at end of file diff --git a/rocketchat/.dockerignore b/rocketchat/.dockerignore new file mode 100644 index 0000000..c1250f7 --- /dev/null +++ b/rocketchat/.dockerignore @@ -0,0 +1 @@ +appdata/* \ No newline at end of file diff --git a/rocketchat/Dockerfile b/rocketchat/Dockerfile new file mode 100644 index 0000000..014929e --- /dev/null +++ b/rocketchat/Dockerfile @@ -0,0 +1 @@ +FROM registry.rocket.chat/rocketchat/rocket.chat:latest \ No newline at end of file diff --git a/rocketchat/edgebox-compose.yml b/rocketchat/edgebox-compose.yml new file mode 100644 index 0000000..d3b5514 --- /dev/null +++ b/rocketchat/edgebox-compose.yml @@ -0,0 +1,42 @@ +version: "3" + +volumes: + mongodb_data: { driver: local } + +services: + rocketchat-ws: + container_name: '${COMPOSE_PROJECT_NAME-edgebox}-rocketchat-ws' + image: registry.rocket.chat/rocketchat/rocket.chat:${RELEASE:-latest} + restart: always + environment: + VIRTUAL_HOST: ${LOCAL_URL}${INTERNET_URL} + MONGO_URL: "mongodb://rocketchat-db:27017/\ + rocketchat?replicaSet=rs0" + MONGO_OPLOG_URL: "mongodb://rocketchat-db:27017/\ + local?replicaSet=rs0" + ROOT_URL: http://localhost:3000 + PORT: 3000 + DEPLOY_METHOD: docker + depends_on: + - rocketchat-db + expose: + - 3000 + # ports: + # - "${BIND_IP:-0.0.0.0}:${HOST_PORT:-3000}:${PORT:-3000}" + + rocketchat-db: + image: docker.io/bitnami/mongodb:5.0 + restart: always + user: root + volumes: + - ./appdata/rocketchat-db/mongodb:/bitnami/mongodb:rw + environment: + MONGODB_REPLICA_SET_MODE: "primary" + MONGODB_REPLICA_SET_NAME: "rs0" + MONGODB_PORT_NUMBER: 27017 + MONGODB_INITIAL_PRIMARY_HOST: "rocketchat-db" + MONGODB_INITIAL_PRIMARY_PORT_NUMBER: 27017 + MONGODB_ADVERTISED_HOSTNAME: "rocketchat-db" + MONGODB_ENABLE_JOURNAL: "true" + ALLOW_EMPTY_PASSWORD: "yes" + \ No newline at end of file diff --git a/rocketchat/edgebox-postinstall.txt b/rocketchat/edgebox-postinstall.txt new file mode 100644 index 0000000..2937f76 --- /dev/null +++ b/rocketchat/edgebox-postinstall.txt @@ -0,0 +1,2 @@ +-T rocketchat-ws sleep 90 + diff --git a/rocketchat/edgebox.env b/rocketchat/edgebox.env new file mode 100644 index 0000000..96d01f4 --- /dev/null +++ b/rocketchat/edgebox.env @@ -0,0 +1,12 @@ +############################################ +# Edgebox api compose environment variables +############################################ + +EDGEAPP_NAME=Rocket Chat +EDGEAPP_DESCRIPTION=Chat Service +EDGEAPP_VERSION=1.0.0 + +# To determine the name of your containers +COMPOSE_PROJECT_NAME=edgebox + + diff --git a/syncthing/.vscode/tasks.json b/syncthing/.vscode/tasks.json index e0b4da7..0a0fdd5 100644 --- a/syncthing/.vscode/tasks.json +++ b/syncthing/.vscode/tasks.json @@ -20,7 +20,7 @@ { "label": "WS - Restart edgeapp containers", "type": "shell", - "command": "docker-compose restart syncthing-ws", + "command": "docker compose restart syncthing-ws", "options": { "cwd": "${workspaceFolder}/../../ws", "shell": { @@ -35,7 +35,7 @@ { "label": "WS - All Edgeapp Statuses", "type": "shell", - "command": "docker-compose ps", + "command": "docker compose ps", "options": { "cwd": "${workspaceFolder}/../../ws", "shell": { @@ -50,7 +50,7 @@ { "label": "WS - Edgeapp Container Statuses", "type": "shell", - "command": "docker-compose ps syncthing-ws", + "command": "docker compose ps syncthing-ws", "options": { "cwd": "${workspaceFolder}/../../ws", "shell": { diff --git a/writebook/.dockerignore b/writebook/.dockerignore new file mode 100644 index 0000000..bdbeb44 --- /dev/null +++ b/writebook/.dockerignore @@ -0,0 +1 @@ +appdata/* diff --git a/writebook/Dockerfile b/writebook/Dockerfile new file mode 100644 index 0000000..c56d18e --- /dev/null +++ b/writebook/Dockerfile @@ -0,0 +1,4 @@ +FROM ghcr.io/basecamp/writebook:latest +LABEL org.opencontainers.image.description="Writebook is an easy-to-use application for publishing content on the web." + +EXPOSE 80 443 diff --git a/writebook/edgebox-compose.yml b/writebook/edgebox-compose.yml new file mode 100644 index 0000000..f390e7b --- /dev/null +++ b/writebook/edgebox-compose.yml @@ -0,0 +1,18 @@ +version: "3" +services: + ############## + # Writebook EdgeApp + ############## + writebook-ws: + image: ghcr.io/edgebox-iot/apps/writebook:1.0.0 + build: + context: "./" + container_name: '${COMPOSE_PROJECT_NAME-edgebox}-writebook-ws' + environment: + VIRTUAL_HOST: ${LOCAL_URL}${INTERNET_URL} + VIRTUAL_PORT: 80 + DISABLE_SSL: "true" + volumes: + - ./appdata/storage:/rails/storage:rw + - /etc/localtime:/etc/localtime:ro + restart: unless-stopped diff --git a/writebook/edgebox-hosts.txt b/writebook/edgebox-hosts.txt new file mode 100644 index 0000000..8538a3a --- /dev/null +++ b/writebook/edgebox-hosts.txt @@ -0,0 +1 @@ +writebook diff --git a/writebook/edgebox.env b/writebook/edgebox.env new file mode 100644 index 0000000..11d9157 --- /dev/null +++ b/writebook/edgebox.env @@ -0,0 +1,11 @@ +############################################ +# Edgebox api compose environment variables +############################################ + +EDGEAPP_NAME=Writebook +EDGEAPP_DESCRIPTION=Write and Share E-Books Online +EDGEAPP_EXPERIMENTAL=true +EDGEAPP_VERSION=1.0.0 + +# To determine the name of your containers +COMPOSE_PROJECT_NAME=edgebox From d983f2f46b64a75a01080dfd7694babb6fb7bcd9 Mon Sep 17 00:00:00 2001 From: Paulo Truta Date: Sat, 4 Jul 2026 21:55:50 +0200 Subject: [PATCH 2/6] Fix Writebook description --- writebook/edgebox.env | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/writebook/edgebox.env b/writebook/edgebox.env index 11d9157..00785f1 100644 --- a/writebook/edgebox.env +++ b/writebook/edgebox.env @@ -3,7 +3,7 @@ ############################################ EDGEAPP_NAME=Writebook -EDGEAPP_DESCRIPTION=Write and Share E-Books Online +EDGEAPP_DESCRIPTION=E-Book Sharing EDGEAPP_EXPERIMENTAL=true EDGEAPP_VERSION=1.0.0 From 8e32f753545295360bbc44189df55936d36c89ee Mon Sep 17 00:00:00 2001 From: Paulo Truta Date: Sat, 4 Jul 2026 23:02:35 +0200 Subject: [PATCH 3/6] Fix Writebook: add SECRET_KEY_BASE env var --- writebook/edgebox-compose.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/writebook/edgebox-compose.yml b/writebook/edgebox-compose.yml index f390e7b..652cf05 100644 --- a/writebook/edgebox-compose.yml +++ b/writebook/edgebox-compose.yml @@ -12,6 +12,7 @@ services: VIRTUAL_HOST: ${LOCAL_URL}${INTERNET_URL} VIRTUAL_PORT: 80 DISABLE_SSL: "true" + SECRET_KEY_BASE: "dee2c3de6b349d6046a0281e8b4117f83fae585939ff524f505c2573a21f1aeb37f0d238d1cc7e210539f58178e45a5e3c65c25e1b24f488c3e98bd6ae9b707d" volumes: - ./appdata/storage:/rails/storage:rw - /etc/localtime:/etc/localtime:ro From 607eec655088c1e196c8da9a702ac58df54dacec Mon Sep 17 00:00:00 2001 From: Paulo Truta Date: Sat, 4 Jul 2026 23:04:11 +0200 Subject: [PATCH 4/6] Revert "Fix Writebook: add SECRET_KEY_BASE env var" This reverts commit 8e32f753545295360bbc44189df55936d36c89ee. --- writebook/edgebox-compose.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/writebook/edgebox-compose.yml b/writebook/edgebox-compose.yml index 652cf05..f390e7b 100644 --- a/writebook/edgebox-compose.yml +++ b/writebook/edgebox-compose.yml @@ -12,7 +12,6 @@ services: VIRTUAL_HOST: ${LOCAL_URL}${INTERNET_URL} VIRTUAL_PORT: 80 DISABLE_SSL: "true" - SECRET_KEY_BASE: "dee2c3de6b349d6046a0281e8b4117f83fae585939ff524f505c2573a21f1aeb37f0d238d1cc7e210539f58178e45a5e3c65c25e1b24f488c3e98bd6ae9b707d" volumes: - ./appdata/storage:/rails/storage:rw - /etc/localtime:/etc/localtime:ro From ce335352cd54854a7cf6cb209358b4c11e0e8155 Mon Sep 17 00:00:00 2001 From: Paulo Truta Date: Sat, 4 Jul 2026 23:09:39 +0200 Subject: [PATCH 5/6] Writebook: add SECRET_KEY_BASE as edgeapp option --- writebook/edgeapp.template.env | 1 + writebook/edgebox-compose.yml | 1 + 2 files changed, 2 insertions(+) create mode 100644 writebook/edgeapp.template.env diff --git a/writebook/edgeapp.template.env b/writebook/edgeapp.template.env new file mode 100644 index 0000000..1fc8ef0 --- /dev/null +++ b/writebook/edgeapp.template.env @@ -0,0 +1 @@ +WRITEBOOK_SECRET_KEY_BASE=string|true|Secret key used for cryptographic signing (generate with: openssl rand -hex 64) diff --git a/writebook/edgebox-compose.yml b/writebook/edgebox-compose.yml index f390e7b..983cc0c 100644 --- a/writebook/edgebox-compose.yml +++ b/writebook/edgebox-compose.yml @@ -12,6 +12,7 @@ services: VIRTUAL_HOST: ${LOCAL_URL}${INTERNET_URL} VIRTUAL_PORT: 80 DISABLE_SSL: "true" + SECRET_KEY_BASE: '${WRITEBOOK_SECRET_KEY_BASE}' volumes: - ./appdata/storage:/rails/storage:rw - /etc/localtime:/etc/localtime:ro From e66685ca43963aef4365828c9cb1cb51288bb703 Mon Sep 17 00:00:00 2001 From: Paulo Truta Date: Sat, 4 Jul 2026 23:13:30 +0200 Subject: [PATCH 6/6] Writebook: fix volume permissions via root entrypoint --- writebook/Dockerfile | 7 +++++++ writebook/entrypoint.sh | 12 ++++++++++++ 2 files changed, 19 insertions(+) create mode 100755 writebook/entrypoint.sh diff --git a/writebook/Dockerfile b/writebook/Dockerfile index c56d18e..f196c53 100644 --- a/writebook/Dockerfile +++ b/writebook/Dockerfile @@ -1,4 +1,11 @@ FROM ghcr.io/basecamp/writebook:latest LABEL org.opencontainers.image.description="Writebook is an easy-to-use application for publishing content on the web." +USER root +COPY entrypoint.sh /usr/local/bin/edgebox-entrypoint.sh +RUN chmod +x /usr/local/bin/edgebox-entrypoint.sh + +ENTRYPOINT ["/usr/local/bin/edgebox-entrypoint.sh"] +CMD ["bin/boot"] + EXPOSE 80 443 diff --git a/writebook/entrypoint.sh b/writebook/entrypoint.sh new file mode 100755 index 0000000..6e1cd61 --- /dev/null +++ b/writebook/entrypoint.sh @@ -0,0 +1,12 @@ +#!/bin/bash -e + +# Ensure database directory exists in the mounted volume +mkdir -p /rails/storage/db +chown -R 1000:1000 /rails/storage 2>/dev/null || true + +# Enable jemalloc for reduced memory usage and latency +if [ -f /usr/lib/*/libjemalloc.so.2 ]; then + export LD_PRELOAD="$(echo /usr/lib/*/libjemalloc.so.2) $LD_PRELOAD" +fi + +exec "$@"