From 26062418f81bca9be04198aedadb35fb6c1591bf Mon Sep 17 00:00:00 2001 From: Sam Bukowski Date: Fri, 20 Oct 2023 11:46:59 -0600 Subject: [PATCH] docs: add additional sections for deploying to different cloud providers (#13) Restructure to the `Cloud Rollup Deployment` section. - [x] move Digital Ocean section - [x] add GPC instructions - [x] add Azure instructions - [x] add AWS section closes #12 --- docs/dusknet/1-overview.md | 2 +- ...oyment.md => 2-local-rollup-deployment.md} | 4 +- docs/dusknet/assets/cname-record-example.png | Bin 0 -> 104860 bytes .../1-digital-ocean.md} | 127 ++---- .../cloud-rollup-deployment/2-azure.md | 365 ++++++++++++++++ docs/dusknet/cloud-rollup-deployment/3-gcp.md | 398 ++++++++++++++++++ docs/dusknet/cloud-rollup-deployment/4-aws.md | 366 ++++++++++++++++ .../5-faq-debugging.md | 54 +++ .../cloud-rollup-deployment/_category_.json | 8 + 9 files changed, 1240 insertions(+), 84 deletions(-) rename docs/dusknet/{3-local-rollup-deployment.md => 2-local-rollup-deployment.md} (98%) create mode 100644 docs/dusknet/assets/cname-record-example.png rename docs/dusknet/{4-cloud-rollup-deployment.md => cloud-rollup-deployment/1-digital-ocean.md} (72%) create mode 100644 docs/dusknet/cloud-rollup-deployment/2-azure.md create mode 100644 docs/dusknet/cloud-rollup-deployment/3-gcp.md create mode 100644 docs/dusknet/cloud-rollup-deployment/4-aws.md create mode 100644 docs/dusknet/cloud-rollup-deployment/5-faq-debugging.md create mode 100644 docs/dusknet/cloud-rollup-deployment/_category_.json diff --git a/docs/dusknet/1-overview.md b/docs/dusknet/1-overview.md index 7e9e9f9e..e8090359 100644 --- a/docs/dusknet/1-overview.md +++ b/docs/dusknet/1-overview.md @@ -18,7 +18,7 @@ the main [astria repo](https://github.com/astriaorg/astria) repo: ```bash git clone git@github.com:astriaorg/astria.git -git clone https://github.com/astriaorg/dev-cluster +git clone git@github.com:astriaorg/dev-cluster.git ``` And install the following tools: diff --git a/docs/dusknet/3-local-rollup-deployment.md b/docs/dusknet/2-local-rollup-deployment.md similarity index 98% rename from docs/dusknet/3-local-rollup-deployment.md rename to docs/dusknet/2-local-rollup-deployment.md index 487d672e..c4aff75a 100644 --- a/docs/dusknet/3-local-rollup-deployment.md +++ b/docs/dusknet/2-local-rollup-deployment.md @@ -1,5 +1,5 @@ --- -sidebar_position: 3 +sidebar_position: 2 --- # Local Rollup Deployment @@ -22,7 +22,7 @@ You can add genesis account(s) to your rollup during configuration. This is done by `export`ing the additional `ROLLUP_GENESIS_ACCOUNTS` environment variable. ```bash -export ROLLUP_GENESIS_ACCOUNTS=:100000000000000000000 +export ROLLUP_GENESIS_ACCOUNTS=: ``` You can create an account using diff --git a/docs/dusknet/assets/cname-record-example.png b/docs/dusknet/assets/cname-record-example.png new file mode 100644 index 0000000000000000000000000000000000000000..e20df5c4eaca0336a063ccc9e2a61bdbfc87e6dd GIT binary patch literal 104860 zcmdqJXHZjX8#W3dC=pa7n*f3o71$f8BE92A6r?Bt1gRoKdI>FrPHcdHg`NaZTIgMR zQ;L)XK}3pl5~M?$S*$Fcaz9tQd2Xn$efre-Q*?B6r*GZ- z_bwgX$v!$d`eddPz$>4d@+iQ65RaQ?NIE)ZDD8`$E(Oa;N5@Zh>t7AHKX&Q6-y59q z@V4hr0B_o32@~)ex0Vyn`0ufD-~EgI<;4qsIo>_37XZOrym>D3geF7=^Qupm4TRw} z2W8UP_M;`#yEcnfa(grv)UG3@ zS1m~41d*N+ifmSx({RnCCW}J zroPqv@A%w$_2p|^B6s>9FO1YbucY6@JbyiUkbd*`btAkRUJTy9$M0^cTnnA$@Aoq$ z)f0b@JH+JATmE%o{`ZBK1+Vl8{=UztKX3Z#75kr8KBlkzeal;)PW|!muUh}-!yhvK zd8KWr`0o$6TL$|7e9V8$!v4IH^UsHVQ}E|6^bgCQ53Te6?_bXe%|2g_AjKq0BigYF z$b_F+H=|^{=llE*);r#r7F&JJF-YUQ`tW8?ip&)<5w|%1d$jo?WY48T<=L=JyX4gM zt}De4B^5lUKl)Q}e!y*R`ShmBN$>{DXUHGz%*=!`oOxy!qad`>xWB@w791!Je)(&@ ze|~nZq*u(?%`a{||Gm~Hs$0BHl&DPYVG)RxpMEC4_04W3TAKJQ=7LiD;r0aIhbO1+ zJLLsT1n(~=Df&1?pO+DdIC^wWoe90)Ue|U#1*OVNkI{$X^!Kq(E_haVs0?1o)KKO92E#B0ME97v|+OA>qYZNKuh+5in zwfo~x<5uOts6?YDrj<=7e zjnekuM>rk#t?LMq=N9kk=zDi%U@>x8$z8i9%4X4j7x#4`R%Pp6<2QF)L$~wx-89vp z0F%>dn_rC9CnL^^2d-9o&Ro4LHXg887&zhj{yXe=r$cSJL+!{j@Q1E-mlj>!Y9rdD zld2G7D&zdMfKw&F+vGdah4>lRQuV$oS@=@Bj`nhrDtD~%#!cnj+1FD3Ym@bSt;5=U zLDyn6m{CMI`>r?j!mU9u9s9c%C~pUqhp54t=HnAhA;$;GcHNwJcaPh--Df>(gpN}8 z^WIh-rfWoO99Zy?UP{@g?PRa@_$OeW+HEfkUg6O3P=(#U_ITgHrDhyhnH>ygmE(qX z#*m~r63U^H6poZSSwrNo^0%F8@GKmYrjQj(DYsC(V^E6C*lv$w4laRNZ9d)bbe}V+ zJL&2f1GPi%acf{iyi|cLwxF^qWB9x3kEn<0OWthOy-94Oz;V#@;|0^ENO8;Bht*bE zthb_mvYT2+CERzb+4*D;{7S4GqI&WSPtuh5vEJyCu0+GN4|=V$;eE+E>rj1p0e!_E znbqs<+|&bb@1%jISL@dz%er>8<6V;cQptzu+1CcdQz*?9Hg#y`z*}6}xmRvYhg+q< zVn_HKj5rrxxbIS`wK5po#%?<6!vSu#xRP;YsIyd|Y_Z2@`!yJI;qPvq3_+;u+L~~8G$;ig>qV;hX#exi>2)|L=9z)J_UW)BOdKA7N z^U~$<>J;EgmsVRePDeIDh4p)i7^4{|lSldrb8oO`EoMUL8N9~NV}GCgu79fw|IFM- zjN9FAIu0tRUC86o94Kq3l2Kw(EpFHvk)KbGDAUBPy-H7QPI9sVd4})w%1tP50mH2< z9^cB?aX?Kw=21JCIy=MBw4?RpGh8Gw&nqt$a!uhlMrkE!b$5KbF)@CwB5nd$SJSH@ z$LJGjn0oL>U>l>VUI||lR7OlVkMtO69T&O>U8(x+JL*qPMr`a1Wb1XurAa1{4uHD( z{Ds`O{QUu>UenQLF?Em0XtjodFNl#~8mke4onBJ_?Kd6FNvs3gQL1=VTW#--OW7x( zU24ZP)6lC#AyRGpbhtzKVYt?5%nD`~z1rZXDzTEh`!S6tiqi4zZmGeu)3DoX z%E`=Q9IiVxa#d$+1hi2?n3;4o93$BNK7COv+RnoNYsKm@?bPX(Xgat^ugLV#4BJwF z`Pu}Ef}EK{w2JNH@kU}(PZweY$$=>X_of}p3eQAYA3Qjbg&D4UM-e ztRbgxRcr|F=RjKrKzO7_F(Wf0llk!dRO*{;uNQ%MwOuabgL-+jA!7akemi7}*}Bs? z^E^&uo(!(2cduKniXsKAAlK(4LKKQqo$sOM;>)?|qWB(_8t8h7kRTzDyX$8=GXfY986<@)LsQ^vrhF~tM=6WE0oFlxi-%o z1!Ns~9^PpUJPg+tr1(mXvT*xTyQ_#Dci1xz%fa0%zvqDco@TPz)QMjSjkY7j?T$n*K_Mkffkt!_IV6`Kx4-(PRC|Po=vm#w7R?===t1OC+a3 zfti8n3&a63Pw>rtm25I|lGooRhQ8&RgenQ)NFlb;Z<$f5myY%64!^Gk%jJJ^% z?d|b_mL#$!IITvURh7TKAGG~lE&@INVV!U{$EjX{UW{Hb3M?<1AroI<0TNrI4ZGnHOTi-bdC*IxDAGX;I(?+}{(CpnX-qffi)gwH%dU!@)_Z#M zF9RZYMC&1R*61ZMsbnq8jV>@D(w}%Mw6~#OER@v$BJ`9e$lWTM*>xBt)Wa9DIL~}4R`~nh}D__##=;GIs^PE9uAYIL_A?uKa;SPboEH+$F z5kXS8`Lblz-uv^c(67+e;02?!uDE2I_&kr+fD!+4go1$TAW^V6TPJz)b=4@i1@pCn zNf<7{KD}h7_spu*x)t4Ou(c@8ln5E8p)|yfPG6VRGQ4ejaY$k`8QKpevUxzq*^chI zlHSsbtUyfFsL7;+YeDRYGV|niQO3qDb!7MBNS`60ZKtBS=oOHmh~2*H zXXmPEpn6xCQ%&RpN{Ymk<2a{Jp&#ij|2u3FPnWuN2p+kh#{7-oE-E&B`-w3$(QGFB*(^>O_-R*P3 zQ*^8UM5UD(bU2UKD%lVT-O%7(nW1`N^_;zWDflC(e&YlkuJ4Ts;pu7agu&S*ZhiIJ zo05ff5Zht^?iP4ww(`gA@tI(h<6^JxuQT`axiG$35}Um# zCqM=2SUkNvz2d$lG^vcFAfVDAzgkZ%i%g+QTeq=o0S<&W#{Emr^(W0m`XHl@AqMtH zF73P)g%HB49838OiH;mi?0WiMN@x=Gz59eJ2kSLCbxJKH29gJC))ymGVC;pghxk zSS}wrnR05Qa>z=l!)?gYub1((XrPT7>x#7Mm{R-%X0+mt@QzSAd02|$UZ}c{{NUD- zrG5!%%*Ndp_79DN6sLKlaiGhPZX&~6b}?;lPZnhWr@~5L!UQyP6+oc7N+9o%Drr?^ zVKQgb<$LqZ6T=tNYs9vG(euoz0sv}bo?s%uU%~TA%N0f@XgL#9HzN0&Am^L`t0olO z1k6QfN}gk@83>)%MR3VxR2GmH8zuZJTw-606iI>DJ91k!;ExXX5m{aY^_+m@1>3wd z4LaQ{6?&yX5;j$(4U)~Qc@GqjR|JWLSVK^b2-4;qd%aMrBAoL@PH`qbvuEnhdSpD@ zD+(m&uW2aSN^E~vbv#E5r{4m(yM^lS+-6j9{RZiFK6i7VAB)b6#3yWlN3lkbDt^&^HQ-3U#2`+egC3?+@^^+}#~)=Uj1Jf360Q$233u1j$_s(8 zEiQ)<_aS#61(0Aup3sia7ok2uI*L5_V?|3gP=L~n2JfHlgSb1M))zz(9^@<}$0f?n zg0VbNRSR$zqYL_N*9Ln8>&YohUCs>NTSgM}ic^aKz)hUGIyf^XOv$Y>$mznCP9jBx z_*t^wVoUiggqK`J)K`bg5xhv8&sVd{>caIWnb~sba-8?0m2DBcVQ&U!hmDyIto;J{5K86rPyk<^8xIx-X2 z9Vhe+Z)+*KHbC?om-WAWTK$%a4Jw5A5IBoW!-yn}&@R*5HUUQThPw0%zcoJ{3wQ8^_)U9q;FSgKQER`+To=vH4B6b>V!Bg8o!cbPam+t z*`#^qX+0w~Nb6%J#~22`MGMf&HO*-GlR}Ja4cO(xdLRYEGgwdZUbP=g1pe7Gw9AD| zzdxRs=LYh|1H(qIVm#h+5^vD*mU$(t^pZNoOiC3zGDwFjNkcT3|4pGIMW&}MPM_ye z!%GdW4es`USjfyX@Y8*|`9Vd`oin)UNO4;17Sb6?9rkIcB0B(OyZ~ejsT;Ap4c{og zabu-@p^&<8Ag`p2`jh7v0yrJ>>;Shg+5fg7eL6*@gm5G{pJ|?GnB+TNFJ3eI>am7M z6QyBLb{w<3XceknX|NWmJr(K0G~3f~`cW#2;3a z0PHowt3Kbg&n#Di*)MN~@K#uzlG0Tz$&qrZPl1D!gla}TVkdDT&oa_02q-aYe9Onv z;ZUvPlpagPa~^3tsX;_kX>Noo3sGsczWzi^UBAv1dmmL&b&u39q<71eUtM@o@Ebtw z8l;u86qDBCWXCWs0DY;m%R|JIa5o#|KWv}a%b%>Cd{}PnKlPZ!l(3Oqivsv*4{Hj4 zd}xC21kclkBFIgMAtZyKDD*|JS+H|<8=I)c2Y@L~Mej!|<$9CD010N9fTR(;avldb zhUgpWGt~{6+_&FUD(oT@WH-nSE`w_@-AXIfc2?ZW4Uoh-?;o$WNvky{N8S&#ry@%_ zWW%o7N~7y1fa;(d6iQSn(Uy;=h(1VXrVG2eI>+1mmdSht*&u4p@15xTvp=*hKB9BsWXm=zjxpg++fGt@iHxPl|yJtQ7X zbCt-4B^>rJ!~T)9(qo(l1iJ3Fzj};_Ef)5rbe3n6Qpfn1FZw&=7gmk5(j6|9lZg9s z%F$;@q5GK^lv@I{7)xO{ZH+co+g#OLu#U@@<(t675vtILUUH5P&O%ITFt1id_ zM0~BU_|KKjZGgeDgYM0V8Ym*ME0CA>MS;BR88^BNn^5i6V6_jPb9M|PU z)aW$dq8H8-vapZ!ZZ#-MD@l+9_=0=y1Tey|Id}pxw!)JVd`9JGA4{Zy+>kb-D!r11 zi1Amr#K2K%q*LqnECqFnIpKtGvx5M=M7tLt-;vS=L~ttKYY;^d4egHmM41g1$2sCO z7=Id_Nj%G|Jv zeZjaj+}4h0J%1d+?HVi{8C2n^wo*N_F~Z55_Z>wZJGuRFv(!I)KfAx-d^(bse17|b ziU%I&H?Giuc}%Cw9n;bZAR} z>7$kGdXcliO#NKfM@Ff)YfgYDsqT#m5iTXg%69k2bauBY>3+?} zj|iG-?yDn2y3Bn!D~^ zLoL6Z=K+^id=bhNniu+8_{-%?A&el8@V%_a6gz0^)m!o>u88M4YkH?1-$M*ZXY|0VNl;CQ&_UBDT#-wVKZO5Fv)CuSw+X_|7 zj0YyvCyPT;r+FPct)tS@5`G-StR)7ucekEwb-*)j-}-i2{kD%RGk+IHMFlmdE0q<8 z(8`h<>Q35Fz89!IX)%(xrYT!)Eb?0& zXP(fW|6YTnus9BraNC}|L=D}5k@|uDRA<6CU*RmI4e|)3W(Pn0jliTvPO|gj^EGdw z`iWGS-3fp4a6RT`eD_ z!DCT4|3eDjJEuN_`z$cd5<|@XRAaSTOiPF~QS?lPr84t1^BLa1ew`0{J9>C!1!-YL z>4C6hkY$-@SqV*DM|OX``+VGq;U`;TzifKNx%7+4&2Ly!Jg|}Wybi8t*Aks@5$n7b zM8Oc~b-hY8n&CIx%QV-*28k*Uammk zOs}NJbZ~B{i_v#0m6P=1uHS1;5L;9>j=c0R1r=_^)88zVrml2Q&gVl@Y!XRc-^Z+% zJvk*>9}v4&2_nKCMJ8)$8t(NPlOxe0k*U_M$E3W+Cz2x11IwP z3*0;SE94jlq^H&<^}w!;qQFOL3V2~3EKRPo`wa(WIsg{W zVS+bOzRls*ii~vqM^Odv-Mp0MX#<(Z@G~G`i+_ElzOn5B+L15y_{mwt6TQ3GnO`DU zX2LyGutOH#>VLBU)LuEn5Tf?)G>=xuumIqG7!c_WX+|KDq#_rk{Le~(*ov#;h{YfN z)GenG+ScN}HhQ;wPMRISd^BSJxzc&4`bT!^^Z}JbiuA66IgHK$&Wn}AT z{)_PxiH4tdpUf_y^t-nJ1w{6Pca@pLl?SbxE8pu7%zm0bodowvY(JPU;phMKsxu#> z@lAlr=J_Klu^q4u;^Qe83Qo}{lD3$HZYRaDlgk}?BU>U)b}YZ2;00_b6O#<8;&R0R z%;YTzuTt0cBJWQRyV4UgjhTVt{eJWden5(l00NSv?@#2VRNA7Cj}B)57-4zuIZ^co z&7%0Z@?Git`SVvFrOCNlRs4^K{-yl`^*L1dKQ0nY-Qo%Q`Pp-=-*AHRJlz_MT+vcUga0_L;KLCW{potDoO#KOyh0 z)VUv_0K{tVulnHQGp%uJ?o6ZS#Kw7`blx|43vD!N7zbP|PJkuc28x&Y|CsnrA9O;G z0O81f69t$U(;M9qu^qf<(e@YILj|xUKwD!y{9?8$zW|t>0UV2-g{_2-f2Ie1zC`UWzqgzI_?)Zr{k8v@|JeGs zLF4<6jvFif9IMO!S80I3i+U;7{;>j(XGMDn3*=8B%15EYIe;jQoyBqZY#^hos)K+%S(0(UkG}t&rPrvg^W}a9SO;Uzh*7?4m&Ga~+o3nIWQ^Q_nx;)7(=VlRAFdjVnQu_hT zsAf1L&ktC~W&T^k2x{_sA7vU_xl~j=9qGUENtn9J_OEH$;r!=!Gk}Hr4A`9=bBWfx z2(0Ig3P4^{1XeK36`rYGEb3lmNfU$@5nr6UbmL!Ougw4`{sqlPq`B}c)r(U|@aKq= zXNjut|4RXz3+yz(anwVmdX z3iu(Vo^rmY6{U{HA!=PsT=p3)z;_&$wcgKZWjzp4eKQP-8GWa&cU)BPdRIb&Ji=95-z6 z-Vd&w^Xb}825AJY0MIhm(~b{>BPdQbdd;*QHJ5a_^}gvv^zg;d?6=fJ^L79MlsKJwb8jD=Z>naz7${8JS37{8$8n{gMDysDAHxb?pxWN%Vq(}4AK-^8tJ-Y=S%HQX=gmRW zSc%~EDAYu8{f5qKO2U6vcz^#pnzm?p{pp$BCTPl?TRJyy3eLZaRZSTz2iwDY`k&Nf zJ#Ob?AJG{A;Y6mdpH;b51o%lX4po}-wVrQ%DDq*@NMAwl!+2G6Ns3Lab}X-gxN~uX zuc|4C8t$~F8npNEr8X}YVCeb)resKG$ze0Y*=U+(NAoN#;!0XhaDSu)8xF=x)-p%3 z57#^RNZV{K5&)8=d3*MT2Gtg;DL@S_yGY}@FMwEvLep!&OLf_>%8e7A1l;Hl-n7Fd z#LVc#kuMhDA7(NWa1KcL9?bz~U=2YNmMj1_?Z*bdpHnzd;KRgL;k5$VrrkOBDfai!1R9s&FrObZ0 z3b0<>sR0h_K&gm9TKFWt*KzK)`prk$-K&XK0sou;ymj{S3bfEow~#>Jw#s|7i=xDuSsM)um_VYl@W8^HL@PYhx$hfz5QplD5}SM?rw}q&uCXcIX(mT{qF2 z@DqUNNY3lwdm9hBnT}p?$vAzvDE9N$U{!cK%K$~{JAnKXG)6yb^Wls?{YT6$U8x#% z13Y@|j}t&yIk@1ONhlB-%<9z$y#LS#$do68dY{?o>NmuLrL}C>DDiyf`W1MGG zsvTBPvz;$d7F$W#pcLmU^V;)HUbyvR%-`Ks6w0#o>5CKd!r;w(-j26=&Lc=LdIn`?@PF zeFlw70kD9$;uX^-!(l<8VI&P1u^vYw{b$7O$kJkyXEcML=7T03o{zKzOuv^4zy?u; z6^m*>=q9y*Ty$bSFk$N_b{oiCxn2F}P%wNFAL*s~eyOZmmMi^uR#@#5BNP1nFP=s4 zaRlZvOmH7+bV0}1XZT%`8sW{HL2D^chJ~*bxdRC=7GI91hOukW9?5yGnw_*X2}3}* zLb#Qt;keOh97F>R*Tur`Fr%Rs)K40kN15fh$-f@ssQTEp>pj_(n?Ex1|SZ zh;19KJXV7&001aOtPtXWk{EmsUayQlz+?yF_ow#0nWiAiY{K?ce`LPCdLZ4m` zsoIk#uLjbUj|^Mnw`rP=yy8`ldSW3LKY9=?;+R+AT*vJZ3!dWH2BLV;!g&9S6eh|$ zXONxls2BeJW*Z6ON8q90%>va!t)mz@mq*`|N|M_y_M8;SXD&)U<-E0(-KIp!aPc$L zqSH?&?VO8-S|G>!eQ{`h^&CxHD6S-Bl?xq2{mvhHoKCMu4bx&()@|&V*d_Xv6)KWm zS8a^CzPA*YHM0mMZU?@Q`PwPFba219LAG*LQA0k;m8orajH7Ywu><3Lp!I)GhF4!| zX~nH1Cel)~*mrrv-bZF%9lCZ$P}g7k<`xi#lct4zSR(WHugg7|T%LN$NAz6-$0;q9 zTt5H~ofi$;<4V@pD4QgYI`bgiHQgxhEsZ0fLc;(hRlDkSj*LtO|CH#EhJ2@#JFpnH z!SArC)P%?fAlu+}tFPdfJW+N?UaJFKmu>hB^Hd}blLD72Zw|Fd_ZPPBORMSOorwKg2qx1#Nv=6zmZ+6h}tWCDLJQJ_e?Hr8Q$IEyy{f=(F4vYOg0D zQ~06qBXUsBS&(;oYC{*-l_H$Vk6o4HUQTIW%s221W)+)8v5vCA?W&`F0r}jt5RcGc z5ZFp_E=sn${%zu$)vRcr%^f;)7EtIZ_d$u|S$6&#`i6u!{P)ZS1- zuSiO4gNcF!(kaqBvFifrIp=W{;{L+2BXRW}OY1g%{ejv~8iJrO82=nIUDiAm({}Of zxb7p80>Oe}ZpME{LY=a|K}%&)s(&p3^F$M9ItREK{)sKPR8D&TZvZ`Xnfd5uIYPEm zqE0>3T%n!2W}o!?ZuEVMvUwe8rFjdq$j@1Mz>*YGey~tR z!k{5>^ayg~d)lyS4nmba%h z{X{5`IuuOQVse;0Fh=2%^c8y97KPO*iuWa&M#F*`5KZ8(7s?dQbT~s5C3NMq*44&^ zO3gNzVVc81Wbpn=D9m&nO$Oi+QgSprbH6O;R0iKNXRQD;>X;E3PPu7iQCq*DS zLChi>-9GH1dy|Ns#JgIgaOTGM(Q?$0-&yX=s;oiAd2kT;6$XJBtY>O~T!egN`j|R$ zw#Ju)%xiRH*SD9j6U!2z1DHg^V_u?9>Q{nr$$R;}gPl76!C575~t%Bdc zU7**bg+#3;6`7t9YAHcuO55saRQq!$+txcU<~~Jip5M5(v1&(lWKvw(!tPa7_)TaM z^qvv!wv0UcPk1WyVBiR={wB{J&nMuIJjV&myt-9UL;0r6thrj29%`8In5jN7(u4Sk zQwndvk>O78C95WD_wa$dVN9&G(x$_y*tis(EwAMzdZNXHmkiXWl8JU@e}}a}D+MIu zmz255^g}(Rr^dTCrLv<1m{oHh=A_hGF-$Ra~X{g)z=>rPkIn7Ze{d>9K0F-rO-g zEm`NYnBZCf8O+6t3CP*X78XKQ315X+vK8whZC=@6SyNb(Jxal`;Bg@QHqQ16`914Y zQd}x}|8s2c8v!A)S;)hDb`rP|?rY@PQ%ZOv&a}zo47macgm^oT4kKMLhnP5U5uCT2 z1Euj;T0ok88oUPH7<5LAaY5T-BvV-{&VTa?1UZ7J0Ai5)UnDN0BE+EkXh<}ZpI^+i1!4y= zL`iJx*;sF-AuQx!Gar>R#R80`WJt+|SVYg54X>0wxVrM2GtL8x`d5y@yvcMzyIG%I zK1{qt4f&)A*^sq-w0{RE^6_~{SiXmZsF1D8J<--yM)Da_X$^hAaCq2bP=z5vf8caR zw3uDHr*6DF^I5?9+!beAfqpFSi(ot}YC{;8rp8j&E=-Sb*}>kI*o4#Jc1d zPqlCvH^Z~;&fRVki*K!bM6c)3HQou=OYD1N_&Q-2gMw4ocD^#7CRhpjUrHD56#Bvt z(tkeHZf$=dxEu3y>9qd6o5s>;uf(8kW|8`u5RfHECH#oZqD(&Ylv}G7$XmqG`MPTB zBiMOEPyI)|L1#E6`LElB>jV3v*+@Y@Zlp12e}1UgIyixJE*)tlf`^zne=rB3!;M8E zA;S=Tf=h8*@Iv%C(hJFkicg3FE{;|wO*4p;DvJ}Ox!sfG^1MOQ*l3wpNU!-ev z_Lk#sb`w=ch*sZ#U0~fPR}b4Yhbgb2@e=p{>3fTldMGXnOP3bDx7Mse{cbbG((#Z- z_as9fd#KjwG3E&sJoDgjmXW$0z2bx;`7b--g9|XlwV>HH>B)N)ag;{g9Qt1_QYA~F zh`MlJ=3cU4EL|D=icyP>AScpeiA9>A2s?U2MWk~ie5#!Ul5ZDU#VW1}DDTl~crJ+h~h zIOx@u7Zqd+zwTOAf*P!Jm%Kuv`7{*6F2$4KbI?F&djAMs4I->NhlKP&UPD4_63xNM zU@Rt;C&FZXQ}a%E_rgxXf_M9K^%N0rkynnFtP0nJ`N_!xFg*J5SfS;^5_z5o)=F@8 z#a&7u_-phnF-^CTkaCaEs@;n7!p&qZsx)2-8Md(14zyZ$!I;-vxHvS?c{SYEeH18f zbz5k*Srm8Pcd-0f>SF~>`NI!Z@sUN?Mr6l6TO=rAJj7T(1ok6|8zK_yTQ1)5Ii6KoeP0|$$Ty8{Zf|I zRypDvOWM@9BUQgriG2Z{gFG$TVSe^}<$u z7fo%TXzC{Eu`6nrK^B<0b31wEJ#3zIRxWof3h)bx3f;c+?Fb;{FKz9S=gue6;rL_t zi>*S5GUpz#-RO718YWLBBn)E0mZq#+m#w(d6C2(x0#ZyDFm$Oi=cc7^fM4}O`na^i zO+iSac9xj!<*CaZmqdk@GTFAj*~PkEQx`TYXxn7_3+f@=2w#;&*k0FobSqSUPH}J? z&=-L;5e22T(Rsm1t?*{r?jM|%3k*IKU7i`r>Tk~G5uX4=MA!JF{=(2cu~ z_1cs*6iEqdxS|sW1y#5ZRM7z*K^&*RNmQ5o<=yq9Z#BJfVdb z9^3%>KF-FN!gAN#8H{J5(ZJ4PzLOh{;DLNcIYdKAZ$tvDlqK3lJ=oN>2yT#r=l<&48f#-m9nszR66-fLx zIVMiP85QZh#5A>AjRDr*h)G_uo)}vPvb!1AY*o>XLni41;fEi9;LK02v}mZ^&3L&P zeSV7|UPe+VdhW13QN%@rP-D<)2jeLzmYec!sA)zzXn^hXoC85)PTlJwAWKafMUj$c zp*8Bp!42zn7P&aF6+cx!|u0km!-BGMo(fde82K zg@-z8<6Odha*age&h$2TzUT3~7)6neq{j@H@0c&j6J@7CKn@KrYy-qSaZ0v+m4!jT zQdEOUcoe4VU{PH%C3KiPRAZWV;$$EY4fZOEkQxJo%M_MA1y!*rvnBrj*0s#9S$Zeu z^^Bje-7SBwKrd=bR^4ARde4^B@BtD$yqcU|3J$AxFVbRMjmp@+aD>_kw`3$r(gc`N!wxJ-OAdGzelVL2D zki_BZb?3#Q1#E9N(0R`wJdiv2VOKIFGL-2RTQ2WcC#q0Vq3KA`yiSO$o zOq?q#sv2?HwE|h=>FQNH&dr_g_VMC@NqSiJFpj(*%Ab^A znoqt0-nBSOiehB1Vl0F9o0YH*yK5_)1f9eRKW-c z{Bamh1d^D_l23|WwINaq%r3Y1MXC{=S9SSybye)Z?&a71>uVi<3my(v& zG7jkB4U$Ybg|hKvOkG8Ukh;)AA+Q*|#2}#;FrkLOnWowqis{$6i})&ti#0o+V`4iv zR|19Iy#)X?4`NgU79eH|G>eORUZ)y&HmDWDqD9ycoXpe#;tNmJyiKT!zDq3p)4bV78Xkhwd#S9-6HP!D* zBfZvon1;>3&HmDIs2j?DdEE*psgViG(d_I%#GYSAM4@LSWWxsvs=-@a#pVtP9r$i!k1pI)3;p0^Y%<2qfLUvW>HSy9-RP&P{Vo6HwFLFnwbgjTr!W ze0~_J->f|-F{GY#Re-PMl7_9!jyMwsL~0n3N*DNAPxg~dY~QOc`*4+TyH@|ARObSd z1-1oG3(Xr_Sq^7i^9mv35D|zY#CVtipZ?15RVa3bt)4ng6YGoPJyK-9!%Gt-%fa(w z3>tR8VO44q2yuZtFq2g0?~=JAMp9i96`{56&Af@7{%;mwj-6A)qM06eE{ zJbDIUA-7B=Xd-x7BL{Tq%}ezS4MG8)MWg;4`W_7x3ba1Y6IIdwAagK>;6;loVUp-P zX;}^n4-Iip?s$k8vCZcW7qPOuBnauYqunk^(90-eG%XbnZ60+J01`)Wa}PVMWdM ze{}h7r%;Rb*S-_hJFOgLf+)y!0-5X|n4seY(`0SEDvtR9?vK9GqBJG@9U?E=ga`x0 z4}wd__*Mmzik|d{npE#CCQL^xk~eg7rjsh-}zD+t(*`*@GM%^_Y6CzAP!}G3m&EYB0K^H?KS28`WGo;)dsc zCE}xLt=e(#+LO@Nh-MTJly{Jr=~j_^63r*zTgfgv_4iP>4{O)m8jA}dtzLOqX6nuI zpCg;#paHK`eGoWfiP>u82{JI;AEwM2+>Z*~HPpO^=QADvSAt71y>Nl@zR)z&2s_wC z4>y>w;U`O&DV#z#)1%3ZrypwF*$R5=<1@!jVtt97p5=qk$*<_guCz#qHoo4(kZ(o!p zMW8-Svo~r-(?@}lMx#DlJPBNMs_|scdRcWCht&yI^4lbS>^Qx==GH-Eu+rUJ6HIVDfO{VZkpH34WK)pk5bZ0tMsI&_?s?`T~;nMsg(1*01gGCD-wnH1v`Z~ z3$(uJ%InS>#NCvU(GU`=ru8}1%ND&xQpZOCN$M(8WJ4ibFWhY;F){Qt>D;6K0BoK$ zv89yjN_%);3P+1V3lgH%?SD?x=t9pu(W0vyp5ier)S2^~&M~@KQro&WtEq=gjz ze0#BJ@4GY0gbcBlYP*!=tc=FXksfo{`YmriEnX@!aB-sxV@YLx*VyNmrg|H{!H23C`2Z)ay7ey5 zvTDIZ8Wv9VovR2%GJYuR5p4!Z^fo5U2xc%CjPgzH_j#V{y082F{(L{)Ki_M% z&F05Br?rlCoNKMUtmDl4i6Z)fj2penAKU)Vt?!RG#&pKliYbzY5i42%i7t$>j=Il! zD7Q4-dCc|dW+CFq^5*8#y^;F8(8&)*7jHH#k)*0#M@>Y#HIb^&SS21NNhA8Cr19B* z6)N~4$4P82MTJGVX$C1d)i1u;_$u8*h9SoemF?xv_fhqXjEr0>d-76T>1V`Z4}UyX zyMHwQ`d=+O5&z>V5NY6{LQAC+9GlcN<^N~a{_OJq-6{6ht&RT8QTKn#;{11b|BqJv zdF;qn6WYl`{;yh4H)>jd2)V*ja*q$&bLBj|@8%;$WdB#WC^imxDhs!< zG;6Hh=-c_QbDzI`r@{Tfy-s;C=Mx*8bMJnO?6bXmPDLkEhJ!WEe^r`_ed@`OXp+xX zT0WX#B)>i|+9d1>FSx+E8@v7Gh@Go!!3llrP>_L|<#7W)!kFPnW;cmH0spF2rOTm2 z#fIwNF#Eatv^g;R}K8jD|9+sCSwB!$vQe);WmiSFNw zw?D4hG{HmiG~lR#t7yci(9%MKjd3%k$LLRWoq>TleQv0BmUgY zF~&ag?*U~PXEb9pD#Y>eZ}GJlV5#0>E;QhxF8 zW2KJ+Cd|xf#@Glc=@wi=a|?ba>k{Vxxx26Ado{^T5G?uP32)DoI-u_Eh#ld)*^JaQc0j|`kcPk%gd=eHRbu3#voF6?% zl^La0$fd5}9TpN2&>nu?C04^wbb#p+yT~|J>G_*-uE@zzIQ5u;8nchaK>=}pW%~U*`f>LbO{d#WtPV=gFzGH) zfe%mNGS%rmm`R1hvuQT#H>NR~QMV=cRCFZId2ar$YR1k&Abm#6gBM_Behcwvl;I#%>ItmFrA%lN$+W%BV5GL zGjcYycTytds#T@GH+Sj}2BG7^uT9HE!wJxumMt%b@cab0+wXR0(MDYODrjw%k?+{j z7Ppe;_Y4&^ar{0p#JT(RG0w9mq%-&w1uu|QKw5Tmg~22H<2D5H@TgUmmT;$Jfkg6SBt|}^QCK`FCf_d z57uc^=y;dYW8W@XKbREx>a>A6VB`$bdbI2ikovQ+O@*lqJ&QhGJz|(yW*p~;2hr=u z>oi2Lz@%w7Hxr(VieE=K&^itN;3>Tl*D1zn3)t^Of#~BV1`?(NwTj;Fo$ll>zZrj_ z#m!jCLDho=-%@ZqD<%!2stLr@@U+?g^bX}qQwydwFpjYa&wu7nY9Iac>PMl&bgdbwbl|niV5yM+y?)w zdcJm!@=>aFlqG|If}K7)m$wdxSO#H+>#cujZo=x1d;BdB!P`6@Tbvn@2AVLx>ZT(h zl+IWeHJjV*sB9R;Bdr}*&pkZB`Hh!%s<8A%-o?}o*68gBHY(@J+hG2>P5tM8Oa6Jr zaiTy_`+HMuiPd8}$|mB#%x(`$fspA?(a`}h&7wmmv(yiuV4ik4c1 zxleS&lZE3S=n$uG`yrSEck6>F-5MvqS-Tok=XSgoUQG-dCsHm1;Fn)jKv){BuDRPdQdv&kP z9u8mn;bEnIIQ(Iure%;GiCl6U{1r9!;6az>VL?Ky+viSKem7_WCH>YV_yK6UNmEgd z52GYI|1M_*q5{t>&e`Nu|Ggcu-tbw4YJqtg+H5;rDu{^+3sBbxxnqfCD!8GBuPPVS zx`=dGhWObOy=+O+z<0}Ei}j|J-~ugy29d%zd)ij_db{5H(0rWzH1KI*7NldZQ_ycj zSh()l(NC88J=IWYxPOLOW(vrMEBEKXh zO9Gn!cZkAs`$cBHpFke(wp{ATL%I%nlrF;v?Z*hG&_d%}2R!o-NDB}BN(rji7`VJ3 zLkQ8@KRrU9|3ae|qn!)e;McQOm)xNJ5AlpC6_{vwOoab=1IWHQhp)SW zK9`}9w9d13T9X+XjyQV=&%1T@BXpLvsP?TFmw)xrSy(_j>R{_?&qBoR7?+A=-?i|R zoM)khEXW^cL*}993CPp&Hsol7G!M!M3&v@reKL+k(mzF z2+K~?6y*iq4WDNF^|`ai!L?&0t*vvb!1-YE{T_O<0DJP=?Qif|$geAe(RSoAE7)dz zfaF0Gf~YiL|Jn?CuxCub34@Fbp0DOGCaCP`1(Y!%GyhY&oq}*qG-3Tj-@le zVJ$9>r~BREt8UbbY&JYW(Nx$9uV9PQvtBnjaaXuASv^Y@>PdHaP|hPD>M*k(O1;45 zf%OZo>>zmUBG0g?yz^SDr!e#-^h1|72PRs`V(TcbBF6BozEqw}Rj zB;Ej@+$V$KUgYC{LwXfI&|-|f?Xr1Y*wrPs`J%;a;NvzX?EwG#GB;*Xqfw>$QT}|O zc0g;eATU;A%(*39@>zAdsO(53ykE_+;YyOZy5+1E z3;g`ZmMrY*x-DN8hijFV>-NVjNM>00JU6e>d|rVfsGy)6+Z38-YGt)5N;l2^9Jh!} z4#rzkALlk`X6tPJ`Z+P>I_VvC{-&|;(5Q%4(bMUZms-e_j_H&6!cTWG-%oVUwi*ue za_{ZgPfJY&O?vZ*0ibrK2YJDPK(}9b%;4+^K!-h znqu}<1Bq}Euw$XKS`NmrR>lp}lu2+d^!~;9jQOyE6vS+iyu=^=5<76-a%Kg^8M<;d zt$u2_(v=1YtLiB4Sn|vI$-6o-6HZYSAo}jfg0HBNvJv0g&>*y)B61<>w|&K&m==uK z(elXXWciaUM;ka;iN;f zX!H$lqh>8qK!sm?{fxPBxuTtofH)kUt4rC`OdTPO%xLZZ_@cf96}4Ez8%nX&_ysgb5cB}d1ty2MDxbL!XM2Obq-=Ce84ho%6S!a%)zqa z9%Winix=xYH8JdRvSH3|Bu>(mOZT+GJNjJ1E3!EF0k$JikU|}&s@P7&A*ol@Pie5e z&bs0@s|8Q7!OM3hu0+o6ep*^i0wz2?yh|P&-VWy0kDz%5n3yo*7LtvZZ#EaC)43U0 zj=LOQ+UI&cU?n)`bcPL{zau*CBDOYMv#Inbc5= z&jdw}n?f#CZVw&x=~N6VNk{at?MxO@p4Y2 z7~3s)+ne`^-5F=3J^ZkB35@LF@h5F4iR?hot#7w&m$&N%uB7iYIi=~$=I|B4+n=S= zYmy7L{G>=m4odg~+aM9;Ul09@L^@H6)i$0-cqjH-EX%nTk2Z?=P8V4$1+>+dFk7kH z;fuC@iH7RW+~Y%&^2>IZnrb}?Jy+FZW9&~s%;0+4O-4&#F*6&fv#I@1aG^t~0K=`X z=Qn8P3h(Z96Ceeb=DeTquv~C$f+vi?xsC(@=e~^ecruZsoBZ6KCQu6Nj99fQ=O(FB z^*i4f58PpscFdp2Z+f*LYIG9-DTwSW`2lf^Zu^(T|xHJ zEsgvs-x6V?{y@pr$Nb%X+kq=z8Lc_*pbqnR6>Sn43oSc;QeCwWkf6dfoW1T)^w5_Wf<$knFAp3! zX(BoM8dZnLLiqK(lo!m)$Y=qa4jb#6TV*nez6H58Gmk!b#;T;JUMBCNhZHA+DvL>2 zA{VQ()GdA65yXeL2NEy4iUVAPk7@P;CC;}LqA)qB=xYe+zaE7@f9-}}9zPQ-_9gfZLfkrqL=Bu|n-r`h$)-BoPh-X-=R75^rI=L7?Bi5!rZ_v@cJrw30Fs`GW z^pvv4^E9>e&?(c)vic`g>*INoC9mh5YR+~avGtFi2R%-?>QQAS%uE+8oD)BfXqE)i z3oXV;?H)c0HzVN6M~*d<<9y#uajxjTX9DlI{jPCc4pL`^D4dTfw7uH=U7qegYe>@=ry0q(O;xLR#&)nEep%Nr zUSRpDo`AkqGp48-Yl^rcw1F-|Y#}3d-x+HgxO*r!JGi&Kgn1-S6nxxX<9q>#`9� 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%0D^1wF)zL?u|U1w2rsw3XgCG* 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 Job*K*SA@sJ(i4H5&xtO#t^zV)^ZQ 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 Ze-KQj39q)1du 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 literal 0 HcmV?d00001 diff --git a/docs/dusknet/4-cloud-rollup-deployment.md b/docs/dusknet/cloud-rollup-deployment/1-digital-ocean.md similarity index 72% rename from docs/dusknet/4-cloud-rollup-deployment.md rename to docs/dusknet/cloud-rollup-deployment/1-digital-ocean.md index 3ac0dac0..14b6220b 100644 --- a/docs/dusknet/4-cloud-rollup-deployment.md +++ b/docs/dusknet/cloud-rollup-deployment/1-digital-ocean.md @@ -1,14 +1,19 @@ --- -sidebar_position: 4 +sidebar_position: 1 --- -# Cloud Rollup Deployment +# Digital Ocean + +Deploy your rollup to Digital Ocean. + +:::info +The list of local dependencies for the following instructions [can be found here](/docs/dusknet/1-overview.md). +::: The following assumes you are using [Digital Ocean Kubernetes (DOKS)](https://www.digitalocean.com/products/kubernetes). -We recommend using Digital Ocean's Kubernetes [Quick Start -Guide](https://docs.digitalocean.com/products/kubernetes/getting-started/quickstart/). +We recommend using Digital Ocean's Kubernetes [Quick Start Guide](https://docs.digitalocean.com/products/kubernetes/getting-started/quickstart/). :::warning You must use at least a 2 node cluster. @@ -25,19 +30,19 @@ kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/cont ## Configure Your Own Domain -:::tip You must configure a DNS record because our ingress configuration uses -name based virtual routing: - +:::tip +You must configure a DNS record because our ingress configuration uses name based virtual routing: https://kubernetes.io/docs/concepts/services-networking/ingress/#name-based-virtual-hosting. ::: Follow the instructions here: - - This is where you will set `` + ## Digital Ocean Loadbalancer Look for a new loadbalancer being created in the Digital Ocean console: - +https://cloud.digitalocean.com/networking/load_balancers You can also check that your Digital Ocean load balancer was created using the following command: @@ -55,13 +60,11 @@ ingress-nginx-controller-admission ClusterIP 10.245.106.99 ``` ## Set up an `A` Record for your Load Balancer - Follow the steps here to set up an `A` record for DNS: - :::tip -When configuring the `A` record for DNS, the `directs to` value should specify -the `loadbalancer` which was created by the `nginx-ingress-controller`. +When configuring the `A` record for DNS, the `directs to` value should specify the `loadbalancer` which was created by the `nginx-ingress-controller`. ::: ## Endpoints @@ -78,6 +81,10 @@ Endpoints for the remote cluster are the following: ## Update the `helm` Chart +:::tip +You can see an example of these changes in [this PR here](https://github.com/astriaorg/dev-cluster/pull/119/files). +::: + :::danger Deploying a rollup to a cloud provider requires manual changes to the `helm` charts. Because the default `localdev.me` hostname will not work on a cloud @@ -85,15 +92,12 @@ provider. ::: Pull the [Astria dev-cluster repo](https://github.com/astriaorg/dev-cluster): - ```bash git clone git@github.com:astriaorg/dev-cluster.git cd dev-cluster ``` -Within the dev-cluster repo, update the ingress template -`chart/rollup/templates/ingress.yaml` so that each hostname ends in -`` instead of `localdev.me` +Within the dev-cluster repo, update the ingress template `chart/rollup/templates/ingress.yaml` so that each hostname ends in `` instead of `localdev.me` ```bash ... @@ -117,37 +121,28 @@ metadata: kubernetes.io/ingress.class: nginx ``` -:::tip -You can see an example of these changes in [this PR here](https://github.com/astriaorg/dev-cluster/pull/119/files). -::: - ## Creating your own Genesis Account You can add genesis account(s) to your rollup during configuration. -You can create an account using +You can create an account using: ```bash cast w new ``` -to create a new account: - ```bash Successfully created new keypair. Address: 0xfFe9...5f8b # Private key: 0x332e...a8fb # ``` -You can then `export` the genesis accounts like so: - +`export` the genesis address: ```bash -export ROLLUP_GENESIS_ACCOUNTS=:100000000000000000000 +export GENESIS_ADDRESS= ``` -Set `` to the address printed out from the new command, and -`export` the private key to the env vars using: - +`export` the genesis private key: ```bash export ROLLUP_FAUCET_PRIV_KEY= ``` @@ -155,14 +150,12 @@ export ROLLUP_FAUCET_PRIV_KEY= Exporting the genesis account(s) is also shown in the export block in the next section. :::danger -__NEVER__ use a private key you use on a live network. +__NEVER__ use a private key you use on a live network. ::: ## Get and Build the `astria-cli` -Pull the [Astria repo](https://github.com/astriaorg/astria). - -Build the `astria-cli` +Pull the [Astria repo](https://github.com/astriaorg/astria) and build the `astria-cli` ```bash git clone git@github.com:astriaorg/astria.git @@ -170,10 +163,6 @@ cd astria just install-cli ``` -Keep track of this block height as it will be used for making the rollup config -later on. You will use this printed height in place of -`` in the steps below. - ## Using the `astria-cli` ### Get Current Sequencer Block Height @@ -183,9 +172,12 @@ astria-cli sequencer blockheight get \ --sequencer-url https://rpc.sequencer.dusk-1.devnet.astria.org/ ``` -Save the returned value for later. You will replace the -`` tag in the following sections with this -value. +`export` the initial sequencer block height as an environment variable: +```bash +export INITIAL_SEQUENCER_BLOCK_HEIGHT= +``` + +## Create Rollup Config Replace the tags in the commands and env vars below, as follows: @@ -193,9 +185,8 @@ Replace the tags in the commands and env vars below, as follows: |-----|-----|-----| | `` | String | The name of your rollup | | `` | u64 | The id of your network | -| `` | u64 | The height of the sequencer (found above) | -| `` | [u8; 40] | A wallet address | -| `` | u64 | A balance. It is useful to make this a large value. | +| `` | u64 | A balance. We recommend using `100000000000000000000`. | + -## Create Rollup Config - You can use environment variables to set the configuration for the rollup -config creation. Replace all the `<>` tags with their corresponding values. +config creation. Replace all the `<>` tags with their corresponding values. ```bash export ROLLUP_USE_TTY=true @@ -215,8 +204,8 @@ export ROLLUP_LOG_LEVEL=DEBUG export ROLLUP_NAME= export ROLLUP_NETWORK_ID= export ROLLUP_SKIP_EMPTY_BLOCKS=false -export ROLLUP_GENESIS_ACCOUNTS=: -export ROLLUP_SEQUENCER_INITIAL_BLOCK_HEIGHT= +export ROLLUP_GENESIS_ACCOUNTS=$GENESIS_ADDRESS: +export ROLLUP_SEQUENCER_INITIAL_BLOCK_HEIGHT=$INITIAL_SEQUENCER_BLOCK_HEIGHT export ROLLUP_SEQUENCER_WEBSOCKET=wss://rpc.sequencer.dusk-1.devnet.astria.org/websocket export ROLLUP_SEQUENCER_RPC=https://rpc.sequencer.dusk-1.devnet.astria.org ``` @@ -256,7 +245,6 @@ config: ``` Export this file to the env vars as follows: - ```bash export ROLLUP_CONF_FILE=-rollup-conf.yaml ``` @@ -291,8 +279,7 @@ You __must__ have modified your local `helm` chart to use your own domain name as described in [this section here](#update-the-helm-chart). ::: -Because you needed to modify the host names inside your ingress template you -must deploy your rollup using your local chart: +Because you needed to modify the host names inside your ingress template you must deploy your rollup using your local chart: ```bash export ROLLUP_CHART_PATH="/your_path_to/dev-cluster/charts/rollup" @@ -341,19 +328,9 @@ kubectl logs $GETH_POD_NAME -c conductor ``` ```bash -2023-10-16T20:49:16.858852Z INFO run_until_stopped: astria_conductor::executor: - executed sequencer block sequencer_block_hash=Hash::Sha256 - (93C233F2A2A109FF6CC3162A98916BECAE6D8EC43520C995E82B6D1F2B2742EF) - sequencer_block_height=423755 - execution_block_hash="2d8b2219a30ea4cc409347320f377de937b9ca2425f670c4f913724a2d53b2aa" -2023-10-16T20:49:18.922694Z INFO run_until_stopped: astria_conductor::executor: - executing block with given parent block height=423756 - parent_block_hash="2d8b2219a30ea4cc409347320f377de937b9ca2425f670c4f913724a2d53b2aa" -2023-10-16T20:49:18.926380Z INFO run_until_stopped: astria_conductor::executor: - executed sequencer block sequencer_block_hash=Hash::Sha256 - (EAD8701CB15D9B487DC7400ABC2FCB7A4F7E09E09F39D4D6B8FA97B74B5EC50F) - sequencer_block_height=423756 - execution_block_hash="de20c29febc808b7a2ded8513eb23be116fe441745ccf62d1366b4b9bb160d04" +2023-10-16T20:49:16.858852Z INFO run_until_stopped: astria_conductor::executor: executed sequencer block sequencer_block_hash=Hash::Sha256(93C233F2A2A109FF6CC3162A98916BECAE6D8EC43520C995E82B6D1F2B2742EF) sequencer_block_height=423755 execution_block_hash="2d8b2219a30ea4cc409347320f377de937b9ca2425f670c4f913724a2d53b2aa" +2023-10-16T20:49:18.922694Z INFO run_until_stopped: astria_conductor::executor: executing block with given parent block height=423756 parent_block_hash="2d8b2219a30ea4cc409347320f377de937b9ca2425f670c4f913724a2d53b2aa" +2023-10-16T20:49:18.926380Z INFO run_until_stopped: astria_conductor::executor: executed sequencer block sequencer_block_hash=Hash::Sha256(EAD8701CB15D9B487DC7400ABC2FCB7A4F7E09E09F39D4D6B8FA97B74B5EC50F) sequencer_block_height=423756 execution_block_hash="de20c29febc808b7a2ded8513eb23be116fe441745ccf62d1366b4b9bb160d04" ``` ## Observe your Deployment @@ -362,24 +339,12 @@ Your rollups utility endpoints are as follows: | Utility | URL | |-----|-----| -| Block Explorer | `http://blockscout../` | -| Faucet | `http://faucet../` | -| RPC | `http://executor../` | +| Block Explorer | http://blockscout../ | +| Faucet | http://faucet../ | +| RPC | http://executor../ | Open the URLs in your browser to view your running rollup. -## Debug Ingress - -If you would like to view the ingress logs you can use the following: - -```bash -kubectl get po -n ingress-nginx -# get the name of one of the pods -export INGRESS_POD_1=ingress-nginx-controller-6d6559598-ll8gv -# view the logs -kubectl logs $INGRESS_POD_1 -n ingress-nginx -``` - ## Use `cast` to Interact with your Rollup ```bash @@ -410,9 +375,9 @@ cast balance $REC_ADDR ## Fund you Sequencer Account -Using your sequencer pub key you created in the [Create a New Sequencer -Account](#create-new-sequencer-account), copy and past the +Using your sequencer pub key you created in the +[Create a New Sequencer Account](#create-new-sequencer-account) section, copy and past the `` into the input on the faucet page, and mint funds to your account: -![Sequencer Faucet](./assets/sequencer-faucet.png) +![Sequencer Faucet](../assets/sequencer-faucet.png) diff --git a/docs/dusknet/cloud-rollup-deployment/2-azure.md b/docs/dusknet/cloud-rollup-deployment/2-azure.md new file mode 100644 index 00000000..35d57cc6 --- /dev/null +++ b/docs/dusknet/cloud-rollup-deployment/2-azure.md @@ -0,0 +1,365 @@ +--- +sidebar_position: 2 +--- + +# Azure + +Deploy your rollup to Azure. + +:::info +The list of local dependencies for the following instructions [can be found here](/docs/dusknet/1-overview.md). +::: + +## Create an Azure Account + +Create your account here: +- + +## Install Azure `az` CLI + +Following the instructions on how to install the cli for your OS here: +- + +## AKS Quickstart + +See the quickstart guide here: +- + +### Prerequisites + +```bash +az provider show -n Microsoft.OperationsManagement -o table +az provider show -n Microsoft.OperationalInsights -o table +``` + +```bash +az provider register --namespace Microsoft.OperationsManagement +az provider register --namespace Microsoft.OperationalInsights +``` + +### Create Resource Group + +```bash +az group create --name myResourceGroup --location eastus +``` + +### Create Cluster + +```bash +az aks create -g myResourceGroup -n myAKSCluster --enable-managed-identity --node-count 1 --generate-ssh-keys +``` + +### Configure Kubectl + +```bash +az aks get-credentials --resource-group myResourceGroup --name myAKSCluster +``` + +## Setup Ingress Controller + +### Deploy Nginx Ingress Controller + + + +```bash +kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.8.2/deploy/static/provider/cloud/deploy.yaml +``` + +## Verify Loadbalancer with external IP + +Run the following command: +```bash +kubectl get svc -n ingress-nginx +``` + +You should see something like this: + +```bash +NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE +ingress-nginx-controller LoadBalancer 34.118.228.98 34.42.184.206 80:31623/TCP,443:31357/TCP 57s +ingress-nginx-controller-admission ClusterIP 34.118.229.71 443/TCP 57s +``` + +## Create an `A` Record + +Creating an `A` record will depend on where you purchased your domain from. Each +domain provider will have different steps required to set up an A record. + +An example (for Google domains) can be seen here: +- + +:::danger +You must configure a DNS record because our ingress configuration uses name +based virtual routing. +More info here: https://kubernetes.io/docs/concepts/services-networking/ingress/#name-based-virtual-hosting +::: + +## Creating your own Genesis Account + +You can add genesis account(s) to your rollup during configuration. + +You can create an account using + +```bash +cast w new +``` + +to create a new account: + +```bash +Successfully created new keypair. +Address: 0xfFe9...5f8b # +Private key: 0x332e...a8fb # +``` + +`export` the genesis address: +```bash +export GENESIS_ADDRESS= +``` + +`export` the genesis private key: +```bash +export ROLLUP_FAUCET_PRIV_KEY= +``` + +Exporting the genesis account(s) is also shown in the export block in the next section. + +:::danger +__NEVER__ use a private key you use on a live network. +::: + +## Configure and Deploy Rollup + +### Update the `helm` Chart + +:::tip +You can see an example of these changes in [this PR here](https://github.com/astriaorg/dev-cluster/pull/119/files). +::: + +Pull the [Astria dev-cluster repo](https://github.com/astriaorg/dev-cluster): +```bash +git clone git@github.com:astriaorg/dev-cluster.git +cd dev-cluster +``` + +Within the dev-cluster repo, update the ingress template +`chart/rollup/templates/ingress.yaml` so that each hostname ends in +`` instead of `localdev.me` + +```yaml +... +- host: executor.{{ .Values.config.rollup.name }}. +... +- host: ws-executor.{{ .Values.config.rollup.name }}. +... +- host: faucet.{{ .Values.config.rollup.name }}. +... +- host: blockscout.{{ .Values.config.rollup.name }}. +... +``` + +Add an IngressClass so that the `metadata` section in the same file looks like: + +```yaml +metadata: + name: {{ .Values.config.rollup.name }}-ingress + namespace: {{ .Values.namespace }} + annotations: + kubernetes.io/ingress.class: nginx +``` + +## Install the `astria-cli` + +Pull the [Astria repo](https://github.com/astriaorg/astria) and install the `astria-cli` + +```bash +git clone git@github.com:astriaorg/astria.git +cd astria +just install-cli +``` + +### Get Current Sequencer Block Height + +```bash +astria-cli sequencer blockheight get \ + --sequencer-url https://rpc.sequencer.dusk-1.devnet.astria.org/ +``` + +`export` the initial sequencer block height as an environment variable: +```bash +export INITIAL_SEQUENCER_BLOCK_HEIGHT= +``` + +## Create Rollup Config + +Replace the tags in the commands and env vars below, as follows: + +| Var Name | Var Type | Description | +|-----|-----|-----| +| `` | String | The name of your rollup | +| `` | u64 | The id of your network | +| `` | u64 | A balance. We recommend using `100000000000000000000`. | + + + + + +You can use environment variables to set the configuration for the rollup +config creation. Replace all the `<>` tags with their corresponding values. + +```bash +export ROLLUP_USE_TTY=true +export ROLLUP_LOG_LEVEL=DEBUG +export ROLLUP_NAME= +export ROLLUP_NETWORK_ID= +export ROLLUP_SKIP_EMPTY_BLOCKS=false +export ROLLUP_GENESIS_ACCOUNTS=$GENESIS_ADDRESS: +export ROLLUP_SEQUENCER_INITIAL_BLOCK_HEIGHT=$INITIAL_SEQUENCER_BLOCK_HEIGHT +export ROLLUP_SEQUENCER_WEBSOCKET=wss://rpc.sequencer.dusk-1.devnet.astria.org/websocket +export ROLLUP_SEQUENCER_RPC=https://rpc.sequencer.dusk-1.devnet.astria.org +``` + +Once the environment variables shown above are set, run the following command to +create the rollup config: +```bash +astria-cli rollup config create +``` + +You can then run: + +```sh +cat -rollup-conf.yaml +``` + +to print out the config file contents to double check everything: + +```sh +config: + useTTY: true + logLevel: DEBUG + rollup: + name: + chainId: # derived from rollup name + networkId: + skipEmptyBlocks: true + genesisAccounts: + - address: 0x + balance: '' + sequencer: + initialBlockHeight: + websocket: ws://rpc.sequencer.dusk-1.devnet.astria.org/websocket + rpc: http://rpc.sequencer.dusk-1.devnet.astria.org + celestia: + fullNodeUrl: http://celestia-service:26658 +``` + +Export this file to the env vars as follows: +```bash +export ROLLUP_CONF_FILE=-rollup-conf.yaml +``` + +## Create new sequencer account + +```bash +astria-cli sequencer account create +``` + +```bash +Create Sequencer Account + +Private Key: "5562...1622" # +Public Key: "ec20...f613" # +Address: "8a2f...5f68" +``` + +Keep track of the `` as it will be used with the +Faucet later on for funding your sequencer account. + +Export your sequencer private key as an environment variable. + +```bash +export SEQUENCER_PRIV_KEY=9c78...710d +``` + +### Create Namespace + +```bash +kubectl apply -f kubernetes/namespace.yml +``` + +### Use locally modified chart + +:::danger +You __must__ have modified your local `helm` chart to use your own domain name +as described in [this section here](#update-the-helm-chart). +::: + +Because you needed to modify the host names inside your ingress template you must deploy your rollup using your local chart: + +```bash +export ROLLUP_CHART_PATH="/your_path_to/dev-cluster/charts/rollup" +``` + +### Deploy the Rollup Node + +Use the `astria-cli` to deploy the node. + +```bash +astria-cli rollup deployment create \ + --config $ROLLUP_CONF_FILE \ + --faucet-private-key $ROLLUP_FAUCET_PRIV_KEY \ + --sequencer-private-key $SEQUENCER_PRIV_KEY +``` + +## Observe your Deployment + +Your rollups utility endpoints are as follows: + +| Utility | URL | +|-----|-----| +| Block Explorer | http://blockscout../ | +| Faucet | http://faucet../ | +| RPC | http://executor../ | + +Open the URLs in your browser to view your running rollup. + +## Use `cast` to Interact with your Rollup + +```bash +export ETH_RPC_URL=http://executor../ +``` + +```bash +cast block 0 +``` + +Use an address of your choice. + +```bash +export REC_ADDR= +``` + +```bash +cast balance $REC_ADDR +``` + +```bash +cast send $REC_ADDR --value 10000000000000000000 --private-key $ROLLUP_FAUCET_PRIV_KEY +``` + +```bash +cast balance $REC_ADDR +``` + +## Fund you Sequencer Account + +Using your sequencer pub key you created in the +[Create a New Sequencer Account](#create-new-sequencer-account) section, copy and past the +`` into the input on the faucet page, and mint funds +to your account: + +![Sequencer Faucet](../assets/sequencer-faucet.png) diff --git a/docs/dusknet/cloud-rollup-deployment/3-gcp.md b/docs/dusknet/cloud-rollup-deployment/3-gcp.md new file mode 100644 index 00000000..14b29cb8 --- /dev/null +++ b/docs/dusknet/cloud-rollup-deployment/3-gcp.md @@ -0,0 +1,398 @@ +--- +sidebar_position: 3 +--- + +# GCP + +Deploy your rollup to GCP. + +:::info +The list of local dependencies for the following instructions [can be found here](/docs/dusknet/1-overview.md). +::: + +## Create a GCP (Google) Account + +Follow instructions here: + +## Install GCP `gcloud` CLI + +Find the correct cli for your OS here: + + +## Authenticate the CLI + +Following instructions here: + + +```bash +gcloud auth login +``` + +## Create a Google Cloud Project + +See the full instructions here: +- + +We recommend using the cli commands, which can be found on the above page by selecting +the `gcloud` tabs within the instructions: + +```bash +gcloud projects create PROJECT_ID +``` + +## Set Default Project + +```bash +gcloud config set project PROJECT_ID +``` + +## Enable Billing + +See the following page for setting up a billing account that suits your needs: +- + +## Enable GKE API + +```bash +gcloud services enable container.googleapis.com +``` + +## GKE Quickstart + +Follow the Quickstart guide to create your GKE cluster: +- + +### Create a GKE Cluster + +```bash +gcloud container clusters create-auto hello-cluster \ + --region=us-central1 +``` + +## Configure Kubectl for your GKE Cluster + +:::danger +Due to https://github.com/kubernetes/kubectl/issues/1338 you must run the following commands before configuring your cluster’s credentials, otherwise `helm` will not work. + +```bash +gcloud components install gke-gcloud-auth-plugin +export USE_GKE_GCLOUD_AUTH_PLUGIN=True +``` +::: + +Configure your credentials: + +```bash +gcloud container clusters get-credentials hello-cluster \ + --region us-central1 +``` + +## Deploy Ingress Nginx Controller + +See the Kubernetes GCE-GKE nginx installation guid here: +- + +```bash +kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.8.2/deploy/static/provider/cloud/deploy.yaml +``` + +## Verify Loadbalancer with external IP + +Run the following command: +```bash +kubectl get svc -n ingress-nginx +``` + +You should see something like this: + +```bash +NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE +ingress-nginx-controller LoadBalancer 34.118.228.98 34.42.184.206 80:31623/TCP,443:31357/TCP 57s +ingress-nginx-controller-admission ClusterIP 34.118.229.71 443/TCP 57s +``` + +## Create an `A` Record + +Creating an `A` record will depend on where you purchased your domain from. Each +domain provider will have different steps required to set up an A record. + +An example (for Google domains) can be seen here: +- + +:::danger +You must configure a DNS record because our ingress configuration uses name +based virtual routing. +More info here: https://kubernetes.io/docs/concepts/services-networking/ingress/#name-based-virtual-hosting +::: + +## Creating your own Genesis Account + +You can add genesis account(s) to your rollup during configuration. + +You can create an account using + +```bash +cast w new +``` + +to create a new account: + +```bash +Successfully created new keypair. +Address: 0xfFe9...5f8b # +Private key: 0x332e...a8fb # +``` + +`export` the genesis address: +```bash +export GENESIS_ADDRESS= +``` + +`export` the genesis private key: +```bash +export ROLLUP_FAUCET_PRIV_KEY= +``` + +Exporting the genesis account(s) is also shown in the export block in the next section. + +:::danger +__NEVER__ use a private key you use on a live network. +::: + +## Configure and Deploy Rollup + +### Update the `helm` Chart + +Pull the [Astria dev-cluster repo](https://github.com/astriaorg/dev-cluster): +```bash +git clone git@github.com:astriaorg/dev-cluster.git +cd dev-cluster +``` + +Within the dev-cluster repo, update the ingress template +`chart/rollup/templates/ingress.yaml` so that each hostname ends in +`` instead of `localdev.me` + +```yaml +... +- host: executor.{{ .Values.config.rollup.name }}. +... +- host: ws-executor.{{ .Values.config.rollup.name }}. +... +- host: faucet.{{ .Values.config.rollup.name }}. +... +- host: blockscout.{{ .Values.config.rollup.name }}. +... +``` + +Add an IngressClass so that the `metadata` section in the same file looks like: + +```yaml +metadata: + name: {{ .Values.config.rollup.name }}-ingress + namespace: {{ .Values.namespace }} + annotations: + kubernetes.io/ingress.class: nginx +``` + +:::tip +You can see an example of these changes in [this PR here](https://github.com/astriaorg/dev-cluster/pull/119/files). +::: + +## Install the `astria-cli` + +Pull the [Astria repo](https://github.com/astriaorg/astria) and install the `astria-cli` + +```bash +git clone git@github.com:astriaorg/astria.git +cd astria +just install-cli +``` + +### Get Current Sequencer Block Height + +```bash +astria-cli sequencer blockheight get \ + --sequencer-url https://rpc.sequencer.dusk-1.devnet.astria.org/ +``` + +`export` the initial sequencer block height as an environment variable: +```bash +export INITIAL_SEQUENCER_BLOCK_HEIGHT= +``` + +## Create Rollup Config + +Replace the tags in the commands and env vars below, as follows: + +| Var Name | Var Type | Description | +|-----|-----|-----| +| `` | String | The name of your rollup | +| `` | u64 | The id of your network | +| `` | u64 | A balance. We recommend using `100000000000000000000`. | + + + + + +You can use environment variables to set the configuration for the rollup +config creation. Replace all the `<>` tags with their corresponding values. + +```bash +export ROLLUP_USE_TTY=true +export ROLLUP_LOG_LEVEL=DEBUG +export ROLLUP_NAME= +export ROLLUP_NETWORK_ID= +export ROLLUP_SKIP_EMPTY_BLOCKS=false +export ROLLUP_GENESIS_ACCOUNTS=$GENESIS_ADDRESS: +export ROLLUP_SEQUENCER_INITIAL_BLOCK_HEIGHT=$INITIAL_SEQUENCER_BLOCK_HEIGHT +export ROLLUP_SEQUENCER_WEBSOCKET=wss://rpc.sequencer.dusk-1.devnet.astria.org/websocket +export ROLLUP_SEQUENCER_RPC=https://rpc.sequencer.dusk-1.devnet.astria.org +``` + +Once the environment variables shown above are set, run the following command to +create the rollup config: +```bash +astria-cli rollup config create +``` + +You can then run: + +```sh +cat -rollup-conf.yaml +``` + +to print out the config file contents to double check everything: + +```sh +config: + useTTY: true + logLevel: DEBUG + rollup: + name: + chainId: # derived from rollup name + networkId: + skipEmptyBlocks: true + genesisAccounts: + - address: 0x + balance: '' + sequencer: + initialBlockHeight: + websocket: ws://rpc.sequencer.dusk-1.devnet.astria.org/websocket + rpc: http://rpc.sequencer.dusk-1.devnet.astria.org + celestia: + fullNodeUrl: http://celestia-service:26658 +``` + +Export this file to the env vars as follows: +```bash +export ROLLUP_CONF_FILE=-rollup-conf.yaml +``` + +## Create new sequencer account + +```bash +astria-cli sequencer account create +``` + +```bash +Create Sequencer Account + +Private Key: "5562...1622" # +Public Key: "ec20...f613" # +Address: "8a2f...5f68" +``` + +Keep track of the `` as it will be used with the +Faucet later on for funding your sequencer account. + +Export your sequencer private key as an environment variable. + +```bash +export SEQUENCER_PRIV_KEY=9c78...710d +``` + +### Create Namespace + +```bash +kubectl apply -f kubernetes/namespace.yml +``` + +### Use locally modified chart + +:::danger +You __must__ have modified your local `helm` chart to use your own domain name +as described in [this section here](#update-the-helm-chart). +::: + +Because you needed to modify the host names inside your ingress template you must deploy your rollup using your local chart: + +```bash +export ROLLUP_CHART_PATH="/your_path_to/dev-cluster/charts/rollup" +``` + +### Deploy the Rollup Node + +Use the `astria-cli` to deploy the node. + +```bash +astria-cli rollup deployment create \ + --config $ROLLUP_CONF_FILE \ + --faucet-private-key $ROLLUP_FAUCET_PRIV_KEY \ + --sequencer-private-key $SEQUENCER_PRIV_KEY +``` + +## Observe your Deployment + +Your rollups utility endpoints are as follows: + +| Utility | URL | +|-----|-----| +| Block Explorer | http://blockscout../ | +| Faucet | http://faucet../ | +| RPC | http://executor../ | + +Open the URLs in your browser to view your running rollup. + + + +## Use `cast` to Interact with your Rollup + +```bash +export ETH_RPC_URL=http://executor../ +``` + +```bash +cast block 0 +``` + +Use an address of your choice. + +```bash +export REC_ADDR= +``` + +```bash +cast balance $REC_ADDR +``` + +```bash +cast send $REC_ADDR --value 10000000000000000000 --private-key $ROLLUP_FAUCET_PRIV_KEY +``` + +```bash +cast balance $REC_ADDR +``` + +## Fund you Sequencer Account + +Using your sequencer pub key you created in the +[Create a New Sequencer Account](#create-new-sequencer-account) section, copy and past the +`` into the input on the faucet page, and mint funds +to your account: + +![Sequencer Faucet](../assets/sequencer-faucet.png) diff --git a/docs/dusknet/cloud-rollup-deployment/4-aws.md b/docs/dusknet/cloud-rollup-deployment/4-aws.md new file mode 100644 index 00000000..8844f551 --- /dev/null +++ b/docs/dusknet/cloud-rollup-deployment/4-aws.md @@ -0,0 +1,366 @@ +--- +sidebar_position: 4 +--- + +# AWS + +Deploy your rollup to AWS. + +:::info +The list of local dependencies for the following instructions [can be found here](/docs/dusknet/1-overview.md). +::: + +## Create an AWS Account + + + +## Install `aws` CLI + +Installation links for your OS can be found here: +- + +## Create an Access Key + +To create an access key, follow the instructions here: +- + +:::danger +This doesn’t follow best security practices, do not do this on an important AWS +account which has production resources on it. +::: + +Go to IAM section of console: + +Create an access key for your `root` user. + +## Authenticate the `aws` cli + +```bash +aws configure +``` +```bash +# Fill out interactive fields with your access key +AWS Access Key ID [None]: +AWS Secret Access Key [None]: +Default region name [None]: +Default output format [None]: +``` + +# Create Amazon EKS Cluster + +To create your EKS cluster, follow the instructions here: +- + +## Deploy Ingress Controller + + + +```bash +kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.8.2/deploy/static/provider/aws/deploy.yaml +``` + +### Check Ingress Service + +```bash +kubectl get svc -n ingress-nginx +``` + +You should see something like this: + +```bash +NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE +ingress-nginx-controller LoadBalancer 10.100.151.220 ac1f86093ea7240c89457da3d5f71fc4-947b3172412ab75c.elb.us-east-1.amazonaws.com 80:30416/TCP,443:31448/TCP 3m55s +ingress-nginx-controller-admission ClusterIP 10.100.208.56 443/TCP 3m55s +``` + +## Create a `CNAME` record + +:::danger +You must configure a DNS record because our ingress configuration uses name +based virtual routing. +More info here: https://kubernetes.io/docs/concepts/services-networking/ingress/#name-based-virtual-hosting +::: + +![CNAME record Example](../assets/cname-record-example.png) + +## Creating your own Genesis Account + +You can add genesis account(s) to your rollup during configuration. + +You can create an account using + +```bash +cast w new +``` + +to create a new account: + +```bash +Successfully created new keypair. +Address: 0xfFe9...5f8b # +Private key: 0x332e...a8fb # +``` + +`export` the genesis address: +```bash +export GENESIS_ADDRESS= +``` + +`export` the genesis private key: +```bash +export ROLLUP_FAUCET_PRIV_KEY= +``` + +Exporting the genesis account(s) is also shown in the export block in the next section. + +:::danger +__NEVER__ use a private key you use on a live network. +::: + +## Configure and Deploy Rollup + +### Update the `helm` Chart + +Pull the [Astria dev-cluster repo](https://github.com/astriaorg/dev-cluster): +```bash +git clone git@github.com:astriaorg/dev-cluster.git +cd dev-cluster +``` + +Within the dev-cluster repo, update the ingress template +`chart/rollup/templates/ingress.yaml` so that each hostname ends in +`` instead of `localdev.me` + +```yaml +... +- host: executor.{{ .Values.config.rollup.name }}. +... +- host: ws-executor.{{ .Values.config.rollup.name }}. +... +- host: faucet.{{ .Values.config.rollup.name }}. +... +- host: blockscout.{{ .Values.config.rollup.name }}. +... +``` + +Add an IngressClass so that the `metadata` section in the same file looks like: + +```yaml +metadata: + name: {{ .Values.config.rollup.name }}-ingress + namespace: {{ .Values.namespace }} + annotations: + kubernetes.io/ingress.class: nginx +``` + +:::tip +You can see an example of these changes in [this PR here](https://github.com/astriaorg/dev-cluster/pull/119/files). +::: + +## Install the `astria-cli` + +Pull the [Astria repo](https://github.com/astriaorg/astria) and install the `astria-cli` + +```bash +git clone git@github.com:astriaorg/astria.git +cd astria +just install-cli +``` + +### Get Current Sequencer Block Height + +```bash +astria-cli sequencer blockheight get \ + --sequencer-url https://rpc.sequencer.dusk-1.devnet.astria.org/ +``` + +`export` the initial sequencer block height as an environment variable: +```bash +export INITIAL_SEQUENCER_BLOCK_HEIGHT= +``` + +## Create Rollup Config + +Replace the tags in the commands and env vars below, as follows: + +| Var Name | Var Type | Description | +|-----|-----|-----| +| `` | String | The name of your rollup | +| `` | u64 | The id of your network | +| `` | u64 | A balance. We recommend using `100000000000000000000`. | + + + + + +You can use environment variables to set the configuration for the rollup +config creation. Replace all the `<>` tags with their corresponding values. + +```bash +export ROLLUP_USE_TTY=true +export ROLLUP_LOG_LEVEL=DEBUG +export ROLLUP_NAME= +export ROLLUP_NETWORK_ID= +export ROLLUP_SKIP_EMPTY_BLOCKS=false +export ROLLUP_GENESIS_ACCOUNTS=$GENESIS_ADDRESS: +export ROLLUP_SEQUENCER_INITIAL_BLOCK_HEIGHT=$INITIAL_SEQUENCER_BLOCK_HEIGHT +export ROLLUP_SEQUENCER_WEBSOCKET=wss://rpc.sequencer.dusk-1.devnet.astria.org/websocket +export ROLLUP_SEQUENCER_RPC=https://rpc.sequencer.dusk-1.devnet.astria.org +``` + +Once the environment variables shown above are set, run the following command to +create the rollup config: +```bash +astria-cli rollup config create +``` + +You can then run: + +```sh +cat -rollup-conf.yaml +``` + +to print out the config file contents to double check everything: + +```sh +config: + useTTY: true + logLevel: DEBUG + rollup: + name: + chainId: # derived from rollup name + networkId: + skipEmptyBlocks: true + genesisAccounts: + - address: 0x + balance: '' + sequencer: + initialBlockHeight: + websocket: ws://rpc.sequencer.dusk-1.devnet.astria.org/websocket + rpc: http://rpc.sequencer.dusk-1.devnet.astria.org + celestia: + fullNodeUrl: http://celestia-service:26658 +``` + +Export this file to the env vars as follows: +```bash +export ROLLUP_CONF_FILE=-rollup-conf.yaml +``` + +## Create new sequencer account + +```bash +astria-cli sequencer account create +``` + +```bash +Create Sequencer Account + +Private Key: "5562...1622" # +Public Key: "ec20...f613" # +Address: "8a2f...5f68" +``` + +Keep track of the `` as it will be used with the +Faucet later on for funding your sequencer account. + +Export your sequencer private key as an environment variable. + +```bash +export SEQUENCER_PRIV_KEY=9c78...710d +``` + +### Create Namespace + +```bash +kubectl apply -f kubernetes/namespace.yml +``` + +### Use locally modified chart + +:::danger +You __must__ have modified your local `helm` chart to use your own domain name +as described in [this section here](#update-the-helm-chart). +::: + +Because you needed to modify the host names inside your ingress template you must deploy your rollup using your local chart: + +```bash +export ROLLUP_CHART_PATH="/your_path_to/dev-cluster/charts/rollup" +``` + +### Deploy the Rollup Node + +Use the `astria-cli` to deploy the node. + +```bash +astria-cli rollup deployment create \ + --config $ROLLUP_CONF_FILE \ + --faucet-private-key $ROLLUP_FAUCET_PRIV_KEY \ + --sequencer-private-key $SEQUENCER_PRIV_KEY +``` + +## Observe your Deployment + +Your rollups utility endpoints are as follows: + +| Utility | URL | +|-----|-----| +| Block Explorer | http://blockscout../ | +| Faucet | http://faucet../ | +| RPC | http://executor../ | + +Open the URLs in your browser to view your running rollup. + +## Debug Ingress + +If you would like to view the ingress logs you can use the following: + +```bash +kubectl get po -n ingress-nginx +# get the name of one of the pods +export INGRESS_POD_1=ingress-nginx-controller-6d6559598-ll8gv +# view the logs +kubectl logs $INGRESS_POD_1 -n ingress-nginx +``` + +## Use `cast` to Interact with your Rollup + +```bash +export ETH_RPC_URL=http://executor../ +``` + +```bash +cast block 0 +``` + +Use an address of your choice. + +```bash +export REC_ADDR= +``` + +```bash +cast balance $REC_ADDR +``` + +```bash +cast send $REC_ADDR --value 10000000000000000000 --private-key $ROLLUP_FAUCET_PRIV_KEY +``` + +```bash +cast balance $REC_ADDR +``` + +## Fund you Sequencer Account + +Using your sequencer pub key you created in the +[Create a New Sequencer Account](#create-new-sequencer-account) section, copy and past the +`` into the input on the faucet page, and mint funds +to your account: + +![Sequencer Faucet](../assets/sequencer-faucet.png) diff --git a/docs/dusknet/cloud-rollup-deployment/5-faq-debugging.md b/docs/dusknet/cloud-rollup-deployment/5-faq-debugging.md new file mode 100644 index 00000000..bb08d732 --- /dev/null +++ b/docs/dusknet/cloud-rollup-deployment/5-faq-debugging.md @@ -0,0 +1,54 @@ +--- +sidebar_position: 5 +--- + +# FAQ and Debugging + +## Debug Ingress + +If you would like to view the ingress logs you can use the following: + +```bash +kubectl get po -n ingress-nginx +# get the name of one of the pods +export INGRESS_POD_1=ingress-nginx-controller-6d6559598-ll8gv +# view the logs +kubectl logs $INGRESS_POD_1 -n ingress-nginx +``` + +## Verify Your Loadbalancer + +If you want to verify your loadbalancer with an external IP you can do the +following. + +After you have deployed your ingress controller with `kubectl apply`, run the +following command and then `curl` the external IP: + +```bash +kubectl get svc -n ingress-nginx +``` + +```bash +NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE +ingress-nginx-controller LoadBalancer 34.118.228.98 34.42.184.206 80:31623/TCP,443:31357/TCP 57s +ingress-nginx-controller-admission ClusterIP 34.118.229.71 443/TCP 57s +``` + +:::note +If you are using AWS you will be given a URL instead of an IP. +::: + +```bash +# use the EXTERNAL-IP from the result above +curl 34.42.184.206 +``` + +```html + +404 Not Found + +

404 Not Found

+
nginx
+ + +``` diff --git a/docs/dusknet/cloud-rollup-deployment/_category_.json b/docs/dusknet/cloud-rollup-deployment/_category_.json new file mode 100644 index 00000000..ab47fd15 --- /dev/null +++ b/docs/dusknet/cloud-rollup-deployment/_category_.json @@ -0,0 +1,8 @@ +{ + "label": "Cloud Rollup Deployment", + "position": 3, + "link": { + "type": "generated-index", + "description": "To deploy your rollup to a cloud provider of your choice, select one of the guides below. From an ease of use perspective, we have ordered the deployment methods from \"easiest\" to \"most complicated\"." + } +}