From dc8d2a08366142a275d3901030402466e6652958 Mon Sep 17 00:00:00 2001 From: Stan Runge Date: Fri, 10 Jan 2025 14:00:56 +0100 Subject: [PATCH] fix: use correct env vars --- compose.yml | 1 + packages/web/Dockerfile | 30 ++++++++++++++++-------------- packages/web/bun.lockb | Bin 182896 -> 191869 bytes packages/web/drizzle.config.ts | 6 +++++- packages/web/package.json | 3 ++- packages/web/src/lib/db/index.ts | 19 +++++++++++++++---- 6 files changed, 39 insertions(+), 20 deletions(-) diff --git a/compose.yml b/compose.yml index f548507..3929dd1 100644 --- a/compose.yml +++ b/compose.yml @@ -30,6 +30,7 @@ services: command: bun run dev --host environment: - ORIGIN=http://localhost + - DATABASE_URL=${DATABASE_URL} labels: - "traefik.enable=true" - "traefik.http.routers.localhost.rule=Host(`localhost`)" diff --git a/packages/web/Dockerfile b/packages/web/Dockerfile index 96e24e4..7cc898f 100644 --- a/packages/web/Dockerfile +++ b/packages/web/Dockerfile @@ -1,22 +1,24 @@ -FROM node:18 AS build +FROM oven/bun AS builder WORKDIR /app +COPY package.json bun.lockb ./ -COPY package*.json . - -RUN npm ci - +RUN bun install COPY . . -RUN npm run build -RUN npm prune --production -FROM node:18 AS run +RUN bun run build + +RUN bunx drizzle-kit push + + + +FROM oven/bun + +WORKDIR /app +COPY --from=builder /app ./ + +EXPOSE 90 ENV NODE_ENV=production -WORKDIR /app -COPY --from=build /app/build ./build -COPY --from=build /app/package.json ./package.json -COPY --from=build /app/node_modules ./node_modules -RUN ulimit -c unlimited -ENTRYPOINT ["node", "build"] +CMD ["bun", "run", "preview", "--host", "--port=80"] diff --git a/packages/web/bun.lockb b/packages/web/bun.lockb index ee1c03f28f0305f0ca7162a30223d217273d62bc..1e7fd75f1f0360d4042a6bd3c994104978fbbe8f 100755 GIT binary patch delta 39444 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 ND{gymMEpwp{{VrZImiG2 delta 34197 zcmeHwd0bUh+xFQTj&Lv#R0I_VP#jQ^85BJV&f=_ioD~HXM3G5x1T{-bOO{@jf9O*=h3a!ZSZyr1qY?YE@+!&BUAPZrI;Jg!>!JG;iw zq?vMB(F}`acFM$dGg4+-W@cpPOvy^gz6idi#ZvITuqiF`8(1wCcUYc~ZjdvQW@Mx$ zTP!Kr6LVA3lP#aQSS&u^--4_Mx!;f*4SByIGa$VYJ{qzvWG_R88?uQZYZ~(B8k%2z z!PmM{@V+6BK-NJ5yA8R{kV_1i30WKA;|IoD#* z@&`XHJta2_VL!vq20J-rV(t{!)3b4~poK~h&;kLUqrh~SlAbX!D<#hoiB@2NvQx8W z(K9C_Cn-HOJ7;><^wjC7=nW(MB;t9|FDV%;63$AcuFVwseYF)bAy zTfwuz^d8Lra~B>!H=uHV=*oNdtpQ~NTw4Ms{3W9PD!0HIm1#0ogJaY0m}xf+^_nYkFfiaK!$ zJP+vxnUbBJIwQwo=^L-x`ykm5=_#`?Oe~fsH6Dx8YQte8BpXa?*wk!GENnJtn89!E zuG>lvJ;9r>*^w;}&b35=41`S0ZpZ0s$?mE9{S>EnQ0kN!8CmG)D~3Hebw+Z#e5{{^ zy>y2s3^}u1dd8%r9CUAb>h#nc%M-oz@J|tuH3;dWCp;}>jY(Llu`AlV~HX* z=4Pd~OUt%cX6DYAGbtlEWj?au>1V2uZC^;P{+%H?V~U69(g@ElXk$e1hh#=xkZdUT zVfvIz%WgL(X?nUPDQn8iq^#@|1w88)ov6zoNG5y?k|TiKmxPA1A|3jbchw78JX|01 z=V0?R@DgNWp5M%|7B)gJKr2H&Z^#Ca94b{?o(*p{wArw3@MFOzCuQekVvJ^`> zH>K(RtJ3oIgcnTH16o3|soJLN=M#TOCS->Hacr3W$EWKpW%`@5s00OOhGQUkerlPa z`%TKuPRYhnJ|G_f99*%G>{G>vpbdG{Fcdat#f_PIL7N%=5+jWKOg0mKOJK7}eG$$A zyBU6IsX1r^izPW-pT0jQ>+vQ{#a<#gDXULbN>VaTk~3dHzq25{a`YxnnlWd3QqH8Q zn0AbB`3@1;#G9eBh0FxZ_z#Ms_xa=_5v>@jXX`RJPxt2D8g;h(aW`$wA#-lcH{zv2 zvN`V6EW?fPvB<9;{IIC7+W7@;^Yw;a1j%Baf@HDN41UG}eR(2D#m)#UG~$$wT6Z7*hSGR)0_xfd`uE9U0J+q@=vF_Dtev30(&(lS8Xg&3kpsjW7!3ynEg;oa* z+gRA`$jv@a^OW>`}+KXsOeC~RZ5ZozCEE%vpEwcdd?QqzWDP1m`7(1vOpHxXks zZ7j4@O?wMklBTu9;xJaUYuCvc$`p;d0xd<;2BGuEYudA#)-Je{Gj_XU#q_pa6g}Vs zY(4L0SUwz@^IT}LVqZY4da#}d3bCuHJ|Ycbr;jLvxa=d!LhQC!oY;C}kT{7V|7dlI zuSg5Et8e&u{*=?VI>;%#(%0r{o zdJRNSxLuvvK%_xzY9Igr@aQ5IoW zeH)3w0J}P~kw}ZQs|R2~eA7sjMcQqR8(S=4NWocT21cuc8jG|jyKO$mG%eYp;W0{M zQ3kF{6ONY57TVNeiGZbQ&5_bnq{Y~+ z+d=jf*P6ttSDT8m7`x5S-(m@dmm-RqMqB&B!e|fcmQMGFj~NkF`d%;bJh|KUU3ZBhtFsZHGYUZ5iqxZM_XEUQ7>( zwRUW4v2fPQ zv3Ay1Ob^=~Xsnr&C?6i<9InkVlq8dyMzc~oVQC54zJ|uC7>$I6)k{)@a!rDzXMuTX z+YYO;$-aTb@og1F@iDHEdNs8PY#RlOtqBW5f2$FOCJ2kRUV){TKLYvCOA+NAqSd)k zBCW4o-5VteAwG=~Wqs{d?`Y&9+6Bbg`cs3mMOzG(MvKA(yX|F=EP4%*i8aO+BZB(b zt<&JvU9{^LYkd}4Pffc84NE?_&N$iWp^Kn_8{EkmNbid0LTxb^~JvFzBC>&x}J9QOh5KFs?prLkkSiDFZYPY?DUgKJf#Rn^?wVNmd z8QINTyE6MmTQg~CtL46KqHvg9{SIEk?6yYTQ6#OC;ANWx3(cSpIdyM$QJ84A)$Cy= z#NO@&3ts3|3^VoN9wKeH-TE%bEUh0qBQcIIEVQA~wgs@zA{;1K?+(MVi)+JTZ9hZ9 z@WR-_(r;_iOCMY{w7HTBiz#5-VT2wu!kjhhW`!riLQ!Xq8Qn7#7UN-c##&tn3$19Z z+?QbCUxBNZO2b#5$U&lT zg5CBg3O)uTh9(w=>#zoiYeQpg_QCoHa2Dl5qitERn2EM@tA&F_S(4rQJ;*pZTSJHN zEQe)6ePDSpdd3i{*&1EPYbt^nt?LAbaO|q*ihH{43jv|chicx{eG##dQ zgw`b1`LLpJ{*ARAfTriqAzlW{h=bPemZ)1=16Y^9iq}T^d(iZ`!tv%h++x9MRp6nW z0g2IM6!R=B3=%d4&QDDodKlUqXPBw5hKT8XW7V?`kv7F{>oh`dOwOjE~7+Y zs$E?(N|dGAZEqrsgB;x$5pDYg7ACh*=+UF~RJ605S~yyirP*!YgTyjL7Zk2NdYhw1 z+cK%yW3<}r0%^2pShRX+j0j4%+d{{h?ZNRfZ>%Uxx2tcC6=msmYwd9s%W$!8NUXIS z8n)@sa>wJDh}f6e$r;KpjS88-1r>p|SNN(~9&xy|gg4UR09VZ&-WO zxk(}|!)|>6WQ5j;KSJXucF|^yeWG3)t*LDf!(y_S8OY=qtO!_WC=B5{usAcc)2!Nk zk_gJQTk|HF)p!ruAg#=elg%>Cra7G=1*4Xxo%w zuyFcMkG1WA#*8r#;B}2WELUy$**UFhLzco~-(f9C!+c9eo59j|*&AT7GWyE>F)Te5 z&N;8?W>?YbZ&>;kZ#gWcsqcC|hSePwcJ&Kllo_IMj@>qLhMsZ_QQkb-CSfsUy_rg2 zu?*OFU_p$`&|_<-Jlhgj>~_6;hm0`fist4P96I)5&O4&2@*;Y$iEw{nyq-~KuhZdskE8Vjy&IQPCEG)K;UY1R;SWC@P%d$k! zLc6VDwt30HGgu#3%o`JUPPA<)tQai+#_J&IvX3??a=f%Oz#s| z!AJq~12e)kS6_&64n*Nb!qU5yBX0vN#?v+i))HFWbK7jQFzWO&U^=dyB?=c|eFsTr zw8I!|Xl9F`#dh`c*&+?1W1c94n42fc7Taw_dHN{RRwUa^SVr|QBHGW<3xMf5CtA&z zBg&T8ZBK$6jHEFvv!ZQ3!eWP^`%wP)x#sBsE0S$BEDi~+1=JIBMbJ{a`mebnZK>Th zbe>*nEHKDuCoHaj7+xKtRsZ=S=mEQJ<$SaHMG4W?&tYL1Lxlqu=nFq4D=J*DKm zDzw%Qvi6LT1Fesyy;7moSVnI8qn(^Jg>LIBw9*PKXt^0RyFxnxt(TUZ(?h1#w?bP} zp`C-)L-T9&u&GU~&~{d6S4~ZgTOooTv)f)@p`WPqn-8ul^~sGHgL@V|SBkR7?CQ#u zB4{nnkE^&=;|7{70~)6aCOvMg>|7Glf^{HjV8>o<+n zCH?LKlpT5k&N$a_)}7?Z`l96L@#ii zYlR5)A>)jQ|7$Y;e=tL~Oiv?y%4V=rAvwY_3_hO<`!ExdT$T~=?<8HaabUb$!~fq& zy38{C{vh+U0EW%RfeFqr94V>JHRL=)&L@clyX{T1o?T;vJ<2frC^_=i8Fp1kN*esX zlPt>y!>_6&wb9@q1Ndy-@}xmfQhmy>DOKV9WJ|4>yI`>@dyLSklG*J8&(UMPR!T|N z62rf$WI7)jJSF3Q1WEq9VSfsVf0oa<0PqJzbG%>#e8Euss!CE{8aySdcNvliUp4sZ zB=;}35$*zc*NEqeQn6res-8a-y+kz)d7mNOA+;3>68|i94c^<3^$h95K>VsomdV%P zDXBKVf%C7aAzS2=#jgcqJ;+XwENM4`uPRy7p5U2qFGKb={Hl}8Xn+w;Np+B6Q&P`Tr$=KB6Z)1g3L1b>LvQW`T(8h24|s>5W9*A78nUqQeAA=RVBM{Ie7X%WQ0>v zU18Xo)2vUsXwJhY`NZ2&ZJc-H>d7eFk4ul6uzg+Ygyf z$LFCi-~}V#5Dok&sU9}u%LZRna?q9-{C^4!m$FGivg` zCe8W(cVx&xS8i0GI?1lSg>a6k+lF7hsZ^B=`vnJ%eihz~SOb!S%LS6*Hl|WVQvVMw zDf9o%Yf6@(+AF$y^XUKSTD1RJdCyBqj(>d){O?Nhl2XfiB?`g5t$HoVMxjmquU=FB z2bYxj+GzZnt||Y6OG=~dt6pQW#`^&N{)();rmX&oj_JJ41Ac#!X5arQK==Q1g#Uo& zIptoLl>K>a$r}G1*OdQUQsUARJ^IfjCC?E5TvGmXN%_wurRASXN?uxWLHOsAl9!tQ zTvBo@{Bue9cUOs?L-7)sIMx=&ajYZ!k2#dOVh)bpq6Ei!qV-!2#YZf{ z(N~+o3cN%W-TdN^$fP9o}&$jl>!p8;i?0HW6{h9ZFNN0Y`sPj$?r6bHbrC z6WefXF7DtMCpyfCx#tsSV|EWXl`p8`@{WL*I6eX}meC#eF zKTE)S=!-sc2-kD&;v%e(BJ^{IcoEjx&l8lHD^X{U@g#=}+SaZQ4d_Qp)w_uGI zabGx;31S0|NunIbiK5S!4rP+qhGVk0gJX&qTO&@E_Re9 zD2qfnth{g0KUWfzC1TqZ^v`$bpQ{PVQZe`{`UloQSPu&28v5rF`sZ4LvRo9win)yb zxt^drERwFHe_$PhwNiN9K>w7Xe{LiwkBFnNdS5~Re4l`K2Qt4$|G+v6O9=mR^v_lF zPkDl}R+PXRaSi?RLxLj3q94#d*U>+)Hi*!h=pR^XZzd?4L@BJPH_$&nCMcW5njg_W z-=lwEJt5+5p?zZ<*46J3CfdV+fS(952)YI3Ca#J_-BXmwAhW~PNCd( zD7(Z+9CwQ%91Df*jzifal5pHB4&%5_c>Ur~o)M`yJ}ZvmxL?%&mqRHMnK&L0$8mg4 z`2Xrqo)>d)JSa+Vd_lDS&7m9;i*S5VoX7F72>somyd;+6__8R)@rdYf*P*;3*5LT6 zxQyd#YvUA$QoMEpjz`y)eNw^6()?@%0*gH?#PY$D3_UD zAa0X53qrkVkpZ=p;c}Ndn5DJB+_K0I$c*p+6Iln$&lb734j9*3U@nrmW07HX!MsRj zZCx<`vdFKQJhgA;t1#ynVK@u)fsSjdVT@WetLD*ywi5PDX-VH$1lt~RhTq1Fd zguC==2x5IbXt@nR)RIR@^!5P}=m)|}X8M7+P2wzxI?}%ph+V!QmNo+6ElWs@s1G8t zF$f>Is4)oF1|Tkys4qjCfOwI_+9n_x%2EYzX%1pp6A&rQL9~`dBx0I^ z@D2pgMkWP+f=mhlaf!q+68)uDD2VlKLF9&l7$}dD=-m!PU>JzOGBXUs zZ4zfm43+-jAa(_VSQ-u@QI?Px(H=x(1PF&*6oG?l2#AX$M#|7g5HFHg8wp~xEG02D z6hx0G5M$+9ZwP9iTHL}CnxNpf2Zh*l9GtQ|n4$iW>z zoFj3N#1yG?1hFgQY?r|B#x1oF1HuP?9Yn4yAu*yOh{!G=X3ItRPjk{W7Q{sob7W{& z5HFHg+ZDt-SxRDRClEd2KrE1J;z0Oz262l-zKn|p@eYX{@gNq-auRuV5Q*JDERox~ zfoRnQgta?}rE+k05a&o7B=MkBdVpBg6+}u85X)r|iI_ML-aSD)ER%YIxJ2R@iIvi; z7l`%oAaZ+wctjp0(YqUnz}_I%$jsg#Zj(4mLP-BUAa->Jv9u3}wXy_+vQD<{3nAqq ziuLk5#ReIQ@uF;$%PBU=Qi{iAhkg*7>Wh>=;Huydk$yV8=jlOb#9efgJ|CZ;#Tk1Z@~w{iXe(ju~)vH~-Yog-Dc|;g2v}&d*d_>uaUHSMh49vS5MY zEca$BerjIVLyhMuWq&N0M9Ci2YSCzb-Z(8GJz2Y#wX(UHf8J%rFc~~Yxo#xn=46eY zWRzzpv-!~4WU3KSZx-3M0F|1PVN|M%Ug!eli1iEncL1%a4`~^1M$_W`mV!RHh|l_I zuI~6NIypJ1DOpQr8OgTS%Hus2?s#5b&O&14 zQqGKY>utPdbn=WWzNB>0pOF22SN|btOMg7C;v*|Q*W%B#nJ>ns_8VaM@F_JP$M820 z9DVpWn-6698*KRTC7(JPgC;RJreDL!ctSVSAo-BJh^gQ=%;0!S&wSG^(ct)cQeWu& z4L3NnfL2&?4uh)+eWc+x!r;)QmeoccBl(6F!&x(7kfT7bW|%dWO*G>O@!nFeg54GOG6m^%`qJ7Lcaj8+4zPY)8=!~ zivWM-+j)FDq)cP@@VjNi4FboPxLQE|Z1}Z-J{lbT z`K}!PS=s_)z||vp#~^Q?VGv%#`&2%2Raw}FZ-vCb?f`TIVgdZ07fWZr4s-#!0&ze* z&<)^iz+ZvifV%*158jcRZzv4|`9=~a*8$);fRm~h&>QFja6%=>@*k8sZk(i?lfxAG z%rzyb&jjck#vHbjfMg&Am<&t-_>$El0O!>j;8B3n=`mm}Fcc+A1oCD7n~G2VGN_zc z4*^*1w3ob=!0mpZ1<(>`4Fmz4S;0ViAOr{n!hlF13WxzZ0m0WJdH0^b3bfXe_U=0Sk3i9P{r1-1hlfb{_1YULbT z3#+)O%K2mr~_mHd^PYL_#OvN0G(lDC9!k?x&m=PJkXS{e+EEl2K<6d zuK}ERKL8zoSm0SCupcM_4gk*q&jSa67l1>+i@;&vCE#V?2=EH*dAk)8)o z3-AQIxVYB=d;nL#8MqC{JHQ#>L*NbI7;p=Pd=cPVdQZV`2f+7w`4aJJ;1Pf?AwLZ8 zt!S>TT(7f%9AGWdsEfFKK5!oPCqRBKjCT>x8?q0O0B}j`4|D^%13iG+aON|cmw>0C zuVG|>i@!Ix&ms9*?@6RJ1olv1Ffb743Cu%SJxIRcI}CC-fYmDBk^*HiFdmo$41&YM zNTd~Xo}TK%=9$J7W4Z)37w*k~1bC(>1h)a$1Z)OY!8Z?bK2Qso2DE}-Yaj?{1GEL& z0l{3{+d~NfLV++K9EboSfhZsvhygkRoq*1O9q0md1@C}1=&1{e#B1I7arfFxidFbPNo zQsknWN|U~3N!|m+*EEj+uK=$CuK~rtQQ&pp4d6}S81NSGHt-H`95|uMvYSc+x0=xT z?l3mQPv2BJ{*6WLn22O~65|PKEHDl@jRu?m$&=9-!!~)(&k%@T#3i14T8u1#$&JeU zknaIJ19SWz1!v9yE;lZ)Is7;6O>m1&`AHc% z79&LK8+I4lpE416ZcuH2 ztMvX^Y1yYfRA0ac;LgJv;MS%NzzrHVZk_-)dfWhVV|X9H)xQQ14uk=r^7EgRX!mYV zV*m!n%ebGFhWR{GcL1V+D1gB{b5q6xJ%R2(4}cs86>aJRf&M^0z^rp0=w|&`NBRu_ z=trAjY=a@dV5}S3Ku?4*4B$X#<}5nr1?LCn$qZmRkPb`((tuQ8Dli3@45R?b04Kpj zAPJZNaFWae<^n9}93UHD2hQS-G8ak?FdN7N*f^Yp^8xk{Bb#ywbcQVk76I(#0)UAz z9xqHDgJey&01pFC0^5OYz*gXKU=6Sdc%Uf`Ok^b>fJcB8z(c@;z)}vthWQUbT@EY* zm?onvHFQQ@1<;2a(`NW;faPIXShhz2mW|=`WxS2R24Fp~4p<9F;0b{7j5^e_Y=*&Z z+yS@%tgtp@+sg^RC~fnfgM9!f0`>#X0?z>ZfW5#Tpb*#%>;iTIPXk;mNWz)j#5@DuP0^4Ds22l6)X zFF-+aSpb$8O{BF9TjM@(tU31>H2~Jw3h4s40XCo}z^3Kqge^)Ro;i8yXZN%O0)gg0 zGax?z2lfjyZ3r+!c1Z*1{UO;UJbiQ9$qmk5>5_WztFBvkX5~hS-Qx|3R?F9#kcpek zXEqy~urYW)pb_8?Gy$3dX3MaEEY!VPrUk<2!&YF+@w6WdaGY=edvfm(3x%5r?hTG2 zpcvrDX7h1_VTN(jVTLoT18j~L?m4*sV8W(IR(i|u$8$N;hrRn+b?cb z<|DA`hJ^{6i7_)K&JtHG1jE^Ch(u+$iOz<1h`d zA;1Ng0zCzo2qXdHfNb#GDfNUL3)vg!1;hh!0C!M5fSy1%pu1rYfE)<0b@~B)fj$7o zRsw+VeC=M!U>Jjdk-$*E0dTMk2ZjKgI^@X_iNG*m48S<_A7RMRkfVSJz<7WaV8xOl zS!?PXfRi;H{htP9D!^JYFco?Zz;0nbWdUq9wp1oi13J4a8#+1a-GMyliy_&PBY;St z7?=Zo9zdI8rWBI-JOuqg_WuLGQeYv#(#9Z={mKZOxAy~#umqC+oX-p^fOLag47ms} zXAl>oZvpzzXF0IU&{=a9g6R^i_u;S?*aNHtRs*YmM}WtGHGlvfUAtRtX5S8N8?Y64 z0@wm<1|A1C0ULo0zwvWYCt*#CbW_w8wwGbQ1RP$QskYBQ4(%P_ZQw0{t;Zf= zg~^`+P68)@cL9boP6Q+uI!=xRpbyXw=nI@ixD}F(#PIiFQz!QU^bdhEz|>0$v%wgP zmftGsI-mQ{U_Z6nUohy~&u6_-oH z1Pt=|@wZpiar6iYMjM21Y%t`9v;mJceemnz%G3`lauwsU_iDl8m6Hd1x^Cz>y3*q# zgm@xk*08qL!1tD}(o>BI4zYZz$j?}^+wiCZj}~>D&u!T=Wq)P9xL)yeMe0pdZ3A6U zFn-JE5g)XL7HTOy1Q&;H|O`H(HKmHGBj2 zqtDN+^jK0ue$Uj+zqY)6_rkR6u7Mv^dYFHYd71OxspGvm=2eCqsUhv|h--e0;T@Mj zvgf7guUC4Q-)->y<(JSQC!$g+Lw>FyS0JvR`S-0qT{5|6=(-}o0)uirEl^*8jDMakmW@#%oE~^X~?IJxq5ZC;E#FmC3FP*tOX;h_$`6Y=V_S0?r z8hP!k4B6-+#~`ks`O%6!JyXYKb!qu{rN>(?ay327&s&si^KA5HtIGo`J@$CWH$Bv_ zDDxXNFW0SCd+Z|{7CU48L7!oinqRRwc=zfLZVgTZR)*a0kZo%rb@RJ7HF7>kPJi#F zTItcYmYe{ODDz7>G2hP{=;8TbNu`JREuDuS`R(yT&AiGgLsrz1&oHj}t(I@&0$p!) z>;7h?hxvV;=$89p!v1x-XJyE>TJl$x%>1IyunVtkd+^6a4Jtj_d&&?`q;7r$sL|Yk z%EkF-3o1R#&ji)_swA}SukZd^8M4SzE<{{E^Lsm%$*;b7ZFS~nm&g4- zV(y@IPkLhRH1JvHg$U+{dwTDf@yxj=R)zKNwW{`>AJIMYylmLbR!Fq!D_rxFHqa3hJ}w z;HMW#mRwVnBYs$Y<>ygq18X#{5B%igLsVZmqmJ5ui&;n`7~AWpZB zN@){$y{YBxC#mX(yB>n!zSkRllNF%n|54b>cUS)4P&hDj506^%OL#HGPoY%nje|EJ#NFoh{sRdt&CgUM9|}|3Xt;=*RQ$> zp?hFL>}TrLO$gniJx;DXM|E)-JUMIG@#M;Udwa^?8TSC{-2fho6P}oMWw%?uN{{NM zik>Q_NF0|yi-Kg7FZ$H{rqZSjCmLi`f39|^V3Yn%YORehZWmCR2AbqY0Tkz_|wkF_egzY(JNT5Eym~f zY$xz;4b=Cd3fk-YvD+)_<<&htJ65ZG2d)F=+YGPgefjdc{eH_;6*NmQH)4;rmmUpK zO!E^Wk^|jd4ai_ADHrM(cswy(;~muN~|r4?jf?apBm;DfD&+z zIl(hHcksI%Kd9VmwF!|E{E+{>HzkpX%l)BO^CoqMJ^t&Zx)mks9wMJXT-B(X{L&BW zN>Hf$6};gT~l_p>L*An&D))2uWs}+zZ-Gk!fTuNguT*1JBwr5;KHPa{LCMXU+rE&^Z2@k^bA1LR=dy8Jj}0G zgv4(gf2c++oW-$g(?YP%7{|Egx36BeT<_K5vf8!MquL#x7PqF0+>5w=)$ZCfkNqz4 zOQv4!9!2vozc3P1yH&XI@YmZa^TqxqxEbPByYtfGR=eZWLb}Gt`H1UR?XFStNQ{yD znR>OmH_gNR!pG5zYj)M~>GgAE$*`~copH?%mbrS_+q|eecCyl=+MTYJYH=6YuQ^I) ze(q@U`7Q?%+r?Z|m6+hr4m?Sfcaa6n)u85HU2%nv>F_+JJ+9yjo(L>x+h%FXL{B9E zA-vRjsjGYsX+@ob&E>sx*{3;015UVNaN-otb9p&J>LTQVfBo8Sojp{9V9;`nvBpWi zK$OEPPQUa@S$KJN*2vPG@Ce6Zjj8A#CkMeJstr79BaQ5S(-J3iTf9_D1A8IdDMN@m zLPkC4KexldpN{FNM+HY&`o_sG+avX<@L>Kwe$vc)+wQNsXdWmVZY6j~Z38nuPF@Yf z#9I|7JGQ`V-Vi5ev_Q;#h{;RQO&glO+F$Ja5iw)*avhFa*9O!4r55S{^<FJ4}tt%v*iJsGceN6fl*kNLk*`?#tse)OM(@|SY@WnRySZl1K=7-pZ4}Nz* zlIQbpBaJA1k674Ce$^Tc_C#+P5`=Pv^pSmo)P8FWK(`i`%; zE7;vq7io%+1043p>D zAx*QN-G|8*!Pr5VUs&7YKVthYOYb&E+9)Ng|c2kFVnzq18YOIhH6_1*1vy zL5g$eaQQmYs!02Aob+suGyF>q+_6O~852@H*Hw(HB7s`oI2G` zJI&+YPA;u2+(yW{A^N167=rQ|lS?15?l!+Vx8~3rZ=?oAO6bFut$PijjLc19THjj^%kk{{Cny)ZLLrc)Xl{;0AfeW~tzv$*JlXXI4$Ml^aF zLo8&Xeg<_O5jN~pjY6KeBK5(yc%r<{H2zQ*IjkcFnORY@^Nbez3#V!`Ijj)Zd!ooj zXPRyP7gG2xS+2q-Y}B8VIO*ZX{Tw6}l3;0{QvVUek_fO!# zwuVPvgm|K%ZvQfG>gyvO!)hE3hE3OMgq(r6X&JD&K};U`#_L;ZZMCY(C@|h&%uhfj zp1In5ZieSbEnlrJ8{xstT&P?5m7tz=omJ%lFx}e!_Bl_(ubt*l`DcD_iS1cwjh=iN`#{|1&D2yfIVWMhtaH zrfk~{dCE-Lvl}khu3&>&6Ror5ftS1O`px5M>;sMdc_mx^+6^%)w6tc6 z#ai5OEQ*%Zv*lKJM44azeDj&v@wJui^Wb50$GvV8Mq2dcF39hx+4=^_{7UWNVFmM^ z_1tyaQ+aK+jOc}nVr)%j_Ch(#Z*3O8y!??1=b~F67p_w{J7cr;R4+XLcxtvh%@}Bx z3j-139?vW=fd05q$m)$rUS&72tGC|IKlR2*|J!+TZyzLQeu{E@@2w~A_j#j<))08W z6=rdpFTaFGl=&6T0k0nDGAsZ0*6;||7b^36o!%aOMopUfaYwE2(b`y^FN6DH+?ikQ zT<2L37e4lx9$M;nx)*9WwLs4Ai~P-RdVX{Dr3S@Ke=E^Europ@){y(*5mnt~ZzwK~ zLM+u?vg#q3HRSJ%TiuNS-J`mTcs*oy4cRXNC9CdoSNFgziUN2Mf-!6T}=nI~wYYxX%dVJ<0Kj^1+cS~8SZ~O3&tZ9GbR^2TV zUfhRO`;bfz!9%hcj9cBU1Kp$AzSB}&hX-tkTkY)*JuV)Seb3aZdq}2xRNHr2>UckJtWiPR@--4+;A7U0&)GSyUn7<#m$srre596E8U~ozSC02%_|Qq0a4XGB-7(o z+jm-A^xYW5O*8*bQ^xxDYb{*XPik{E3=`U7eyTP6(MfZUZr+M(-$z#H=ScHouDy!K z$$8#wva~qiyuvp>_qre~xXJ5voC37jtDUut<%;K#+XHbu`sdW&TdAjRe);uEY*Nzk zumQXZ#sk*i=y1!8m2$!$oF9H&Dd!Ht8Ajijc{jo0@W*O+Dw9{~gVMb1jEmTaA-GX# zJe=VzP&{Pzaf&SQlc$HM&-U)?xh6F0(p*yqfGB;f2g|3 qvXQEvt!vJlnJL-rXHGd(W0X2gk%PvlZik*5t>&#b^h=q#MEyUxvct;& diff --git a/packages/web/drizzle.config.ts b/packages/web/drizzle.config.ts index 68c7c1c..af245bf 100644 --- a/packages/web/drizzle.config.ts +++ b/packages/web/drizzle.config.ts @@ -7,6 +7,10 @@ export default defineConfig({ verbose: true, strict: true, dbCredentials: { - url: 'postgresql://postgres:postgres@localhost:5432/db' + host: 'vash-db.c0n0e8svjact.eu-west-1.rds.amazonaws.com', + user: 'vash', + password: '-Gl(WO[45ISyqW6R7vy3DMY2x1a|', + database: 'personal-website-db', + port: 5432, } }); diff --git a/packages/web/package.json b/packages/web/package.json index 4b1d3e9..785f74b 100644 --- a/packages/web/package.json +++ b/packages/web/package.json @@ -23,6 +23,7 @@ "@sveltejs/kit": "^2.15.2", "@sveltejs/vite-plugin-svelte": "^5.0.3", "@types/eslint": "9.6.1", + "@types/pg": "^8.11.10", "autoprefixer": "^10.4.20", "drizzle-kit": "^0.30.1", "eslint": "9.17.0", @@ -44,6 +45,6 @@ "dependencies": { "@sveltejs/adapter-node": "^5.2.11", "drizzle-orm": "^0.38.3", - "postgres": "^3.4.5" + "pg": "^8.13.1" } } diff --git a/packages/web/src/lib/db/index.ts b/packages/web/src/lib/db/index.ts index d386632..f7707fa 100644 --- a/packages/web/src/lib/db/index.ts +++ b/packages/web/src/lib/db/index.ts @@ -1,8 +1,19 @@ import * as schema from './schema' -import { drizzle } from 'drizzle-orm/postgres-js'; -import postgres from 'postgres'; +import { drizzle } from 'drizzle-orm/node-postgres'; +import { DB_HOST, DB_USER, DB_PASSWORD } from '$env/static/private'; -const client = postgres(process.env.DATABASE_URL!); -export const db = drizzle(client, { schema }); +export const db = drizzle({ + schema, + connection: { + host: DB_HOST, + user: DB_USER, + password: DB_PASSWORD, + database: 'personal-website-db', + port: 5432, + ssl: { + rejectUnauthorized: false + } + } +});