From c9e37abc63c2af130fd68c3c410661f2a9ad4560 Mon Sep 17 00:00:00 2001 From: SDGDen Date: Wed, 4 Mar 2026 06:40:38 +0100 Subject: [PATCH] in-progress update --- deploy.sh | 483 ++-------------------------- scripts/filebrowser-config.sh | 2 + stacks/bookstack/compose.yml | 33 ++ stacks/browser/compose.yml | 15 + stacks/convertx/compose.yml | 17 + stacks/dashboard/compose.yml | 18 ++ stacks/dashboard/heimdall-config.sh | 3 + stacks/dashboard/www/app.sqlite | Bin 0 -> 147456 bytes stacks/dozzle/compose.yml | 11 + stacks/it-tools/compose.yml | 10 + stacks/jellyfin/compose.yml | 19 ++ stacks/kuma/compose.yml | 14 + stacks/npm/compose.yml | 29 ++ stacks/onlyoffice/compose.yml | 17 + stacks/owncloud/compose.yml | 69 ++++ stacks/pihole/compose.yml | 23 ++ stacks/site/compose.yml | 14 + stacks/vaultwarden/compose.yml | 12 + stacks/wireguard/compose.yml | 23 ++ 19 files changed, 356 insertions(+), 456 deletions(-) create mode 100644 scripts/filebrowser-config.sh create mode 100644 stacks/dashboard/heimdall-config.sh create mode 100644 stacks/dashboard/www/app.sqlite diff --git a/deploy.sh b/deploy.sh index b0171ec..f03eb44 100644 --- a/deploy.sh +++ b/deploy.sh @@ -7,6 +7,33 @@ if [[ "$EUID" -ne 0 ]]; then exit 1 fi +# recursive replace function +replace_string_recursive() { + local DIRECTORY="$1" + local OLD_STRING="$2" + local NEW_STRING="$3" + + if [ ! -d "$DIRECTORY" ]; then + echo "Error: Directory '$DIRECTORY' does not exist." + return 1 + fi + + echo "Starting replacement of '$OLD_STRING' with '$NEW_STRING' in '$DIRECTORY'..." + find "$DIRECTORY" -type f -exec sed -i "s/$OLD_STRING/$NEW_STRING/g" {} + + + if [ $? -eq 0 ]; then + echo "Replacement completed successfully." + return 0 + else + echo "An error occurred during replacement." + return 1 + fi +} + +# example use +# replace_string_recursive "/path/to/directory" "oldstring" "newstring" + + # what this script needs to do: # request all install parameters needed from user @@ -37,19 +64,6 @@ bookstackdbpass="$(rand_hex)" bookstackdbrootpass="$(rand_hex)" onlyofficeJWT="$(rand_hex)" -# ---- Debug print (optional — remove in production) ---- -echo "Configuration summary:" -printf "%-25s %s\n" \ - "Admin email:" "$adminemail" \ - "Timezone:" "$timezone" \ - "Domain:" "$domain" \ - "Public IP:" "$publicip" \ - "Local IP:" "$localip" - - - - - # install docker echo "Updating apt and installing prerequisites..." apt update @@ -84,9 +98,6 @@ apt install -y \ echo "Docker installation complete." docker --version - - - # install dockge mkdir -p /opt/stacks /opt/dockge cd /opt/dockge @@ -94,449 +105,9 @@ cd /opt/dockge # Download your compose.yaml curl "https://dockge.kuma.pet/compose.yaml?port=5001&stacksPath=%2Fopt%2Fstacks" --output compose.yaml -# Start the Server -# docker compose up -d - -# create directories in /opt/stacks for containers -# directories needed: npm,dozzle,kuma,browser,site,owncloud,vaultwarden,wireguard,convertx,it-tools,bookstack,jellyfin,onlyoffice,downloader,dashboard,pihole -cd /opt/stacks -mkdir /opt/stacks/{npm,dozzle,kuma,browser,site,owncloud,vaultwarden,wireguard,convertx,it-tools,bookstack,jellyfin,onlyoffice,downloader,dashboard,pihole} -# write docker setup for each component to correct directories - -# Nginx Proxy: -# needed: compose.yml, auto-generated proxy host files -# variables needed: domain, admin email, admin pass -cat > /opt/stacks/npm/compose.yml <: - - 80:80 # Public HTTP Port - - 443:443 # Public HTTPS Port - - 81:81 # Admin Web Port - # Add any other Stream port you want to expose - # - '21:21' # FTP - - environment: - TZ: $timezone - # Uncomment this if you want to change the location of - # the SQLite DB file within the container - # DB_SQLITE_FILE: "/data/database.sqlite" - - # Uncomment this if IPv6 is not enabled on your host - # DISABLE_IPV6: 'true' - - volumes: - - ./data:/data - - ./letsencrypt:/etc/letsencrypt -networks: - dockge_default: - external: true -EOF - -# Uptime Kuma: -# needed: compose.yml -# variables needed: admin email, admin pass -cat > /opt/stacks/kuma/compose.yml < /opt/stacks/browser/compose.yml < /opt/stacks/site/compose.yml < /opt/stacks/owncloud/compose.yml < /opt/stacks/vaultwarden/compose.yml < /opt/stacks/wireguard/compose.yml < /opt/stacks/convertx/compose.yml < /opt/stacks/it-tools/compose.yml < /opt/stacks/bookstack/compose.yml < /opt/stacks/jellyfin/compose.yml < /opt/stacks/onlyoffice/compose.yml < /opt/stacks/dashboard/compose.yml </opt/stacks/dozzle/compose.yml </opt/stacks/pihole/compose.yml <QwqntmIO7e%3R3w)iRczUc%St(}#1Gj?NvT+6S$U~q z#}zw?DzZ}1ANjgxcQN}Q37+qyGxed!nc05#ufP7f=j-0ym5;vcr&RKyxIt1$6AlZ7 zg76VZ5(MEk{C^7mcm7Vn!${`?+zYwqdp+J3DnI_AQ5IPIe=N)gvfI6aqdO8n0!RP} zAOR$R1dsp{Kmter2_OL^@Xix>|6~~wJv#l9g81*ne=Kf^&x=pY{GXXG&;0bv$7W8K z|GfN_^4~3|8fhfotTo8)*a$((0WSjfT~AE1fPY}>#|x`jJnMK>M;#TgVviQNw%Zdh0h61 zlPu0(d2B@ZD2t=jWu>k{>Z$^<>coX`Q2;4Nbyx^(sE6BWt94mpX)6|#L*wB{vsrg( z;>3P4^`o#8C8>xb0%2));>a~k)^#4o37|AABt#B;hp>oeX4*B)!dL5xF4q*LlZWr_ zr(DibR;)Vs%TO9c)iu4t#3Oz{-TE7m-LB>7=@DTCO2Wd+bxo-&HN}v-;r9bpruGw- z>i|X3R9Uuqi_Cbm6JDAe5u9$qyf|`Au67ENt6V!mwKO6``w^g-bXl(|oe0n{sUNP_ zTM3QpO@Av&vu2VfMg-auO;c3h%9@FX&B194!+6$US(O#YNY!MmD>g%g;mlap0J%77 z4TP>OYAmC6H9j~xBAm_2lZl#A(@YQyh6eIqua0!9+4eW9mX?W?69uhC2nl79mDFL8 zy}lktt!APWM}+lmvd}<^Rka|2b^$tcvcOqApE)!lyxte33O%4VO1s!+3f&5}rM+6M z0mgRVT*H>dUl&HjpBKdcDgJ@@74hfAUw#L=GA4lpkN^@u0!RP}AOR$R1dsp{Kmter z3H(I}ltzlP1^)Vecw)3TTjHh)NN_Ssbh=nPS!i1il9?liiu0XMZNtOJOriK>q2aH` z+!B=>&F#&93isy!MVbcVA^{|T1dsp{Kmter2_OL^fCP{L5_qo?I5oxg|Ch(VD2Tr+ z{1i4mujq*0^(Mv~IoDS;yQ#P9mb)k%o-~0+O8s&+$e-9@Qm`6&zyghNHGmQJQqe$lZG^&lb|^3H2v^g z-3~~&IVWwz)cf$@-PGY0#w&>Ni{x1ar?_=Wai`M4prP&P+h= zCyoi#x5mX%(rPxNI338o?f$U&yME%pmgdU(`qKIHZ@hRV)aRbNkh!tUr5}?XHpO*6 z-DuerCu%GOe%QJVdtSF_y!2wXYL|F`x0$*fMC+9frb+@UR!eiwodZXXYWKx)F1vfj z&z=+~iraqZM%y5~tOYu<>$GCn&z<&5XHVElC(y!NC$Ia5k3u@P&}rhnUeTL!NVn&D zrMt(!lbw9N43hfHG2tRq1UjKl!u7!ScIpYG?m*-B`F9i1rFa;=34sIL^|_o!auUgzS>F> zo__m*c_b|Ll_1)pA@}M&a?dU1xlKV^Kylj-%p+w;Z?xh~?$Lf=9<5FAxVaeSxwp4;#F2*bu0I03{h8x?&P9;#VnRvmY}A`^ zwB@tWsV%P|>zi4ZjQH0pk_vZPm|Ksc^`PIc?Fh2#uJ=V_E(>#?+$LS^(Md3KTbQ%q zs|S6NxD((7C6qRy8})hbyZ2VJuQKv;MWzl;2)w2nQG>FyKpC(q59`i-LFDHSLHxy8 z;S$pXHgPuDR{%n{?l&MEe(BK${UPL~!ellE&59*Z=Lvkbm>g+{I9&F>;i`bOcW;AWt?5c*kzPm zM%bmuE{BT6iBhpxnqceyhs9k%{J-M=g17(wB>ukmZ^eHD@BLpCKM(r>{=WFL;?Iab z0Riw22_OL^fCP{L5ULKp~ z_vx`IexDkf_Zu~wvHp1^CV?};1jveB6xQ><}U$*{# zSo{Zq_&xDE@EZXC9oGNofZrFt3MT^orueVG z2JkE5KNmm$E>;keMgm9x2_OL^fCP{L5)CIqRH6`mS%p5O?mVTaPgyT(Z)}<}Ie$)Vd`!{LYPU%65^Y?pZKv_A&@itl zuYA;6S-Bcrs<>CLN0;c;vp09t7dN+V#n)f6+!rs%H(&D4H7*$2>g5~S)#k0swX3h) zJa^-@YVv}1``WFQ&Fd}oRoT-&k)FSy-MYA;%Bry_tBXoaQnh7WTdrCiCsmeYWmz+q zWtpx27sNjk;2-`W0VIF~kN^@u0!RP}AOR$R1dsp{Kmv~jfy2eqr5Dhh+y5^d?sdmcNB{{S0VIF~kN^@u z0!RP}AOR$R1dza^MS!jUAPD{;0VIF~kN^@u0!RP} zAOR$R1dsp{Kmy+n0wcu|JNv&>5ZPshUCQh-%`Q{yGRZC_c9~$8adsJFmr-^ZVV5Gi z@ZbI`7AGcf|Nr-+;V=&*fCP{L5rnhKmter2_OL^fCP{L5Tai^m zu6hQQYo=9`YuYV8rk7eIcB>9^*G;`L-p~#A@QEK{56edgC z5N(}Bt2D#)jWlg0%S%h!+uN0W4<~Azf92K7()FEmBMPN!O&UroQ7d++bm{ub()p;- zB&lx)RC?KWXqZsx?0QUTgNCU~;!PDwx+rUlvM$NhWldRDtRYTko6XggRB5Y=@wOED;wsSC1XDVlTn#^Q}A z3KB(3Rox7bpQbEQ9*&c$G`<6sRc!}4 z5&_vzJX3RB&2Z@}>wb7!x*kWjcciN%BjMqI!r@CyqMy;wqU8_~wFfBrK&nAX!X`XF+PF1tCYtTg3JP-P|ZiByK zd1}pM9n7vdwCcDu&@=|M461|HF;!w!Ga{^MBOWi0g6Wo=4i*;ICnw5lC)O6VYeETB?iJgrfr8NGn(acJWhz5UgTB>tOSa{zZpen> zxK-1o@tVdO4Da?D#=z?+cvXg zDj`iTw&JKsNhsY6eNeT1DnqHLg9=rxEmy0(b>~ilb-&JYUd?WM)8m;cRd}82Hj%5Y z3j%M-R#mZTRZ0!T(y0xjhUIufHme$ek>>?Jpy%RfJE5^%Q#IAHU01cJO*~zZHIFF7 zw22Dk)N538R72|wG#*5>vxxc1=TvDf#8U40Y?C+}`(uk*k%vOipvm$B4M5OpgAj7% zU(G%5jgK*{sZ^nFfC#J@h6Re#aY2|Bk5&}}Mqx#VF}P-GHncDWZ3^QBiMGS@LDX_R zQnMYSX4=%TG{bajFsA6VX3-kabV_QDp}4xK$nBo79Xc#lzF$B}nOhXEKV**>%0n6C zp$y^CslaOIVK*A(^N)+5K-v5Qq~6hMt}BD0bX^@pL#=6w0f1bU8m8^3ZVg5X>s%CV zCMj_?J?I*=N_5kcYo4L1rfsOUsq3m`8dcYJsOeQU~8l(!dtg2<$idwBX8uSLxo*w7`Q&DxzP!yTCFv@lmV~a=Jgn0Q% zXRa0Q+@xu4U>H(ga~Xj4$~$u!tZ!CGR>sx+$Gt;EF70P;@-|-4s0_m#%o1%E6uVu6 z$)f|k-ZrW#n*)H@8%9l4jhAQ;?09|%87std9hXg`Knz^jgQ*xyL}4g}F~aj4LTe!L znY6#rj+L)$*R9?E{pfxZ1?cm9qA(PM)~ESZb6Fdr`8#D_?L6%IhstZm*A`)>z`Fbu z8FZL!S*inbWk=R@hg3EAGfdBN9H%CGI*56d>K7tsbDerR1;wZu#DLkXu7Iaq1*Kpb zF3cEUl3^LHCD*EL1TK%02awZypb7jWATXEYp&r!m@?gWuLmECS=4y7^{dj@bRcY5% zfpXSru2nN#XmUqZZG|YVtt*grRrgFC#2aP;=7s3aodCvlht!CzQ}DK28+x~1b!C_W zLA5Q@mMv%j7zDa?WpVO#b$Kckmu}s^ZpO0SH`!5{)1Xji#e%xAoY?w*x%^9l_;cb{ zMM=CW-kJG!`Ilyn%>3-kZ_GSj{?<(Jm*v$D%ZUV#01`j~NB{{S0VIF~kN^^RGzlye z*9r$++$yuc2VL!%W`Pg7>@mdxA9Rsmk_A4f*}TMyaX?e@1P^>b8|*j>d{7JJ7z=z* zBi<+vd_eox2oHQf(@~KHKB$T1&@;ug(m`z${QY0ND2Tr%{)zY<@gItg_=jRs{EYaw z#jl7f;zjYFJ(~RoYlQ@m01`j~NB{{S0VIF~kN^@u0!ZMY36zUZ6uKL3%VP0VA-AP; zdb)VB(Agh4HCxmQd~adzZpq1+;**8_J$0q2;)z0ggWLp5FSprhoTb;qWGVStB3w$;cj6>_{>A|!3anI2_OL^@D3BW+bE9D z&dwJ8dMzdJ6%s$Cjf7uD&cAx`?2U`kjkD)oz9`Lcw>jy|obS#_ewb3&pf5FJzd_<1 zX_M|qq?JZ~=*0YcCsG)tQrHTD1!*qz(}2!NTksu?4HD;loCvnw#a%B5%Qh_LKeytb z`!OHWrHK>!u#J-iPwDLx;x_#-q)@oj4|kw|XO#JF49TS)`zDEWT0RXSBlsc;WZS7l zr>uRUTpCdLE=--IbCL@i-`QqUhzvD^4+GAvCJQs*obEKC?hnYR1)I6+d9H&cQdqg2 zfFwzm2ROjiTo$d3Hggz;CWamF8K?QZOOw34-)ivoW?3ivGS%DO-0f|(H;WmP#_%Sm z4dM@PQnE!-(jyE_sO>hiRZj&$%7O^K>XCPB@^ALky*LV?tsdO|Ohy|vFi)dR+LO{l zH17O*X?)f^S=b%-LzmuW{iB|eb^hOX>phN>ZMK(Rxp47gSzj6mI|n;#_q`Z-mKrqg z{2LSFvo*+Qswd4l&#^zJ(mitO2|Sop+k0+)?}_p8*^?&=Z#~vk2dt!>+D-HdNynMX z2?H=ph(RpdH5up!Or{^EJ9$w|{q>OP8&E{;4Ckeo!WX@0=+LC2r?{G$XGF7JEIA}` zhztFhe%=m#@N{G;%p)5HbzosoqWH+lkvee$cNdd4}BS0nQ4gmU2AlFc7DFF z_YCKr&=kaYy}lktt!C2uX{@&mdOhD(kG;2sK7gj2-}}S}7nx6w=ZoGcbTT@$xV-9l zX*tkP!f^~0vOe7n0@76w-BExEB3H-#L(zU@Hk9xYf)6cF$oAM05StEHTU#V(?W;P- zqK)j{dGH}9*-1crAE>P61)=ay-r*4+lY3VPTt756`^+J(Gj)|3Bzq7JUEzL63sq`~MGmXae8=f6!A0%B8Of$BNeuiGM?^ zOdgr}d*v@oH>UNe&rPW#pDDdI@%0HZzBWEF`kl!y6~9yZX7Sq0#sLKsgCT(*J_5T> zeQ%MV-k>^Dt=(VE_F`k8TY z(7?CQv&@^NK0m)J{s>=3++53!gsD zO9X49aNJ*JFwH+7>n&g2ixsnXNi|=hd#-6F8>9;rSoW`BZ&RDCsON(~!Pq&Cd8c8^ zwlv%zu&Q;SHSH9R_ku&j;Ak9JG79(COuIGMU*uq?`0(ZAhgo{-TYR416F}8$vd0X~r*c=d2XMfSZTQ{H%hIY0N(=SF%vJ*sv5gd>&hvxPV zFTQf4e&h1hiz_$IUcElQavT;0kF^&D8HhSBQ?@Y3KL1FY zMtc>wKS;JN$XpqmtUmL5h4+uo9y?ZOV`jeW|A}6(ok$P8pw^}~L?hf297$o}s+mF| z`*$@!E5sBQ|F_!PAlm-m3~T#7ETMsfGN?o1mHl3TVT>j|Ii&C3+K142JhCT1e@UuQWf9HMUvmb_xpBT)TDT5(7&ptTk zT+HEFb3HTv=CSeF=OOP?gLy+)VcCDM+V6XC=J}|@bLS!E<|ikGiEQkhKRGu0;n{+~ z%h6t|%J%xeu7`Ry@+kZ!%^b}l?Vc{f)(Eq(o9!{_?Bl32=}5Cp7s*h^nO?CT8iuvb zy?2rH?&#=tTadxLh;_E}%%>-^7Ct&inQykqI&WS$KG-heFrmst84fqwz%zg6==ki} zu0VGd@Y%kZI=^%_b>w{>@69*w)f*|xIq%PiwbO--2E`-evzH+A(^-SIHyUvNPNZS^ zAH7fh{qcquVL#N|y!qJJ?3JhQB~+b|yiiL1(~-Rkhxs7?))hYNv#EK6@UN(KEcVy*eeSb5)Xc^IosEo)UW@^oHq)p26r1&`xAuXU)6Q zpc-d8yT*8H)|ooxo7%E+aL00QzC#0MIc5?8eY~3tY#E!%a>?{s7MWdhgAaF{Zs*cF zQVtE@msuyZxp{W}zi{{+Z*EKw2_OL^fCP{L5pO;pkk6p00|%gB!C2v01`j~NB{{S z0VIF~-eUx^^Z&jfh|h{&6u&X^t(mI$Gc&Kx{LPs!i*#nZ{0;Hwd#u1%93+4QkN^@u z0!RP}AOR$R1dsp{7$h)Xyj3{cY_6`fn$0MNAGm=J$!hnP>h_8+&Q%f;_#L9v0hh^Vimwlex&QNctNV|o zQ^hMo!d~|`;8$~2v)jb*+U0&zZ#DNke!93aB*o4z?yYtn#)i}F{utkC_i1!^eX<|w zyV7cq)&0kj;kkEy#Ba6pP#j+G?Dzdv+duO+SG-ahZ2#B5X4esSj4%l~xh+mnB%^r4A=F>!V5w@3C4{cG^}q58XPP8}7V zJW;(OlqLjCn<%}$cGnU1Pn$U95zqD<--*IxDGGy~$n$)MR+{1ZMw&L0<)x*zOX994 zG~S|d1%mk@Rb|y!l(j`!m*ncQCNC?sAx?vbHSFh|JM_YHbgIjyYt*WWY+Kc;ZI~7z zx@QwZwlvR%GFCN9yY|Yt6y`byh=x*-wAp-Cd85qL(DM@ia(Ks+=+38|Ax=>~1E0C1O@ z0ZAdRh7@_yPSlDeXCne&Sz0W+oy9a-Y$a4`$A-c!OC6Tm+uICZhq4njmRvY~BZ!Dw zAxZQ0sr^WI&B@1w6DJlg?p|p(-IcYyOTu-3ksSnbN--2$fu>^Z*5qe{RFbW3o4H|9 z>2I)4&C!t90d?n==j6GCIhUk_l?6U3@G*j>jeVEaTX8VA9JYdBVU9HYO$q_BPY@sh zZV2l3>9S{gATQ*T-RnslmmaDoU z8;avrO|wlw@}Z%mm;JDHTMB8q9mSiA0o|g3L|iCs>L-+m0&h$|Olb^(q%R~xICa9jx@)#uuD0en9Ow+J@ehZ^EuqU%%^b#$oLSMTVyfXQ{ys(_ziS8_px`KISvxNs~Ih=R-rd zehfV{ig&U$P9=wgl1(Kb;Ib~;YO=nyAh|T4DYPIcfGwYHFGw+Th6d%amNlZuj4%`xR0<^^Fzh4GdV_3H$p`6yUcFy9o@Bmc zT(*)F;*%f>p%~4k1PY8hH+sw(FvlK zo7dc#L%$vvXjpZytyOcdtvlIv&kHgP%dUEkOQ4NCT2%~>dWudhwPtEI^*pMno@P}^ zCt}uHy_ja$qb3cd1XL)rEN}6RC`nm^1IsNo24(G#L{gHS_LNAV-)YEnP^RzOLqJF4 z^RWODSb&xYpq~-|3JnA*GKCH;B|D+B5l5kahc_on{xp-egm_fih(H+F7y=ES$pTZ4 zm2mtBjGn@^4u9d8AaoQqjoS^-QSKd&0nIx=T-Js-v97r}b_Cj6xSG!o%FlG!$NF+> zJ3lBhYgx1UGGk6Gv%SXX1Fp_WO_Ks<~WM`tUQSLHzsYe&vn;(+tBg4BepACAOtGj&5su%~NWYuIjF; z))dF~h-rY{#e8R zK+$Zj(|n^b7dBz)n;i}CR{Cb4Aj*n9*aTUg?PKO-8(xYmOLc0l>d2bzkg5iMhUr<3 z!d^t7f_&myWF3 z3Q=5JXNar1XX?;};hoLQ3Yv9gAQ3DwMJ5H&y2PelFi~RqvP%O7XLy^8lgdTmh;UjE z%EAPDQ-z)kf27&0fS_#H5sBTbZPi7kCaK!8t}R#FBU_IXd;cFDzaz{P%jK!p$G-`W z_=g0L01`j~NB{}EYXqFbM}%W1gp2u?*ThddQv%t<}+wk^k$W_mva?P}Aa!u<-{gt9vNum@ z2aJ^-Niy?gBLZt(D7|+5m24{CO8vmU1Ji8wMo1SUZxLPq7D)^iuz07LM(Z(YZtP?> z6u-gk+h7)B$uWWwa0DCU8WO=QC`q zy=XMRpvdO88(>6auK+xs%sSf1idm-N#VQ7q^A5blLDEec^Os>T$nxZ`fdL5WQ<1tX z7zr=|!pkU3hPg2eUKAjS0Nz|;Hf!efXVb^H6^5)ZV3wl|o5EX#yKgAW40B*LVn#Wb zZnvP$;Kp7Z7r@j6R3QbJYwv)C4$M?w3Iu9?4C@8}Glb;;s1Ce!`d|y%fw?>|V%9_! ziPb$bH^a+ENCPkl^LN%T+6L}Xk}P(O0%vadAy|Z9;h{mCYby)Vxs?kLoIRZl-56lb zb4$TCK!R*s3YN+pW}nYkCX&;NS;@e!1vclHvEE|gz`PwbnOS>5vRlkj33F_BhZUsZ z!vX-aeuCJ8)MpHNbAj~&-bElq006b|DST$u(F8v8mp(2J;K<}Fi2{%=APaAaEH>1m z1+RQNmAgwb%z$Bb&5`xByH|zWIqE&DNm~SrrSKvOFMK`yk2ycM2lkuDpa;s@U=Pe? zomFDkbn9%u76rgO!>qQf(=o1HYcH$( zIlo;8ZkB{*ID7rFv>p2?SRxsqR{>4i%-Co`OlZJtEvVH5X7DDROTh`)dtUM(FhfIE zU@J>Zrh48HxfJjNKn~L%FLj+ z)NQeAYc1jOjYWR0eNSsah1gm5`IgEY9-u4bWqoknPp=KORNrCxU^!L{P1g-D61yHX zEUl&x)payW0XvaQUC^19qB%F)`iK=SdvVM<0JH=X+$N2fs$?raOdUXjT)t7cduRG_ zK|68&@@~0p5ZYe5yD0Eu`6Yf*zjQS_s=o(82+Iw(VHx7~PUk&5w+hPL2gLRuMk3lE zes@Lfz7```MAiD<%em7a%zRx&mPHhU)I8g90HeZ@1u8mbvC zy|DpG7i#wglSj~&Yy}4XF?-IU-SPvzqRQ6G{05k9nC4EUY#}i-C4m}Y8U@r82s7*M zOtEm&(KfZ&@Sk**HN@n0b`bgq1UlY^^*Oev<^(N1vhbyWm6exa$bpsF2$UNvr|=;s fk~W!&1&M?u7`8xXGvBO1A+?ubftQAS;H&(9DhE%w literal 0 HcmV?d00001 diff --git a/stacks/dozzle/compose.yml b/stacks/dozzle/compose.yml index e69de29..c871fa4 100644 --- a/stacks/dozzle/compose.yml +++ b/stacks/dozzle/compose.yml @@ -0,0 +1,11 @@ +services: + dozzle: + volumes: + - /var/run/docker.sock:/var/run/docker.sock + networks: + - dockge_default + image: amir20/dozzle:latest + restart: always +networks: + dockge_default: + external: true \ No newline at end of file diff --git a/stacks/it-tools/compose.yml b/stacks/it-tools/compose.yml index e69de29..a47953c 100644 --- a/stacks/it-tools/compose.yml +++ b/stacks/it-tools/compose.yml @@ -0,0 +1,10 @@ +services: + it-tools: + container_name: it-tools + restart: unless-stopped + networks: + - dockge_default + image: corentinth/it-tools:latest +networks: + dockge_default: + external: true \ No newline at end of file diff --git a/stacks/jellyfin/compose.yml b/stacks/jellyfin/compose.yml index e69de29..df9f1fd 100644 --- a/stacks/jellyfin/compose.yml +++ b/stacks/jellyfin/compose.yml @@ -0,0 +1,19 @@ +services: + jellyfin: + image: jellyfin/jellyfin + container_name: jellyfin + user: root + networks: + - dockge_default + volumes: + - ./config:/config + - ./cache:/cache + - ./media:/media:ro + - ./fonts:/usr/local/share/fonts/custom:ro + restart: unless-stopped + environment: + JELLYFIN_PublishedServerUrl: https://video.$domain + TZ: $timezone +networks: + dockge_default: + external: true \ No newline at end of file diff --git a/stacks/kuma/compose.yml b/stacks/kuma/compose.yml index e69de29..fde6ebe 100644 --- a/stacks/kuma/compose.yml +++ b/stacks/kuma/compose.yml @@ -0,0 +1,14 @@ +services: + uptime-kuma: + image: louislam/uptime-kuma:2 + restart: unless-stopped + volumes: + - ./data:/app/data + networks: + - dockge_default + dns: + - 1.1.1.1 + - 8.8.8.8 +networks: + dockge_default: + external: true \ No newline at end of file diff --git a/stacks/npm/compose.yml b/stacks/npm/compose.yml index e69de29..ae77e45 100644 --- a/stacks/npm/compose.yml +++ b/stacks/npm/compose.yml @@ -0,0 +1,29 @@ +services: + app: + image: jc21/nginx-proxy-manager:latest + restart: unless-stopped + networks: + - dockge_default + ports: + # These ports are in format : + - 80:80 # Public HTTP Port + - 443:443 # Public HTTPS Port + - 81:81 # Admin Web Port + # Add any other Stream port you want to expose + # - '21:21' # FTP + + environment: + TZ: $timezone + # Uncomment this if you want to change the location of + # the SQLite DB file within the container + # DB_SQLITE_FILE: "/data/database.sqlite" + + # Uncomment this if IPv6 is not enabled on your host + # DISABLE_IPV6: 'true' + + volumes: + - ./data:/data + - ./letsencrypt:/etc/letsencrypt +networks: + dockge_default: + external: true \ No newline at end of file diff --git a/stacks/onlyoffice/compose.yml b/stacks/onlyoffice/compose.yml index e69de29..3ee6970 100644 --- a/stacks/onlyoffice/compose.yml +++ b/stacks/onlyoffice/compose.yml @@ -0,0 +1,17 @@ +services: + documentserver: + stdin_open: true + tty: true + restart: always + networks: + - dockge_default + image: onlyoffice/documentserver + dns: + - 1.1.1.1 + - 8.8.8.8 + environment: + JWT_SECRET: $onlyofficeJWT + JWT_IN_BODY: true +networks: + dockge_default: + external: true \ No newline at end of file diff --git a/stacks/owncloud/compose.yml b/stacks/owncloud/compose.yml index e69de29..8df7971 100644 --- a/stacks/owncloud/compose.yml +++ b/stacks/owncloud/compose.yml @@ -0,0 +1,69 @@ +services: + owncloud_server: + image: owncloud/server:latest + container_name: owncloud_server + restart: always + networks: + - dockge_default + depends_on: + - owncloud_db + - owncloud_redis + environment: + OWNCLOUD_DOMAIN: https://cloud.$domain + OWNCLOUD_TRUSTED_DOMAINS: localhost, cloud.$domain + OWNCLOUD_DB_TYPE: mysql + OWNCLOUD_DB_NAME: owncloud + OWNCLOUD_DB_USERNAME: owncloud + OWNCLOUD_DB_PASSWORD: $ownclouddbpass + OWNCLOUD_DB_HOST: owncloud_db + OWNCLOUD_ADMIN_USERNAME: $adminemail + OWNCLOUD_ADMIN_PASSWORD: $adminpass + OWNCLOUD_MYSQL_UTF8MB4: true + OWNCLOUD_REDIS_ENABLED: true + OWNCLOUD_REDIS_HOST: owncloud_redis + healthcheck: + test: ["CMD", "/usr/bin/healthcheck"] + interval: 30s + timeout: 10s + retries: 5 + volumes: + - ./data:/mnt/data + + owncloud_db: + image: mariadb:10.11 # minimum required ownCloud version is 10.9 + container_name: owncloud_db + restart: always + networks: + - dockge_default + environment: + - MYSQL_ROOT_PASSWORD=$ownclouddbrootpass + - MYSQL_USER=owncloud + - MYSQL_PASSWORD=$ownclouddbpass + - MYSQL_DATABASE=owncloud + - MARIADB_AUTO_UPGRADE=1 + command: ["--max-allowed-packet=128M", "--innodb-log-file-size=64M"] + healthcheck: + test: ["CMD", "mysqladmin", "ping", "-u", "root", "--password=owncloud"] + interval: 10s + timeout: 5s + retries: 5 + volumes: + - ./mysql:/var/lib/mysql + + owncloud_redis: + image: redis:6 + container_name: owncloud_redis + restart: always + networks: + - dockge_default + command: ["--databases", "1"] + healthcheck: + test: ["CMD", "redis-cli", "ping"] + interval: 10s + timeout: 5s + retries: 5 + volumes: + - ./redis:/data +networks: + dockge_default: + external: true \ No newline at end of file diff --git a/stacks/pihole/compose.yml b/stacks/pihole/compose.yml index e69de29..e2b3669 100644 --- a/stacks/pihole/compose.yml +++ b/stacks/pihole/compose.yml @@ -0,0 +1,23 @@ +services: + pihole: + container_name: pihole + image: pihole/pihole:latest + dns: + - 1.1.1.1 + ports: + - 53:53/tcp + - 53:53/udp + environment: + TZ: Europe/Amsterdam + FTLCONF_WEBSERVER_API_PASSWORD: z5fGWz2i0q + volumes: + - ./config:/etc/pihole + - ./dns:/etc/dnsmasq.d + cap_add: + - NET_ADMIN + restart: unless-stopped + networks: + - dockge_default +networks: + dockge_default: + external: true \ No newline at end of file diff --git a/stacks/site/compose.yml b/stacks/site/compose.yml index e69de29..1d3b052 100644 --- a/stacks/site/compose.yml +++ b/stacks/site/compose.yml @@ -0,0 +1,14 @@ +services: + site: + image: lscr.io/linuxserver/nginx:latest + restart: unless-stopped + user: root + networks: + - dockge_default + environment: + TZ: $timezone + volumes: + - ./config:/config +networks: + dockge_default: + external: true \ No newline at end of file diff --git a/stacks/vaultwarden/compose.yml b/stacks/vaultwarden/compose.yml index e69de29..43eab9f 100644 --- a/stacks/vaultwarden/compose.yml +++ b/stacks/vaultwarden/compose.yml @@ -0,0 +1,12 @@ +services: + vaultwarden: + container_name: vaultwarden + image: vaultwarden/server:latest + restart: unless-stopped + volumes: + - ./data:/data/ + networks: + - dockge_default +networks: + dockge_default: + external: true \ No newline at end of file diff --git a/stacks/wireguard/compose.yml b/stacks/wireguard/compose.yml index e69de29..99eca45 100644 --- a/stacks/wireguard/compose.yml +++ b/stacks/wireguard/compose.yml @@ -0,0 +1,23 @@ +services: + wireguard: + container_name: wireguard + environment: + WG_HOST: $publicip + PASSWORD: $adminpass + volumes: + - ./wireguard:/etc/wireguard + ports: + - 51820:51820/udp + networks: + - dockge_default + cap_add: + - NET_ADMIN + - SYS_MODULE + sysctls: + - net.ipv4.conf.all.src_valid_mark=1 + - net.ipv4.ip_forward=1 + restart: unless-stopped + image: weejewel/wg-easy +networks: + dockge_default: + external: true \ No newline at end of file