From 432602e35ea4e11827a19e97b020e27beafe1b1c Mon Sep 17 00:00:00 2001 From: shuuri-labs <61762328+shuuri-labs@users.noreply.github.com> Date: Fri, 13 Feb 2026 19:07:01 +0100 Subject: [PATCH] Add Reverse Proxy documentation and update self-hosted quickstart (#594) - Add Reverse Proxy docs: overview, custom domains, authentication, access logs - Add Reverse Proxy section to sidebar navigation - Update self-hosted quickstart for new getting-started.sh (Traefik default, combined server) --- .../reverse-proxy/custom-domains-add.png | Bin 0 -> 109998 bytes .../reverse-proxy-add-service-auth.png | Bin 0 -> 73450 bytes .../reverse-proxy-add-service-details.png | Bin 0 -> 60469 bytes .../reverse-proxy-add-service-settings.png | Bin 0 -> 58331 bytes .../reverse-proxy-add-target.png | Bin 0 -> 59018 bytes src/components/NavigationDocs.jsx | 21 +- .../manage/reverse-proxy/access-logs.mdx | 64 ++ .../manage/reverse-proxy/authentication.mdx | 163 ++++ .../manage/reverse-proxy/custom-domains.mdx | 166 ++++ src/pages/manage/reverse-proxy/index.mdx | 281 ++++++ src/pages/selfhosted/configuration-files.mdx | 869 ++++++------------ .../selfhosted/identity-providers/index.mdx | 4 + src/pages/selfhosted/maintenance/backup.mdx | 19 +- src/pages/selfhosted/maintenance/remove.mdx | 2 +- .../scaling/migrate-sqlite-to-postgresql.mdx | 124 +++ .../scaling-your-self-hosted-deployment.mdx | 96 ++ .../scaling/set-up-external-relays.mdx | 280 ++++++ .../scaling/set-up-external-signal.mdx | 149 +++ src/pages/selfhosted/maintenance/upgrade.mdx | 16 +- .../migration/enable-reverse-proxy.mdx | 318 +++++++ src/pages/selfhosted/reverse-proxy.mdx | 6 +- src/pages/selfhosted/selfhosted-guide.mdx | 2 +- .../selfhosted/selfhosted-quickstart.mdx | 85 +- 23 files changed, 2031 insertions(+), 634 deletions(-) create mode 100644 public/docs-static/img/manage/reverse-proxy/custom-domains-add.png create mode 100644 public/docs-static/img/manage/reverse-proxy/reverse-proxy-add-service-auth.png create mode 100644 public/docs-static/img/manage/reverse-proxy/reverse-proxy-add-service-details.png create mode 100644 public/docs-static/img/manage/reverse-proxy/reverse-proxy-add-service-settings.png create mode 100644 public/docs-static/img/manage/reverse-proxy/reverse-proxy-add-target.png create mode 100644 src/pages/manage/reverse-proxy/access-logs.mdx create mode 100644 src/pages/manage/reverse-proxy/authentication.mdx create mode 100644 src/pages/manage/reverse-proxy/custom-domains.mdx create mode 100644 src/pages/manage/reverse-proxy/index.mdx create mode 100644 src/pages/selfhosted/maintenance/scaling/migrate-sqlite-to-postgresql.mdx create mode 100644 src/pages/selfhosted/maintenance/scaling/scaling-your-self-hosted-deployment.mdx create mode 100644 src/pages/selfhosted/maintenance/scaling/set-up-external-relays.mdx create mode 100644 src/pages/selfhosted/maintenance/scaling/set-up-external-signal.mdx create mode 100644 src/pages/selfhosted/migration/enable-reverse-proxy.mdx diff --git a/public/docs-static/img/manage/reverse-proxy/custom-domains-add.png b/public/docs-static/img/manage/reverse-proxy/custom-domains-add.png new file mode 100644 index 0000000000000000000000000000000000000000..35eebbca7b1e06effed4c9685b1c7c598c433ea2 GIT binary patch literal 109998 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 literal 0 HcmV?d00001 diff --git a/public/docs-static/img/manage/reverse-proxy/reverse-proxy-add-service-auth.png b/public/docs-static/img/manage/reverse-proxy/reverse-proxy-add-service-auth.png new file mode 100644 index 0000000000000000000000000000000000000000..68f1da64e45e778045895a5f4a1edda93063a1f3 GIT binary patch literal 73450 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 HyZ`t<-l(%Q literal 0 HcmV?d00001 diff --git a/public/docs-static/img/manage/reverse-proxy/reverse-proxy-add-service-settings.png b/public/docs-static/img/manage/reverse-proxy/reverse-proxy-add-service-settings.png new file mode 100644 index 0000000000000000000000000000000000000000..ebdcc717add4f475acad639d01fb265d885026df GIT binary patch literal 58331 zcmdSBgua zn`AbbnQSKc%!E)`X%SdxOlTk=AXqU`L3tn`kU}6J;B!cDK#nQ6Qxf0?Y%edu4^%$> z`4I4+Z=@<_EF}d*0Z2mv0SB7`f&Hoi_+bKmKtN#Mf`A|ZcSOKXHVYUC6mSRrRh|X% zZ%vTGEYN?`z~_K+pf3snVq$>1f`Ofpk(K>dYlm3D6hZ*uys4t9gQ}Dyhk>;vjh>;k zz7dU!rOhuAATAdUK+@94K@ZQx(!$D~!-bpRpBfy1^sj7M0=$2!IGA%2s7lG=30T`1 z;jz%r(a;g_K;z-zaoHIfbI1z{|BoE-#7*$k!NG=ume$$XnZ}us#@fz=mY$uRotBP) zmVtp9P=ngu)yhH7h1$xV@c&-&?|TG|><#QpZ5&Lkt?+)mS5M#C(Se(Q;8#Px|NgI^ zMlPm*TC%eLA6ozhX@8Z_($mn<{(d)rlfHruT*qOQhssH~e z`P1TGl&XIySyU#9 z-*UUgbd_ZD?Uld({PtqY=kd^NHWiZ7=A+zt--Q_r-r#T6PetbZY zt9pIqaktLYQbcwK{s_sE0y+KRu)OY1_tpQ13L*pm%M-gH%TXEJtK|Z^#FSWdlF>_;>jwm|Y;b7PD?Q{z};_P=Uuf@yxB;3`Nam-G#$F9i1bR_XSqG$t8r zlfDi{>owW(Ce4_|HbLaiI0F{%#4$Lc0cU3XA!VC_5w8aRN3URPz%6uj&bu1)MaqfZ z!mR#VOu0~u-hV~|qz%YeDzh`^!w_N~e9`44snPO{DaQIYAC$uAS(xviPzduheQltI zZD58zHWukL^rpv&VNDEAeuo-jy~6s_kfsqBA`+6}>_O&k1-WU(~qiU5cTuSNCc9W6F^q`VoVbEK}9bAz?k=MU2)m81*S!jFz;fwBdV{ z!i20G9KRozD_(-DB~<;)}DJZoiEX{W~>wH zQKDE(@Q@e#?@VU+0XX8p_9YPf(8L&y?P}IgkzDpjzk={6pxG$z_H;$X??#s|DGHsQ z|EzKQQ?Xob5P~EW)R2L-{oW|Kj>lsl-;3Io)m`ZlPDwD$3o5lb`p;lN_q&r=YK?jq zNo&i&bj}9*%w$Gm^^&puXxjuJ_gJ zs|ntBw(BGwgJy)3T#?8Gs|E+g-ILWSg?fuM0@gK$xW

50Cqq`G&>cNKhMA#@2SO zX?YTl=1NAcc1L#4TF#vIxG&0mK{5`mf{95;hQAR@7!HC8!01rwZPlmzWhD2;rT-rb=u9T0`IbqWf_}=hUYdflsd2hp&RWm9EFmEb=@V`d>VNp z8ke_xMwl(&vSxytQYwW>EMafOy5oCvuqTy9gBA0!Tz}D2?x+vB3qHcfu;#87jvN2% ze$Hen(AVkXd2Qh&{je}Xk?6q%9naIzk*j6>4`8mL--t)+FSq+sWt`vL?$0b+Ti^@G zus|F5`T6s_UY{7A_NT_R@J{3kbA-Y%=R;CITr(IAC$XrmtL=Z%{B7L^kpZSH*>A}m zKV&UH)US)vZeI^Th}>m;=Xw_CF~lNl1JUH@#{BuDrRVsSRGGm#!1h8z@aLmPmpi*z_$o(s7j z929lk3MKuvJ4XB4ek2R{Y%$rhxl?~wo1}xRgW4ud+THMeU-KX^MkJW2eu6zp6@roW z+eZYCK8V2=hzMb#q9&5wnsE!7l0v!Y z>wNC>hSh~~|G+>CN_EI%uTx7l<$AhmZDCacJ`=pG#7;6t2f`kB zEZ6%r=fa{-y?9*S{WRDD5}Ns<78*aPBO5I1slHKXa5xSJVB_5Y(Wmmh-Q+UTpla@{t$!WD3Rt;g<7JExcKdLjAe9OjvOCLucG{R`UUBfuy z`@MJ{^Z*yb32)7jQKb;1h-Dx)2EvXCvzOOv{{qcT{&{HRCf&$AcqoiT83s3*CECNZp zXd1T>7RzNr;X^`Hl-xBvz$e2@UkI3o7(nw&YgMiuM;3K!a4s3v*G$l{i1#^ghZQ9#YkNBc1RQr5HV6cjN+`B!r7`+3P@de^z$!Jd`w(t{Y>- z`|XjGN0N(-=aK=~+y|}Qpx;L*9Bru4_N-+xwto)K20!Sh5{*uK>(a|^qE0i3#GU7O z8v9<0x%*1Jx%rXJhUdMQi%TQI;e1xfeQ^8v=f%L+3whrUAJGO=t=p5StiAC6T`vqm zf{;5NC;_HpYz!(;%>Bfis>Bw{stCu5hz;sX6I%B-1`unr>s|+Gc<;(sLg9i%>@ADa z;nNfu>m2Xiv-0E)khn5BYZV$1+QWm7m!DGG--ssQZ zu1Uy4zL>Ymjfxyqbd7{p(?385xu`GrDwMn8pXfeZ`~*P=Q&p-(yDXazhuCzjFKBz3 zFnEuh;CUZ)$(t(ohxjDE?%^txMtPOaW}9Pv_ago8dNu|M>@zeW67=u^LAQWE@tfv1 zE*|5;Rz}x~&+OlI-zp;<3nxgSroq15o-QmXLfG4mXYy`X&I!LV4VQ}Cvj<>;nRm3m zjv8LVC!sTe>4m*IpRJlslPqnaYkNH!B{SP6Bv&9G;!)AddtVt26y1c2t+(xgKEcu9 z$b_gv%EN?plkV{f-LtJ@8adtzK&~$zD|Z<_6=D4{GmBAHPy3nPJVIDyo(dL|D7+r; z{`R-ErZZ_H)sy~t&IAd{Akd~WV#P7NL?4&Div~C z^_FYKTgHqzG=FwJcvqe z*2|YJ&pCDm`6Jf>#w-0z#cZvK7eG(u7dQodbV6|`*GDou=JTbOq-sI=>@F8sP}CPn zK>U!aZM~ffUaNmbfiTDszT;^RY^m27Q|-i6Ji*71DUc@qu}rO`<(a%}vNQ322Ml1x z9a9d5Cx`95q@A`03H6N!_G-v{4Z9-0mhHna(eXnK)-)dVUH0#lA7JqdhU05ND_ud0 zM67jmKz3XSPr62gy<@+}|Lw7-+DLRJ-$}cv+#$X$Ec5qV14sZ1;%S7>6kWh4H$3LS zJUN9+YCFzG3~Sdt*K%FFvaq{s`91b9%E_tb1O9Zq6m52NevQ#orEO*&P_Z45L6MzSmOX zVclhZ$KAh1`R?n;QO)wZXA2y@7Sz(V7v+@LmTx5GYy>?fpX0%ea(CaCQElCXt(AeF z$9FudZC1ow`3mFAbY?Eq6+-@loABu(49>4TImI)Fac+r@phVa}D_Bevuifu{6iUjQ z19@OBxU08G{&#`z16HmCvZS77wdgFop}6BhOui1XGg8X5Xwr5j@!QM*mRgWhAWO{} z-a}CecIP3Md#5rV>;l<`aM--Q@T9wTdf=|M#@KVOb9U&Ow|ekgXMLUoR$%&Tljqw> z5L4DiF3WG&e(`Kotl2x|*r6-Y8lmQ(N<+lKRXpOH@$K7_nZn|;!rgEI=>Di()=Px_nSyweX~)cDqoMpWWa zMo?3C`XmyjRlvcA%F|a~m(opt0YZ2)kcRHIX0hrW6ZD;?5}J0GP_brZADQ&Rnj4N? zY660TM=lLS$_kPu8XG~83x`4;-lj{1u*h}VzqMW-)wClq2FCHVdwj?{rfw(@ORG0q z5xYBC#y_4fx7%B3wlq6Pf7g@srucx{nOMPDxociYZs9le9RWi7K#XBxyC;X!AT? zSemQ{0+2rlTu*sCn){P=@)8xAxP7Hk5@PnP({!k&e{eSyDB!ReAl{e@aOEGGQatZF zo(eNDG4QSj?->b)-tVSdcnxaB%wFA~i zXxocZ8|KYx^Lxmd7yWC?=byf)JYO0N7~YL`#JTQ;Aydn{o#?e9xK1ZtW9nKW)Y{RWjznsN4f<8;Fl!2Hp6qCZHu99Vba#uNGwV=o!iI2ZmX~>gOTe` zcix~qZ-1=*#M1gX5!ROJ^?az>c+QTp_}YH*H5xjK^i4MLz3rv8W`&c3B2kyKd1`xG zX7FKSU~n(;c&weQq#=XQT=6Tjg-31%?#G=8sE$y*$+m|03R$sn^M<=&6p7smF>kgJ z^T`8na=9P1n|i&~cj?VTOEo5jLGuVfvdQHQHwp4a!ztG<4LV-mG~90D;5NLq#xrbT zf_nWWqctEz^C{+t=<&b2rE^Lck0qHI9o`{z+ujcE+6`#kkE9-D16GX;gbUcM^!NRv z%$cCi_bD5EQ~JaaY}B$@F*hCdF|F?j+gw1=Tg2jG(y$YJ4X=aNJc(r*EaFRcDEXGb zH1d_QdhE!~vZ%B-IN+Pdt91(_3dwiZXrQu*=1Dz<+)iwXRdD4B^G#tdn1YI(zt zG@5s1H-Az*T{@y*?zRqPIh#6OS#$Kqia^n&oo+1p6oY8xfAE;|IEM}N4 zeCNYpxshUbJjx^gbjn`1e|p{#apmG^?jdk(2uG>R{U`>a!U)`)4Dxa?p2?~aW~PD* zh7P0U1qrH}&uXFi_VOX$Ao0v^vDUi%VG*+Rtl=)v&ds0!Mk_Yb!8;^ej@KhMCqD}Y z=PGGt1U>)K?$xS8ME7jI_l=cGqs<4-o`kQ)48;% zO8V8@?}ctlq6TNJ9~FX9FAhti2ps@B5ERhpyn)P<5FWYTHLW>Ndq3}z?ty#03q+@4 z;UPYnCDPK2`_WK8h@Y2mg%A_&)P|#jJXeTq=UKIZFKc;}kmHL)eMU?rwXW9B)mo0Y z&K4@UE5Jhc!`>^=bPs~BckwA!+IQPG>m}I=YE!eGJcHo}V$}#4q~(2`B$te>|FVr` z*z?4EwWiXudy&o7G4321XcN$s9gkyxOY?NNKe3}*8YY260AJ=;J zQgu=(aD3y3+2-(vh&{$)Vu6ENgxH5Gmv~554+{SFaeo2}|Ipm~Wc%zzcqMghR+uE} zS%~NL0J{qm0cVR!pattl013yZ1P6l4)ulhhW$p* zxYlYN?y-$lk2UcA^YE@jo_oa`i8Kc1R%05M>$K+a1vdTg9J7;4LB@S$+YyShv*${O zb;Z)SH<1lBLe@SLP?Xb*G4+^2o6>h8&$*+E=yjI$AbXRE;d28Kv4#v!qlKu`Jz>}` zlk;g#+n1#NTz0U}G(L@D4VD{1JWDtA2uUu(!TTsHx|x>VIvH+n%*8p{FfQHD#e6=A z279#~wdO2SE)|vQ6uH-9Z4shA_ed#1Du}Y0x2cAt89ehRdHjh^Oe7`cG?}{Dso)dVjSm~rxrQO}T^F%ccz^V1rS>DGv&DuP7uq6j2C>fRRbQXlWc~-8L(lIj+4?9$skE7w zTw8jePV#M$7Y}*;@R^Vk%|`9Rb<=8@CCXF^6S4~XKB@guDX9>sY2jxu{*E@E`mt9t z3EGjnk#msldYp9zKUTC;8jUE6&cD7N4xDqesU8py=7PLi8_(M$4kG%piYV@`pf!vkUg-%kg3)B^-{&BYxidNk(b!>vs(WAP(Fem+m|sY~x&?@pG-) zpBB>uRQvs*TOV=T?|Ju|Ld}ouX*((9pvWtXZ*4pZBqnCsFJ;PuW828GnAtRyRFmp07i3(UupmQiPF z5=r{IkJtM*#&rTMuN3IEVX60~ZB5*_FUJMuD7p1zH;tkKRPi)g(pM#Doz*s{N8LiR z=|4&Qum;obxw5KUM~niU%)jKRD(9=i+D`?kbTPm%3}IuLdopK2(pF;iLR(cwrn0cI zesb9EE4iOr`)V_brPVT$$RSLk@uU zTN;c7Ke}zgfi!JCK9;hmPhCgLgna%;%9*vhYB%PqRAZQei`^+Wy`HPi>G2wMZi#1# zncG) zy3F(P@N~7Vu!goJA=Ds|P^1w`qN)%S?q;4(a~rtkOAl5An~)2Lv1F3BSlUw!?^Rvq z#zQ-wyY>ap+rjq45Cbgimj}OH%idc!Cw~s0lc0yMF5}#x3VCalR(1Ah0jSxjIQw|x zB1z`YQznSqL zWw&s(<=+=_eWv7M%j=&MR;jVSF4SCj#lORUI-awpf^cA0ZRx(Ov?We(px@snLz;bK&|8zff?F$vLol%?{754VTZIi^XNmCn)18tDmZdm1%}+BMi>_^-7GW=2GDcULj!khFZrQx` z?lzd)-%C1{W)h82d=il_Geg8gsE7kHP(V*6-UcVUytX+DR^3nYN%LL9>z7Alb=2z* z$rS21ak#l5gMFIjO)vdi$#Ezo`B!)su0a=;AU(am-X|znj$vH$_K>6qPA^S z+e%b}D@jxYRI#SujQ(&TMIV9DDbBqgLCI#W^t^+j znj8dIEFlZjr8BjLv+VgH$fi=Z8za;BM+1Xx$pv@n=9yW^O$)F7`k}MK{}J0XgXKIJTHQ4qj|5xF0Hb{ zook>sh){Zw94EgUwO`dte~=D(ET)tTt8US|n^WCt)pzL&8`r1vmnjT^Pd!%%X8yWfn@hNJBDhMw&aKN8- z$aGM#uDUESCSvZrF#tSMNyuc1gXbijEvo8;!`-e17zN{3hJba1%=6O1_M#p*$n!bo zN^FB;S!b2N1RRbJedck%25s<%$C{2dF7qWW!(%BJ|GkUg;FBmVEBY;mm3+1}Q-ycQ zyDYPcxbM-&g>!9Dw`_?v<6W_vLwL0#hl);4dyQ|K&L1auVHUPh-EUBDq_ZFfnW?~j zDx&A@A3yCCf6|lzQTgaQaux*ibt*5?Bwt{R3s^R8M~M&Myey^DL`GPRE_dn;$Z2VN zKlT5n^Z`u{5(*t08~@I<$|)^{c#(F_YMhLrNt;;5O_35Y@aW({1yg8+%RY- z&$v$&81Y8RE{_mZz*VzlB07vmIDQjx+3V@nXFp4w`^1&TfCBR*w3+|0`gNMWY<{qd zhRf?D%V$!Tq~~>~==Dys)SSu4kh`85zhGFH_)7O4Ak`U|HSy@vdUSfiK`yX* zI;qgdQJ(Qw7d$-DTgngDJRzKW2leZrK69e)d3kOvsl*Xy@;cXta`sheH0g)hr*=GZ zIycr%mfWA(EwsTUGuXEE_B1nxgY?psd;6bx_ohiKexM(sZNJNKg>)Vpd25UQl+)uH zw4n#*i6;yfk8)-xV?w>%90ZSk+#GaF6j0=u5TN09$LOC!Cv!GCgd|A|&!!r*!K$CJ zrnO-c^<{QObWRv@NrkLAatfAR;w;?|Y?=pgR&K;^q;Hi#R>^@Phz zN^DjfuAlC1x$uIsOxRE!E9w5RZDMc}*agsjT{X7@6}h+FYXh1$ayZR<{f8XhF#5$o zp9F1hQ?wlpLHXJcoXzI2SZO30!sLv)k+xr|<2u1b4DwBHZ}Qm`Mum zw95E^;Hm_HujhkwXRCttjBlqxgRXmlqkn}rsC!}O&Eru7aEXM#I-nR_Kzgx4I{J!? z48v&^_wafQzz}>cf-?#+#V+yRqazG7QdU3a34*2zlK0I)B-aB4(TpQ3zW^+Pk z+hKExluCwF=;C8*`4Y39lg%C?(7AHDY7$#tjhdAAc$)BQd>we{{{kmQPeBPJQHfC5% zoOrwl-nUIDh0oyT`Znm`E$aS7mB0&Dt-zzVPvCm$!VpL~$C<()DxAJqi(HR4;?8p7 z3B_a(_vb@bcgi76WVj7O#4XWjabf_3m*aFx#*2LXfg;BqQS0#{i9d;lj#!%|UDQ3% zNO<fh zd)P-;@o3Y0I-o(Vv}|*2l_%^RriQRtO3OrEO~6z@+D03No()@NiA!Zj3yQUAYd+S1@{#qN1-*@NOsXdH5Ho-*JB%R?y%J3oWTXq`zvOgb5(j@B7rrbOJ^8@sT2R%&53quI*YRt^Y3H|ih zRj;ihspO^4?M9(C11+s;>!uFUksmvyEsdL-s9mDBTiJC#S6gz^JjSCt`q#mS)_-Y6{ys`TThAEO(^W;0(Pg0=;J&4I=F`LwBY`o8dsl?3G*Fp7~M}r!JJA z^`!v7XtthA)T8MPqxYT=$Wka@Ogof7W|>eJDlInr+S3vg&N0Ao0*FStusM`*cG7L| ztNR7m`0{g(jvUz8N&hm-&j8F?kRV7|gi670X;dw@5bkA)B( zvovESD=Qw!*`&s)viY|^1CUSw_ML=JALJmfG?8eArmKPayYLNu(p38PHlJgG{CCXJ zKOv^oDLy~sQ3})#v`#q5GP@F^nJnI_XWqobXRsW6#1%`(d%H;7Z zeIpR2W~e}xTt&7|g;l{NbrsRH8JO10}nQO8oL(HxV7LE0e$4vS}gI3$VP z-QRt*^DT^|HT*xXrV6)j%tgo`+SKr3>*Mb1&_hXk*BeWv$LDbSZMJ+t7WIu$!1$e8 zOqp8i>%;7i4ON;nURr>yl2VA>rBG4=f81G&6)+thSZ-1;JKlL|sOf@)DoR~w>RvL%q)J8QSYKUE1# z3i&lxl*@qteA*ciy!g*|CpX6z_?BiC&k2!N_W>IbbkvHqjhY(=;HEAHAGdv18lArD zs0rFi5t z*BNW6wIAs0JA0#wCs5N4MB|8&NWU)8mYG7MQR2H^SvrI%gxuCqY$8pQe_E*1I!yOg zUpb$6qZSVwLOZoj-awwN;EKVMxP`0#X_G_M$X%h<|LA?67k4Cfdukg61Iy6uP*Bij zBHv1MBva^=EsL>2-O!rncYO!-_Ijp~Fsv6)s+HDUE`VL)Wh*#N0(N&k!?(lxYnm7= z0IP0eTdN)CjZI3}_Q%?N<8CqBqU9C4e*^uX&DO$Jwo%&@Uo5LeKtT9m%VJLl35>td z?pA%e)`(NVp<)GMXnl>-@ao(kLIl+{o1KptcZn@L+}z4rJ-3!ge(0}me{&GM}n#U zp_%K%V5{En1*zw>0k^{ub*g%MtiOcY;L7E&IPH?prvvz&he!e7Erhr`V=>L0EpfL$ zUm*1<;w$Npsx;KynPgpci_QY!U(RA{!+CSqRMEL%8dP$IaM_hQE! zdPmv2DTOCeP{O9x(K*T}(!Lhdl^DI9m>TmspF%6c<(j`KW9jP~NRbUrKia43FKJ*& z;wN8J$kahT+McpwG#^C7N5Uo;QAmE=Rh0RWu=d)pE#F{MWWk<76g?jvzpm8tide`D z%|TidEK@@;Svf9XIK9tp}@UWPrA$GKl(SNXrBoX~1oUM7 zT$)i7(l#-KHK0tRO>@3X-6~(Q+hx;HQ)T54<1!QC*z|&P8+Wr>cqs>IJJ;q=6_^9VI3frnOgi zPxyOmtHaaJqe}JqC`h;|Nj6=dwhtLgmDC(In6^@J-K`@K0mI2!KK)6m|aJ*yml@bA69cbZeOPozY+u!yC7cU$~Lh= zIl{kc3ft|Y@WR*RG+(9qXT|s{d}ZBUU7R}<0EKHsI0^WRYKPvK_-*+*G5RDZaJBKHK4YcX+_%7ftY9XI{dYok0s_N<1gQrz@ErUM z_zZ4q|LI9fm{fM7oX;GU8}Xrb4CYzNeH6?@&S$ER$I(?3;Pw)&(6xftWX28fw<&wm zK>J9fQ5Y5UcWTX>xbBD*Bg_>g)>|G87OLig*p0JA8ai*uEKA2;^ZmC^K(Z~`goKEv zexFvHtyTyW=Hj3^9c(&Q7n}W&Wq*QCm>Jv}p0BjcxC~TzF8R4K=w1ler3cwbrao{g zV_FKky1ehvp`T{Q$_?#(aRg@j|>hi=|Ndt;ojSZ}sX z4+^bSOsGPvXx*F0DBqueX3TyS%Ckj{Y(W}!{nxB?DsN~GhU}DvEaOc<*UbR+}MTU#estVj# zK9(f4SlhMgF#9gt(wvTai*Tp&I)u^_zM-AB;GNTOQC~Q8XUIk$y0+oezFa1yHO&%7 zTfIY6gfrz_il8LiA9hmp7Ix=C+c%t5N~T`gW29~t&1cPFMv93=i_ zgc_Tn0HHZ4gsVTh9GsKsIFJ;Y&)L4$&59bXs<4RTo1P zo;l1hKpHIihK(oTTK!zFc3D$5>2FA+8!VUcSZmEHv<4e6^k9HZ;AktaCWq@Ys$Qb+Lt41(MXAh-jnzWvREfGy3wqmqPDEO5*;B8FpPIY zvo9v=*(4sBU83PQnY;lPEWT!x|Bz}~^L=!CALKS;{o++_rf$8)uCbOnwWl|&{bhpu zQJFizkx8?YewrtdFJY>D;*cTM zjf5;+0G}OPxjCkX%(M;U$jQJ+SgcS|fG0Os@xaX@+i7(>UCD`Qx+xcxDjf5^V+yr% zkc)!D@isc)y3>CBn0&h(v$NP*`A1m$mw2thQjQ8g%z;5u)35%F(M(iaE}nUZ^6!>C z?6+iLrLu58)4Zyd`>=^V&aE_Q6`CxUtl-h$%2w<_V5X*EK08l*=+aq)i4{BQ@=!G3 z#+SyI)VnLrS04E3A)3uc z=Gbo7k|X5fY1Xgs#Lha=PN#)t)YQyomY$JN8UvR*ylyI)RkPFPjdC1{5olx@eXyWg z>`diVe0_L)$wZnY^XB_1*vrDV5CxZMyMa9=+AW>Mv0gsF$%ze^R{jM$W%Ml!N^QhL zNYhGiTrDvzvjbfs$lfZ#4kmpxSFl5{cW&_2GOgzYEL%6_!fg-;hd2!dNqp4%%8{3R zRBP`eU-EW5=%2|M`S?f)_@8dRQtYe2Lff5(){LVBWUH=QxeQY-6dCA$FZoJEiDM`1 z@#KrK8psjveBHTKtd-P((p~FvSWQyfYbJ2{Eq}N7G9r~{gkoT0f+MioaHR^2P`Jcw z!Rh_-vfv}H+*(oaxMuv1Bhytkt}jkMM9b_=v*IdRA?71u+>ZstTc!rUv`*+G_oA&F zVHEw!q9kIbF&S+3dq)WG>ERE1n~17DDoC2{nw`xz6YoEo2@M?7B;kCZsD!Sxo+pIWaTH+seUmwz*F5E9sctPq{UpTA@H;lI(_-)R zR;27*mq>9L++KX2gH}jS0O^ud()7pHP2kl+`#I$WG$4nQ^@Uz%zt9q00Wu&QcshTO z)apc;DUO4}QZ0i+)kVwcM!_ezXf}w!#xXn@n6J|sf}W&ho4~g_X0f1X zsq+{`^-VM%y{>sHe>Cd7M<^Lj5<7uVbPm|YYrk5TsLIbgMph_uVDLisB1}RZ#!W56 z5r(mPx9^(%YPb;^34 zZBZpC2hc~tN6xQYCsdvoK+W@73rj8gW70fto~<{v5l1N+1-GH!c^lFamoc?v+d6kg ztae+ouM`&0lPe!vleba$Q4|dFjiXd>l{St4*||7@(dZD@Xw6}xjHh zI|^+fBOMr|5TNUSq4zPZYEPNr$$qlt^`uO9zjKzxj83H>@opf|=XHCCK@de@wnCiY z^L&34xjHZH7{mK+<$2EJdcIMk0oa+9vl?E{ZFiuA@27St!8(*H^$K)v2G+P+a-XGr z!J;FcDXIuAWWNuaGfQGAvtx99$4sBfa%c)$9@Cn0`Osjwu8V_-chfnpG^*bz_pD*{ zJpsEJQ-%z@;E};4*Zx5Ck>e?-+WQ=+<&d$d3ml0yTY%N}mZ0f$N30m3XJm{mn#*vZ9!e z;d{cG|2dz%sZI=^r*MHTrr4}W?75rA+oM^oq`1C<{TWfeHR~d(iP1sGU~nMtIw}>b z)f4>&bRvm2gWEl0ku@>uLRbyHC)o(ran||Et*A8mwL$fRl=Cix`RA{N+MbT$d7ejy zuPa*Ln9BUoP@Yy-!0wa8hu-jhTKhIJ@7)p^6UbgBsrOVtEhM9B2Ih0)N-6|0oq=~` zk0(9PUp21W*Ccq>eT1V)dc?1zO$V$WMkf|-Zu3v)6ha&LBR4#xGmH(hApiYe0CQ6> zru356@hUC-Q~BpZbf+_7w_*Bp-#96Yw3Q?cj5dy}(px;&%KRVtJ<1b2CppwjC?ONY zGqI&ny~F50A?-?@H^e9Y&-SWAAya8e)>|*dHtl7fWL28tkRUA&>|)}-X!?WE=|cKvj+Z3#w&sPPw55!?l~J@-UaYf_VH$(;mhq1Q8}__xcHWsyO5v2iIP8zn@(i?Q%0=sE4>eB5${ zl`kH&E8btg&C^cl;WAcA5W%qift{=X$Y8T?x6&_6F-8pxPw_MxBw2}O3=nXHv-_!7{d)!@-J|7Q`~23_B-UC17?6m3^4%ECzZg2AAqgj z5UD0qz_JQJfunDL?HoWno3WiQRwmq5+d-qGlNSvkqqOnFzs{uafy0ZENW-0N!~qM@ zN&NB*#PTiuR52)7B>AUvzM}-2L*&C&ucI6wRKb7VFWN~8fO9iLlKyH_6tCu2mr+d< z1pe-F96(qyf|CD4Z2wOX0A-O$Glnz$qp5$Ta3KcZjg)}oUzz-)Gb(^!l7&)s0et?x z9*FpCkB|_MerNm=0xCcVqXc7iza;=jcmTwI8yW)jcOFAHK=J=Qiq8ka0|2m}1be~$ z)>E<&KuS-jw!n_|IUr!`)WfsAb9y- z)Ex#S`%4$TI#Pccc>hmb>OXvME|b7x@&o)2p5T?Yf4GF_1N22;u?&}Qz+dT)E63M7 z#iu{btl_P%^LRcwEGpqMdp9u~m>$G`PHRvS$HXU*?N4OJDUix&o1!My>yWMMxJ`{Z zrkEPJQIiodDeCLnNdO@8G){MAL==+0y*Hb~Pyt0Xv{WLWhT>Q=)7We^5s?tfxoTk6 z8QDY)q(M!4c>)dtKcelNBr_rxV0c_4bN@R4I_tgwjq`k^{7Ut;jIUl-uEI1+vMajW z!$p!djTd)tRF(CQ#s(9>vZ}J`vYJ5VK+Kqs_5UBPt~xI2?P)6_(%sS^NOyO4cS}om zcZZ~O3j#}bvvf&IcXuw`@$UWItJnMfx1WXG?>Td3X3xa)j0~mBn=2KA*58sThl2R2 z^;5^+q7xe)<70OY!)-WYfxky_rQUBTslRy*eh`5jfrp}Q%iaRuPk2wPfEpUKY!{2t zYmP(}wLpWr-=6}%NR=mIp`=uNCo=AscDJYb8_Wt;Wk2fI7=VQ``Tv%vUJ(h{17b_==hm0iu6;FJn&spG2^eH2lz|e^_6vU!VZPiq2p| za>Q0-#Mc(6WlKJHhd*`G7{UMN8WFJVasjW55EYe**XH=ch;6eZEIQ5SXn}`l{H-qXVnYzj-);ed@Xr?@v;$bX7h!+C_w0-Be%VRA!d(|6( zm5inDEn2KnLgi>W^3`FRT0%l1EQ8-y&vYb%xJ;`diCoq;mbFAp(hK;a<8gWLq3&=d z5x34l@+yt>1DIWg$^}V+2pA6MEZovyGygTxB(>TkUl<_ga4<#5>2dkF+B)^@gM1c` zgY;MyYUv}msUo}dhX(?##04g;@zBnQ!+KY+@#4gTbZ`VlzHTUD0pcgYe~!|>BvByx z)Q;1U%M#@Livc1mP*^1eO5Z4Y^5;(l_lPk@0>E6o3_VbgLUS8=COrZ$qW+Gf;`zHf6p*>5$JPOl$fz2BN^ z{cv4S8j(m1aGe>B`Q_C+~Gt3tekGJ!8^%>6cdLuB{Gt|m-%=u8_uUL#s+Rk+b&ux2}oQg`=ZFRr*SbA@+452%Jq27^Rfoal>up2-tXXJ*^U<^ zjg9j%RC9Pt&W-O3dZ5AiTZipI6JR|UQ^VN*Zh0ZQ7|Y?M&3lvuiRUu*+afoQIO6P({Rj~Ez_lb z@!U={X6z|jsAXJ-ysPzwrkFD`vYZ}K*MxqvSAoPm`SPs2<{v%55Y2bM_^+!0^LA`< zA|SR^XVz@$eUM80X>-p2h^15mrl64b)Aecz?cs5H^|(F$Y?EEM$`WNX9RF5x-FLY-T?yklB%ZiV7H$w4`b>UFs{_A6Ly~{SmZ~u>h z{B!)CL~`~g-lOxOj+v>;lOV6V%ln6Z!s`mL6v2#6KY-8okZQ+W#Ea!w{xAhMjBeFh z7OSZrZtPWKz$V9$^3#B4Zrdy`KCi}}Yz|^}Hd`AWf0r>TQzXAa@5|12QT><%%_%9^ znb$+>`{fQrC6CS+rKb}@Kq0%}yRev%vJL0R5Qf`of`%1~p4B&jPy_4Tq4{p%sOQh( zggA7k=Uu>Q6h>eL&kNA&`f3(;u|+aVas6nhTpd(xx%^YF1w)lsE8jwOzR3s-CGm(h z$ZU3s<34GYzCS#>7ddo$9k^gR96QhT)4I3X1hstqE&tWPIzqq5E45)wFo35r;Gh+lnH&X#mpFq*HLm{~fB+=`VU#JR@*qj&bW+nE1!PHFm_7U4JeY5KI;$7_ojpThzE#zqXSd$fXBm2>VTJ=~)hm^_1*kHTRp;oL8T&4#nZ8Ykp@+S6d9Q6d(AMf{ zvj6o1t_MRGG_x5AI~+1lTZLw!%+EuV(Qt*yO}e|Q%lM(*8cg}Y+hYnQ-$7Ry$15NZ zf)>zsu06lFL91%^ti@|doT!9q`BYkANC+i=CQfx?kYe&$ty+chBK)U+J3uBbI+J?{ zj9#|=%Oc*F@P@9s36$W!ln9@%5S1+jy0NXOMCt|^$Af2%%?n$@)Vx0 z%v$)8>v5>4xP}@0`ejMKU^mY zQQ58Y_I$qabTS4uoH#l)@E>pV28Ci9yiMvngzK)=atR~~&UycSsO{kM>TI@2PjK7W zLCL_^HfEF5RU%R+6!+?_E=wEScj?e@G} zVYi2*p1lyOJS6%vtQJb;@tP(yLgX8_`%Clvf{WY*T9MwfCtUgPIaL|^;7T|*W@2o{SI{mkeHw;oWrFl zyd?~?be=Wmu+L>WZA)RgPMP#mIIkGqQ5`VvDzP{6JM*|4r4%tYFNX3wR(jpdn}r-= zsPs1t;bI&CrXId@N~Z+6bl+c12=ewpi{5I!qaeOqk3}Tuwt{;zJp^<*Gi25nV0FRB zvUbbV_uNE4OOJ3<>DgTPkIYga&oMq)@gx`Gi|qUH@#cT>f25@P;(Tj4QP?KQd=6mT zr&F@$r_zBR&1T@lYv32fZxq^H4P^)xXib9Gt+d@+%wfQNj&fazn`btYTK1S7vb1fZ zoUZfqJ^}h}mEEjh02%ja@o}9Vfvzb zkWf;h2bXf>WSui@j9f$~`uN|VK+HU4$Ti5#3?(hA+0{!`7Y(v9e{;FTo`EUeM3cFW zo&{Y8jgXdi)l!;gAW1O56=N}MFe}x#5-K#6>c>^lu&+G5)PtQ*h!r}6#;G;r`u+h9 z=M&#@hCia5<@0)6C0u86Nr@OI1cg9K3n}G7(Phuv@lXuXY2e zq7900LWhrqCaR0-8z9gZCMpPbrf>6 zxX2%|?WT$>)p078_fqbEWX@GhT>Q&gbqa${tGEE~Bc#p;{AOO|%8!?IqWf5g1SNUA zT*phR+LG)2Ml%Bne9^Wv&r)_3N7k)*&u$faL`EsMLNr;QVF<^Xs1Gx3@^Ji4bxJmz?)L`f_+k zkFuov+IjZ8npEpni@c-$cc`i33@O(~$ZCCm2*Pn-I8jIgyQNrlSm~Bcl?{20gESJ5 zrBg2}j^je9DE0nSnP+voM-;Bv7v*mPIYLSm1_uWV^~%XK*4mRhv}E8bq|bDYL*0Q= zm6U4x#J$v1xubfFWbtecM+R9K;t5KbG7dU>{3>xMqfejlpRS$4MytUJ`tOH898bnbm(5rAo^N( z>pq2?4^vkRy?MFO_x;K|!Ya4+*mSWo{jGyxBQ$$brdyc+(b{7h7Ndfm*Y`vx?a-Cg z`lO|*s%WmPr6gt=h)5g1rGQrzTC@h5C1I-wq&9 zA=XTQLkm){-JF%cf=L;^!rmvV3Ad!PwG0@s&9Z+c!=O@?tZLPYN>ge%xuTrWABgBg z;w?U=JF=hEaz2p4z}QSR;Xnd2KqTArt_yC=ylwzc@~eyOd$(;W+oZJVySFcv0b#q8W^GuJMpG~(J@%6HA=O)KIm$C@n1M9l8A6uM2l*;6Cu@xam z7vMB-tREg%;~4Ps=fPT>^ZuX#bs5M9l9)?2ARWGQ-UkXh*$8E#l)D@B)YFHG(e@8; zyA-7H6t;R-*BBD@i28;O{ZgMlr>tyU;I5-!VkQlHqT=DvoEp#3f{71MQ61b7nYXmn zY*W@zP_B(B&+FMp#!&O6q>V>2W~dsn$D16AD9XPksDiRvn!7z=#!9$_pQIA$NI4zF zniew*b%SPFHNsITXIjn$13>L}Qf#&w*)+5~ZlYf>u)Z?R{m4K;?T4ENVrih{J4p+Yh6FuUapam3Y@Q8ABYi z5juw3I_~DL`|);BIhty87#Zb8PwG9nPB>;yLpR~;%b|$hj5&hI28KZ$K0c&n?0RZ? zZP@u>Ra?bfSl5!D>dkh9K0e$2&}$E6+hV{!`wqf))N*V6a87f(RJ&D5Eb6xJ{@^IT z!?}Oi`4x=rnC4?2EEeSfuv}E+U~8MLX7o))Nx5kzTzUIz>df}z%85Xva@X>HSR@aP z2BU`=^u_OHin*OEX*StC2Shw6+?};lnDp0| zP2@-er6|_L9@AH^LiN=2L?&YG?^6Fgn>&0^Wkjrw#tFD`s_i_f&! za=rIqZ>OgT#-P@%v;DkZLwpv4WA$O}yHewx$!I6XYcT&#qwCRv>{}t6@R4|N7n{|j zE@jnnFHwMa+bX{6P(wBn`%>#!HHI~2E2GrdMV(jv;6$#q=S6z=9sfx(V+aP-`XQc> zClq3vzAeG-$k}p>XM@+-*}JbPdnvhn7HC3(9!QPCZFfg#jy%Xxeiu*=>+IFGV>WkQ zbML+;By3#(uXn+^yHR7fT^xXnnc+Ei6GxF17x-{Pif2Aec;EQ!AQtv=NsMUH<%9=Zt zkf)@K+i7A|0a)~qfir1*kc~DXjC%04dl!{=*6ffC7sicZt&tsX(o;x6B4vwOLn8#? zMTueKx!$KW@6&70x@j1rsQRj{d-EEEF%^~cwS$#f?h7V;+^}+; z@2Z~TS?gxjgE1&e_dL+!;nT9m)p+{koAXZX7srV}?Az00_Ka0xytVno8q4H;z3wPD ztYgi|0x8+!X3-TG7_3OZenP~Ae3r}7Ml9<>^5ZJd|RcZS~&yO9)+Hp zX0%62jrCy9*^cRZ*EPSUZ{WHe9CZ?1oUf_eEL-S+GJP8r^0+h>Ez6b7ba`w2uCIp? zr!kNRiT^pT=}sV_QR@raaisX^Hh_?w{af(@0^eG>=hhWgmf~yI8M20kPUjaF+?R;- zIcfQ)*`>lb!e<^F$i+(6RVMg#T|Aa8gH#>^;JRj!1*>K;0Vv$}(bT2=u#MP3`LO={ zaF3AJB-zS)v$N;nSI0PnITJhR`+gi!bii`E~5gLJig!~gO9 zY{fLFzju){=vp8}?(vD8)O5Yh^RX#8PjIt<$##^+%n_VlCT_THAAz1c)^6Y!OJD7e zWNYU>3Vk<~bjY9p1SUI7*7v#Z)ZFCni=KJ!E9iaD zeB^vT>tZC-RhG_HgzelzX()iuTu?GwYI6P;D^{si{S-|%^X(OY@Nk5>2Yy0esl-yf zju!;}vBrs^45BvRl}bz%f$_`nOa*Tn*Y8+ z946{j$(K#>|`BU_>Rq%@5P9UTD540=Xu86FBW=8s_+JmK$&{$ zja~)J!Ruggta{s3g4R26=nY(ZADM?kc{43)B>ik;_@u%Y*U=;6U17T4J^QlryD%U;A88M$o*>&O7- zN1D1_tIWegFcaA>4ieX>pqn2`w!Tb7d}X$n7b$W9G;b$}gpqRm65c@DV$t6bbr&y) z5*`UnTGe>-H5d!IFZil8mAk$)`F2xWRU+antnGFoed6X?aH2pN=_1smG_V2PJfmw$ zrK92WQdJ(_XQAGlHn<2$VYYPl^1-%EW_`SRqn8MRwtM8M%iVinfj9v0I6qNaX5?Juyk#?YB5Ln zoimZV$pck;((!UEw6uUaC;W0!{&WqC-D#}xoz)_cbKdn(+NO1!fTwco-hyvDN-s}? z(Z2!G)HYDl;33p5u-o3go|UQ=2>lHX>uZfz%3H9K1k^UTh=zm&4T3Yb@Sw?s){_cB z_-9^s!|JU}n>JBlMm*95xWhMp(Xho^i(?hl;SU-4;89w0Ibk|g+0NGrwru;x#-E)H zT%TQUXAr;*9pRNaR=sq1mX7S8?Y;r7a%6qx=BYbX>BnCJq323KkA`j_k}u9?we$Dm z?|NGdV^vITCF<=`4+fdd+cXMdd{mh$J$FHDvW&?j_F0Xx`D}V#l?}M1B|@CMVmIL@ zxW4?+;iLD!6swPTwbX3`EXog&sbxm8 z-jUw@-zf5P9`|;|4TODLxgCn@O!k!a7AE9&P7r z6T|`P7Yj)9tPzgXdp>FUtSx0mBF>?fyRtc&!l}-vi!Q#+edeayXxdxEP1QKi&2YM1 z+vnExvyK4VV0vM`QtEUU3V70cvWbU^O0#fX=R)HT11J6sNL>a8vFr`Zl=#}jB5+ugNiuWY z-A$#fr8t5+&=lXx(CFr+H%5-6L>{ z{F43p1w6gu6S^u^ur1qrqRSN_P(Z|6MHI!n@VA%mM5>52IsyzuX+GwLed-M{?4?r^ zKvC%lc#96H;sHYD%ACrjVbnL9cfE?FHu$!G$#rQVT4{s3U3VFu?s zBxiX~Jb3!Kc@H@(B2B5zni&#{)w=9Kzm0-C7kl*;<;@8vf?PuDnaArG^=KA?qEzN& zGue-Z)B1YlNKpbs_%k=5W={*OxVxM^Zn$r<1J0~KJJ5h$Q{oNZtJ zmlq~`*VDXCh9a}A!Uvg*EY0-`v#P$L>zPGWVtjb-J~ArbEVb;T^L|@6mh$QfO2T+I zD1H86cF7;v%F2_#6(Q)LrIi;}4bjt$4rx!d1_E-*9^KXFH;}`h!cbbDlNN`W$U_BV zKapgbGzx{pj+Gdsxc!{YGD0zNQliJ_0Wr9-q68S|27ixop?^HjmyTp7B;ZM5z5C(y zlfP*hq{jEaO;>9tqovpM33%jQw!OqODBXghZZSgE-}Axk&1|Wbc^dK__Cmo1`U9bT zGQ-hJy4VUOw5-4RT*?ZBX>!v=e*wb#Ew0SlP;Wmkn=6}5HD!j=rj0bq*6ozU*UylP zuCJ@1meKc8dJB;jVn8(}U$AJ0uf4@fnKo?f&0ySuPo-pKSqD%SE$#avmadKVH~3|( zO0Tqo;=ZHFoe+I~13p98qDyc3ZlAT71LOzMoyyF4fBMr;}eFX!eAV$UG;pY zp`#f$Dbhwx(c2!alEeook!EOBK{z3=!K6mR1>%u7a*)2X_si)f&#sPJV!Tbfm$xFk zFpW;wbMZ6j9cHg{Z${MhFo%j7v&U z#o9qsrQfAA!REk*m9*~MukS3N2=`Gx>)M!(E?#I1r9cOyUVrc7G2{{FV3hSfbHBoT zM*uPUQmo~8pego z#c_l8`=m0qyYdFUO%lVwEr3a32#?e8_#`xj+d!FuU$*b9pxn_<#lA@2E~`KR@9jIY z(jzLZok7tzPzTG%&8F!JyRvJQpKLE`XZ7L^ZE$n81S65F`#UgLYv$TFcR zBa>{*zstghvt-FsJ|O$;(E`I(O2&0 zjzAKAk%?1nTXwvT({9%lCM?uB%suRC&`V9TGy8*ES%lV-cjv5Ke*`zkv*QRf#&_Q_ zw2p_5DxP^-?_0iFqd+s)=150+$bB+2mc{pz@yqJ_%I4k9D%{-5mKB4|H_Sz_-N(0W z6ciMx*p@vR+N(F&yJPX`w(W~S=il^XiZ72C7)f#cqXj)%DuIpw-7ERqU6sb~|@4It?H;MRUc3 zHvJSBE}`~AsPb~grDxv&ddcEFQ1RvvUSEdgEDE9a9MVIadksbyTa*ao@{LJoJ_K8# z(!ThO0ZdAy$<=@!K^NxWXN@ona>G^31137`wW8}Nelee;Hw?}TA;+h7oeu;b5!u)u z@J;S<^R$T)EI32}m*anBZqbi&+=CZ{a;cA88_DTbu^D{ap_#Yz1uk$=JgDkGGicqw7j z6vr&j_#Dw-TlDJ=`vyYlvf^kwm#O3|_xOf>Y9A-u&^0^78xH^xd@`t01MSDlvhewuXdQ?`!Z0S=u#Qo`C!&o zzPgS7limJi2fd~HO(_L)l%RT6$le0bY4WQn${$sVNcmf?E3unmjR+-EioC`*42ajH za^XN^iJISohWts$V~gAvhGUWnC7f9*7|!W9$TtTAh`((lG;q;k*U}{Z>KY+pf-w$P z*}Yaw;ButQsKc9~#~UpT{{7btXoVoLCAx8_)cO0kIfnW_=0iz*yF{@AznxK~|H+e} zLHfX*AnOGESVO$>I675GM>EzWbPh7U)FUcwqG}SSX+Y^jix3Hx*G(*&o1@X#~O%JVwT#O9#_>SH7Q!#i|iz2A8t#%%~timh1Vj$lh`6{H{&GG z#Bw=?cKEw;*_9l~t=6IjllBTFH*2$-J*w4b)%rHF-!Gu0)u$9`iUPn!iUc3S-D@9g z^kWvn`a*VS?4MpY1qH~Zx2kq|Nnhg6t#6hn+{9S2+@I(B34cWRCP|xJNnP!Ex4H9i z_4L#8KNGDEKTc%y*fw1dxZ7;F&DVG~xYIrUP`nu`rRR&+_f4~H=G-Xv-2U#m@)g{` z#g)YCFy-y=lGz}6fmsH*LO-`1SdqxC?=G2rg-<`@Qp(>B>ZKCHP22SY7}NXYP01>Vx)|ykqm8^Lga$=RNRTU9TeqTNvq%amZ=K{o4RjiPF=%ag@ws{zA!_*};x z-R}vBLsKzE{WctOwv8rvQ)T-4gcoTaDF-Mws)Iw;IL?lhzp;HkdO^S=qsUn5#B&5A zofBQJ8ns$C_?4}{Szo(=gM`1G32d4`5gGs)_f&{h!N5FR+U=q_dvOu^=Pj>i-tAmvOQ zCqR+FbUF0_vVUZQGgCcWJ-j{R!(;p-iqr3v^%BO72ooFhyfy1>R*setEAV@`m5`F*gPSmEh?g1VX9o45-YX!JUSD5 zq5#K0mtjf?#^s~^?Y6&ls*P6TDhn?ix7`+ zI6K%6#uAr2=yFNWwcO)QhH}=JN{ndL8Q+X%GTj_%UR$kfLq*{Zp|twB*u9@xs<=#KSLvZ$A!+xKEF5JA)_c^cM(7?#hW(r0R zanUXRINxmY|fLpL%<*;6T9UVJ}`uVOO zT6xRgFC-ZO3TY>y`VoE@}!=vj(^*1ovP!`Phh&ikImh5P# zm8R3M6%2^A2;2XIeSpib-xy#LxW97 z=GD2))LVFFti0(mLJF{0hSYk?@wtb8detWi^5x}`nMucGWLVKbRHE9a>Uv&J;5=ov znxmqk=0#?6$l8)DLWs?R2DK+)x-QJ5I8m>hU&uVH8 za~ry?gY&>cNgda(P2h1{;yY@heT^y>U`pK(kD!q&#bY{r*Nf&>YU;wNS1&2(DVy|8^>%7ThKyd9$)> zQUZY%v<8EaY*0u@u+fhB90wpVG8{}XIQ=UqeJ|x#`Pw(cz#1Devkq^T=nLu0I)u@A zJemxAX}beN8UIaJ8@ciNx@4AtyNpotPRKer++e7J=%Y<;gk4I7y35N-EBT63x<{M= zbj8OKw1Y>@kJcgL_uIQ!Y$jJTEeJ#+TjAn;DI{;KFVrb!|EV|&2qJ&1>%MnMK~64P ztY_}t(TGX?nIaLCdX+@0T`dA;SfgQfhdoSstoy;;1i8VgA{_aFd|be4YX(duUz|%R zOYscPB;3}k3iqD})g5{u)LKF!&tl%oGYwsapsU{5pfgzo-A-^8MQj&L}G zduDnJkZT65!_?6*5;HCySC?MRaFa815;+iy5UU;6t5PKDI^3z6z9*L_E}yd*N~Rmf zp61&*fz+^-WvKz2=^{>W?itY~}j9vh{A`ATE1AC`!IY_yC`|c@g>O zc)A3Z*HFD}_xV90wUY*iCV_|7S67G_+q9$Xngv+Jvk7MTedC;xD7S8gi?NGc$#kOy zld+9m<&VzX`Ke5I<~YT~NV=YvEJ7Gn(J6R4V?MVo|84u64 zZPSL-g0X79>&t`Zq^##LM$<_F3X|!h2y-Nof4Fl}&d9$}Ym+>xH=V+cFT1!6o;%=V zH=Ig9x7y{3in_$z*YW_JIi0Zo_2Bbya<A?V%Afi!idpHor9bk&Us(z}jeSe|CNF686h$a_*;)Qz#?ec6l7j%-)_ z_&nrpSlgO-a1-}XVq$kFBB!;B4p!kv*29L{ILBOutJ`Sv&D-XOu_Z{2nG@Z*tYdxD^=a4^tJQQi2y@>m9Ouew)7WJ8#gf_J zsuC8zd)!1SBO`7N{cB6qe9Q?_49rV6Yzm#{g0WoT$V zM*{W%Va00gRX7h;8Vv-zfVYAi!zLT`VyzE4RyM&w51%(MWxil-TazfJq^p%i2p?@X z;ZDxyxjPO>jKwB$ZAEFb2X9o-s^Oa${nI1U;V(euDfhj&pOtZ=*1zx3USrh&WRLNy z8|D>E0s}-Gjoflr`uG1LNXU@wv>OJ)gZe7}!|9cu?zfoFZ2xB20pPT00Q$ER#}5)V z-fyvNV`@pdn8DIS_fNZN}bPN}1r@ zpWlHZ*uhLpMUvL_9~e@C3&hE1Z?Xc$=%eIoBmbv=v2Xq)6l)Pm_7PaWbo=jXV?>%? z`dBE{fo{kBpKGUqD8Gbn9ij}qq$TkB_e)-*eiVWzkGzDJ9Fw5$BCoXg6|Vjd9d?Rr zm!A)i^w820ITheORe1I1%v^y^WWSjR^yA$rVf8fFt|@2~z`%ecs&YZ3GIvw-uRs+1 zV^0JR`4<$3WLn3(s0hLz7sh4l)WCi}^UX&EQUlvRr2ir66$@r9CX0Grnupw^YDR&W z%mX3;4-q3HqY@oklJFx+jrtt&uNC@l$h;E1`>FO*tnU-gR>@PTd| ziPE5yyXcN}|IZ^tI`EI9F|m5hQ|zj-e{Jh8K-wd+T?tpBQ^e#WgR$P9e_%lQY2e-P zdCEK`!ie#|D|3aQgFh5+$-U5naQr>>>aU#(q(JXkd1DkP9&pOaBPqwxg#2+fe&9@W zM;SX8Yv4WJ+}L}89g_bY{NI=-Xu{X*wjG3gDKvj(4~Tprc^q^0*hUCNcmBlDLBqXv z_3%i;nb}2?>F$aT{w;Ozi>*LEZd%$A<6W;OF9l<@KetqgYzHVXNb(605pU{JB7*xD z4)>QNfT(tW{DQr*JST-!e9etoq236k0vSzv(Mdr1Z03;HzcP3QvCpNHm61Uvjz}2o zMg-pMw3tvvpNNRj_hs-g++ksTRVe>{QUM-Dq@;$vKnABstu+KZ zWmaH9Dd&Y`Qm3fM9A#PndNLsaT~Y>oXN?**3Mu<7ppT}IYe#|g0et~85yp=BCA%z2 zz)LSSUIAgFX^n86xgV zqtFmGZsb2Fjr2O%j1FBFu--YK^zX{Rx+LtEHTn3{=s!AJ`4^EtwH)RjEs%fN5jx;5 zryuz58U!E=K7e6(Y8f< z5A*XQUK?GjY`am|bGV*AACl*n)Y3|G)wRL8*LMg{pwyl*ezSOWI5V)p|B{fGm$!t8 zk#tGnx<@p-Vizcr$t3!$Q~Qy|WC4y7Tu%?T{MpfBaZ?WF_P<#*d3kl@BguGit*_Z<-6Y@OU^GVc<> zC@gYcuuj(VX)Y3GmqBzBgF_m_cOFKzYrw(B z%Bl(;XJrDb+h&z|_Ly0mHN?#2np9yn!gOdkQ~ZH_)uW{L^ZbMxWZd%r4BFPu9O3_g zujE9xBVL}FNw9DTd@dEu%d>jS$YsBZ!eL1v$X=8dXx2I8N2*q=H0@?moErMP95+lz z9u_II0d?3u`ML7)G^~!Ml5X~iKzHx_;sS_CPAbz%Ws~vQ|8Qq^=MYawy%vSX=#Ymp zwav;OvX||CE~(kzQYJ~b7c;%8O0AZ{x8%}~?-1c(O>2)^*sj*Jw|bgxn*@dMUaD*S z`}y%w(+oN2!APEmcz=K2;iA&ObUE{8iIgJ42|O=={s(3dC$Kgy3X1nQyBH} z(Nu9QW$RNXYl;a81yE9{1+T`B@sRcxzjFkwv^ofEGFR~^&URk+^-I@!5XW#oyItVq zR#~^W1UNKb?HSBuPPVq(0d<2>O2KnbcbI{R$THgXRs;0}iw1|Y73`qf8pnP_@L;vN zn~S-Af_UaJt|9nj+ers75`cb_LM~xYwb*Sks9GUM=xsa=CFeZw-61_HG0Us2CdtVH zay?erw;y>%+d`bCi`8$+%XIy`g?s<(Ox`5dGL_!$Og17wCKn7bT8XqB*Bo@?V&Ng_=Z)l$%80uUh2N; z5yt+M%hQF2v->{hVlCSwRq&B^@sIe*^XEN0vO}b8G7$G4{$HH zx<)b}=77Ou-DwL|lf5hUA3j$WZBKpg+tP*aBQ+mfJVm-8QCZ6|Ol1!^pCXxoLWsTD*zK_@Gbtxq`(WwNY zZm)?qK8=r$@8CPXWnO*u0pkwOhsOBRt#U3Kq9W|(obdS?;JXiJO%PYL4;GG%=BuS zp{)jCyR{2Ju0ikSD3tH0AAAskJ8E+naRFcIiLa-s749vUeTHDY1@xqcwYMQXKo*HZh2T~w1W*j^BJx6hk?@C_Pb~2#D+isb0bwZ(~e3DIP zMT0NXz9H$&gkac;PLaY}I~6i~U*6Mvb7X!#JTz>{x3wO#tt+DD_HwV|RYju-)aWbe z2qM0G72o(g1*6dk?;YIA=v;i}vXU3yTAF&5bBPsS&JYxnvT)-}f_hXdmpSZd^CBP< zh(<2B>@q34a_R& zfHv9G$IHp{;=V+o&jx+>;9O+XJ9Mm)I8pq)RxiK>hgSLnd))Si zDaWw^c`o=EoF`~{KMwr-rw~m8)Uo!*YWG_qv)0%`&6)z3lFEa(Xbg?gyxsbrBN=$Q z)DNvY?WpN=oU9axmvlglue2>MqP6et{vKkha0zKKRcy(V{24}MKQS30cA?H<=QH-q zx^v$?zHFK~$QREg4i+G`+}L-39UgbP%0{qsmK- zTzO|F2gwDdIC8dpVJN2XV5`T?O!|wyq0J?tZRQ7=xY>yBLFypetIu6NW091-$gB%i zI3b$``}NK{HQgR=l*()ya4M(_nk9MvQ(4S;- zbN`MlL@-~w$uQ<2ww&EtZbhSX;|CYnmJln&VY@uGK)*UTW zv6@8)=_r3!v*yegqrk*4bnI5b*dVoM_Ud84tnVZZ!4(`uTFS{< z2lzvxzjQI&{V<16ZT5g=d|g6BlkiM3+?g#gES+vgsCh{lo73(e#F2Hs-GWb`n(z;e zeV7acm{vQ%p=x_X;h9xkFKt(>-ey|JrFhbK`98{>uA7oHgLHh{CUZdlb{7@;Cg^*X zWS5*Zb)+)}m0Hr%gG1kngGM{UUJc@}ILu$@!>coskwNiDb01nf6OOvq)*{;Ge=+ma zXxRM@w7&%*cX-Pfq`cZ@xua}Y7Qy*gLNsh)DVU&(HO~u&E@BUdf^PF;Q5`zy5KChmV!!Ek?i48X4=3 zE;0r{(J4bq=l1tpX$2B!>?aKYUYHs-+HY!@*@iX7MSu~m(u$2K*Z*VgE5o8%+i(R@ zQbI&PT2eZsyG6Piq#FdJOS(akly0QEyBq0d7`l6ifq}Ew-}mk9KEKb8b6x(J%i*0> z&wAIp?&l7h(_IYhKVqf1k#cg~ZOK9;V}gbbOoTIj*84KQvaMl96UXU#ODa-@s+fuy zh?9b=igrbn{I@C7YOs)!lHYu#`v{NVJBPM~I{LAvsQj$#SGgvet(H^Z0wK3NgrpBcA2I?R@U=Yi)z7=smKFYZqqY;!Ug&NR+1B8<=%T z;N$*&`w)Vs3~UFB-pZ)A-Z-ZnEVNLAmPPPs=z=#v_J#5xXVvVI^SOqBecF4fd4=Xm#{1v$pXS-M-72P-<{pk8UZxuGTpxks z(}Mz=>@I6lRvN-pO7`3qg1x+i>6jPk zQYO!rJ`J2zxBQpl;Wn7OC<8bXd{>s+k6pBu(U(E4wswqoZ#Q3tZ1yhG#HArC_gqs~R61o$rDAhv=#)B*Vv|m#-$|-}aWloX zVHEdckh{J8#O`pFh}6&H_mF)~OdZePBIK(V%cu-y;Cu&5D-Zsa=<)C`Z;)R-_l?b= zn6L4wN>X{a8!FqB$`DC>%Vhicjfw5&z26Sew^Ih9tE#{gmv&lDS+uYFXCci98k=~* zuO!S(HyM>rUny<&F+ii=lhS=?N#s1FsiHhS{4DxZtlA`3YpYhIr@Pm~&fH%70+*Y!L%>0!5~S$z}c>*X&IiD2Vg32kgER4oHn4;JVB`Om^l_^o z@@yYCjOvgqGaxZa?de+hD!@K*ala7u1rdYr8)sf~&Zz{VEJqRj#xvX#fST+Pza2hQ!)_%N=0*1lbgHtt5QngNMLvt|kVwqnp0Q)^9cc(RPe9h$sj;#@Xva z)icZYvZ#6HCF-qTweYgQuH(|9+-T}v_q+rIavA%GC^2&!T{F77ycb+kQtUnErI|_S zV}sniLd&M1eVW=~AM6D--U&ZGE>q?yC5L-J;0v>VSaF5O9Wf82`B)UnxNr4*GgQDb z3ajq_VUh`>GRwVctM=&Q5MKP)MAob#@0^y<;I9(95&$ZuUp5C!uT&@w65Ju{##g1O z5&=sN+ce~js}AzgvT^Tzq2Ex+FEBiTq!(%-V6P7SU6GIt#^s#TmZhJSCd;_}E}Sg9;- zj3O4+jWg+pKHuEOPftEPl;_ce>bf_4(k>3`yykD(49ur`!=k zh&$ls#dvx7g5c@2O@;j~HeWlg)5GO?^p;=8tAmsLt3a>Z!nE=wTYhVZ5WtX;GW8*| z0P4hK=Op<8<^6oM-R%s++2HxuM|bx|EM3kO=lrQ+-NlP%PG0|IyC_TN4#t@Pe3xpO zggmE#pQ?0@Q{L0R_j5Ie;{A-C(f@~$g zS5qp0;192a`e*_c7+h8u;x6X+91wH{hbE(=+1lV%f_CBg4&*@m)#vfNN8dHP`gZZ! zSjGe)0asalde7s>qXAL?`Tk5XNAkjcg}YL4)Y+M%d@^c@(Bple7u{C-_C-{~I7T|{ zy9K!rx9VqYWXw8v*S9cs0_X*d*Y>>~VNcOS z=f`Q|F*)lzw&l1>VWE|GcF{Y+rguW3zYphHM`BGL&U<5VO)lmnH%rv@<4cmA=7e9Y z{5;yejNhh;QfH~}bM3Ni@rcDjOXeu9Gs9?%z-A73*Nq~^*-YsY;Vm>%rfVfvTY!2R z#T9zEP$7zGhLm~HS0yierzx+0U@+J2?*JRA8w5=5nmY&UmMDnQ+%9~_^B88A-*+NiU#++=yPlKE2tHhk z-rSZ6MkY2wj>abrm(Gn#QN%<1$Z5;<3HhZaCMJgO_nqzo_3U}B8^MDv4W3Z2N8X?T zx$T%5WPaJ>O&OT{Dw6dEYn%5ZtjKr?mfd0#_zB?Oty7W6l~SipC{jgu{SNVeU9ymv z>EW~XUfTpp_U_&I;uwMCipAPT!JGC;4p22FJLcLdlIY^CE=PX^QoAVOY)0n1BxW7E z)pX3_QG>jx_hslVBJ|l9KlB+3Di-f*C0#SF7R}hpJY;0aNah|E5)=#{FCh;y8GHMa zv5B@w%m%Yz4RTV&biu0g7nel43oQv)y2s5d(}Z;DI*ui$PmY$3LiamAJYjrgKfLaN zs#v!M+VndN0YCduk$ub&u|Vw7tiyf5<7PeV6_bOT$n4{VS`7jZy!aAPJL!I+ZJ@j1 zyg#kIP|dG)f45#|{eiSMwbg?wsLp1Y{@)c76!BU#}@^TGU zgJS_8ByX{a@r@GGmRo`w%GC=wsH#$_lOE2eu;Od6{QoX9EG>oEO*LQmQpv~s! zRz>NwIY}56%k|*Fvgps+|MgC)eUUH(2W`E?dM4JP+q%4(fcWk)H%$B)i47 zq4+^$YA5F6&uji)Ypekuv#8Fgg`->V;;==ABoQ2ll|s4oa;5m^nBkI4de;z5l{^Y42N7t&jKXcE?8@^PFU5nmZbB^aX*u}QSg5^GK z2`>UTyUmuNn&79cs`S?ut(wn#ff7e;7LCG8$KS=TG?|pBYAaML%6sedy_!2ORjSP% z#zS6=DIHdQVl0B!_4zxT{9=SWzn)cb6_@uJ)GZ|#0n5hMxKxAhZIr^u~wZGAA>1`k0@r)G{zukgAB=h8C zHaIAffZ$Prh(?a$L$C2E{wb{DvFzr5iJBncx91Qrr(8mdBwV#N*ImCd2ZH?^0L_a8 z(wbw_`ojLRi3EwnHMZ78E;)ugjqNf!-^X>sm)pw{rCMulVKi<=q}34!PF}%c`t+>P z>5nTA#P;408tl%Zv>3aoi@zq4QHx+iVu-WlGVt=Y?fxSB>Ne!g*V{*wA$|7)K*bN~ zB+}*_2x5Pbx*H|p`RT0U^K_C=jt5E6E6FEmh^Eh+!V~>dTFLz6>J>FR<#dFOA(GE> zp^x$6){9qp0))aZwhh-aM>mc}yN`ZU8~b#_ouA*iRoV=hTDaUH(@x0!1|J>E=CgF8 zHW~IiZ7oCn=Y-J4jPNYu(8p@kS;C6SYj_aQ$O7h6ULUIPF=I)EP_HO3U{i%Ja<^J1(Hx1)E^1Z(s1Jw-88~ejxFq zS8=3W)Z-kKl9C!#BMf>=Mhe3ZN@I{#kxvU%9>+;+_Mg+xHw9{&b)Z5XEbeE9*L8pi z+LF%D#^Uf@?^t|0AA~+6?k+6F`=VFAh0{j=aoM zuwav_Tta-ohOIEPFGZYF&lHXE7tk>X(N-Fz+3(cx<`rT%|Zb! z5awEW%jv0}LD<-1X&~w#tu`6g@q0M$=CpELs&dC4dir}wp6K@42ec-38f}`G(0BvE{2i81Z|=wijop-$r!|y#9{Fb}Gn5v15hj=GvwPCOL_nGl>Fu2P*h@5pq(Bqyk#!YI4B$fzw7upefj}pPvZBraJpF60loJvLdJ8b$q zBxYXVJltnf_s*CixsDd&Z&5^%IHTRp%ZpsDFzD4Q7_l(1RTzNAl5D#7Ow=*H|CrwQ zbvQRlo+@%wdGvG<$P5K{c@ zDVk4^Wyc&Fr68X6hG>=N@*P9R>F%M%ulnfqR2 zrlw4$lOtERPQLuFTcb5A^TMoZPTe;j~ z03zsvk2qnH3l;KwCbeJ;F-=%~&ao(00Vgs#P8l2}(1 zu|cfu{Q_`>4x7bNslE#@BUwnPCx;H|qFYb0cZG}=E)6S=O?`>SVr28Q+0RVei^ zc+0q0%DfBWCDU;a_$szwO&Zt>ta zlj~hcll*FHp1Pig|7@4*&MF++fdHguAgIL2XJzTEe6Q>FwTW)6jwYbLz^!^?|C>mT ze8Crm zQ#(ckvpQgzw;}RMV7a)#7}BKd>pyh%yr$yhPMUPV$VB#kj=|C=5cS}zu4mFIPb!j% zhFhR};XTHc2QJ}*0G*uy_{W>mjw}gP&ITg8e#<>~TxRF)P38LuffXWGZcJu_VWvr@ zs__wfx7>U8eK(EP^J9yjHsD2ela zABi4*_j8f@=T#RG#hKG2t*LaFuTsa3EUB12A)%id&guv*p}i-Kee#3-k$PD-2k6Ge zoZF;_htrvzBSNeEPl#C$B!1w+68YCr?KIOG1!6k(#1Sx%n(dsZ06IWgqH=(MP;uvE zgn+2=uHQRUm|p9b(53TL4Q$+-n?906h#H8wfkI)~n-_cSxilX+H^OS{fP6C7n&X#i zBA8gp>h>TO$3qjhU#K_+zkp(0!xxeg*8LJeJK0o2(`>W4#k$?BW}a;r89}1Z8vqvE z)2L)X{GrKA-a32Zdi`}Vpr@PN+*lR&f`85h;j~NCu33EaH|i+s9{*Bt+NXU#v_PW= zeWyc69x>VjIe+T|b2s~}BGue1X3Z)qq-Ps;WaaVrs`ROEXH4)e1GkO{!nuvSj4|FD z{s6pnCUV@|+e439&VgmY(i$h~bBvRrF;lkzuOXpyyEkqLOPrT1j;DS`JxjNm*v}sq zkF5}{nrY4#0*l-XUa|HRcZ1vQ;xah*uH?~*U?MP z#+j;nK=x?z1eaKb1&&4yn_z7YDpPRc1^<@kgv;9 zua$`LsSA6_y;qI~uzTpt&=}?SuVI8^51vk=A0~#+Mk1?;Y|KJ=i$@ZLac- zr6fi8q!Mp&dKv%VFhJSqiD~bJ?8}-81S^T*{mmmv;KFKiiulKjpwQi zUyZuFS2EkrPK$A*#B{c#{|4v=x-m7b7yVvN;yMQaRH!-x)@QVpfuu@RL*#ooOB18= z?k=%%e*F*=F>lL1nR7HR;gjBC>#0nYy`3I!)|zTsO^l%H5`D6wY}LvBQDyAiF%=GR zHT~c6xeQm#{#U7Z+b-|JlqBf`t0xZqv^E83D3*%s2r_OEAKiW(mSypl{cg z(-?x8z>dki>^7H^Qq7|H^)0{x&$y}IQ6{!84p{w40n~!h&hpRRW~UmHqtFj(KCi8t z+B|jsiX{Fn0r&|{a2SEkjMus~ikwpkZ*wF@4ya}Lo>%BtTSt8XjLBcnny$F5vukFL zmDCatqs|pbDW89kx^>St0r-JGUq^F6%pmJ;kcdOgImgIf75(G^Y>^I1Q1{p0aJ(P; zR+r!B02uK`n9a;4KdWH3J0kqCM2m~dPJ)utpL>)Y3lVm0XL^tu>BzvbI} z>$}wz=P|EJ@5471zstW{XgD~;@SS(Np7U8+ll%|Pi)?jm&#iQul)y0uxy~+o_ANtG zAbYe>9jNDtKdajW0=Zl>GAnLrn_GbA{i$T7X`Ez+9{Yv6MXBBgzS}p{QCA>u(R=OI zVb0{6rQ6Q%FFRG?0%o`0xVew#Yv>lw$L%MGdG4sZ)I4M6TTRZXlAxWATT-ZaatG&a za9iBVySo-I3AFVdQIeE=(NQU>P=G;-?{=7rYkc1OBCoU+#`OIMZ<=WuCAvZV&XxXV z_%2D3%{HV#LkW^}{s`mZ=Sem&9=d2*7KW7$o-K|EqNJ%F88-}|g1G^#a0^+05r^`2 z?P?H!3f}=OiEl%tZ>+=G05GvI%q?~eor%I(SaNf9xH zG(XA_n_B)ta#5`71eA$7PXQ!&;7FHu#92q<6A3jnWwJNm11zrRcCXpDJsv!`Kq9Xa zBEVra&w74cOiCi-G3nunPQaq{5*s^W?iRpjBZBcjxw^d01sT6G%08Oj^q5gSk|i5R z8&7L_b4?Ey9*x!sW zwFZyLrjXuV_9h=*+X9GBHaO^bzLr6IV;VP&{jhQtxx**iJ7L?0Q+>qf1Qh1E^QL{Gf?iH;6JNZ`K{%&92uH7Wq+Gg#qZ0>#r zIP>2JSo!YhlS{9amL}JYpTm7C6fr&Ux=K9K;ojhR^otnzR_s)XIwkKKP5Ls;=M4FW z^<2neF37}xqszkX*&vmf%keM0I*GG>uk46#fp~ElOygp#{Wp^OC|vyyl6s`hRuu=n z=m2^9Wqe)>UB|{n;u5F;McerJp*643;=4SUAGh*%U(Jj?@juRw1M z!e01Bz1x4BC;h$5T5!x55!TrrkzV_TUF^zLmtNbBT5=of8x6OEj&XOmc;m|FdnA0t z{{wb)a%#<|C8B0AkwPY&-J931x}hTnGevdP79PbnhZS|9eZv|0xk{1)tcU_fZE$tM)5g4Kfi9z#+UW^>WKqT-Ppd=S*(-LBPuBZ-awN6 zC=-jD?xuu(0J7`;w4OII;_e!hina@UZ;mVH>9ilrF@;NWJW8}UjLAq(H#$4OEtydD=4k4EGaSED5Op zP!8CiJ=-Ih$j!_9kWjiDVfHGUAM>{SaItQ$N0NK@^WN^(+g+fyb$Nf8h;a8;ERzAn zD#yxKLiB0o8O%)a4pH;@d)V!8ISwCvyhcSWcZ+`#4AE!oNVm6WHFl;IU9^tZ#k#JH zl{n0rj#Y4~SXG-@#*R~31F-nfBl_*U_+qU_X_IzE)#A;AIlkEQ=AL+PK*_eC(MhLX zVb|74Ks#Hl$86MBLZvT>)3$hL!B3ET;5T7XfmDOS+Jmw0ibQsC$%Wb%XPI-5n?zbx zoOxYWzjk+b;|aekkjK;N^R7zvN?({Y!Z$RX9X+^37ww0vt!=dVq;#=*4xL=#lM%;L zQV~wW)6>2P z<0C~P+aPW)PS2}DmcuAE3pQ3Jxf8NE785U@I|%2T%Z!ToEp`ZoVXXbq;#HJP(3{SIhC7HA!K-o~}Up7*z4M6!WdCP6;4I)vc5O#m&F8arov6);q++oDu{c#AlzaHbhTo# zKZKa;e30>W@N*HI$2R!DqmX{N--Em+TldQa^SN-KfrZa=GOap2omwx%<25Fp6kUa& zb%d3!&~;+k0@}*BCa*;`U$cv{Kp$i6^jQof$M(~U6AJkq1gd!*$F7ra;r{v4wodHb zMhSXc9naAkMHZpioalsg8h(9``@Ka7dZ80R$~fIf)1v@sw%hKn;ao9X8^H1>K1f8N zDhB39*>!6l_)}qRg>;w;(hqnB)Y|2bWM&i#&H*i5TyFT-A zl>%(>*l)42umzh>dfP>xj&EDRAR8e+5GNi5ti{(Z4R$ev>9|Z<=10orBgMyayJ!t( z3j_{G%EmhPSB7k2cB$W@#tpn(Yw5cXFkJD+_GY?@{mSy*+E zp+LHGGlxG>uYE%u6Bp^8(y~wYn3gt`-4MY#*~^fXACHboZnI*sRtz=w3q zncw?&0=;aZ7hX`^m*r#Os^wtg$N_fdrJ>h06;T9Lto`ZT0b*<_1Qbaw=Nveiwh;Jr zXJzIKZ2S6<7b9idr`@L($K*#JziP-XEpjpiNtrV1hohaOjt>dL$xt`C-U z+0{>5=VfOfi4Bju7D#o_qP81f4LT0$K?X%Wx?t6}{W3ZAa8CXf3)l{QD=KU1*k^z7 zMMl#N)`ECD3f)5OH7klrAyr#~rZxcX5A$J2wfx#^!x+BMV3^lKecy-+{4HAAULq?C z)i%(^?1$7Xna10XM}_BU;QV6lUiEK-@V}?K`74(0Ot{@fj_`&i18}CpoEMFjXC3J~ zvtnui9}Zqzt$ZI+MMzmXRUxY7NgUA*62r8|bnK7DMhwVeuUgg)u^}Vx!k!J0BF9X= ziomxDnp5muRMxM^9oAZ^wD{p!gl!fCat_9_u;8JO9uSE)Xao8W)o9aXpi+MKpFddE zhFVioy(%N)1VlwSJzJ_~%x?fa^i+6r*99Vr8J;%;joMVVI>+p?17HFkXKsmmE-OHc zQ!}p|x|b0?Q^O%q;WZax#$NGpsTnPM&q|4q>{#EZBVdR0Mx^iHlxZNM&QLG8!KKyS zlHl9bA1KMQi@@IjEv5aPRsuj1T_woe%?qGeY}~stU6|LO9x$4ma`^bbQut-qzh1IO zP0W@@7sHG}ecL;qd861}dj-?)GwnEzw-q#bPsMI6XMb5iLwGevdok^6FEdT-#FJ3f zw7q86&+m@6`XgykNZdWMYL|0GJBm_bZgdgHPBq=-!Ft>J8MwZ-!o~SGBEE^I!v4W~ z{J~AhO@u-Pnx@;%YIR3jO%-ZpjZDxHY=6t#F5XM4$=3`U&}6$G)FcE1Cy63ZA=rz{ zRB`X7XY1!PQ}0YU+916CiP{0^8o+~_^=4)4>IBDFiZY!YHK!$_>Y@FwI%9%)KF&8OE|^cpz`ie=Yqc4b=?^_NftP-|uVVihIKYHns8| z9CTTE1MTwA2(Chz`0VFnyf(R|rkI#ZTtfWX%5|kq&ou%*H4!W>suA#`|Ab-a9-sI* z8ry==hr`9gp%39;Su3uI))6fUdi+ilQm!+jL>+kf&!peu)6Yal!tdLMcDjl6m|dZV zih|SXe&6W`cp3mhXDt=d0{)e#^|&T<$Lq5VJTnBn8p41q8;9yc_n6{;Zp_D)8eB-MsndKvoJwNWm- zXT^y8pP$Vz#wthn<%J&0OTN6cTWt)9ZTVB^8sZ9%zef>SnWp^{cABfV{N^Ah6=36LXV18zof)TdR@zlUqc0|p%L|yLz`JbkpbC(Hh)u& zY3vb5WilUC;2nHNigzRK4fH*4kY9)q{7c{cy;6DZAD*_7T$qj;JT%kKiMQv!mt zR-%dwxw(0Rtu3cYnTF!;v`bU!@%*(^n*1PtUy)eM|0un4TxAY5_*W*2*=gm-C!ZXL zhy@LCvm#ggm0kOvLsu9^c8&YxB7C8y)YGhNE%1kSR49}z13T+qDTx%A_yALz+(@t- z=b!2jf(Pv_qapCR-o*c^fc4-F`wNmh#t;rLV7ECiqX_3IB5pjzq` zZxRcX${*&%|HncHwoL;s5d^K5ns!7Pdb54yxuyTlcfhXEn8PQ%nW7S3R%C>U^;ro2 zF#A`?rU1e)QmcBR`|B?n`rBe|>d=i<$$yV0g;y+1aXe=;l0z+!c>SkTUI^YB$#qLW zli)B-*^202vilDi-;ffq?uHwSeLd??S@QpgR(aefV|Y29DQrir{uc&Lf1ZAdRUimf zU`GDKzy1>tji!8|p%%kI_m~m+<7BRik~VQcl;W|t|ND;y1*m*+;Z&zTf0*krx4FAB?$5mx z7yi0dO;b=M_s>{TI7wh|ltz8bpKTQyAO!jKGpB!@!PO5ywlNm!zxMvsGa#}!D`S-B z&x=P0BoXr%fH$4>-iHMIRd+D%KqO0syd$ z`lGxoz;#C8c6asBXtakRS2zfVvraSyX&dfDp`cE#X?*zD*gtr!lGH$@sizr(sj17% zs`4Oa!agKx@$;F#^nVWiyC^9Sj|5=#{|?`M;-j?G_t*_2-e0eu&?XEqm>3yF;sIu$ z(K)%f8^7Wu;<7hy(r`BCw2t^T&GKTzpWsq)y*}ye860s$AIkH$z#5mLCMp~mVSad< z6=;p{-`m;v_Uf>eTJi+56a53Ap_yA%ZY^BQv18YkAT+wEUs#s8A! zH^@uFDE*?EkDt|n^uMVp+h{`c2Ek&N4|3a`Eo zzAS(rd$%qtJt^GY`p?ZLl!MuhB#@GWub2d{D%dcBCy01SZbDK)^iQoSSR$=D+tW&` zri)~_HWlRD6SovU{PZNVKH;LG28N0}-lQDhsl0(SVW#c8ylK;Cx#)sO&5}Q76yCr zgp5o|OjyO*+Reg6$HPt(oH?Jnod9^V?N8=+o;N809Bqr0thi#$7NyJM#r=|^Zu)Mu z@72Utq3@6B6(2_83&bZWEccZrTO#V$DYI`hV^+42L$x3+Vm^Y3tS`|w8u#&?7A?7T zDJ(%$q0prtRog7s&lebn$+JDH9{Ba6>d*- zeLegpZw1Q^$NL=R+IsAoK7yW02b)T%5Y0r>qiv`8e5b!VG@Iv7U#lj)LgRYiduW2k z&ByG3?DY+}IQl)TPB9+Gj6qeuyW{A_eEUgOaYTdfJ8!$c;=0)DG z9a&q5+G%lvVu`I0Y_ zv_z^=GsL*MNr<1EoC3Ps@snw#NuU_@&CBoOs|fPnk)l6+2+(g%V@m^#ED6EikYnP` zDrnUXL*bBA7KrlWagnB4Cow)Wsb786_UZ`d&hg?7EmA2D-W$AruM83u#3@EXpYm~y zL?ls{vprN;X$~UPAEgjHJoK7a+jNzhB*0N;{NZGRUqEjQtmFFMmb*`*B=MM3HlNR^ z++3ySt~obt`U$`)Uw$6=E(EQ>4ST;&Uz&7ff}N+hNsFu(FK%-us-rJxJz-kS3(_K5 z@R$#yl}UC5l5$fOPHrjJyQP8ld^?AI3#XV4$%}-7Wh*h-sc#phb-^=7%{hM8-nr3k ziixI(NP@p$arj&@{E9g~mOdhg+~)^JO4+8e^8{^@c|O-s)}Y#+#RD~)g~1zWmvZh$ zRjH33W86R^@gVP;aqBYO{4^c+n@@nv1;{}wpYd!q3$(ePls?ctRQBD5XUb8gX+0wU zxcwe>Hh*ztydLDV;^2jQga`Qs(3;b}963Y*_A6@lI@ifFZ2F8Xh9Og>%IY(vnw0up zH=zery0Y3fWqR2`=nOV7^Hr_P$7=I5*u*1@3vJnw(fz1n0tOtA9Vg$E&lB%nYPU86 zeqw5X$Ayg)m;2OU{5n78Q#$(_6r7DlaGeya{`pG)SN7z*qPvmzsb`>5XHJW9JX&K1rxV)XK($&DOp&Ax4d|@M<+Ms%$(U5C8F_} zNSe=sinW^tlV@DO0X(+z8EHc%P5kO3p?mx-7NcYh#Wvjb^Y1lp7i=4DtIzzdME9gT zouvGlTi=hr3N}VXRR6)5K>4w4#w6D}*W7}iQZG+eLsRL!txtck|B59Uf}H@jT4QUS zKDrgRpuVCiv5Gx(dcpWdo>l`5{$g%ciXP~kJ*n=U_z?_To@3hkpuNc3)022PqM1%_ z^j>h`1zmm`hY^%T%WC$0`E$lgdf zYC&i#Lc*D=@<%p2{`?D`GuvKLO7Pw=^nSm~ zdVZp5nG&C&DJ=F^#@ictSz8#7Db=LG%|)v`Qs>i8iaxCg4IMWO*#o<#{`>jcl$P5l zRfLe!$UT^sg7LA0U0wuLzEqIA1zRB}mXvG^4P>uzi{FGV4gc^~3Yx@eIoB>TV7@H7 zsHT_&!Xvd%Z(~wC-S2^P0Hr!n<}S%fJI#{y{%}HF=6;8h@zi=2vfDzeP_fi|fqH1) zahsB|OH)x>boB-nwQyh7pz%#?f9^s}xfs{;vfx!QZ{ZUKa9`#_uKM5vW%x#oI@J(5 z3=7|TC{?KCV>cO$RRn9uN7?xR_QLnt ztPi)`rd}gIYjVwwQB_kIe$?sv%-?08wFv9pjgNbKzyV-yo!;3z_3_Y^V_Q6%N=RhA zQ8iZXaoc(0R0%FM9^hyp7-D{VW)i+R@{8#wN$b8H;XBnL)w&ow;pP2i0oJSJq_d+% zzJ!^u%D>8;^3vg4g-q6yIZ&WGPp%+J+Kw!a+Pbi?+`_?U{+?#ca2329%vap!8# zVQc_zE!JQ_fQAYv-fnw1CMw@4J{+oRYJz)*q+X^sd5e$AZaEWEsLBt!5uU#6{!aNOYmA1B9Bb1c)H`JHGUz1+7EMEyEyvI|lyk%6++#$u0 zd1Rn^FcRZV@XF`#ScYUslYci3tx7D}?6SEx!L~PBkp`-=eZn+}c;vp$xqpJc3z^@TyTPDY)1>6kw*S!eVk+iZmZLZ7ONiR1-B0r?u^n7W_T7IXj=lQYLdcnMQo%SYn za`c;8$)fwLLDvuyUs4wk?AIfBHt8wffLVYM;UxlOtkdq#mav#`!*2G5}M$w2mlKn$f1 z!~1lyD0y`Q=#ug}yMSer=GDYT=t6Digbx2tOz?x8gwqySd{<#{HKVB|wykDFJyvMrJw#X9m*&G^@cxn307k>s_ z5Lk=3WtHNU)%a-2tK#(g>v-#q87-tuA3vH>iJes9Wu^!@Jn_@Rvgd7I_3v{=wET1% zye=-{>15{b>m}pXph^m-*ZEs3|U=A+POM)yM;E9)iG zdl9FF1o=+>>-K~1gIN4c7iU(fpS)g! z#Oc4i8H~42;~`0F+!Ura+i;am_k0?lgWo;leKa+(y&Qh`+xh$<1c@Xd+oqeFEy01X z`RjiCl_wO_wstX*w9j$h{hZYH-Rnt7UF&=4hr?Qzh71}#>AMTh5I|Pv9jx(lrSCVZ z5f!4}YqzY>dCZ^8TRDw>1?93w-P)&!=jdriVVM*8_eJx+9{ldhI3MC}BLa1+(VA=c za34;KhPAJvu*-iHrTHgZsIcWR2W;8s+1x+qyz+W)w~5LXj6dpsz~qTXPKdDI%(r69 z3564*A6xW!4f~qQe`8HeROZ_wLK64UyGfcn%S;o)NX=8uc9^AFt39g}^#xbCs3@-qo3C z2v*kCs#%F~1+8=(;`7&ipPsejXoGuT5na@%TNxaLXX$D^H?2E}>>0P@^x7`rOp#=5 z{S0edIOy}bOx@X%=Q=H#H%XDo3p%X_BCp=FY>Z7k4LbBN zYUsRRMKZd-@}lAMw!6&acuNWo=j$E-QZIG|z4Y$nCKTYbmEXqqLc&U&nR%^!Kg#N= z5?zVf%08swHCBLUqjAHWTu;)hS6&A)W>GltzlQXb;pq%8iQL4{! z4c&hyWASQe2EI>pBWdZl{?kqH!+xIUIj*4LJGFhgzB@Bg0T%+RU86Q5#$k-ilzS-A zR&+h6d6wkx)#{{TF%G__f~T^Iq=cRQ@SV6|)hlSa?=^eKS^0iZN)CfbOWvr4P=Ty5bNM)N)rpPGe@WV3MIlL?xMpB8H zwxmi?9pyCfy&+DVtLjIl+Baat+LLL)Mf*uPl=}ky=6sh72S(6p#SMB_t8zx|dqjh+ zf)|d4NtT#(*8)i(vG8;zL8hKadmFfDTRZ$OU%udc9;VC9|Ed<{IoWTt_d39?_=5?f zCE586$rYQHmvpZwd2}pO(3%ev@`e}jCOeueLf+tG_?ZBAo2N3$@wG{$=z3i!8_JlD z$E(GM)c`ODdfYMEc$?zv5rUm9ueT{!F>^_wlmtHyvHMmSZW#Am-Gb2I6N}hcoHAKC zxFVOdbsIv}gqXIPcCf=gq!VQ^Wy^Jr*33tZ!~RoziyAE|NW!1~Fe z>xJJ$FJTDNa-gZUurLEd~_#Ytjk7T@T>89du4YN!+1bkk?AsVH$J z4;iEY(u7=xxxT_1HY6`zqkcZtsI~E!mx3;FFjdN_N_`sXP)q20pX)d}f%3Y9Q+4Z4XkLy)k>YX$s};>xX(Z3-PQ3>$K>ec_ zQ!-Om10R@N9e1;=Iq`m$mB1)&xm`?0eyZAzlYE~X6v^&i+a_cP&ucMhj}5H1|L`gZ zYGI{THtepL%|YLrrJ;9z`mruVB$+$Uo`Bsn!bUX80(akg*-4Yg%XK%ay~|Y+@A>wb zOUg+%#xygc6L(lHRn&*MI-@{Y>=QRDt2g43^$Fs$ZaM8ARZr^LfIeDphsqS@g9FU!?I2ZEvPj}5Z8pnKG3~d8`U7PY`y)F9X zl>OUnE+RE-rzaGgarXh3HT^=*NQy-#>Nb~DS1fU~0XfqnhU4+Rp&pFn$s&PJZuquJ z4cF>EtC$Wqg?!!?35 zgNEJVi*q5PhlIe!iMsfvt|*f|cFOJJ{({HJv4R&q;-5qnSL1gMWu8omgyzU|Xy~S# z94)7q&y|1_YfHO)K710uge`EDCS++h2j=hm(I3 zF-q(o*>pMIgh%)rzLzbxzLXZJn=W8gi7=3)peUGsOV-WoWYjPZ5naoZNHa|n&W-EC zPdP00JG+Thx}qvoMtl zSLqg;a`CsY4Wg$U|Lb1&WuDhvcjTgn-w;yV0Fz5q;p-P=E-i^SZZhOq73H&8PSqc4 zzOA%LdFs11QCT|K-UR)}I;rrWF6L2T5A z6%qt2&|~jxr8UR8y%kP-HiaA&n5u4zk`)0QUvI}eJDC_QG>{ZSEOcL9un0Nu+khE4 z40C%4pYAQ9=36CqedvSNVY}I3KVj6WWCdh(>*IHqa;*jf>*36*aIq`25mmr!O z1$d`PDa+Eg?6PK>F7wPcxFw2Qp)Hf$GGQ6Yy}zAiRA4a3MFq_fg>2V0AJx&eK5)mr zE8*K&zQ9(^F&7zZ>D9On+cGdZKY7Y;5? z3(qtughq+D-wjMwZ{zgY^OwO;Ye8lrUKZoU$$8eAUb0H>)6WQt4cClA2AV0 zw;bcHlB8$28qeQi7(~uKyk7!xv7{K>L@dV!|Cqq?93PsS!3}dZA12cncyY!Gp{j}RvhKg>#>0#J8x1h`z|2pL0pj5&q z08cPEq|T`XpM>m4wmrP><+A??tVCPp4RR$lwHuq1uz2}EttDaQjq12Q= zq1#(&t5gD65mO@81*og`DJ0@rmh578v`6H_K+eVDy?p|LqM0-rF_vP+}o-pM3^zFpdmK(N$>5J-| zqF83YGd6n4L9VvLP8wM<@Su6mV!q8ty_j`?X6u~`bF2~-Ghi@F+mUVi9S@(vU^g96 zEeg4JV?XfpTTUkjGHajiDY(Rz%(YqbXAf$Br9E#i$<{Fo$ItYpsjHBm3I#LDDx$v$ z{&S<@LYZvj{;MQ7Z-_T0m@Ho>)hFp2X=`l!p+K}sSp&P&Ae@Tv@`c&5o!Ih;FuIyz z|4L4K6jfNjzw#-7>1mn)ee!3<2jY1MiffE!N9Jy~htARH@lj6{YThVt9C1 zsY#{AzoykKhJ^wUdTI^Uxi3bx?>>Nzbdy_UO4byn5 zq-{+WFAf;$&dErSWKXU8I~k_(k~*ka5|H0iG9$O3MFd40=Jw3|=i;yPn|bQ_tGXgA zxuBv1AU7$1l<|)UbCL>ymiRoP7wJ#idT+COU~cQdtwrtAPUVmAPruT8w%oIxk)3#F zpBfP(J$RA#?<_CahK!SQzF#A(*#~o7k3Zv1_No2KKlb04QOd5ML?tz%s;shMmVfDW7=k}p|5rGEMT8aw*QzD@!;mr?hhH;_Dy-bK%w-G?nE1s_ z3z@m1pX@$sKaKTZ8eRI=q08^dPuCrFiHWYR38pE_Z4G`eY9=h$ z^7foVHMymNUkGx81MiEky`~fWDB*qA_P2ZDrc{#71zxSS;ia2Rec72if%vXjTermm z#j5vT6I@>HmKBZb<|`I4mlsi)T~D6R;5vLt^}sfVqJ)YgtPFMJb3}woYH| zNRY5`eb>gv_G{1{TZb1ug7BS)zk04THzH^Za&X|pl&6Ri>D^|@sZ;Wt$1OA1poHmy zVAF~oOF8W@9fnu$M~-D3R*n9J!$O-$J6qn7kmDg;=lj;g*tqGXp%j02mRRbOD43o* zGcf0oQmpr$jROvgu!?wmv%C+RV(d&A`J7Kz!|)l=XvNU!!Qp52e(3#j+=^{i`VtN| zY9XwBBT!s*@2xP_PmA5vM)15Vrc`3g^nUHf==`Jb-}wyXjhSJ+A3loRw2$YlWvVsa zN7N|%z%3I{1V?etaqk~?4zA5{+xxvI@YAnBLQPx0*y*H2mTUii6w#k7_9ZxkDHMDm zC1VC|xI$BMSu9LEChls~6vw@IaBF7K+@IV&9l&`2)J7r$7M$H^UE976xz*=7Tz~Ud zg&eKQO*Kx*h@RR-euq!_Pj0`kN~9%R_5| zAR`V)Ua`OH35z`DOfi#0Y{E7uHTnCO;xhMZq|aW725|#&PdDs{GGv%b$szJQ1aB!V z1^g-0(}934w{SRDP5Bf1x+w^NZeEOJOzVxrlanhu|AYwQ5K#%3SVt<%9 zv%KFKo3dmqZ`TtI-)IWDUU~VeTmFwffALx#`K(-SFG>K!$Am$jVM~@I5@1d$$jHl4 zd0F*cRtu93Y%nY|=PV9KY5|y7T>nCfVS1a{16N!h&T(NO{;2=ls>vA(D&)7x22uvn zQ2lXhsYUN)Co0ODL<&M^&&Df&YD<*V9((t6U-8zh5`Iz8Bg~Z#+1X$1?KO8Cpk-&^ z`vtGc2c53b@$p4&_`d$Re9XmMNNs-M5Kx&1^{{3*;w)5q(3qE(oNS8os^z&ws z>;es5Es|(leZ9DjHY@&rz>Wi=fV0dI@~=Iy3z^NIayH^w(wd+R(D6rQI{dnGt63iZ zqaLR64+<<})%RG{)4cgZtQpo#NL7tv`JU}C6xy7nX(d(3ynp>{tzpRBwyij6>`LqJ aoiK3npDr!`UI!pKJ#;ic>V>y0p8p@6Sf}a$ literal 0 HcmV?d00001 diff --git a/public/docs-static/img/manage/reverse-proxy/reverse-proxy-add-target.png b/public/docs-static/img/manage/reverse-proxy/reverse-proxy-add-target.png new file mode 100644 index 0000000000000000000000000000000000000000..88b2a08c4652b128117f7a4ba8c839075ba4d7e9 GIT binary patch literal 59018 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 literal 0 HcmV?d00001 diff --git a/src/components/NavigationDocs.jsx b/src/components/NavigationDocs.jsx index 4d86b436..0dc688bd 100644 --- a/src/components/NavigationDocs.jsx +++ b/src/components/NavigationDocs.jsx @@ -156,6 +156,16 @@ export const docsNavigation = [ } ] }, + { + title: 'Reverse Proxy', + isOpen: false, + links: [ + { title: 'Overview', href: '/manage/reverse-proxy' }, + { title: 'Custom Domains', href: '/manage/reverse-proxy/custom-domains' }, + { title: 'Authentication', href: '/manage/reverse-proxy/authentication' }, + { title: 'Access Logs', href: '/manage/reverse-proxy/access-logs' }, + ] + }, { title: 'Network Routes', isOpen: false, @@ -320,6 +330,15 @@ export const docsNavigation = [ isOpen: false, links: [ { title: 'Configuration Files', href: '/selfhosted/configuration-files' }, + { + title: 'Scaling Your Deployment', href: '/selfhosted/maintenance/scaling/scaling-your-self-hosted-deployment', + isOpen: false, + links: [ + { title: 'Set Up External Relays', href: '/selfhosted/maintenance/scaling/set-up-external-relays' }, + { title: 'Migrate SQLite to PostgreSQL', href: '/selfhosted/maintenance/scaling/migrate-sqlite-to-postgresql' }, + { title: 'Set Up External Signal', href: '/selfhosted/maintenance/scaling/set-up-external-signal' }, + ] + }, { title: 'Backup', href: '/selfhosted/maintenance/backup' }, { title: 'Upgrade', href: '/selfhosted/maintenance/upgrade' }, { title: 'Remove', href: '/selfhosted/maintenance/remove' }, @@ -369,7 +388,7 @@ export const docsNavigation = [ isOpen: false, links: [ { title: 'Coturn to Embedded STUN', href: '/selfhosted/migration/coturn-to-stun-migration' }, - + { title: 'Enable Reverse Proxy', href: '/selfhosted/migration/enable-reverse-proxy' }, ] }, ], diff --git a/src/pages/manage/reverse-proxy/access-logs.mdx b/src/pages/manage/reverse-proxy/access-logs.mdx new file mode 100644 index 00000000..bb71db3a --- /dev/null +++ b/src/pages/manage/reverse-proxy/access-logs.mdx @@ -0,0 +1,64 @@ +import {Note} from "@/components/mdx" + +export const description = + 'Monitor and audit HTTP requests flowing through your NetBird reverse proxy services with detailed access logs.' + +# Reverse Proxy Access Logs + +NetBird logs every request that passes through your reverse proxy services. Access logs provide visibility into who is accessing your services, from where, and whether requests were allowed or denied. This is useful for auditing, debugging, and monitoring traffic to your publicly exposed services. + +## Viewing access logs + +Access logs are available in the NetBird dashboard under **Activity** > **Proxy Events**. This view displays a table of all HTTP requests that have passed through your reverse proxy services, with filters to narrow down results by time range, status, or other fields. + +

+ Proxy Events table showing reverse proxy access log entries +

+ +You can also retrieve access logs programmatically using the API: + +```bash +GET /api/events/proxy +``` + +## What access logs capture + +Each log entry records the following information about an HTTP request: + +| Field | Description | +|-------|-------------| +| **Timestamp** | When the request occurred | +| **Method** | HTTP method (GET, POST, PUT, DELETE, etc.) | +| **Host** | The domain the request was made to | +| **Path** | The URL path requested | +| **Status Code** | HTTP status code returned (200, 401, 403, 500, etc.) | +| **Duration** | How long the request took (in milliseconds) | +| **Source IP** | The client's IP address | +| **Auth Method** | Which authentication method was used (SSO, password, PIN, or none) | +| **User ID** | The authenticated user's ID (if SSO was used) | +| **Country** | Country of origin based on source IP geolocation | +| **City** | City of origin based on source IP geolocation | +| **Reason** | Reason for denial (if applicable) | + +## Understanding log entries + +Log entries fall into three categories based on the HTTP status code returned: + +- **Allowed requests** - Successful requests show a `2xx` status code along with the authentication method used to access the service. +- **Denied requests** - Failed authentication attempts show `401` or `403` status codes with a reason explaining why the request was denied, such as an invalid password or missing SSO session. +- **Errors** - Backend errors or proxy issues show `5xx` status codes. These typically indicate that the target service is unreachable or returned an error. + +## Use cases + +Access logs support several operational and security workflows: + +- **Security auditing** - Review who accessed sensitive services, which authentication method they used, and from which geographic locations. This helps identify unauthorized access attempts and verify that authentication policies are working as expected. +- **Debugging** - Trace failed requests to understand authentication or routing issues. The status code, duration, and reason fields help pinpoint whether problems originate from authentication configuration, target availability, or network connectivity. +- **Monitoring** - Track usage patterns across your services. Identify which services receive the most traffic, peak usage times, and unusual access patterns that may warrant investigation. +- **Compliance** - Maintain records of service access for regulatory requirements. Access logs provide an auditable trail of who accessed what, when, and from where. + +## Related pages + +- [Reverse Proxy Overview](/manage/reverse-proxy) - learn how to create and manage reverse proxy services +- [Audit Events Logging](/manage/activity) - view management-level events such as configuration changes and user activity +- [Traffic Events Logging](/manage/activity/traffic-events-logging) - monitor network-level traffic events across your NetBird mesh diff --git a/src/pages/manage/reverse-proxy/authentication.mdx b/src/pages/manage/reverse-proxy/authentication.mdx new file mode 100644 index 00000000..eb0a8c0b --- /dev/null +++ b/src/pages/manage/reverse-proxy/authentication.mdx @@ -0,0 +1,163 @@ +import {Note} from "@/components/mdx" + +export const description = + 'Configure SSO, password, and PIN authentication methods for NetBird Reverse Proxy services to control who can access your exposed applications.' + +# Reverse Proxy Authentication + +NetBird Reverse Proxy supports multiple authentication methods to control who can access your exposed services. You can enable one or more methods on each service, or leave a service completely public. Authentication is configured per service in the **Authentication** tab when creating or editing a service. + +

+ Authentication tab showing all available authentication methods +

+ +## Authentication methods + +NetBird offers three authentication methods, each suited to different access patterns. You can enable any combination of them on a single service. + +### SSO (Single Sign-On) + +SSO authentication requires users to authenticate through your identity provider (IdP) using OIDC before they can access the service. When a user visits the service URL, they are redirected to your IdP login page. After successful authentication, they are granted access to the service. + +You can optionally restrict access to specific **distribution groups** from your IdP. When groups are configured, only users who belong to at least one of the selected groups are allowed through after authenticating. + +

+ SSO configuration modal with group selection +

+ +**Key details:** + +- Users authenticate via your existing identity provider (OIDC) +- Sessions last **24 hours** before re-authentication is required +- Optionally restrict access to specific distribution groups synced from your IdP +- When no groups are selected, any authenticated user in your organization can access the service + + + **Self-hosted deployments:** SSO authentication uses whichever OIDC provider is configured in your management server. If you use the built-in embedded IdP, SSO works automatically. If you use an external identity provider (Auth0, Okta, Keycloak, etc.) without the embedded IdP, you must register the reverse proxy callback URL with your IdP before SSO will work. See the [Enable Reverse Proxy migration guide](/selfhosted/migration/enable-reverse-proxy#configure-sso-for-external-identity-providers) for step-by-step instructions. + + +**Best for:** Team services where you want to leverage existing identity management, internal tools that require user-level accountability, and services where you need group-based access control. + +### Password + +Password authentication protects a service with a shared password that you define. When a user visits the service URL, they are prompted to enter the password before they can proceed. Passwords are securely hashed using **Argon2id** on the backend - the plaintext password is never stored. + +

+ Password configuration modal +

+ +**Key details:** + +- Set a shared password when configuring the service +- Users must enter the correct password to access the service +- Passwords are hashed with Argon2id before being stored +- Sessions last **24 hours** before re-authentication is required + +**Best for:** Simple shared access to internal tools, staging environments, or services shared with external partners who do not have accounts in your identity provider. + +### PIN Code + +PIN code authentication works similarly to password authentication but is limited to numeric input. When a user visits the service URL, they are prompted to enter the PIN code. PINs are securely hashed using **Argon2id** on the backend, just like passwords. + +

+ PIN Code configuration modal +

+ +**Key details:** + +- Set a numeric PIN code when configuring the service +- Users must enter the correct PIN to access the service +- PINs are hashed with Argon2id before being stored +- Sessions last **24 hours** before re-authentication is required + +**Best for:** Quick access scenarios, kiosk-style interfaces, or situations where a simple numeric code is easier to share than a full password. + +### No authentication (public access) + +Services can also be configured without any authentication. When no authentication method is enabled, anyone with the service URL can access it without any restrictions. + + + When you save a service with no authentication configured, the dashboard displays a warning: **"This service will be publicly accessible to everyone on the internet without any restrictions."** You must confirm before the service is saved. Make sure this is intentional before proceeding. + + +

+ Warning dialog displayed when saving a service without authentication +

+ +**Best for:** Public-facing websites, APIs that handle their own authentication internally, or services that are intentionally open to the internet. + +## Combining authentication methods + +You can enable multiple authentication methods on a single service simultaneously. When more than one method is active, users can authenticate using **any** of the enabled methods - they choose which one to use when accessing the service. + +For example, you could enable both **SSO** and **Password** on the same service. Team members who have accounts in your identity provider can authenticate with SSO, while external partners or contractors can use a shared password. This gives you flexibility without requiring everyone to be in your IdP. + +Common combinations include: + +| Combination | Use case | +|-------------|----------| +| **SSO + Password** | Team members use SSO; external collaborators use a shared password | +| **SSO + PIN Code** | Team members use SSO; quick access via PIN for specific scenarios | +| **Password + PIN Code** | Different shared credentials for different groups of users | +| **SSO + Password + PIN Code** | Maximum flexibility with all methods available | + +## Configuring authentication + +All authentication settings are managed in the **Authentication** tab of the service creation or edit modal. Navigate to **Reverse Proxy** > **Services**, then either click **Add Service** to create a new service or click an existing service to edit it. + +### Setting up SSO + +1. Open the service modal (create or edit). +2. Switch to the **Authentication** tab. +3. Click **SSO (Single Sign-On)**. +4. Enable SSO using the toggle. +5. Optionally, select one or more **distribution groups** to restrict access to specific users. If no groups are selected, all authenticated users in your organization can access the service. +6. Click **Save** (or **Save Changes** when editing). + + + Distribution groups are synced from your identity provider. If you do not see the groups you expect, check your [IdP sync configuration](/manage/team/idp-sync) or [Single Sign-On setup](/manage/team/single-sign-on). + + +### Setting up a password + +1. Open the service modal (create or edit). +2. Switch to the **Authentication** tab. +3. Click **Password**. +4. Enter a password in the input field. +5. Click **Save** (or **Save Changes** when editing). + +### Setting up a PIN code + +1. Open the service modal (create or edit). +2. Switch to the **Authentication** tab. +3. Click **PIN Code**. +4. Enter a numeric PIN in the input field. +5. Click **Save** (or **Save Changes** when editing). + +### Removing authentication + +To remove an authentication method from a service: + +1. Open the service modal by clicking the service in the services list. +2. Switch to the **Authentication** tab. +3. Click on the authentication method you want to remove. +4. Use the **Remove** option to disable it. +5. Click **Save Changes**. + +If you remove all authentication methods, the service becomes publicly accessible. The dashboard will display a warning before saving, as described in the [No authentication](#no-authentication-public-access) section above. + +## Session management + +Authenticated sessions for reverse proxy services are managed using JWT (JSON Web Token) technology. Here is how sessions work: + +- **Token signing:** Sessions use JWT tokens signed with **Ed25519** key pairs. Each service has its own unique key pair, ensuring that tokens for one service cannot be used to access another. +- **Session duration:** Authenticated sessions expire after **24 hours**. After expiry, users must re-authenticate using whichever method they originally used. +- **Scope:** Sessions are scoped to individual services. Authenticating with one service does not grant access to other services, even if they use the same authentication method. + +## Related pages + +- [Reverse Proxy Overview](/manage/reverse-proxy) - learn how the reverse proxy feature works and create your first service +- [Custom Domains](/manage/reverse-proxy/custom-domains) - configure your own domain names for reverse proxy services +- [Access Logs](/manage/reverse-proxy/access-logs) - monitor and audit traffic to your reverse proxy services +- [Single Sign-On](/manage/team/single-sign-on) - configure your identity provider for SSO across NetBird +- [Provision Users and Groups](/manage/team/idp-sync) - sync users and groups from your identity provider diff --git a/src/pages/manage/reverse-proxy/custom-domains.mdx b/src/pages/manage/reverse-proxy/custom-domains.mdx new file mode 100644 index 00000000..b5e027b2 --- /dev/null +++ b/src/pages/manage/reverse-proxy/custom-domains.mdx @@ -0,0 +1,166 @@ +import {Note} from "@/components/mdx" + +export const description = + 'Configure free and custom domains for NetBird Reverse Proxy services, including CNAME validation and DNS setup.' + +# Custom Domains + +When you create a reverse proxy service, you need to assign it a domain. NetBird provides built-in domains that are automatically available for every account, and also supports custom domains where you bring your own domain name. This page explains how both types work and walks you through adding and validating a custom domain. + +## Built-in domains + +Every NetBird deployment comes with built-in domains that you can use immediately - no DNS configuration required. The format and labeling of these domains differ between cloud and self-hosted deployments. + +### Cloud deployments (Free domains) + +Cloud accounts receive free domains in the format: + +``` +{subdomain}.{nonce}.{cluster}.proxy.netbird.io +``` + +For example: `myapp.abc123.eu.proxy.netbird.io` where `myapp` is your chosen subdomain, `abc123` is a nonce unique to your account, and `eu` is the proxy cluster region. + +NetBird operates multiple proxy clusters in different regions, and your available free domains correspond to these clusters. In the domain selector, free domains appear with a **Free** badge. + +### Self-hosted deployments (Cluster domains) + +Self-hosted deployments provide cluster domains in the format: + +``` +{subdomain}.{proxy-domain} +``` + +For example: `myapp.proxy.mycompany.com` where `myapp` is your chosen subdomain and `proxy.mycompany.com` is the domain configured on your proxy instance(s) via the `NB_PROXY_DOMAIN` environment variable. + +There is no nonce in self-hosted domains. In the domain selector, these domains appear with a **Cluster** badge. + +### How built-in domains are derived + +In both deployment types, built-in domains are dynamically derived from the proxy instances currently connected to the management server. They are not pre-provisioned - they reflect whichever proxy servers are actively registered via gRPC. If a proxy instance disconnects, its associated domain may no longer appear in the selector until the instance reconnects. + +Built-in domains are a quick way to get started. They receive automatic TLS certificates and work the same as custom domains in every other respect. + +## Custom domains + +Custom domains let you use your own domain name (e.g., `app.example.com`) for reverse proxy services. Custom domains work identically in both cloud and self-hosted deployments. Before a custom domain can be used, you must validate ownership by creating a CNAME record in your DNS provider. + +To manage custom domains, navigate to **Reverse Proxy** > **Custom Domains** in the NetBird dashboard. + +## Adding a custom domain + +Follow these steps to add a custom domain to your account: + +1. Navigate to **Reverse Proxy** > **Custom Domains** in the NetBird dashboard. +2. Click **Add Domain**. +3. Enter your domain name (e.g., `proxy.example.com`). +4. Select the target **proxy cluster** that will handle traffic for this domain. +5. Click **Save**. + +

+ Add Domain modal showing domain name and proxy cluster fields +

+ +After saving, the domain appears in your list with an **unvalidated** status. You must complete CNAME validation before you can use the domain with a service. + +## Validating a custom domain + +To prove that you own the domain, NetBird requires you to create a specific CNAME record in your DNS provider. + +### Step 1: Create the CNAME record + +In your DNS provider, create a CNAME record for the `validation` subdomain of your custom domain, pointing to the proxy cluster address. The CNAME target depends on your deployment type: + +- **Cloud deployments** - point to a NetBird-hosted cluster address (e.g., `eu.proxy.netbird.io`) +- **Self-hosted deployments** - point to your own proxy URL (e.g., `proxy.mycompany.com`) + +For example, on a cloud deployment: + +| Record Type | Name | Value | +|-------------|------|-------| +| `CNAME` | `validation.proxy.example.com` | `eu.proxy.netbird.io` | + +On a self-hosted deployment: + +| Record Type | Name | Value | +|-------------|------|-------| +| `CNAME` | `validation.proxy.example.com` | `proxy.mycompany.com` | + +The exact target value depends on the proxy cluster you selected when adding the domain. The NetBird dashboard displays the required CNAME target after you save the domain. + +### Step 2: Validate in the dashboard + +After creating the DNS record, return to the **Reverse Proxy** > **Custom Domains** page and click **Validate** next to the domain. + +

+ Domain validation status showing CNAME record details +

+ +NetBird performs a CNAME lookup on `validation.` and verifies that it resolves to a known proxy cluster. Once validation succeeds, the domain status changes to **validated** and it becomes available in the domain selector when creating or editing services. + + + DNS changes can take time to propagate. If validation fails immediately after creating the CNAME record, wait a few minutes and try again. In some cases, DNS propagation can take up to 48 hours depending on your provider and TTL settings. + + +## Managing custom domains + +The **Custom Domains** page lists all domains associated with your account, including both built-in and custom domains. + +### Viewing domains + +The domain list shows each domain along with its type (Free, Cluster, or Custom), the associated proxy cluster, and the current validation status. + +### Re-validating a domain + +If a custom domain becomes unvalidated - for example, after a DNS configuration change - you can click **Validate** to trigger a new CNAME lookup. + +### Deleting a custom domain + +To remove a custom domain, click the delete action next to the domain in the list. Deleting a custom domain removes it from your account and makes it unavailable for any new services. Built-in domains (Free or Cluster) cannot be deleted. + + + Before deleting a custom domain, make sure no active services are using it. Services referencing a deleted domain will no longer route traffic correctly. + + +## Using domains with services + +When you create or edit a reverse proxy service, the domain selector presents all available domains: + +- All **validated** custom domains +- All built-in domains - **Free** domains (cloud) or **Cluster** domains (self-hosted) + +To assign a domain to a service, enter a **subdomain** on the left side of the selector and choose a **base domain** on the right side. The full public URL for your service is the combination of both: + +``` +{subdomain}.{base-domain} +``` + +For example, if you enter `dashboard` as the subdomain and select `proxy.example.com` as the base domain, the service is accessible at `dashboard.proxy.example.com`. + +All domain types receive automatic TLS certificates managed by the proxy. + +## Troubleshooting + +### Domain shows as unvalidated + +Verify that the CNAME record for `validation.` is correctly configured and points to the right proxy cluster address. For cloud deployments, this is a NetBird-hosted address (e.g., `eu.proxy.netbird.io`). For self-hosted deployments, this is your own proxy URL (e.g., `proxy.mycompany.com`). Use a DNS lookup tool to confirm the record has propagated: + +```bash +dig CNAME validation.proxy.example.com +``` + +If the record does not appear, check your DNS provider for typos or wait for propagation to complete. + +### CNAME pointing to the wrong cluster + +The CNAME record must resolve to one of your available proxy clusters. If you selected a different cluster when adding the domain, the validation lookup will fail. Verify the expected target value on the Custom Domains page in the dashboard and update your DNS record accordingly. + +### Domain already in use + +Each custom domain must be unique across all NetBird accounts. If you receive an error that the domain is already in use, it may be registered by another account. Verify that you are entering the correct domain name. If you believe this is an error, contact [NetBird support](/slack-url). + +## Related pages + +- [Reverse Proxy Overview](/manage/reverse-proxy) - learn how the reverse proxy feature works +- [Authentication](/manage/reverse-proxy/authentication) - configure SSO, password, and PIN authentication for services +- [Access Logs](/manage/reverse-proxy/access-logs) - monitor traffic to your reverse proxy services diff --git a/src/pages/manage/reverse-proxy/index.mdx b/src/pages/manage/reverse-proxy/index.mdx new file mode 100644 index 00000000..fab42641 --- /dev/null +++ b/src/pages/manage/reverse-proxy/index.mdx @@ -0,0 +1,281 @@ +import {Note} from "@/components/mdx" + +export const description = + 'Expose internal services to the public internet with automatic TLS, authentication, and traffic routing through the NetBird mesh network.' + +# Reverse Proxy + +NetBird Reverse Proxy lets you expose internal services running on peers or behind network resources to the public internet. NetBird handles TLS termination, optional authentication, and proxies incoming traffic through the WireGuard mesh to reach the target service - all without opening ports or configuring firewalls on your internal machines. + + + **Availability:** Reverse Proxy is currently only available for **self-hosted** deployments and is currently in **beta**. **Cloud** support is coming soon. + + + **Self-hosted requirement:** Self-hosted deployments **must** use [Traefik](/selfhosted/reverse-proxy) as their reverse proxy. Traefik is the only supported reverse proxy that provides TLS passthrough, which is required for the Reverse Proxy feature to function correctly. + + +## How it works + +When you create a reverse proxy service, NetBird provisions a public domain with an automatic TLS certificate. Incoming HTTPS requests to that domain are terminated at the NetBird proxy cluster, then forwarded through an encrypted WireGuard tunnel to the target peer or network resource running your application. The target service only needs to be reachable within your NetBird network - it does not need a public IP address or open ports. + +You can optionally require authentication (SSO via your configured IdP, password, or PIN) before users can reach the service, ensuring that even publicly accessible URLs remain protected. + +## Concepts + +### Services + +A service is the core configuration unit of the Reverse Proxy. Each service maps a public domain to one or more internal targets and defines how traffic is authenticated and forwarded. A service consists of: + +- **Domain** - the public URL where the service is reachable +- **Targets** - one or more backend destinations that handle incoming requests +- **Authentication** - optional SSO, password, or PIN protection +- **Settings** - advanced options for host header forwarding and redirect rewriting +- **Enabled/Disabled toggle** - turn the service on or off without deleting it + +### Targets + +A target defines where proxied traffic is sent within your NetBird network. Each service can have multiple targets for path-based routing. Every target specifies a type, protocol, port, and optional path. + +| Type | Description | How to select | +|------|-------------|---------------| +| **Peer** | A machine running the NetBird agent directly | Select from the peer list | +| **Host** | A network resource identified by an IP address | Select from your network resources | +| **Domain** | A network resource identified by a domain name | Select from your network resources | +| **Subnet** | A network resource within a CIDR range | Select from your network resources, then specify an IP within the range | + +Each target also has the following properties: + +- **Path** (optional) - a URL path prefix for path-based routing (e.g., `/api`). See [Path-based routing](#path-based-routing) below. +- **Protocol** - `HTTP` or `HTTPS`, depending on what the backend service speaks +- **Port** - the port on the target machine (defaults to `80` for HTTP, `443` for HTTPS) +- **Enabled/Disabled toggle** - individually enable or disable targets without removing them + +### Domains + +Every service needs a domain. The available domain types depend on whether you are using NetBird Cloud or a self-hosted deployment. + +**Cloud deployments** provide free domains in the format: + +``` +{subdomain}.{nonce}.{cluster}.proxy.netbird.io +``` + +For example: `myapp.abc123.eu.proxy.netbird.io` where `myapp` is your chosen subdomain, `abc123` is a nonce unique to your account, and `eu` is the proxy cluster region. These domains appear in the domain selector with a **Free** badge and are available immediately with no additional configuration. + +**Self-hosted deployments** provide cluster domains in the format: + +``` +{subdomain}.{proxy-domain} +``` + +For example: `myapp.proxy.mycompany.com` where `myapp` is your chosen subdomain and `proxy.mycompany.com` is the domain configured on your proxy instance(s) via the `NB_PROXY_DOMAIN` environment variable. These domains appear in the domain selector with a **Cluster** badge. + +In both deployment types, the available domains are dynamically derived from the proxy instances currently connected to the management server. They are not pre-provisioned - they reflect whichever proxy servers are actively registered. + +**Custom domains** work identically in both cloud and self-hosted deployments. You can use your own domain name (e.g., `app.example.com`) by creating a CNAME record that points to your proxy cluster address. See [Custom Domains](/manage/reverse-proxy/custom-domains) for setup instructions. + +All domain types receive automatic TLS certificates managed by the proxy. + +### Authentication + +You can protect a service with one or more authentication methods. When multiple methods are enabled, users can choose which one to use when accessing the service. + +| Method | Description | +|--------|-------------| +| **SSO (Single Sign-On)** | Authenticate via your identity provider using OIDC. You can optionally restrict access to specific user groups. | +| **Password** | Protect with a shared password that you define when configuring the service. | +| **PIN Code** | Protect with a numeric PIN code. | +| **No authentication** | The service is publicly accessible without any authentication. | + + + If you save a service with no authentication configured, the dashboard will display a warning. Public services are accessible to anyone on the internet who knows the URL. + + +For detailed configuration instructions, see [Authentication](/manage/reverse-proxy/authentication). + +### Service statuses + +After creating a service, it progresses through several statuses as NetBird provisions the domain and establishes connectivity: + +| Status | Meaning | +|--------|---------| +| `pending` | The service has been created and is being provisioned. | +| `certificate_pending` | A TLS certificate is being issued for the domain. This applies when the proxy uses ACME (Let's Encrypt) to automatically provision certificates. | +| `active` | The service is live and routing traffic to its targets. | +| `tunnel_not_created` | The proxy cluster has not yet established a WireGuard tunnel to the target. | +| `certificate_failed` | TLS certificate issuance failed. If the proxy uses ACME, verify that the ACME challenge port is accessible (port 443 for `tls-alpn-01`, port 80 for `http-01`) and that the domain resolves correctly. For static certificates, check that the certificate and key files are valid. | +| `error` | A generic error occurred. Check the service configuration and target availability. | + +## Self-hosted proxy setup + +Self-hosted deployments require a separate NetBird proxy instance (`netbirdio/netbird-proxy`) that connects to your management server via gRPC and handles TLS termination and traffic forwarding for your reverse proxy services. + + +**Already set up?** If you deployed NetBird using the setup script (`getting-started.sh`) starting from **v0.65.0** and selected the **built-in Traefik** option, the proxy container is already included in your Docker Compose stack. You can skip straight to [creating your first service](#quick-start). + + +**Existing deployments** - If you have an existing self-hosted deployment and want to add the proxy, follow the [Enable Reverse Proxy migration guide](/selfhosted/migration/enable-reverse-proxy). It covers generating an access token, adding the proxy container with Traefik TLS passthrough labels, setting up wildcard DNS, and verifying the setup. + +### TLS certificate configuration + +The proxy supports two modes for TLS certificate management: + +**ACME mode (Let's Encrypt)** - The proxy automatically provisions TLS certificates for each domain using Let's Encrypt. Enable this mode with: + +| Environment variable | Description | +|---------------------|-------------| +| `NB_PROXY_ACME_CERTIFICATES` | Set to `true` to enable automatic certificate provisioning. | +| `NB_PROXY_ACME_CHALLENGE_TYPE` | ACME challenge type (default: `tls-alpn-01`). The `tls-alpn-01` challenge uses port 443 and does not require port 80. Alternatively, set to `http-01` which requires port 80 to be accessible. | + +When a certificate is successfully issued, the proxy notifies the management server and the service status changes to `active`. + +**Static certificate mode** - Provide your own certificate and key files. This is useful for wildcard certificates or certificates from a corporate CA. Configure with: + +| Environment variable | Description | +|---------------------|-------------| +| `NB_PROXY_CERTIFICATE_FILE` | TLS certificate filename within the certificate directory (default: `tls.crt`) | +| `NB_PROXY_CERTIFICATE_KEY_FILE` | TLS private key filename within the certificate directory (default: `tls.key`) | +| `NB_PROXY_CERTIFICATE_DIRECTORY` | Directory where certificate files are stored (default: `./certs`) | + +Static certificates support hot-reload through file watching. When the certificate or key file changes on disk, the proxy picks up the new files automatically without requiring a restart. + +### High availability + +Multiple proxy instances configured with the same `NB_PROXY_DOMAIN` value form a single proxy cluster. This provides high availability - if one instance goes down, the remaining instances in the cluster continue serving traffic. Each instance independently connects to the management server via gRPC and registers under the shared cluster address. + +### Traefik requirement + +Self-hosted deployments must use [Traefik](/selfhosted/reverse-proxy) as the reverse proxy in front of the NetBird management server. Traefik is required because it supports TLS passthrough, which allows the NetBird proxy to handle TLS termination directly. Other reverse proxies that do not support TLS passthrough are not compatible with this feature. + +## Prerequisites + +Before creating a reverse proxy service, make sure you have: + +- At least one **peer** connected to your NetBird network, OR at least one **network** with resources and routing peers configured. See [Networks](/manage/networks) for details. +- A domain to use. Free (cloud) or cluster (self-hosted) domains are available automatically, or you can [add a custom domain](/manage/reverse-proxy/custom-domains). +- **Self-hosted only:** At least one proxy instance deployed and connected to your management server. See [Self-hosted proxy setup](#self-hosted-proxy-setup) above, or follow the [Enable Reverse Proxy migration guide](/selfhosted/migration/enable-reverse-proxy) to add it to an existing deployment. +- Access to a NetBird account with the 'Services' permission module ('Network Admin' role or higher). + +## Quick start + +Follow these steps to create your first reverse proxy service and expose an internal application to the internet. + +### Step 1: Open the Reverse Proxy page + +Navigate to **Reverse Proxy** > **Services** in the NetBird dashboard and click **Add Service**. + +### Step 2: Configure service details + +In the **Details** tab: + +1. Enter a **subdomain** for your service (e.g., `myapp`). +2. Select a **base domain**. Cloud users see domains with a **Free** badge (e.g., `abc123.eu.proxy.netbird.io`). Self-hosted users see domains with a **Cluster** badge (e.g., `proxy.mycompany.com`, based on their deployed proxy instances). You can also select a custom domain you have already configured. +3. Click **Add Target** to define where traffic should be sent. + +

+ Add Service modal showing the Details tab +

+ +4. In the target configuration, select the **type** (Peer, Host, Domain, or Subnet), then choose the specific peer or resource. +5. Set the **protocol** (HTTP or HTTPS) and **port** for the target. +6. Optionally, enter a **path** if you are using path-based routing. + +

+ Add Target configuration modal +

+ +You can add multiple targets to route different URL paths to different backend services. + +### Step 3: Configure authentication + +Switch to the **Authentication** tab to configure how users are authenticated before reaching your service. + +

+ Add Service modal showing the Authentication tab +

+ +- Enable **SSO** to require users to authenticate through your identity provider. Optionally restrict access to specific groups. +- Enable **Password** and set a shared password. +- Enable **PIN Code** and set a numeric code. +- Leave all methods disabled for public (unauthenticated) access. + + + You can enable multiple authentication methods simultaneously. Users will be able to choose their preferred method when accessing the service. + + +### Step 4: Configure advanced settings + +Switch to the **Settings** tab to adjust advanced proxy behavior. + +

+ Add Service modal showing the Settings tab +

+ +- **Pass Host Header** - when enabled, the original `Host` header from the client request is forwarded to the backend service instead of the target's hostname. This is useful when the backend application needs to know the public domain it is being accessed through. +- **Rewrite Redirects** - when enabled, `Location` headers in backend responses (used for HTTP redirects) are rewritten to use the public domain. This prevents users from being redirected to internal URLs that they cannot reach. + +### Step 5: Create the service + +Click **Add Service** to create the reverse proxy service. NetBird will begin provisioning the TLS certificate and establishing the tunnel. Monitor the service status on the services list page until it shows `active`. + +## Managing services + +### Edit a service + +Click on any service in the services list to open the edit modal. Make your changes across the Details, Authentication, or Settings tabs, then click **Save Changes**. + +### Enable or disable a service + +Toggle the service on or off using the enabled/disabled switch. Disabling a service stops routing traffic to it without deleting the configuration, allowing you to quickly re-enable it later. + +### Delete a service + +Delete a service to permanently remove it along with its domain and TLS certificate. This action cannot be undone. + +### Manage targets + +Within a service, you can: + +- **Add targets** - click **Add Target** to route traffic to additional backend services +- **Remove targets** - remove a target to stop routing traffic to that backend +- **Enable or disable targets** - toggle individual targets on or off without removing them from the service + +## Path-based routing + +When a service has multiple targets, you can assign each target a unique path prefix to route different URL paths to different backends. For example: + +| Path | Target | Description | +|------|--------|-------------| +| `/` | Peer A (port 3000) | Main web application | +| `/api` | Peer B (port 8080) | API service | +| `/docs` | Resource C (port 80) | Documentation server | + +Incoming requests are matched against the configured path prefixes and forwarded to the corresponding target. Each path must be unique within a service. + +This is useful for consolidating multiple internal services under a single public domain, reducing the number of domains and TLS certificates you need to manage. + +## Integration with Networks + +If you have already configured [Networks](/manage/networks) with resources and routing peers, you can expose a network resource directly from the Networks page. + +Click the **Expose Service** button on any resource to open the reverse proxy creation modal with that resource pre-populated as a target. This provides a quick way to make an existing internal resource available on the public internet. + +The Networks page also displays a badge on each resource indicating how many reverse proxy services reference it, giving you visibility into which resources are publicly exposed. + +## Related pages + +- [Custom Domains](/manage/reverse-proxy/custom-domains) - configure your own domain names for reverse proxy services +- [Authentication](/manage/reverse-proxy/authentication) - detailed guide on SSO, password, and PIN authentication options +- [Access Logs](/manage/reverse-proxy/access-logs) - monitor and audit traffic to your reverse proxy services +- [Networks](/manage/networks) - configure internal networks and resources +- [Access Control](/manage/access-control/manage-network-access) - manage policies that control access to your network + +## Get started +
+ +
+ +- Make sure to [star us on GitHub](https://github.com/netbirdio/netbird) +- Follow us [on X](https://x.com/netbird) +- Join our [Slack Channel](/slack-url) +- NetBird [latest release](https://github.com/netbirdio/netbird/releases) on GitHub diff --git a/src/pages/selfhosted/configuration-files.mdx b/src/pages/selfhosted/configuration-files.mdx index 2457f91d..b3e6a551 100644 --- a/src/pages/selfhosted/configuration-files.mdx +++ b/src/pages/selfhosted/configuration-files.mdx @@ -15,11 +15,9 @@ A standard NetBird self-hosted deployment uses the following configuration files | File | Purpose | |------|---------| -| `docker-compose.yml` | Defines all NetBird services (dashboard, management, signal, relay), their Docker images, port mappings, volumes, and startup order. Modify this to change resource limits, add services, or adjust networking. | -| `management.json` | Central configuration for the management server including STUN/relay server addresses, authentication settings, and database configuration. Changes here affect how peers connect and authenticate. | -| `relay.env` | Environment variables for the relay service including the authentication secret, public address, and embedded STUN server settings. The relay secret here must match `management.json`. | +| `docker-compose.yml` | Defines all services (dashboard, netbird-server, optionally traefik), their Docker images, port mappings, volumes, and startup order. Structure varies depending on the reverse proxy option chosen during setup. | +| `config.yaml` | Unified server configuration for the combined NetBird server: listen addresses, STUN, relay authentication, embedded IdP, and database settings. Replaces the old `management.json` and `relay.env` files. | | `dashboard.env` | Configures the web dashboard including API endpoints, OAuth2/OIDC settings, and optional SSL settings for standalone deployments without a reverse proxy. | -| `Caddyfile` | Configures the built-in Caddy reverse proxy for SSL termination and routing requests to NetBird services. Only present when using the default `getting-started.sh` deployment with Caddy. | ### File Locations @@ -28,10 +26,11 @@ After running the installation script, configuration files are located in the di ``` ./ ├── docker-compose.yml -├── management.json -├── relay.env +├── config.yaml ├── dashboard.env -└── Caddyfile # Only when using built-in Caddy +└── nginx-netbird.conf # Only when using Nginx reverse proxy + npm-advanced-config.txt # Only when using Nginx Proxy Manager + caddyfile-netbird.txt # Only when using Caddy reverse proxy ``` --- @@ -44,39 +43,59 @@ The Docker Compose file defines all NetBird services, their dependencies, networ | Service | Image | Internal Port | External (Exposed) | Description | |---------|-------|---------------|-------------------|-------------| +| `traefik` | `traefik:v3.6` | 80, 443 | 80:80, 443:443 | Handles TLS termination via Let's Encrypt and routes incoming HTTPS requests to the appropriate NetBird services. Only included when using the built-in Traefik option (option 0). | | `dashboard` | `netbirdio/dashboard` | 80 | 8080:80 | The web-based management console where administrators configure networks, manage peers, create access policies, and view activity logs. Includes an embedded nginx server for serving the UI. | -| `management` | `netbirdio/management` | 80 | 8081:80 | The central control plane that handles peer registration, distributes network configurations, manages access policies, and hosts the embedded identity provider. All peers connect to this service on startup. | -| `signal` | `netbirdio/signal` | 80 | 8083:80 | Rendezvous service that facilitates peer connections by enabling peers to exchange connection offers and establish direct WireGuard tunnels. Handles only connection setup metadata, not actual traffic. Uses HTTP/2 protocol via the reverse proxy. | -| `relay` | `netbirdio/relay` | 80, 3478/udp | 8084:80, 3478:3478/udp | Routes encrypted traffic between peers when direct connections fail due to restrictive NATs or firewalls. Also provides embedded STUN on UDP 3478 for NAT type detection. | -| `caddy` | `caddy` | 80, 443 | 80:80, 443:443 | Handles TLS termination and routes incoming HTTPS requests to the appropriate NetBird services. Only included in default `getting-started.sh` deployments; can be replaced with your own reverse proxy. | +| `netbird-server` | `netbirdio/netbird-server` | 80, 3478/udp | 8081:80, 3478:3478/udp | Combined server that includes management, signal, relay, and embedded STUN in a single container. Configured via `config.yaml`. | -**Internal vs External ports**: Internal ports are what services listen on inside their containers. External (Exposed) ports show the host-to-container mapping used when running without the built-in Caddy (e.g., with Nginx, Traefik, or other reverse proxies). When using the default Caddy deployment, only Caddy exposes ports externally. +**Internal vs External ports**: Internal ports are what services listen on inside their containers. External (Exposed) ports show the host-to-container mapping used when running without the built-in Traefik (e.g., with Nginx or other reverse proxies). When using the default Traefik deployment, only Traefik exposes ports externally. -The relay service includes an embedded STUN server, eliminating the need for a separate coturn container. STUN functionality is enabled via the `NB_ENABLE_STUN` environment variable in `relay.env`. +The `netbird-server` container combines what were previously separate management, signal, relay, and STUN containers into a single service. This simplifies the deployment architecture while maintaining the same functionality. -### Default Settings +### Traefik Service -The compose file includes these defaults applied to all services: +The Traefik service is only present when using the built-in reverse proxy option (option 0 during setup). It handles automatic TLS certificate provisioning via Let's Encrypt and routes requests to the correct backend services. ```yaml -x-default: &default - restart: 'unless-stopped' +traefik: + image: traefik:v3.6 + container_name: netbird-traefik + restart: unless-stopped + networks: [netbird] + command: + - "--providers.docker=true" + - "--providers.docker.exposedbydefault=false" + - "--providers.docker.network=netbird" + - "--entrypoints.web.address=:80" + - "--entrypoints.websecure.address=:443" + - "--entrypoints.websecure.transport.respondingTimeouts.readTimeout=0" + - "--entrypoints.web.http.redirections.entrypoint.to=websecure" + - "--entrypoints.web.http.redirections.entrypoint.scheme=https" + - "--certificatesresolvers.letsencrypt.acme.tlschallenge=true" + - "--certificatesresolvers.letsencrypt.acme.storage=/letsencrypt/acme.json" + ports: + - '443:443' + - '80:80' + volumes: + - /var/run/docker.sock:/var/run/docker.sock:ro + - netbird_traefik_letsencrypt:/letsencrypt logging: - driver: 'json-file' + driver: "json-file" options: - max-size: '500m' - max-file: '2' + max-size: "500m" + max-file: "2" ``` + +The `readTimeout=0` setting on the websecure entrypoint disables read timeouts, which is required for long-lived gRPC and WebSocket connections used by the signal and relay services. + + ### Dashboard Service -The dashboard provides the web interface for NetBird management. - -**With built-in Caddy (default):** +**With built-in Traefik (default):** ```yaml dashboard: image: netbirdio/dashboard:latest @@ -85,24 +104,14 @@ dashboard: networks: [netbird] env_file: - ./dashboard.env - logging: - driver: "json-file" - options: - max-size: "500m" - max-file: "2" -``` - -**With external reverse proxy (exposed ports):** -```yaml -dashboard: - image: netbirdio/dashboard:latest - container_name: netbird-dashboard - restart: unless-stopped - networks: [netbird] - ports: - - '127.0.0.1:8080:80' - env_file: - - ./dashboard.env + labels: + - traefik.enable=true + - traefik.http.routers.netbird-dashboard.rule=Host(`netbird.example.com`) + - traefik.http.routers.netbird-dashboard.entrypoints=websecure + - traefik.http.routers.netbird-dashboard.tls=true + - traefik.http.routers.netbird-dashboard.tls.certresolver=letsencrypt + - traefik.http.routers.netbird-dashboard.priority=1 + - traefik.http.services.netbird-dashboard.loadbalancer.server.port=80 logging: driver: "json-file" options: @@ -111,32 +120,44 @@ dashboard: ``` -The dashboard service is configured via the `dashboard.env` file. See the [dashboard.env section](#dashboard-env) for the full list of environment variables. When using the built-in Caddy, no ports are exposed directly from the dashboard container; Caddy routes traffic to it internally. +The dashboard service is configured via the `dashboard.env` file. See the [dashboard.env section](#dashboardenv) for the full list of environment variables. When using the built-in Traefik, no ports are exposed directly from the dashboard container; Traefik routes traffic to it internally via Docker labels. -### Management Service +### NetBird Server Service -The management service is the core of NetBird, handling peer registration, authentication, and network coordination. +The combined server runs management, signal, relay, and STUN in a single container, configured by `config.yaml`. -**With built-in Caddy (default):** +**With built-in Traefik (default):** ```yaml -management: - image: netbirdio/management:latest - container_name: netbird-management +netbird-server: + image: netbirdio/netbird-server:latest + container_name: netbird-server restart: unless-stopped networks: [netbird] + ports: + - '3478:3478/udp' volumes: - - netbird_management:/var/lib/netbird - - ./management.json:/etc/netbird/management.json - command: [ - "--port", "80", - "--log-file", "console", - "--log-level", "info", - "--disable-anonymous-metrics=false", - "--single-account-mode-domain=netbird.selfhosted", - "--dns-domain=netbird.selfhosted", - "--idp-sign-key-refresh-enabled", - ] + - netbird_data:/var/lib/netbird + - ./config.yaml:/etc/netbird/config.yaml + command: ["--config", "/etc/netbird/config.yaml"] + labels: + - traefik.enable=true + # gRPC router (needs h2c backend for HTTP/2 cleartext) + - traefik.http.routers.netbird-grpc.rule=Host(`netbird.example.com`) && (PathPrefix(`/signalexchange.SignalExchange/`) || PathPrefix(`/management.ManagementService/`)) + - traefik.http.routers.netbird-grpc.entrypoints=websecure + - traefik.http.routers.netbird-grpc.tls=true + - traefik.http.routers.netbird-grpc.tls.certresolver=letsencrypt + - traefik.http.routers.netbird-grpc.service=netbird-server-h2c + # Backend router (relay, WebSocket, API, OAuth2) + - traefik.http.routers.netbird-backend.rule=Host(`netbird.example.com`) && (PathPrefix(`/relay`) || PathPrefix(`/ws-proxy/`) || PathPrefix(`/api`) || PathPrefix(`/oauth2`)) + - traefik.http.routers.netbird-backend.entrypoints=websecure + - traefik.http.routers.netbird-backend.tls=true + - traefik.http.routers.netbird-backend.tls.certresolver=letsencrypt + - traefik.http.routers.netbird-backend.service=netbird-server + # Services + - traefik.http.services.netbird-server.loadbalancer.server.port=80 + - traefik.http.services.netbird-server-h2c.loadbalancer.server.port=80 + - traefik.http.services.netbird-server-h2c.loadbalancer.server.scheme=h2c logging: driver: "json-file" options: @@ -146,25 +167,18 @@ management: **With external reverse proxy (exposed ports):** ```yaml -management: - image: netbirdio/management:latest - container_name: netbird-management +netbird-server: + image: netbirdio/netbird-server:latest + container_name: netbird-server restart: unless-stopped networks: [netbird] ports: - '127.0.0.1:8081:80' + - '3478:3478/udp' volumes: - - netbird_management:/var/lib/netbird - - ./management.json:/etc/netbird/management.json - command: [ - "--port", "80", - "--log-file", "console", - "--log-level", "info", - "--disable-anonymous-metrics=false", - "--single-account-mode-domain=netbird.selfhosted", - "--dns-domain=netbird.selfhosted", - "--idp-sign-key-refresh-enabled", - ] + - netbird_data:/var/lib/netbird + - ./config.yaml:/etc/netbird/config.yaml + command: ["--config", "/etc/netbird/config.yaml"] logging: driver: "json-file" options: @@ -172,491 +186,170 @@ management: max-file: "2" ``` -To use an external database, add environment variables: -```yaml - environment: - - NETBIRD_STORE_ENGINE_POSTGRES_DSN=postgres://user:password@host:5432/netbird - # Or for MySQL: - # - NETBIRD_STORE_ENGINE_MYSQL_DSN=user:password@tcp(host:3306)/netbird -``` +#### Traefik Routing Labels -#### Command-Line Flags +When using the built-in Traefik, the `netbird-server` service uses two routers to handle different traffic types: -| Flag | Default | Description | -|------|---------|-------------| -| `--port` | `80` | The port the management server listens on inside the container. The default deployment uses port 80 internally; TLS is handled by the reverse proxy. | -| `--log-file` | `console` | Where to write log output. Use `console` for Docker logging (recommended) or specify a file path. Logs to console are captured by Docker's logging driver. | -| `--log-level` | `info` | Controls log verbosity. Use `debug` for troubleshooting connection issues, `info` for normal operation, `warn` or `error` for quieter logs in production. | -| `--disable-anonymous-metrics` | `false` | When `true`, stops sending anonymous usage statistics to NetBird. Set to `true` for air-gapped environments or if your security policy prohibits telemetry. | -| `--single-account-mode-domain` | `netbird.selfhosted` | Restricts all users to a single NetBird account associated with this domain. Required for most self-hosted deployments to prevent users from creating separate accounts. | -| `--dns-domain` | `netbird.selfhosted` | The DNS suffix used for peer name resolution within NetBird (e.g., `peer-name.netbird.selfhosted`). Must not conflict with your existing DNS domains. | -| `--idp-sign-key-refresh-enabled` | `false` | Enables automatic refresh of IdP signing keys. Recommended for the embedded IdP to ensure tokens remain valid. | +| Router | Path Prefixes | Backend Service | Purpose | +|--------|---------------|-----------------|---------| +| `netbird-grpc` | `/signalexchange.SignalExchange/`, `/management.ManagementService/` | `netbird-server-h2c` (h2c scheme) | gRPC traffic for signal exchange and management API. Uses HTTP/2 cleartext (h2c) backend because gRPC requires HTTP/2. | +| `netbird-backend` | `/relay`, `/ws-proxy/`, `/api`, `/oauth2` | `netbird-server` (http scheme) | HTTP traffic for relay connections, WebSocket proxying, REST API, and OAuth2/OIDC endpoints. | -### Signal Service - -The signal service acts as a rendezvous service for facilitating peer-to-peer connections. It enables peers to discover each other and exchange connection information needed to establish direct WireGuard tunnels. - -**With built-in Caddy (default):** -```yaml -signal: - image: netbirdio/signal:latest - container_name: netbird-signal - restart: unless-stopped - networks: [netbird] - logging: - driver: "json-file" - options: - max-size: "500m" - max-file: "2" -``` - -**With external reverse proxy (exposed ports):** -```yaml -signal: - image: netbirdio/signal:latest - container_name: netbird-signal - restart: unless-stopped - networks: [netbird] - ports: - - '127.0.0.1:8083:80' - logging: - driver: "json-file" - options: - max-size: "500m" - max-file: "2" -``` +The dashboard router has `priority=1` (lowest), so it acts as a catch-all for requests that don't match the more specific server routes. -The signal service listens on port 80 internally and uses HTTP/2 protocol. The reverse proxy (Caddy or your own) handles TLS termination and routes signal traffic to this service. +The STUN port (3478/udp) must always be exposed publicly, regardless of reverse proxy configuration. STUN uses UDP for NAT detection and cannot be proxied through HTTP reverse proxies. The STUN server is embedded in the combined `netbird-server` container and configured via the `server.stunPorts` field in `config.yaml`. -### Relay Service - -The relay service is a public service that forwards packets when direct peer-to-peer connections are not possible. It also includes an embedded STUN server for NAT detection and traversal. - -**With built-in Caddy (default):** -```yaml -relay: - image: netbirdio/relay:latest - container_name: netbird-relay - restart: unless-stopped - networks: [netbird] - ports: - - '3478:3478/udp' # Embedded STUN server (must be exposed publicly) - env_file: - - ./relay.env - logging: - driver: "json-file" - options: - max-size: "500m" - max-file: "2" -``` - -**With external reverse proxy (exposed ports):** -```yaml -relay: - image: netbirdio/relay:latest - container_name: netbird-relay - restart: unless-stopped - networks: [netbird] - ports: - - '127.0.0.1:8084:80' # Relay WebSocket (for reverse proxy) - - '3478:3478/udp' # Embedded STUN server (must be exposed publicly) - env_file: - - ./relay.env - logging: - driver: "json-file" - options: - max-size: "500m" - max-file: "2" -``` - - -The STUN port (3478/udp) must always be exposed publicly, regardless of reverse proxy configuration. STUN uses UDP for NAT detection and cannot be proxied through HTTP reverse proxies. - - -The relay service is configured via the `relay.env` file. See the [relay.env section](#relay-env) for detailed configuration options. - - - - Log verbosity level. Options: `debug`, `info`, `warn`, `error`. Default: `info` - - - Address and port to listen on. Format: `:port`. Default: `:80` - - - Public address for peers to connect. Format: `rel://hostname:port` or `rels://hostname:port` for TLS. - - - Shared secret for relay authentication. Must match `management.json` Relay.Secret. - - - Enable the embedded STUN server. Default: `false` - - - Comma-separated list of UDP ports for the STUN server. Default: `3478` - - - -### STUN Server (Embedded in Relay) - - -Starting with the current quickstart installation, STUN functionality is **embedded directly in the relay service**. The separate coturn container is no longer used in the default deployment. This simplifies the architecture and reduces the number of containers to manage. - - -The embedded STUN server is enabled by setting `NB_ENABLE_STUN=true` in `relay.env`. The STUN server listens on UDP port 3478 by default. - -#### Legacy Coturn Configuration - -If you have an existing installation using coturn, or need advanced TURN functionality (such as time-based credentials or TCP relay), you can still use a separate coturn container. See the [advanced self-hosting guide](/selfhosted/selfhosted-guide) for coturn configuration details. - ### Volume Configuration | Volume | Mount Point | Purpose | |--------|-------------|---------| -| `netbird_management` | `/var/lib/netbird` | Stores the management database (SQLite by default), encryption keys, and persistent state. Back up this volume regularly to preserve your accounts, peers, policies, and setup keys. | -| `netbird_caddy_data` | `/data` | Stores Caddy's TLS certificates and other persistent data. Only used when deploying with the built-in Caddy reverse proxy. Preserve this volume to maintain TLS certificates across restarts. | - - -The `getting-started.sh` deployment uses only two volumes: `netbird_management` for the management database and `netbird_caddy_data` for Caddy's certificate storage. The signal and relay services do not require persistent volumes in the default configuration. - +| `netbird_data` | `/var/lib/netbird` | Stores the management database (SQLite by default), encryption keys, and persistent state. Back up this volume regularly to preserve your accounts, peers, policies, and setup keys. | +| `netbird_traefik_letsencrypt` | `/letsencrypt` | Stores Traefik's Let's Encrypt TLS certificates. Only used when deploying with the built-in Traefik reverse proxy (option 0). Preserve this volume to maintain TLS certificates across restarts. | --- -## management.json +## config.yaml -The management configuration file controls the core behavior of the NetBird Management service. This is the most complex configuration file. - -### Authentication - -NetBird comes with built-in local user management and also supports integration with any OIDC-compatible identity provider. -This enables Single Sign-On (SSO), Multi-Factor Authentication (MFA), and centralized user management. -For setup instructions, see the [Authentication & IdPs page](/selfhosted/identity-providers) for configuration details. - -### Configuration Sections - -The `management.json` file for `getting-started.sh` deployments uses these sections: - -| Section | Required | Description | -|---------|----------|-------------| -| `Stuns` | Yes | Lists STUN servers that peers use to discover their public IP address and NAT type. Without working STUN, peers cannot establish direct connections and will always use the relay. | -| `Relay` | Yes | Configures relay server addresses and authentication. Peers use relay servers when direct connections fail. The secret here must match `NB_AUTH_SECRET` in `relay.env`. | -| `Signal` | Yes | Specifies how the management server connects to the signal service. Peers receive this address and use it to exchange connection offers with other peers. | -| `EmbeddedIdP` | Yes | Enables and configures the built-in identity provider (based on DEX). Handles user authentication, token issuance, and OIDC endpoints. Required for `getting-started.sh` deployments. | +The unified configuration file controls the combined NetBird server. It replaces the separate `management.json` and `relay.env` files from older deployments. ### Complete Structure -```json -{ - "Stuns": [...], - "Relay": {...}, - "Signal": {...}, - "Datadir": "/var/lib/netbird", - "DataStoreEncryptionKey": "...", - "EmbeddedIdP": { - "Enabled": true, - "Issuer": "https://your-domain/oauth2", - "DashboardRedirectURIs": [...] - } -} +```yaml +server: + listenAddress: ":80" + exposedAddress: "https://netbird.example.com:443" + stunPorts: + - 3478 + metricsPort: 9090 + healthcheckAddress: ":9000" + logLevel: "info" + logFile: "console" + + authSecret: "your-relay-auth-secret" + dataDir: "/var/lib/netbird" + + auth: + issuer: "https://netbird.example.com/oauth2" + signKeyRefreshEnabled: true + dashboardRedirectURIs: + - "https://netbird.example.com/nb-auth" + - "https://netbird.example.com/nb-silent-auth" + cliRedirectURIs: + - "http://localhost:53000/" + + store: + engine: "sqlite" # sqlite, postgres, or mysql + dsn: "" # Connection string for postgres or mysql + encryptionKey: "your-encryption-key" ``` -### Stuns Section - -Configures STUN servers used for NAT detection and traversal. - -**What does STUN do?** - -STUN (Session Traversal Utilities for NAT) helps NetBird peers discover their public IP address and the type of NAT they are behind. This information is essential for establishing direct peer-to-peer connections: - -- **NAT type detection** - Determines if peers can connect directly or need relay assistance -- **Public address discovery** - Peers learn their external IP and port, which they share via the signal server -- **Connection optimization** - Enables direct connections when possible, reducing latency and relay load - -The embedded STUN server in the relay service (enabled via `NB_ENABLE_STUN=true` in `relay.env`) is typically sufficient for most deployments. - -```json -"Stuns": [ - { - "Proto": "udp", - "URI": "stun:netbird.example.com:3478", - "Username": "", - "Password": null - } -] -``` +### Server Settings - - Protocol for STUN communication. Options: `udp`, `tcp`. Default: `udp` + + The address and port the combined server listens on inside the container. Default: `:80`. TLS is handled by the reverse proxy. - - STUN server URI. Format: `stun:hostname:port` + + The public-facing URL where peers connect to the server. Format: `https://hostname:port`. This address is distributed to peers and must be reachable from all clients. - - Optional username for authenticated STUN. Usually empty. + + List of UDP ports for the embedded STUN server. Default: `[3478]`. These ports must be exposed in `docker-compose.yml` and reachable through firewalls. - - Optional password for authenticated STUN. Usually `null`. + + Port to expose Prometheus metrics endpoint. Default: `9090`. Metrics are available at `/metrics` for monitoring. + + + Address for health check endpoint. Default: `:9000`. Exposes `/health` for container orchestration and load balancer health probes. + + + Controls log verbosity. Options: `debug`, `info`, `warn`, `error`. Default: `info`. Use `debug` for troubleshooting connection issues. + + + Where to write log output. Use `console` for Docker logging (recommended) or specify a file path. Default: `console`. + + + Shared secret for relay authentication. Auto-generated by the setup script. This secret is used internally by the combined server for relay credential validation. + + + Data directory path where the server stores its database and state files. Default: `/var/lib/netbird`. Maps to the `netbird_data` Docker volume. -### Relay Section +### Authentication Settings -Configures the NetBird relay server connection for NAT traversal. +Configures the built-in identity provider (embedded IdP) that handles user authentication and management. -**What does the relay service do?** + + + The issuer URL for OAuth2/OIDC tokens. Format: `https://your-domain/oauth2`. This URL is used to validate JWT tokens and must be accessible to clients. + + + Enables automatic refresh of IdP signing keys. Recommended: `true`. Ensures tokens remain valid by periodically rotating signing keys. + + + Allowed redirect URIs for OAuth2 authorization flow. Must include the dashboard authentication callbacks, typically `/nb-auth` and `/nb-silent-auth` on your domain. + + + Redirect URIs for CLI-based authentication. Default: `["http://localhost:53000/"]`. Used when authenticating via the `netbird` CLI tool. + + -When two NetBird peers cannot establish a direct WireGuard connection (due to restrictive NATs, firewalls, or network topology), traffic is routed through the relay server. The relay acts as an encrypted intermediary, ensuring connectivity even in challenging network environments. +When the embedded IdP is active, the server automatically hosts these OIDC endpoints: -- **Automatic fallback** - Peers attempt direct connections first; relay is used only when needed -- **End-to-end encryption** - Traffic remains WireGuard-encrypted; the relay cannot read packet contents -- **Credential-based authentication** - The shared secret ensures only authorized peers can use your relay - -```json -"Relay": { - "Addresses": ["rels://netbird.example.com:443"], - "CredentialsTTL": "24h", - "Secret": "your-relay-secret" -} -``` +- **Discovery**: `https://your-domain/oauth2/.well-known/openid-configuration` +- **JWKS (signing keys)**: `https://your-domain/oauth2/keys` +- **Token issuance**: `https://your-domain/oauth2/token` +- **Device authorization**: `https://your-domain/oauth2/device/authorize` -The relay address uses the same port as HTTPS (443) when using TLS (`rels://`), or port 80 when not using TLS (`rel://`). The reverse proxy routes `/relay*` paths to the relay service internally. +NetBird also supports integration with external OIDC-compatible identity providers for Single Sign-On (SSO), Multi-Factor Authentication (MFA), and centralized user management. See the [Authentication & IdPs page](/selfhosted/identity-providers) for configuration details. +### Store Settings + +Configures the database backend for storing all NetBird management data including accounts, peers, groups, access policies, routes, DNS configuration, setup keys, and activity logs. + - - Array of relay server addresses. Format: `rels://hostname:port` for TLS or `rel://hostname:port` for unencrypted. Default uses the public HTTPS port (443). + + Database engine. Options: `sqlite`, `postgres`, `mysql`. Default: `sqlite`. - - Time-to-live for relay credentials. Default: `24h` + + Connection string for postgres or mysql engines. For postgres: `host=localhost user=netbird password=secret dbname=netbird port=5432`. Alternatively, use the `NETBIRD_STORE_ENGINE_POSTGRES_DSN` or `NETBIRD_STORE_ENGINE_MYSQL_DSN` environment variables. - - Shared authentication secret. Must match relay server's `NB_AUTH_SECRET`. + + 32-byte (256-bit) encryption key for sensitive data at rest. Used to encrypt setup keys, API tokens, and other secrets stored in the database. Auto-generated by the setup script. - -The relay secret must be identical in both `management.json` and the relay service environment. A mismatch will cause relay connections to fail. - - -### Signal Section - -Configures the connection to the Signal service for peer-to-peer connection establishment. - -**What does the signal service do?** - -The signal service acts as a rendezvous service that facilitates peer connections. When two peers want to establish a direct connection, they exchange connection offers, answers, and network candidates through the signal server. This coordination enables peers to discover each other and negotiate the optimal connection path. - -- **Rendezvous service** - Enables peers to find each other and exchange the information needed to establish direct WireGuard tunnels -- **No traffic routing** - Unlike the relay, the signal server only handles connection setup metadata, not actual traffic -- **Persistent connections** - Peers maintain a connection to the signal server to receive incoming connection requests -- **HTTP/2 protocol** - Clients connect via the reverse proxy on port 443 (HTTPS) or 80 (HTTP) - -```json -"Signal": { - "Proto": "https", - "URI": "netbird.example.com:443", - "Username": "", - "Password": null -} -``` - - -The signal URI uses the same public HTTPS port (443) as other services. The reverse proxy routes signal traffic (`/signalexchange.SignalExchange/*` and `/ws-proxy/signal*`) to the signal service internally. - - - - - Protocol for signal communication. Options: `http`, `https`. Use `https` for production deployments with TLS, or `http` for non-TLS setups. - - - Signal server address. Format: `hostname:port`. Uses the public port (443 for HTTPS, 80 for HTTP). - - - Optional authentication username. Usually empty. - - - Optional authentication password. Usually `null`. - - - -### ReverseProxy Section - -Configures trusted reverse proxies for proper client IP detection. - -```json -"ReverseProxy": { - "TrustedHTTPProxies": [], - "TrustedHTTPProxiesCount": 0, - "TrustedPeers": ["0.0.0.0/0"] -} -``` - - - - List of trusted proxy IP addresses or CIDR ranges. - - - Number of trusted proxy hops. Used with X-Forwarded-For header parsing. - - - CIDR ranges of trusted peers. Default: `["0.0.0.0/0"]` (trust all). - - - - -When running behind a reverse proxy, configure `TrustedHTTPProxies` with your proxy's IP to ensure accurate client IP logging and rate limiting. - - -### StoreConfig Section - -Configures the database backend for storing all NetBird management data. - -**What data is stored in the database?** - -The management database contains all persistent state for your NetBird deployment: +**What data is stored?** - **Accounts and users** - User accounts, roles, and permissions - **Peers** - Registered devices, their WireGuard keys, IP assignments, and metadata -- **Groups** - Peer groupings used for access control and network organization -- **Access policies** - Network access rules defining which peers can communicate -- **Routes** - Network routes for accessing external subnets through NetBird peers -- **DNS configuration** - Custom DNS settings and nameserver groups -- **Setup keys** - Keys used for automated peer enrollment -- **Activity logs** - Audit trail of user and system actions -- **Posture checks** - Device security compliance policies +- **Groups** - Peer groupings used for access control +- **Access policies** - Network access rules +- **Routes** - Network routes for external subnets +- **DNS configuration** - Custom DNS settings +- **Setup keys** - Keys for automated peer enrollment +- **Activity logs** - Audit trail -**Where is the data stored?** +| Engine | Storage | Notes | +|--------|---------|-------| +| SQLite (default) | `/var/lib/netbird/` volume | File-based database stored in the `netbird_data` Docker volume. Zero configuration required, but does not support concurrent writes or running multiple management instances. Best for testing or small deployments. | +| PostgreSQL | External database server | Recommended for production deployments. Supports concurrent access, enabling multiple management instances for high availability. | +| MySQL | External database server | Alternative to PostgreSQL for organizations that have standardized on MySQL/MariaDB. Provides similar benefits including concurrent access. | -| Engine | Storage Location | Notes | -|--------|------------------|-------| -| SQLite (default) | `/var/lib/netbird/` volume | File-based database stored in the `netbird-mgmt` Docker volume. Zero configuration required, but does not support concurrent writes or running multiple management instances. Best for testing or small deployments with fewer than 100 peers. | -| PostgreSQL | External database server | Recommended for production deployments. Supports concurrent access, enabling multiple management instances for high availability. Requires managing a separate PostgreSQL server but offers standard backup tools and replication options. | -| MySQL | External database server | Alternative to PostgreSQL for organizations that have standardized on MySQL/MariaDB. Provides similar benefits to PostgreSQL including concurrent access and standard backup procedures. | +For PostgreSQL or MySQL, set the connection string via the `server.store.dsn` field in `config.yaml` or environment variables on the `netbird-server` container. See [Using an External Database](#using-an-external-database) below. -```json -"StoreConfig": { - "Engine": "sqlite" -} -``` - - - - Database engine. Options: `sqlite`, `postgres`, `mysql`. Default: `sqlite` - - - -For PostgreSQL or MySQL, set the connection string via environment variables: -- `NETBIRD_STORE_ENGINE_POSTGRES_DSN` for PostgreSQL -- `NETBIRD_STORE_ENGINE_MYSQL_DSN` for MySQL - - -For production deployments with multiple users or high availability requirements, consider using PostgreSQL. SQLite is convenient for testing and small deployments but does not support concurrent writes or easy backups while the service is running. - - -See [Management Postgres Store](/selfhosted/postgres-store) for PostgreSQL setup. - -### EmbeddedIdP Section - -Configures the built-in identity provider that handles user authentication and management. The embedded IdP is based on DEX and supports both local user management and connections to external identity providers configured through the Dashboard. - -```json -"EmbeddedIdP": { - "Enabled": true, - "Issuer": "https://netbird.example.com/oauth2", - "DashboardRedirectURIs": [ - "https://netbird.example.com/nb-auth", - "https://netbird.example.com/nb-silent-auth" - ] -} -``` - - - - Enable the embedded identity provider. When `true`, the management server hosts OAuth2/OIDC endpoints at `/oauth2/`. - - - The issuer URL for tokens. Should be `https://your-domain/oauth2`. This URL is used to validate JWT tokens and must be accessible to clients. - - - Allowed redirect URIs for OAuth2 authorization flow. Must include the dashboard authentication callbacks, typically `/nb-auth` and `/nb-silent-auth` on your domain. - - - -When `EmbeddedIdP.Enabled` is `true`, the management server automatically: -- Hosts OIDC discovery at `https://your-domain/oauth2/.well-known/openid-configuration` -- Provides JWKS (signing keys) at `https://your-domain/oauth2/keys` -- Handles token issuance at `https://your-domain/oauth2/token` -- Manages device authorization at `https://your-domain/oauth2/device/authorize` -- Provides user management through the Dashboard UI - -### Other Top-Level Settings - - - - Disable the default "allow all" access policy for new accounts. When `true`, new accounts start with no access rules, requiring explicit policy creation before peers can communicate. Default: `false` - - - Data directory path where the management service stores its database and state files. Usually set via command line (`--datadir`). Default: `/var/lib/netbird` - - - 32-byte (256-bit) encryption key for sensitive data at rest. Used to encrypt setup keys, API tokens, and other secrets stored in the database. Auto-generated by setup scripts. - - +See [Management Postgres Store](/selfhosted/postgres-store) for detailed PostgreSQL setup. -Keep `DataStoreEncryptionKey` secure and backed up. This key encrypts sensitive data in your database, including setup keys and API tokens. Losing this key means losing access to encrypted data, and you will need to regenerate all setup keys and API tokens. +Keep `server.store.encryptionKey` secure and backed up. This key encrypts sensitive data in your database, including setup keys and API tokens. Losing this key means losing access to encrypted data, and you will need to regenerate all setup keys and API tokens. --- -## relay.env - -Environment configuration for the relay service. This file is mounted into the relay container and configures both the relay and the embedded STUN server. - -```bash -# Log level: debug, info, warn, error -NB_LOG_LEVEL=info - -# Address to listen on for relay connections -NB_LISTEN_ADDRESS=:80 - -# Public address for peers to connect -# Use rel:// for unencrypted or rels:// for TLS -NB_EXPOSED_ADDRESS=rels://netbird.example.com:443 - -# Authentication secret (must match management.json Relay.Secret) -NB_AUTH_SECRET=your-secret-here - -# Embedded STUN server configuration -NB_ENABLE_STUN=true -NB_STUN_LOG_LEVEL=info -NB_STUN_PORTS=3478 -``` - -### All Relay Variables - -| Variable | Default | Description | -|----------|---------|-------------| -| `NB_LOG_LEVEL` | `info` | Controls relay log verbosity. Use `debug` when troubleshooting connection issues to see detailed peer connection attempts and failures. | -| `NB_LISTEN_ADDRESS` | `:80` | The address and port the relay listens on inside the container. Format: `:port` or `address:port`. Usually left as `:80` since the container port is mapped externally. | -| `NB_EXPOSED_ADDRESS` | - | The public address peers use to connect to this relay. Use `rel://` for unencrypted or `rels://` for TLS. Must be reachable from all peers. | -| `NB_AUTH_SECRET` | - | Shared secret used to authenticate peers connecting to the relay. Must exactly match the `Relay.Secret` value in `management.json` or relay connections will fail. | -| `NB_ENABLE_STUN` | `false` | When `true`, the relay also runs an embedded STUN server. This eliminates the need for a separate coturn container for NAT detection. | -| `NB_STUN_PORTS` | `3478` | UDP port(s) for the embedded STUN server. Comma-separated for multiple ports. Must be exposed in `docker-compose.yml` and reachable through firewalls. | -| `NB_STUN_LOG_LEVEL` | `info` | Separate log level for the embedded STUN server. Use `debug` to troubleshoot NAT detection issues without increasing relay log verbosity. | -| `NB_METRICS_PORT` | - | Port to expose Prometheus metrics endpoint. When set, the relay exposes metrics at `/metrics` for monitoring connection counts and performance. | -| `NB_TLS_CERT_FILE` | - | Path to TLS certificate file for relay-terminated HTTPS. Only needed when the relay handles TLS directly instead of using a reverse proxy. | -| `NB_TLS_KEY_FILE` | - | Path to TLS private key file. Must be provided together with `NB_TLS_CERT_FILE` for direct TLS termination. | -| `NB_LETSENCRYPT_DATA_DIR` | - | Directory to store Let's Encrypt certificates when the relay obtains certificates automatically. Not needed when using an external reverse proxy for TLS. | -| `NB_LETSENCRYPT_DOMAINS` | - | Comma-separated domains for automatic Let's Encrypt certificate provisioning. The relay must be reachable on port 443 for ACME challenges. | -| `NB_LETSENCRYPT_EMAIL` | - | Email address for Let's Encrypt registration. Required for certificate expiry notifications if using automatic provisioning. | -| `NB_HEALTH_LISTEN_ADDRESS` | - | Address for health check endpoint (e.g., `:8080`). When set, exposes `/health` for container orchestration and load balancer health probes. | - ---- - ## dashboard.env Environment configuration for the dashboard service. @@ -665,20 +358,6 @@ Environment configuration for the dashboard service. The NetBird dashboard container includes an **embedded nginx server** that serves the dashboard web pages. This nginx instance is built into the container image and handles serving the static web UI files. -``` -┌─────────────────────────────────────────────────────────────────┐ -│ Dashboard Container │ -│ ┌──────────────────────────────────────────────────────────┐ │ -│ │ Embedded Nginx │ │ -│ │ - Serves dashboard web UI │ │ -│ │ - Can handle SSL/TLS termination (standalone mode) │ │ -│ │ - Configurable via NGINX_* environment variables │ │ -│ └──────────────────────────────────────────────────────────┘ │ -└─────────────────────────────────────────────────────────────────┘ -``` - -The `NGINX_SSL_PORT` and other `NGINX_*` environment variables control this embedded nginx server, not an external reverse proxy. - ```bash # Endpoints NETBIRD_MGMT_API_ENDPOINT=https://netbird.example.com @@ -694,13 +373,13 @@ AUTH_SUPPORTED_SCOPES=openid profile email groups AUTH_REDIRECT_URI=/nb-auth AUTH_SILENT_REDIRECT_URI=/nb-silent-auth -# SSL - disabled when behind reverse proxy (Caddy handles TLS) +# SSL - disabled when behind reverse proxy (Traefik handles TLS) NGINX_SSL_PORT=443 LETSENCRYPT_DOMAIN=none ``` -When using the built-in Caddy or an external reverse proxy, set `LETSENCRYPT_DOMAIN=none` because the reverse proxy handles TLS termination. Only set a domain here if running the dashboard standalone without a reverse proxy. +When using the built-in Traefik or an external reverse proxy, set `LETSENCRYPT_DOMAIN=none` because the reverse proxy handles TLS termination. Only set a domain here if running the dashboard standalone without a reverse proxy. ### Endpoint Configuration @@ -714,14 +393,14 @@ When using the built-in Caddy or an external reverse proxy, set `LETSENCRYPT_DOM | Variable | Description | |----------|-------------| -| `AUTH_AUDIENCE` | The expected audience claim in OAuth2 tokens. Must match the audience configured in your IdP. For embedded IdP, use `netbird-dashboard`. Incorrect values cause authentication failures. | +| `AUTH_AUDIENCE` | The expected audience claim in OAuth2 tokens. Must match the audience configured in your IdP. For embedded IdP, use `netbird-dashboard`. | | `AUTH_CLIENT_ID` | The OAuth2 client identifier for the dashboard application. For embedded IdP deployments, this is `netbird-dashboard`. Must match the client ID registered with your identity provider. | -| `AUTH_CLIENT_SECRET` | OAuth2 client secret for confidential clients. Leave empty for public clients (the default for browser-based apps like the dashboard). Only set this if your IdP requires a confidential client. | +| `AUTH_CLIENT_SECRET` | OAuth2 client secret for confidential clients. Leave empty for public clients (the default for browser-based apps like the dashboard). | | `AUTH_AUTHORITY` | The OAuth2/OIDC issuer URL (e.g., `https://netbird.example.com/oauth2` for embedded IdP). The dashboard fetches OIDC discovery metadata from `{AUTH_AUTHORITY}/.well-known/openid-configuration`. | -| `USE_AUTH0` | Set to `true` only when using Auth0 as your identity provider. Enables Auth0-specific authentication behavior. Leave as `false` for embedded IdP or other OIDC providers. | -| `AUTH_SUPPORTED_SCOPES` | Space-separated list of OAuth2 scopes to request during login. Standard value is `openid profile email groups`. The `groups` scope enables group-based access control if supported by your IdP. | -| `AUTH_REDIRECT_URI` | The path where the IdP redirects after authentication (e.g., `/nb-auth`). Must match a redirect URI registered with your identity provider. Incorrect values cause OAuth2 callback errors. | -| `AUTH_SILENT_REDIRECT_URI` | The path for silent token refresh (e.g., `/nb-silent-auth`). Used by the dashboard to refresh tokens in the background without user interaction. Must also be registered with your IdP. | +| `USE_AUTH0` | Set to `true` only when using Auth0 as your identity provider. Leave as `false` for embedded IdP or other OIDC providers. | +| `AUTH_SUPPORTED_SCOPES` | Space-separated list of OAuth2 scopes to request during login. Standard value is `openid profile email groups`. | +| `AUTH_REDIRECT_URI` | The path where the IdP redirects after authentication (e.g., `/nb-auth`). Must match a redirect URI registered with your identity provider. | +| `AUTH_SILENT_REDIRECT_URI` | The path for silent token refresh (e.g., `/nb-silent-auth`). Used by the dashboard to refresh tokens in the background without user interaction. | ### Embedded Nginx Configuration @@ -729,21 +408,12 @@ The dashboard container's embedded nginx server can be configured using these en | Variable | Default | Description | |----------|---------|-------------| -| `NGINX_SSL_PORT` | `443` | The HTTPS port for the dashboard's embedded nginx server. Only relevant in standalone mode without an external reverse proxy. When behind a reverse proxy, the dashboard serves HTTP internally. | -| `LETSENCRYPT_DOMAIN` | - | The domain name for automatic Let's Encrypt certificate provisioning. Set to `none` when using an external reverse proxy that handles TLS. The domain must resolve to this server for ACME challenges to succeed. | -| `LETSENCRYPT_EMAIL` | - | Email address for Let's Encrypt account registration and certificate expiry notifications. Required when `LETSENCRYPT_DOMAIN` is set. Let's Encrypt sends renewal reminders to this address. | +| `NGINX_SSL_PORT` | `443` | The HTTPS port for the dashboard's embedded nginx server. Only relevant in standalone mode without an external reverse proxy. | +| `LETSENCRYPT_DOMAIN` | - | The domain name for automatic Let's Encrypt certificate provisioning. Set to `none` when using an external reverse proxy that handles TLS. | +| `LETSENCRYPT_EMAIL` | - | Email address for Let's Encrypt account registration and certificate expiry notifications. Required when `LETSENCRYPT_DOMAIN` is set to an actual domain. | -**When do you need these nginx variables?** - -The `NGINX_SSL_PORT` and Let's Encrypt variables are **only necessary when running the dashboard standalone** without an external reverse proxy. In standalone mode, the dashboard's embedded nginx handles SSL/TLS termination directly. - -**For most installations** that use the built-in Caddy reverse proxy (the default `getting-started.sh` deployment) or an external reverse proxy like Traefik or Nginx, **you do not need to configure these nginx variables**. The reverse proxy handles SSL termination and routes traffic to the dashboard container, which serves content over HTTP internally. - -When behind a reverse proxy: -- Set `LETSENCRYPT_DOMAIN=none` to disable the dashboard's internal Let's Encrypt -- The embedded nginx will serve on HTTP (port 80) internally -- Your reverse proxy handles HTTPS and forwards requests to the dashboard +The `NGINX_SSL_PORT` and Let's Encrypt variables are **only necessary when running the dashboard standalone** without an external reverse proxy. For most installations using the built-in Traefik or an external reverse proxy, set `LETSENCRYPT_DOMAIN=none` and the embedded nginx will serve on HTTP (port 80) internally while your reverse proxy handles HTTPS. --- @@ -754,102 +424,101 @@ When behind a reverse proxy: To use PostgreSQL instead of SQLite: -1. Update `management.json`: -```json -"StoreConfig": { - "Engine": "postgres" -} +1. Update `config.yaml`: +```yaml +server: + store: + engine: "postgres" + dsn: "host=db-server user=netbird password=secret dbname=netbird port=5432" ``` -2. Set the connection string in `docker-compose.yml`: +Alternatively, you can use an environment variable instead of putting the DSN in the config file: ```yaml -management: +netbird-server: environment: - - NETBIRD_STORE_ENGINE_POSTGRES_DSN=postgres://user:password@host:5432/netbird?sslmode=disable + - NETBIRD_STORE_ENGINE_POSTGRES_DSN=host=db-server user=netbird password=secret dbname=netbird port=5432 + # Or for MySQL: + # - NETBIRD_STORE_ENGINE_MYSQL_DSN=user:password@tcp(host:3306)/netbird ``` See [Management Postgres Store](/selfhosted/postgres-store) for detailed setup. -### Disabling Anonymous Metrics +### Changing Log Level -In `docker-compose.yml`, update the management command: +Update `server.logLevel` in `config.yaml`: ```yaml -management: - command: [ - "--port", "80", - "--disable-anonymous-metrics=true", - # ... other flags - ] +server: + logLevel: "debug" ``` -### Custom Relay Configuration +Options: `debug`, `info`, `warn`, `error`. Use `debug` for troubleshooting connection issues. -To use multiple relay servers, update `management.json`: +### Custom STUN Ports -```json -"Relay": { - "Addresses": [ - "rels://relay1.example.com:443", - "rels://relay2.example.com:443" - ], - "CredentialsTTL": "24h", - "Secret": "shared-secret" -} +To use multiple STUN ports, update `config.yaml`: + +```yaml +server: + stunPorts: + - 3478 + - 3479 ``` -Each relay server must use the same `NB_AUTH_SECRET`. Use `rels://` for TLS (port 443) or `rel://` for unencrypted (port 80). +Make sure to expose all ports in `docker-compose.yml`: +```yaml +netbird-server: + ports: + - '3478:3478/udp' + - '3479:3479/udp' +``` ### Behind a Reverse Proxy -When running behind your own reverse proxy (Traefik, Nginx, etc.): +When running behind your own reverse proxy (Nginx, Caddy, Nginx Proxy Manager, etc.) instead of the built-in Traefik: 1. Set `LETSENCRYPT_DOMAIN=none` in `dashboard.env` -2. Configure trusted proxies in `management.json`: -```json -"ReverseProxy": { - "TrustedHTTPProxies": ["10.0.0.1"], - "TrustedHTTPProxiesCount": 1, - "TrustedPeers": ["10.0.0.0/8"] -} -``` +2. Use the exposed-ports variant of `docker-compose.yml` (the setup script generates this automatically for options 1-4) +3. Configure your reverse proxy to route traffic to the correct containers and ports: + - Dashboard: `127.0.0.1:8080` (HTTP) + - NetBird Server: `127.0.0.1:8081` (HTTP), with gRPC paths using h2c (HTTP/2 cleartext) -See [Reverse Proxy Configuration](/selfhosted/reverse-proxy) for detailed templates. +See [Reverse Proxy Configuration](/selfhosted/reverse-proxy) for detailed templates for Nginx, Caddy, and other proxies. -### Configuring External TURN Servers +### Using External Services (Advanced) -The default NetBird deployment uses the relay service for NAT traversal, which handles most connectivity scenarios. External TURN servers are only needed for advanced use cases like geographically distributed deployments or environments with restrictive firewalls that block the relay protocol. +The default NetBird deployment includes embedded relay, signal, and STUN services. External services are only needed for advanced use cases. -To use external TURN servers (e.g., coturn deployed separately): +To use external STUN, relay, or signal servers, add overrides to `config.yaml`: -```json -"TURNConfig": { - "Turns": [ - { - "Proto": "udp", - "URI": "turn:turn-us.example.com:3478", - "Username": "netbird", - "Password": "password1" - }, - { - "Proto": "udp", - "URI": "turn:turn-eu.example.com:3478", - "Username": "netbird", - "Password": "password2" - } - ], - "CredentialsTTL": "12h", - "TimeBasedCredentials": false -} +```yaml +server: + # ... basic settings ... + + # Optional: Use external STUN servers + stuns: + - uri: "stun:stun.example.com:3478" + proto: "udp" + + # Optional: Use external relay servers + relays: + addresses: + - "rels://relay.example.com:443" + secret: "relay-auth-secret" + credentialsTTL: "24h" + + # Optional: Use external signal server + signalUri: "https://signal.example.com:443" ``` +See the [Scaling Your Self-Hosted Deployment](/selfhosted/maintenance/scaling/scaling-your-self-hosted-deployment) guide for more details on configuring external services. --- ## See Also - [Self-hosting Quickstart Guide](/selfhosted/selfhosted-quickstart) - Get started quickly with default settings -- [Reverse Proxy Configuration](/selfhosted/reverse-proxy) - Traefik, Nginx, Caddy setup +- [Reverse Proxy Configuration](/selfhosted/reverse-proxy) - Nginx, Caddy, NPM, HAProxy setup - [Management SQLite Store](/selfhosted/sqlite-store) - SQLite database details - [Management Postgres Store](/selfhosted/postgres-store) - PostgreSQL setup diff --git a/src/pages/selfhosted/identity-providers/index.mdx b/src/pages/selfhosted/identity-providers/index.mdx index 0f68adb3..e5771ced 100644 --- a/src/pages/selfhosted/identity-providers/index.mdx +++ b/src/pages/selfhosted/identity-providers/index.mdx @@ -81,6 +81,10 @@ NetBird supports any OIDC-compliant identity providers. Here are some popular pr your NetBird installation and will never be exposed to the public. + + If you plan to use the [Reverse Proxy](/manage/reverse-proxy) SSO feature with an external identity provider, you also need to register the reverse proxy callback URL with your IdP. See [Configure SSO for external identity providers](/selfhosted/migration/enable-reverse-proxy#configure-sso-for-external-identity-providers) for details. + +

Identity Providers List

diff --git a/src/pages/selfhosted/maintenance/backup.mdx b/src/pages/selfhosted/maintenance/backup.mdx index 537c9c1f..337deb0e 100644 --- a/src/pages/selfhosted/maintenance/backup.mdx +++ b/src/pages/selfhosted/maintenance/backup.mdx @@ -5,13 +5,28 @@ To back up your NetBird installation, you need to copy the configuration files a The configuration files are located in the folder where you ran [the installation script](/selfhosted/selfhosted-quickstart#installation-script). To back up, copy the files to a backup location: ```bash mkdir backup -cp docker-compose.yml Caddyfile dashboard.env management.json relay.env backup/ +cp docker-compose.yml dashboard.env config.yaml backup/ ``` For detailed information about each configuration file and its options, see the [Configuration Files Reference](/selfhosted/configuration-files). -To save the Management service databases, stop the Management service and copy the files from the store directory: +To save the server databases, stop the server and copy the files from the data directory: +```bash +docker compose stop netbird-server +docker compose cp -a netbird-server:/var/lib/netbird/ backup/ +docker compose start netbird-server +``` + +## Older Setup (Separate Containers) + +If your deployment uses the older setup with separate containers (`management`, `signal`, `relay`, `coturn`), back up the configuration files: +```bash +mkdir backup +cp docker-compose.yml Caddyfile dashboard.env management.json relay.env backup/ +``` + +To save the Management service database: ```bash docker compose stop management docker compose cp -a management:/var/lib/netbird/ backup/ diff --git a/src/pages/selfhosted/maintenance/remove.mdx b/src/pages/selfhosted/maintenance/remove.mdx index 66b1dacf..122fe66c 100644 --- a/src/pages/selfhosted/maintenance/remove.mdx +++ b/src/pages/selfhosted/maintenance/remove.mdx @@ -5,7 +5,7 @@ To remove the NetBird installation and all related data from your server, run th # remove all NetBird-related containers and volumes (data) docker compose down --volumes # remove downloaded and generated config files -rm -f docker-compose.yml Caddyfile dashboard.env management.json relay.env +rm -f docker-compose.yml dashboard.env config.yaml nginx-netbird.conf caddyfile-netbird.txt npm-advanced-config.txt ``` ## Get In Touch diff --git a/src/pages/selfhosted/maintenance/scaling/migrate-sqlite-to-postgresql.mdx b/src/pages/selfhosted/maintenance/scaling/migrate-sqlite-to-postgresql.mdx new file mode 100644 index 00000000..969995bc --- /dev/null +++ b/src/pages/selfhosted/maintenance/scaling/migrate-sqlite-to-postgresql.mdx @@ -0,0 +1,124 @@ +# Migrate from SQLite to PostgreSQL + +import {Note, Warning} from "@/components/mdx"; + +This guide is part of the [Splitting Your Self-Hosted Deployment](/selfhosted/maintenance/scaling/scaling-your-self-hosted-deployment) guide. It covers migrating your Management server database from SQLite to PostgreSQL. + +The default NetBird deployment uses SQLite, which stores all data in a single file. This works well for smaller setups, but you may want to migrate to PostgreSQL if: +- You want the database on a separate, dedicated machine +- You need better concurrency handling for larger deployments +- You prefer the operational tooling and backup options that PostgreSQL provides + +For smaller teams, SQLite is perfectly capable and migration is not required. + +## Set Up PostgreSQL + +If you don't already have a PostgreSQL instance, you can run one in Docker: + +```bash +docker run -d \ + --name postgres-server \ + -e POSTGRES_USER=postgres \ + -e POSTGRES_PASSWORD=password \ + -p 5432:5432 \ + -v postgres_data:/var/lib/postgresql/data \ + postgres:16 +``` + + +Replace the default `password` with a strong, unique password for production deployments. + + +## Back Up the SQLite Store + +Before migrating, create a backup of your SQLite database: + +```bash +mkdir backup +docker compose cp -a netbird-server:/var/lib/netbird/. backup/ +``` + +## Install pgloader + +The migration uses [pgloader](https://github.com/dimitri/pgloader) to transfer data from SQLite to PostgreSQL: + +```bash +# Debian/Ubuntu +sudo apt-get install pgloader + +# macOS +brew install pgloader +``` + +## Create the Migration File + +Create a file called `sqlite.load` with the following content: + +``` +LOAD DATABASE + FROM sqlite:///root/combined/backup/store.db + INTO postgresql://postgres:password@localhost:5432/postgres + +WITH include drop, create tables, create indexes, reset sequences + +CAST + column accounts.is_domain_primary_account to boolean, + column accounts.settings_peer_login_expiration_enabled to boolean, + column accounts.settings_peer_inactivity_expiration_enabled to boolean, + column accounts.settings_regular_users_view_blocked to boolean, + column accounts.settings_groups_propagation_enabled to boolean, + column accounts.settings_jwt_groups_enabled to boolean, + column accounts.settings_routing_peer_dns_resolution_enabled to boolean, + column accounts.settings_extra_peer_approval_enabled to boolean, + column accounts.settings_extra_user_approval_required to boolean, + column accounts.settings_lazy_connection_enabled to boolean +; +``` + + +Update the SQLite path and PostgreSQL connection string to match your environment. + + +## Run the Migration + +```bash +pgloader sqlite.load +``` + +## Update config.yaml + +On your main server, update the `store` section in `config.yaml` to use PostgreSQL: + +```yaml +server: + # ... existing settings ... + + store: + engine: "postgres" + dsn: "host=postgres-server user=postgres password=password dbname=postgres port=5432" +``` + +Alternatively, you can pass the connection string as an environment variable instead of putting it in the config file: + +```yaml + netbird-server: + environment: + - NETBIRD_STORE_ENGINE_POSTGRES_DSN=host=postgres-server user=postgres password=password dbname=postgres port=5432 +``` + +## Restart and Verify + +```bash +docker compose up -d +``` + +Check the logs to confirm PostgreSQL is being used: + +```bash +docker compose logs netbird-server | grep store +``` + +You should see: +``` +using Postgres store engine +``` \ No newline at end of file diff --git a/src/pages/selfhosted/maintenance/scaling/scaling-your-self-hosted-deployment.mdx b/src/pages/selfhosted/maintenance/scaling/scaling-your-self-hosted-deployment.mdx new file mode 100644 index 00000000..4d817cde --- /dev/null +++ b/src/pages/selfhosted/maintenance/scaling/scaling-your-self-hosted-deployment.mdx @@ -0,0 +1,96 @@ +# Splitting Your Self-Hosted Deployment + +import {Note, Warning} from "@/components/mdx"; + +This guide explains how to split your NetBird self-hosted deployment from a single-server setup into a distributed architecture for better reliability and performance. + +The most common approach is extracting the relay service (with its embedded STUN server) to separate servers and moving the PostgreSQL database to a dedicated machine. +In most cases, you won't need to extract the Signal server, but for completeness, this guide covers that as well. + +NetBird clients can tolerate a Management server outage as long as connections are already established through relays or peer-to-peer. +This makes a stable relay infrastructure especially important. + +This guide assumes you have already [deployed a single-server NetBird](/selfhosted/selfhosted-quickstart) and have a working configuration. + + + If you are looking for a high-availability setup for the Management and Signal services, this is available through an enterprise + commercial license [here](https://netbird.io/pricing#on-prem). + + +## Architecture Overview + +The default single-server deployment runs all services on one machine: **Traefik** (reverse proxy), **Dashboard** (web UI), +and a **combined netbird-server** container that includes Management, Signal, and Relay + STUN as components. Traefik handles TLS termination on ports 80/443, while STUN listens on UDP port 3478. The Management server uses a **SQLite** database by default. + +After splitting, the **main server** keeps Traefik, Dashboard, Management, and optionally Signal. +The **relay servers** run independently on different machines, each handling relay (port 443) and STUN (port 3478) traffic. Peers receive relay addresses from the Management server and connect to them directly. Optionally, the SQLite database can be migrated to **PostgreSQL** on a dedicated server, and Signal can also be extracted to its own machine. + +## Guides + +- [Set Up External Relay Servers](/selfhosted/maintenance/scaling/set-up-external-relays) — Deploy relay and STUN servers on separate machines and configure the main server to use them +- [Migrate from SQLite to PostgreSQL](/selfhosted/maintenance/scaling/migrate-sqlite-to-postgresql) — Move the Management database to a dedicated PostgreSQL instance (optional) +- [Set Up External Signal Server](/selfhosted/maintenance/scaling/set-up-external-signal) — Extract the Signal server to its own machine (optional) + +## Configuration Reference + +### Relay Server Environment Variables + +| Variable | Required | Description | +|----------|----------|-------------| +| `NB_LISTEN_ADDRESS` | Yes | Address to listen on (e.g., `:443`) | +| `NB_EXPOSED_ADDRESS` | Yes | Public relay URL (`rels://` for TLS, `rel://` for plain) | +| `NB_AUTH_SECRET` | Yes | Shared authentication secret | +| `NB_ENABLE_STUN` | No | Enable embedded STUN server (`true`/`false`) | +| `NB_STUN_PORTS` | No | STUN UDP port(s), default `3478` | +| `NB_LETSENCRYPT_DOMAINS` | No | Domain(s) for automatic Let's Encrypt certificates | +| `NB_LETSENCRYPT_EMAIL` | No | Email for Let's Encrypt notifications | +| `NB_TLS_CERT_FILE` | No | Path to TLS certificate (alternative to Let's Encrypt) | +| `NB_TLS_KEY_FILE` | No | Path to TLS private key | +| `NB_LOG_LEVEL` | No | Log level: `debug`, `info`, `warn`, `error` | + +### Main Server config.yaml - External Services + +```yaml +server: + # External STUN servers + stuns: + - uri: "stun:hostname:port" + proto: "udp" # or "tcp" + + # External relay servers + relays: + addresses: + - "rels://hostname:port" # TLS + - "rel://hostname:port" # Plain (not recommended) + secret: "shared-secret" + credentialsTTL: "24h" # How long relay credentials are valid + + # External signal server (optional, usually keep embedded) + # signalUri: "https://signal.example.com:443" +``` + +## Troubleshooting + +### Peers Can't Connect via Relay + +1. **Check secrets match**: The `authSecret`/`NB_AUTH_SECRET` must be identical everywhere +2. **Check firewall**: Ensure port 443/tcp is open on relay servers +3. **Check TLS**: If using `rels://`, ensure TLS is properly configured +4. **Check logs**: `docker compose logs relay` on the relay server + +### STUN Not Working + +1. **Check UDP port**: Ensure port 3478/udp is open and not blocked by firewall +2. **Check NAT**: Some carrier-grade NATs block STUN; try a different network +3. **Verify STUN is enabled**: `NB_ENABLE_STUN=true` on relay servers + +### Relay Shows as Unavailable + +1. **DNS resolution**: Ensure the relay domain resolves correctly +2. **Port reachability**: Test with `nc -zv relay-us.example.com 443` +3. **Certificate issues**: Check Let's Encrypt logs or certificate validity + +## See Also + +- [Configuration Files Reference](/selfhosted/configuration-files) - Full config.yaml documentation +- [Self-hosting Quickstart](/selfhosted/selfhosted-quickstart) - Initial deployment guide \ No newline at end of file diff --git a/src/pages/selfhosted/maintenance/scaling/set-up-external-relays.mdx b/src/pages/selfhosted/maintenance/scaling/set-up-external-relays.mdx new file mode 100644 index 00000000..7bb1e22f --- /dev/null +++ b/src/pages/selfhosted/maintenance/scaling/set-up-external-relays.mdx @@ -0,0 +1,280 @@ +# Set Up External Relay Servers + +import {Note, Warning} from "@/components/mdx"; + +This guide is part of the [Splitting Your Self-Hosted Deployment](/selfhosted/maintenance/scaling/scaling-your-self-hosted-deployment) guide. It covers deploying external relay and STUN servers and configuring your main server to use them. + +For each relay server you want to deploy: + +## Server Requirements + +- A Linux VM with at least **1 CPU** and **1GB RAM** +- Public IP address +- A domain name pointing to the server (e.g., `relay-us.example.com`) +- Docker installed +- Firewall ports open: **80/tcp** (Let's Encrypt HTTP challenge), **443/tcp** (relay), and **3478/udp** (STUN). If you configure multiple STUN ports, open all of them + +## Generate Authentication Secret + +All relay servers must share the same authentication secret with your main server. You can generate one with: + +```bash +# Generate a secure random secret +openssl rand -base64 32 +``` + +Save this secret - you'll need it for both the relay servers and your main server's config. + +## Create Relay Configuration + +On your relay server, create a directory and configuration: + +```bash +mkdir -p ~/netbird-relay +cd ~/netbird-relay +``` + +Create `relay.env` with your relay settings. The relay server can automatically obtain and renew TLS certificates via Let's Encrypt: + +```bash +NB_LOG_LEVEL=info +NB_LISTEN_ADDRESS=:443 +NB_EXPOSED_ADDRESS=rels://relay-us.example.com:443 +NB_AUTH_SECRET=your-shared-secret-here + +# TLS via Let's Encrypt (automatic certificate provisioning) +NB_LETSENCRYPT_DOMAINS=relay-us.example.com +NB_LETSENCRYPT_EMAIL=admin@example.com +NB_LETSENCRYPT_DATA_DIR=/data/letsencrypt + +# Embedded STUN (comma-separated for multiple ports, e.g., 3478,3479) +NB_ENABLE_STUN=true +NB_STUN_PORTS=3478 +``` + + +Replace `relay-us.example.com` with your relay server's domain and `your-shared-secret-here` with the secret you generated. + + +Create `docker-compose.yml`: + +```yaml +services: + relay: + image: netbirdio/relay:latest + container_name: netbird-relay + restart: unless-stopped + ports: + - '443:443' + # Expose all ports listed in NB_STUN_PORTS + - '3478:3478/udp' + env_file: + - relay.env + volumes: + - relay_data:/data + logging: + driver: "json-file" + options: + max-size: "500m" + max-file: "2" + +volumes: + relay_data: +``` + +## Alternative: TLS with Existing Certificates + +If you have existing TLS certificates (e.g., from your own CA or a wildcard cert), replace the Let's Encrypt variables in `relay.env` with: + +```bash +# Replace the NB_LETSENCRYPT_* lines with: +NB_TLS_CERT_FILE=/certs/fullchain.pem +NB_TLS_KEY_FILE=/certs/privkey.pem +``` + +And add a certificate volume to `docker-compose.yml`: + +```yaml + volumes: + - /path/to/certs:/certs:ro + - relay_data:/data +``` + +## Start the Relay Server + +```bash +docker compose up -d +``` + +Verify it's running: + +```bash +docker compose logs -f +``` + +You should see: +``` +level=info msg="Starting relay server on :443" +level=info msg="Starting STUN server on port 3478" +``` + +If you configured Let's Encrypt, the relay generates TLS certificates lazily on the first incoming request. Trigger certificate provisioning and verify it by running: + +```bash +curl -v https://relay-us.example.com/ +``` + +A `404 page not found` response is expected — what matters is that the TLS handshake succeeds. Look for a valid Let's Encrypt certificate in the output: + +``` +* Server certificate: +* subject: CN=relay-us.example.com +* issuer: C=US; O=Let's Encrypt; CN=E8 +* SSL certificate verify ok. +``` + +## Repeat for Additional Relay Servers + +If deploying multiple relays (e.g., for different regions), repeat the steps above on each server. Use the **same `NB_AUTH_SECRET`** but update the domain name for each. + +## Update Main Server Configuration + +Now update your main NetBird server to use the external relays instead of the embedded one. + +### Edit config.yaml + +On your main server, edit the `config.yaml` file: + +```bash +cd ~/netbird # or wherever your deployment is +nano config.yaml +``` + +Remove the `authSecret` from the `server` section and add `relays` and `stuns` sections pointing to your external servers. The presence of the `relays` section disables both the embedded relay and the embedded STUN server, so the `stuns` section is required to provide external STUN addresses: + +```yaml +server: + listenAddress: ":80" + exposedAddress: "https://netbird.example.com:443" + # Remove authSecret to disable the embedded relay + # authSecret: ... + # Remove or comment out stunPorts since we're using external STUN + # stunPorts: + # - 3478 + metricsPort: 9090 + healthcheckAddress: ":9000" + logLevel: "info" + logFile: "console" + dataDir: "/var/lib/netbird" + + # External STUN servers (your relay servers) + stuns: + - uri: "stun:relay-us.example.com:3478" + proto: "udp" + - uri: "stun:relay-eu.example.com:3478" + proto: "udp" + + # External relay servers + relays: + addresses: + - "rels://relay-us.example.com:443" + - "rels://relay-eu.example.com:443" + secret: "your-shared-secret-here" + credentialsTTL: "24h" + + auth: + issuer: "https://netbird.example.com/oauth2" + # ... rest of auth config +``` + + +The `secret` under `relays` and the `NB_AUTH_SECRET` on all relay servers **must be identical**. Mismatched secrets will cause relay connections to fail silently. + + +### Update docker-compose.yml (Optional) + +If your main server was exposing STUN port 3478, you can remove it since STUN is now handled by external relays: + +```yaml + netbird-server: + image: netbirdio/netbird-server:latest + container_name: netbird-server + restart: unless-stopped + networks: [netbird] + # Remove the STUN port - no longer needed + # ports: + # - '3478:3478/udp' + volumes: + - netbird_data:/var/lib/netbird + - ./config.yaml:/etc/netbird/config.yaml + command: ["--config", "/etc/netbird/config.yaml"] +``` + +### Restart the Main Server + +```bash +docker compose down +docker compose up -d +``` + +## Verify the Configuration + +### Check Main Server Logs + +```bash +docker compose logs netbird-server +``` + +Verify that the embedded relay is disabled and your external relay addresses are listed: + +``` +INFO combined/cmd/root.go: Management: true (log level: info) +INFO combined/cmd/root.go: Signal: true (log level: info) +INFO combined/cmd/root.go: Relay: false (log level: ) +``` + +``` +Relay addresses: [rels://relay-us.example.com:443 rels://relay-eu.example.com:443] +``` + +### Check Peer Status + +Connect a NetBird client and verify that both STUN and relay services are available: + +```bash +netbird status -d +``` + +The output should list your external STUN and relay servers. All configured STUN servers will appear, but only one randomly chosen relay is used per client: + +``` +Relays: + [stun:relay-us.example.com:3478] is Available + [stun:relay-eu.example.com:3478] is Available + [rels://relay-eu.example.com:443] is Available +``` + +You can also test failover by stopping one of the relay servers and checking the status again. The client will detect the unavailable server and use the remaining one: + +``` +Relays: + [stun:relay-us.example.com:3478] is Available + [stun:relay-eu.example.com:3478] is Unavailable, reason: stun request: context deadline exceeded + [rels://relay-us.example.com:443] is Available +``` + +### Test Relay Connectivity + +You can force all peer connections through relay to verify it works end-to-end. On a client, run: + +```bash +sudo netbird service reconfigure --service-env NB_FORCE_RELAY=true +``` + +Then test connectivity to another peer (e.g., with `ping`). + +Once confirmed, switch back to normal mode. The client will attempt peer-to-peer connections first and fall back to relay only when direct connectivity isn't possible: + +```bash +sudo netbird service reconfigure --service-env NB_FORCE_RELAY=false +``` \ No newline at end of file diff --git a/src/pages/selfhosted/maintenance/scaling/set-up-external-signal.mdx b/src/pages/selfhosted/maintenance/scaling/set-up-external-signal.mdx new file mode 100644 index 00000000..125ed0bb --- /dev/null +++ b/src/pages/selfhosted/maintenance/scaling/set-up-external-signal.mdx @@ -0,0 +1,149 @@ +# Set Up External Signal Server + +import {Note, Warning} from "@/components/mdx"; + +This guide is part of the [Splitting Your Self-Hosted Deployment](/selfhosted/maintenance/scaling/scaling-your-self-hosted-deployment) guide. It covers extracting the Signal server to a dedicated machine. + +In most deployments, the embedded Signal server works well and does not need to be extracted. Consider running an external Signal server if you want to separate it from the Management server for organizational or infrastructure reasons. + +Unlike relay servers, the Signal server cannot be replicated as it maintains in-memory connection state. If you need high-availability active-active mode for both Management and Signal, this is available through an [enterprise commercial license](https://netbird.io/pricing#on-prem). + + +Changing the Signal server URL requires all clients to restart. After updating the configuration, each client must run `netbird down` followed by `netbird up` to reconnect to the new Signal server. This limitation will be addressed in a future client release. + + +## Server Requirements + +- A Linux VM with at least **1 CPU** and **1GB RAM** +- Public IP address +- A domain name pointing to the server (e.g., `signal.example.com`) +- Docker installed +- Firewall ports open: **80/tcp** (Let's Encrypt HTTP challenge) and **443/tcp** (gRPC/WebSocket client communication) + +## Create Signal Configuration + +On your signal server, create a directory and configuration: + +```bash +mkdir -p ~/netbird-signal +cd ~/netbird-signal +``` + +Like the relay, the signal server can automatically obtain TLS certificates via Let's Encrypt. + + +Replace `signal.example.com` with your signal server's domain. + + +Create `signal.env` with your signal settings: + +```bash +NB_PORT=443 +NB_LOG_LEVEL=info + +# TLS via Let's Encrypt (automatic certificate provisioning) +NB_LETSENCRYPT_DOMAIN=signal.example.com +``` + +Create `docker-compose.yml`: + +```yaml +services: + signal: + image: netbirdio/signal:latest + container_name: netbird-signal + restart: unless-stopped + ports: + - '443:443' + - '80:80' + env_file: + - signal.env + volumes: + - signal_data:/var/lib/netbird + logging: + driver: "json-file" + options: + max-size: "500m" + max-file: "2" + +volumes: + signal_data: +``` + +## Alternative: TLS with Existing Certificates + +If you have existing TLS certificates, replace the Let's Encrypt variable in `signal.env` with: + +```bash +# Replace the NB_LETSENCRYPT_DOMAIN line with: +NB_CERT_FILE=/certs/fullchain.pem +NB_CERT_KEY=/certs/privkey.pem +``` + +And add a certificate volume to `docker-compose.yml`: + +```yaml + volumes: + - /path/to/certs:/certs:ro + - signal_data:/var/lib/netbird +``` + +## Start the Signal Server + +```bash +docker compose up -d +``` + +Verify it's running: + +```bash +docker compose logs -f +``` + +If you configured Let's Encrypt, trigger certificate provisioning with an HTTPS request: + +```bash +curl -v https://signal.example.com/ +``` + +Confirm the certificate was issued: + +``` +* Server certificate: +* subject: CN=signal.example.com +* issuer: C=US; O=Let's Encrypt; CN=E8 +* SSL certificate verify ok. +``` + +## Update Main Server Configuration + +On your main server, add `signalUri` to `config.yaml`. This disables the embedded Signal server: + +```yaml +server: + # ... existing settings ... + + # External signal server + signalUri: "https://signal.example.com:443" +``` + +Restart the main server: + +```bash +docker compose down +docker compose up -d +``` + +## Verify Signal Extraction + +Check the main server logs to confirm the embedded Signal is disabled: + +```bash +docker compose logs netbird-server +``` + +``` +INFO combined/cmd/root.go: Management: true (log level: info) +INFO combined/cmd/root.go: Signal: false (log level: ) +INFO combined/cmd/root.go: Relay: false (log level: ) +``` \ No newline at end of file diff --git a/src/pages/selfhosted/maintenance/upgrade.mdx b/src/pages/selfhosted/maintenance/upgrade.mdx index 1e8d57f3..e64d405f 100644 --- a/src/pages/selfhosted/maintenance/upgrade.mdx +++ b/src/pages/selfhosted/maintenance/upgrade.mdx @@ -46,17 +46,29 @@ To upgrade NetBird to the latest version: 2. Review the release notes (see above) for any breaking changes. 3. Pull the latest NetBird docker images: ```bash - docker compose pull management dashboard signal relay + docker compose pull netbird-server dashboard ``` 4. Restart the NetBird containers with the new images: ```bash - docker compose up -d --force-recreate management dashboard signal relay + docker compose up -d --force-recreate netbird-server dashboard ``` For upgrades from older versions (pre-v0.26.0), see the [Legacy upgrade notes](#legacy-self-hosting-with-zitadel-idp). +### Legacy Setup (Separate Containers) + +If your deployment uses the older setup with separate containers (`management`, `signal`, `relay`, `coturn`), pull and recreate those containers instead: + +```bash +docker compose pull management dashboard signal relay +``` + +```bash +docker compose up -d --force-recreate management dashboard signal relay +``` + ## Get In Touch Feel free to ping us on [Slack](/slack-url) if you have any questions. diff --git a/src/pages/selfhosted/migration/enable-reverse-proxy.mdx b/src/pages/selfhosted/migration/enable-reverse-proxy.mdx new file mode 100644 index 00000000..596994d7 --- /dev/null +++ b/src/pages/selfhosted/migration/enable-reverse-proxy.mdx @@ -0,0 +1,318 @@ +# Migration Guide: Enable Reverse Proxy Feature + +This guide walks you through adding the NetBird Reverse Proxy to an existing self-hosted deployment. By the end, you'll have a `netbird-proxy` container running alongside your existing services, ready to expose internal applications to the public internet. + + +**Who is this guide for?** This migration guide is for existing self-hosted users who: +- Already have a working NetBird deployment (management server, dashboard, signal, relay) +- Want to enable the [Reverse Proxy](/manage/reverse-proxy) feature to expose internal services publicly +- Are running their services via Docker Compose + + +## Why Traefik is required + +The NetBird proxy container manages its own TLS certificates (via Let's Encrypt or static files). This means the reverse proxy sitting in front of it **must not terminate TLS** - it needs to pass raw TLS connections through to the proxy container untouched. + +This capability is called **TLS passthrough**, and among common reverse proxies, **only Traefik supports it** via its TCP routers. Other reverse proxies (Nginx, Caddy, Nginx Proxy Manager) terminate TLS themselves and cannot forward the raw encrypted connection, which breaks the proxy's certificate management. + +If your current deployment uses a reverse proxy other than Traefik, you'll need to switch before enabling this feature. See [Switching to Traefik](/selfhosted/reverse-proxy#traefik) for instructions. + +## Overview of changes + +### What you're adding + +- **`netbird-proxy` container** - a new service in your Docker Compose stack that handles TLS termination, certificate provisioning, and traffic forwarding for reverse proxy services +- **Traefik TCP labels** - routing rules that tell Traefik to pass TLS connections through to the proxy container +- **Wildcard DNS record** - so that all service subdomains (e.g., `myapp.proxy.example.com`) resolve to your server +- **Proxy access token** - generated via the management CLI, used by the proxy to authenticate with the management server + +### What stays the same + +- Your existing `netbird-server`, `dashboard`, `signal`, and `relay` services are unchanged +- Your `management.json` and other configuration files require no modifications — **unless** you use an external identity provider (not the embedded IdP). See [Configure SSO for external identity providers](#configure-sso-for-external-identity-providers) below. +- Existing peers, networks, and access policies are unaffected + +## Prerequisites + +Before starting, ensure you have: + +- **Traefik** as your reverse proxy (see [Why Traefik is required](#why-traefik-is-required) above) +- **Latest `netbird-server` image** - pull the latest version to ensure the management CLI supports token creation +- **A domain for the proxy** - e.g., `proxy.example.com`. Service subdomains will be created under this domain (e.g., `myapp.proxy.example.com`) +- **Wildcard DNS capability** - ability to create a `*.proxy.example.com` DNS record pointing to your server + + +The proxy domain **must not** be a subdomain of your NetBird management domain. For example, if your management server is at `netbird.example.com`, do not use `proxy.netbird.example.com`. Use a separate subdomain like `proxy.example.com` instead. Using a subdomain of the management domain causes TLS and routing conflicts between the proxy and management services. + +- **Port 443 accessible** - the proxy needs this for ACME TLS-ALPN-01 challenges (certificate provisioning) + +## Migration steps + +### Step 1: Backup current configuration + +```bash +# Create a backup directory +mkdir -p netbird-backup-$(date +%Y%m%d) +cd netbird-backup-$(date +%Y%m%d) + +# Backup configuration files +cp ../docker-compose.yml . +cp ../management.json . +cp ../*.env . 2>/dev/null || echo "No .env files found" +``` + +### Step 2: Generate a proxy access token + +The proxy authenticates with the management server using an access token. Generate one using the management CLI: + +```bash +docker exec -it netbird-server netbird-mgmt token create --name "my-proxy" +``` + +This outputs a token in the format `nbx_...` (40 characters). **Save the token immediately** - it is only displayed once. The management server stores only a SHA-256 hash. + +You can manage tokens later with: + +```bash +# List all tokens +docker exec -it netbird-server netbird-mgmt token list + +# Revoke a token by ID +docker exec -it netbird-server netbird-mgmt token revoke +``` + +### Step 3: Add the proxy service to docker-compose.yml + +Add the following service to your `docker-compose.yml`. Replace the placeholder values with your actual token and domains: + +```yaml +netbird-proxy: + image: netbirdio/netbird-proxy:latest + container_name: netbird-proxy + restart: unless-stopped + networks: [netbird] + environment: + - NB_PROXY_TOKEN=nbx_your_token_here + - NB_PROXY_DOMAIN=proxy.example.com + - NB_PROXY_MANAGEMENT_ADDRESS=https://netbird.example.com:443 + - NB_PROXY_ACME_CERTIFICATES=true + labels: + - traefik.enable=true + - traefik.tcp.routers.netbird-proxy.rule=HostSNI(`*.proxy.example.com`) + - traefik.tcp.routers.netbird-proxy.entrypoints=websecure + - traefik.tcp.routers.netbird-proxy.tls.passthrough=true + - traefik.tcp.routers.netbird-proxy.priority=1 + - traefik.tcp.services.netbird-proxy.loadbalancer.server.port=8443 + logging: + driver: "json-file" + options: + max-size: "500m" + max-file: "2" +``` + +The Traefik labels configure a **TCP router** that: +- Matches any request to `*.proxy.example.com` via SNI (Server Name Indication) +- Uses the `websecure` entrypoint (port 443) +- Passes the TLS connection through **without termination** (`tls.passthrough=true`) +- Uses `priority=1` to avoid intercepting traffic meant for the main NetBird HTTP routers on the same entrypoint +- Forwards traffic to the proxy container on port 8443 + + +Replace `proxy.example.com` in both the `NB_PROXY_DOMAIN` environment variable and the Traefik `HostSNI` rule with your actual proxy domain. These must match. + + +### Step 4: Set up wildcard DNS + +Create a wildcard DNS record pointing to the server running your NetBird stack: + +``` +*.proxy.example.com → +``` + +This ensures that all service subdomains (e.g., `myapp.proxy.example.com`, `dashboard.proxy.example.com`) resolve to your server where Traefik forwards them to the proxy container. + +### Step 5: Apply changes + +```bash +# Pull the new image +docker compose pull netbird-proxy + +# Start the proxy alongside existing services +docker compose up -d + +# Verify all services are running +docker compose ps + +# Check proxy logs +docker compose logs -f netbird-proxy +``` + +You should see log messages indicating the proxy has connected to the management server and is ready to serve traffic. + +### Step 6: Verify in the dashboard + +Once the proxy connects to the management server: + +1. Open your NetBird dashboard +2. Navigate to **Reverse Proxy** > **Services** +3. Click **Add Service** +4. In the domain selector, you should see your proxy domain (e.g., `proxy.example.com`) with a **Cluster** badge + +If the domain appears, the proxy is connected and ready. You can now [create your first service](/manage/reverse-proxy#quick-start). + +## Configure SSO for external identity providers + +### Who this applies to + +This section applies to deployments using a **standalone external identity provider** (Auth0, Okta, Keycloak, Zitadel, etc.) instead of the built-in embedded IdP (Dex). If you deployed using the quickstart script with default settings, you are using the embedded IdP and can skip this section. + +### Why this is needed + +The reverse proxy SSO feature authenticates users through an OAuth2/OIDC flow that redirects through a callback endpoint on the management server (`/api/reverse-proxy/callback`). The embedded IdP registers this callback automatically, but external IdPs need it configured manually. Without this configuration, SSO authentication on reverse proxy services will silently fail. + +### Option A: Quick fix (keep your external IdP) + +If you want to keep using your current external identity provider, follow these three steps: + +#### Step 1: Add callback URL to management.json + +Add the `AuthCallbackURL` field to the `HttpConfig` section of your `management.json`: + +```json +"HttpConfig": { + ...existing fields..., + "AuthCallbackURL": "https:///api/reverse-proxy/callback" +} +``` + +Replace `` with your NetBird management server domain (the same domain used for the dashboard). + +#### Step 2: Register callback in your IdP + +In your identity provider's application settings, add the following URL as an allowed redirect URI / callback URL: + +``` +https:///api/reverse-proxy/callback +``` + +This is in addition to any existing redirect URIs (like `/auth` or `/silent-auth`). + +Where to find this setting in common providers: + +| Provider | Where to add the redirect URI | +|----------|-------------------------------| +| Auth0 | Application > Settings > Allowed Callback URLs | +| Okta | Application > General > Login redirect URIs | +| Keycloak | Client > Settings > Valid redirect URIs | +| Zitadel | Application > Redirect Settings > Redirect URIs | +| Generic OIDC | Refer to your provider's documentation | + +#### Step 3: Restart management server + +Restart the management service to pick up the configuration change: + +```bash +docker compose restart netbird-management +``` + +### Option B: Migrate to the embedded IdP (recommended) + +The embedded IdP (Dex) handles the reverse proxy callback registration automatically — no manual configuration needed. If you want a simpler setup, consider migrating to the embedded IdP. + +With the embedded IdP, external identity providers can still be used as **connectors** alongside local authentication. This means your users can continue to sign in with their existing accounts (Google, Okta, Keycloak, etc.) while the embedded IdP manages the OIDC layer. + +See the [Identity Providers page](/selfhosted/identity-providers) for instructions on adding external IdPs as connectors. + + +Migrating from a standalone external IdP to the embedded IdP with your IdP as a connector requires user ID migration. See the [Migration Guide](/selfhosted/identity-providers#migration-guide-and-backwards-compatibility) or contact [support@netbird.io](mailto:support@netbird.io) for assistance. + + +### Verification + +After configuring SSO for your external identity provider, verify it works: + +1. Create a reverse proxy service with **SSO authentication** enabled +2. Open the service URL in an incognito/private browser window +3. Confirm you are redirected to your IdP login page +4. After authenticating, confirm you are redirected back to the service and can access it + +If the redirect fails or you see an error from your IdP, double-check that the callback URL is correctly registered in both `management.json` and your identity provider's settings. + +## For users not on Traefik + +If your self-hosted deployment currently uses Nginx, Caddy, or another reverse proxy, you'll need to switch to Traefik before enabling the Reverse Proxy feature. See the [Traefik setup instructions](/selfhosted/reverse-proxy#traefik) for a step-by-step guide on configuring Traefik for your NetBird deployment. + +## Environment variable reference + +| Variable | Required | Description | Default | +|----------|----------|-------------|---------| +| `NB_PROXY_TOKEN` | Yes | Access token generated via `netbird-mgmt token create`. The proxy refuses to start without it. | - | +| `NB_PROXY_DOMAIN` | Yes | Base domain for this proxy instance (e.g., `proxy.example.com`). Determines the domain available for services. | - | +| `NB_PROXY_MANAGEMENT_ADDRESS` | No | URL of your NetBird management server. The proxy connects via gRPC to register itself. | `https://api.netbird.io:443` | +| `NB_PROXY_ADDRESS` | No | Address the proxy listens on. | `:8443` (Docker), `:443` (binary) | +| `NB_PROXY_ACME_CERTIFICATES` | No | Set to `true` to enable automatic TLS certificate provisioning via Let's Encrypt. | `false` | +| `NB_PROXY_ACME_CHALLENGE_TYPE` | No | ACME challenge type: `tls-alpn-01` (port 443) or `http-01` (port 80). | `tls-alpn-01` | +| `NB_PROXY_CERTIFICATE_FILE` | No | TLS certificate filename within the certificate directory (for static certificate mode). | `tls.crt` | +| `NB_PROXY_CERTIFICATE_KEY_FILE` | No | TLS private key filename within the certificate directory (for static certificate mode). | `tls.key` | +| `NB_PROXY_CERTIFICATE_DIRECTORY` | No | Directory where static certificate files are stored. | `./certs` | + +## Troubleshooting + +### Certificate provisioning failures + +**Symptom**: Services stay in `certificate_pending` or move to `certificate_failed` status. + +**Checklist**: +1. Verify port 443 is accessible from the internet (required for `tls-alpn-01` challenge) +2. Ensure the wildcard DNS record resolves correctly: `dig myapp.proxy.example.com` +3. Check proxy logs for ACME errors: `docker compose logs netbird-proxy | grep -i acme` +4. If using `http-01` challenge type, ensure port 80 is also accessible + +### TLS passthrough not working + +**Symptom**: The proxy starts but services return TLS errors or Traefik's default certificate. + +**Checklist**: +1. Verify Traefik labels include `tls.passthrough=true` +2. Confirm the router is configured as a **TCP** router (not HTTP) - labels should use `traefik.tcp.routers`, not `traefik.http.routers` +3. Check that the `HostSNI` rule matches your proxy domain with the wildcard (`*.proxy.example.com`) +4. Verify the TCP router has `priority=1` to prevent it from intercepting traffic meant for the main NetBird HTTP routers +5. Ensure the `websecure` entrypoint is configured in your Traefik configuration +6. Restart Traefik after adding the proxy container: `docker compose restart traefik` + +### Port conflicts + +**Symptom**: The proxy container fails to start with an address-in-use error. + +**Solution**: The proxy listens on port 8443 inside the container. If another service uses port 8443 on the same Docker network, change `NB_PROXY_ADDRESS` to a different port and update the Traefik label `loadbalancer.server.port` to match. + +## Rollback procedure + +If you need to remove the proxy and revert to your previous configuration: + +```bash +# Stop all services +docker compose down + +# Restore your backup +cd netbird-backup-YYYYMMDD +cp docker-compose.yml ../ + +# Restart without the proxy +cd .. +docker compose up -d +``` + +You can also revoke the proxy token to prevent the proxy from reconnecting: + +```bash +docker exec -it netbird-server netbird-mgmt token list +docker exec -it netbird-server netbird-mgmt token revoke +``` + +## Additional resources + +- [Reverse Proxy feature documentation](/manage/reverse-proxy) - full overview of services, targets, domains, and authentication +- [Custom Domains](/manage/reverse-proxy/custom-domains) - use your own domain names for reverse proxy services +- [Reverse Proxy configuration reference](/selfhosted/configuration-files#reverse-proxy-configuration) - all proxy environment variables and options +- [Self-Hosting Quickstart](/selfhosted/selfhosted-quickstart) - getting started with self-hosted NetBird diff --git a/src/pages/selfhosted/reverse-proxy.mdx b/src/pages/selfhosted/reverse-proxy.mdx index d74745a0..abf0fd2b 100644 --- a/src/pages/selfhosted/reverse-proxy.mdx +++ b/src/pages/selfhosted/reverse-proxy.mdx @@ -1,6 +1,6 @@ # Reverse Proxy Configuration -NetBird includes a built-in Caddy reverse proxy that handles TLS certificates automatically. However, if you already have an existing reverse proxy (Traefik, Nginx, etc.), you can configure NetBird to work with it instead. +NetBird includes a built-in Traefik reverse proxy that handles TLS certificates automatically via Let's Encrypt. However, if you already have an existing reverse proxy (Nginx, Caddy, etc.), you can configure NetBird to work with it instead. Not all reverse proxies are supported as NetBird uses *gRPC* for various components. Your reverse proxy must support HTTP/2 and gRPC proxying. @@ -14,8 +14,8 @@ The `getting-started.sh` script supports multiple reverse proxy configurations. ``` Which reverse proxy will you use? - [0] Built-in Caddy (recommended - automatic TLS) - [1] Traefik (labels added to containers) + [0] Traefik (recommended - automatic TLS, included in Docker Compose) + [1] Existing Traefik (labels for external Traefik instance) [2] Nginx (generates config template) [3] Nginx Proxy Manager (generates config + instructions) [4] External Caddy (generates Caddyfile snippet) diff --git a/src/pages/selfhosted/selfhosted-guide.mdx b/src/pages/selfhosted/selfhosted-guide.mdx index 05ab4664..8a5195f7 100644 --- a/src/pages/selfhosted/selfhosted-guide.mdx +++ b/src/pages/selfhosted/selfhosted-guide.mdx @@ -201,7 +201,7 @@ docker compose logs dashboard ## Advanced: Running NetBird behind an existing reverse-proxy -If you already have a reverse proxy (Traefik, Nginx, Caddy, etc.), you can configure NetBird to work with it instead of using the built-in Caddy. +If you already have a reverse proxy (Nginx, Caddy, etc.), you can configure NetBird to work with it instead of using the built-in Traefik. Not all reverse proxies are supported as NetBird uses *gRPC* for various components. Your reverse proxy must support HTTP/2 and gRPC proxying. diff --git a/src/pages/selfhosted/selfhosted-quickstart.mdx b/src/pages/selfhosted/selfhosted-quickstart.mdx index a6c85b40..77d6401b 100644 --- a/src/pages/selfhosted/selfhosted-quickstart.mdx +++ b/src/pages/selfhosted/selfhosted-quickstart.mdx @@ -13,14 +13,13 @@ This is the quickest way to try self-hosted NetBird. It should take around 5 min ## Infrastructure requirements - A Linux VM with at least **1CPU** and **2GB** of memory. - The VM must be publicly accessible on **TCP ports 80 and 443**, and **UDP port 3478**. -- A **public domain** name that resolves to the VM’s public IP address. +- A **public domain** name that resolves to the VM's public IP address. ## Software requirements - Docker with docker-compose plugin ([Docker installation guide](https://docs.docker.com/engine/install/)) or Docker with docker-compose version 2 or higher -- [jq](https://jqlang.github.io/jq/) — install with `sudo apt install jq` or `sudo yum install jq` -- [curl](https://curl.se/) — install with `sudo apt install curl` or `sudo yum install curl` -Usually available in the official repositories and can be installed with `sudo apt install curl` or `sudo yum install curl` +- [jq](https://jqlang.github.io/jq/) - install with `sudo apt install jq` or `sudo yum install jq` +- [curl](https://curl.se/) - install with `sudo apt install curl` or `sudo yum install curl` ## Installation Script @@ -30,8 +29,8 @@ Download and run the installation script: curl -fsSL https://github.com/netbirdio/netbird/releases/latest/download/getting-started.sh | bash ``` -Once finished, you can manage the resources via `docker compose`. The quick start script generates a full, production-ready NetBird installation. If you'd like to customize the install or gain a better understanding of the files -generated by the script, including the docker compose file, please refer to our [Configuration files](/selfhosted/configuration-files) guide. +Once finished, you can manage the resources via `docker compose`. The quick start script generates a full, production-ready NetBird installation. If you'd like to customize the install or gain a better understanding of the files +generated by the script, including the docker compose file, please refer to our [Configuration files](/selfhosted/configuration-files) guide. ### Reverse Proxy Selection @@ -39,8 +38,8 @@ The script will prompt you to select a reverse proxy option: ``` Which reverse proxy will you use? - [0] Built-in Caddy (recommended - automatic TLS) - [1] Traefik (labels added to containers) + [0] Traefik (recommended - automatic TLS, included in Docker Compose) + [1] Existing Traefik (labels for external Traefik instance) [2] Nginx (generates config template) [3] Nginx Proxy Manager (generates config + instructions) [4] External Caddy (generates Caddyfile snippet) @@ -49,20 +48,32 @@ Which reverse proxy will you use? Enter choice [0-5] (default: 0): ``` -**For this quickstart guide, select option `[0]` (Built-in Caddy)** - just press Enter to use the default. This option handles TLS certificates automatically via Let's Encrypt and requires no additional configuration. +**For this quickstart guide, select option `[0]` (Traefik)** - just press Enter to use the default. This option includes a Traefik container in the Docker Compose that handles TLS certificates automatically via Let's Encrypt and requires no additional configuration. If you already have a reverse proxy (Traefik, Nginx, etc.) and want to use it instead, the script will guide you through the setup. See the [Reverse Proxy Configuration](/selfhosted/reverse-proxy) guide for detailed instructions on each option. +### Generated Files + +The script generates the following files: + +| File | Description | +|------|-------------| +| `docker-compose.yml` | Docker Compose configuration with all services | +| `config.yaml` | Combined server configuration (management, signal, relay, STUN) | +| `dashboard.env` | Environment variables for the dashboard container | + +For options 2-4, additional configuration files are generated (e.g., `nginx-netbird.conf`, `caddyfile-netbird.txt`, or `npm-advanced-config.txt`). + ### Example Output ```bash root@selfhosted-1:~/netbird# bash getting-started.sh Which reverse proxy will you use? - [0] Built-in Caddy (recommended - automatic TLS) - [1] Traefik (labels added to containers) + [0] Traefik (recommended - automatic TLS, included in Docker Compose) + [1] Existing Traefik (labels for external Traefik instance) [2] Nginx (generates config template) [3] Nginx Proxy Manager (generates config + instructions) [4] External Caddy (generates Caddyfile snippet) @@ -73,14 +84,14 @@ Rendering initial files... Starting NetBird services -[+] Running 5/5 - ✔ Network netbird Created - ✔ Container netbird-dashboard Started - ✔ Container netbird-management Started - ✔ Container netbird-relay Started - ✔ Container netbird-signal Started - ✔ Container netbird-caddy Started -Waiting for Management server to become ready . . done +[+] up 6/6 + ✔ Network combined_netbird Created 0.1s + ✔ Volume combined_netbird_data Created 0.0s + ✔ Volume combined_netbird_traefik_letsencrypt Created 0.0s + ✔ Container netbird-server Created 0.1s + ✔ Container netbird-traefik Created 0.1s + ✔ Container netbird-dashboard Created 0.1s +Waiting for NetBird server to become ready . . . done Done! @@ -112,7 +123,7 @@ The `/setup` page is only accessible when no users exist. After creating the fir ## Add More Users NetBird includes built-in local user management powered by an embedded
Dex server, allowing you to create and manage users directly from the Dashboard without requiring an external identity provider. You can also add external identity providers for SSO authentication alongside local users. - + --- ## Troubleshoot - **I can't access the `/setup` page** - + The setup page is only available when no users exist. If you've already created a user, go to the main login page instead. - **I forgot my admin password** - + You can create a new user via the API using a PAT (Personal Access Token) from an existing admin, or reset the database to start fresh. - **SSO provider not appearing on login page** - + Check that the connector is properly configured in **Settings** → **Identity Providers**. Ensure the redirect URL is correctly configured in your IdP. For more troubleshooting help, see the [Troubleshooting guide](/selfhosted/troubleshooting).