From ec0e8650cb728239471c8d1e0167fd2dc518b75f Mon Sep 17 00:00:00 2001 From: "reaction.la" Date: Sat, 26 Oct 2024 22:09:21 +0000 Subject: [PATCH] --- docs/images/nobody_know_you_are_a_dog.webp | Bin 38470 -> 24848 bytes docs/setup/set_up_build_environments.md | 234 ++++++++++----------- 2 files changed, 117 insertions(+), 117 deletions(-) diff --git a/docs/images/nobody_know_you_are_a_dog.webp b/docs/images/nobody_know_you_are_a_dog.webp index e29605d5d0a322e8256dbc082cc57cbe1955be0c..7ad298852893bdcaea19d2a48651da947506c6cc 100644 GIT binary patch literal 24848 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 HUC96dF{9NL literal 38470 zcmV(vKNU#0&${s;Xx{6Fyj{C*7aH`#Cd{(}EH{A2q6@L#$A z=09!z_H zn?>|z7eu*PY&mvG@tmhwA5OE*kvteScJJ1I;A(HJqJ6+<~R;?7t?ipvQl~oP(@^o%QIvdHr`d z^*ZDP`wO9>B_0J_`M`PX9@dL|<$Z`F4enHdaVcFt88Ip@F)iscb^4}v+`h<3-jlt$ zllV3bb(f+)0PC_Txz$-NUm|__aA66$YenRgm)sude(F$evcy^+`131%gB@2TS%Amh z+y>m8-y1|+SoE(za;xe%jdpN=95dicZ4<{}n|zmevt-%Req6*)Eske!#G$3jiv7(C zu=&peJQo1o=y71DCjRkX6C+@J-NM8Yfy|%u^C)bpcD93J?cnjB>2zfF2XhBJnaHx#Ek0f}&Y)3n@z<^q-b zAjk#BVgJ?_LpP=cpf9k0e*I~wAF5A+YA+BO1FY|*Q`|&A#@*i=*&W^$u@SD2R)yKK zgbCxV6;x|LEe%xP4te=oKkfkaN?&mV2c z(_;$%fR{;Ai8VxO$2UKSE0CD%z=~k#n`;DOKETjm;1Y`m5>LP(4S3;YU`J_!#)TzqK`01)k&!zot@V_U6z4 z&5X{0>@W97!2oOl%yi4vFKDHm)YLh;0*^`$@XF1e141Hd>DCHAP>e? zt$1|-c6TDGB1)NGIz8pGk&!}gr4hXE@IqnAzqtOEHd8xB=U|CEW?cpQv0w%TYYlJD zV+6pfKTdiDUm6O`uhAsYx8EGcRMNb!Y^opPLJ4!K<7?yN0+?%dr3&wxSYEf6IXZkc zQ--Ww26)f^X1Au9@>Id#eZP68$rS@lC(tSr;63VY=7dmjo6is2FyRtU*RUT%j7w4r z-+xs+zL77lYnJSmqXXIgr$hWEd~`}ANvh$KScrA6xU;Rqz5|xRlm7uQzEktHc2)WK zsydoN_0;CmBNnvCmH^+Y9wzzv?ttM$Tcr#(tsaJ!dD656`K?DiItum+Z0bIHPiE!P z^A$&lS;c)hf5x(Lp zH-IF#?5m6EevUcZcRq%-gLF7ng;+JqTz$cgeFe3qVL!RbsS%pDQDW^U;%|*^^1^5Ky^_r95Ro8^D(+eV zdE8929Z^8hdDKw{MJUW5$SMmSi>{O+^nX1}H{5zwj%Vn#g$72PPQ64{T;VjJGBBDs zGE@U3yrkx&WKqn}L)f+rUs^(eM@{3j6@{8teQ6CDXlG$_ZJfg?GxVj3SWY{!itkbfY=CckwqIDb!33^N@|IR{8tJ15YKK zkFDCyQDA~EhdU1dekV3#gmiYw1@)_;sU*q7|8qCXC*X;bm{M8}tKppJOjSim zHmoPG)tgRq-ZZE8a9eQY%|0D`w-&>r=wH7a@=I^!Hc*DFPeqw_wRCcCf~$MTrA7x_P?^D+AJB!cGE^oMH@BVFurZ2>w&?`@WL5;K~8^B1_n;vE-to zW>-fB(01JQi-9 zdyIc>TC+GV+VnqaCkt%mqa-X(6!g28!OBChJHa+qC*XC_9YhkZ6*(|%{Ea*KE=O`o zxl?41E%=Iq8pG%K<7vDVl{AVCsBKe`1BruWnNgm0f7eB%0s5z$FUnM&%O}IpbDRnY z)~s}&DOdFsyFpt3;5o!JF`i!^a$RiHD6om_>_GGbVFIh@aTR^ZFdEU+csvNu#RofB zU=IufaY%7C$OZ|uL~CgaKqZmzlg5%s-b{Um_EQ}YSOp{_K?ZP!9#*pMo!Y0Nep)O# zpXI5Lb^l|8wp3r3No5JYz1b-{G$>FxSbnkuk9S88*zzTS*5i^m%Gu+lL||3iJTyVu z`W54cvUp4!HN2eQi-O3dHT3`+#~kam-Kv4F_`0yd5JYt0GzUqJwSls`AGMQS#(+e> z1vQ6*f(_zjoeNf!I%rpdj?UPO|+h)I7&L-eirA=Ue;Ayx+ z9L_{>RylcnG4!v*j@8XdJK_)ccfLcyYc;U1YXFY0gU&5Pn33*LHCZf3Ekj>vH#*ky z^HPuqGN%qI?C5TKO^{JmpTK5>`zME+Ga?JxKVC#};B(fP*T4f#F8hHzzK?3Y|3D?| z1iX86y`nry!MR~CaJ#UIfZRJrp?rT5gF^5?e*9}fI$qF5>;ECC1%u+0xB&2*^D7l5krhq zoU43|J=|%c-QM*J#l4(k^^5|2Avs@9-PmB2kT4&^o8Tu{g&A$4Nsc>zEmv+bd8fPP zZ|9)CRhi~*N72E`S2;_JaSt=d(+gk4qkl?qV3rz1eANLfC%lvYlisVzH#*y(MHXm9oF<*3n9dOavum#$b!%u=q??_=;x5 zVl9<5ZWzF&nE|GQB_8q8-4@)wGI?b~&9ibnyaA-b4Jvxf7X4^; zoKK344|yy-mc#L7OD|JGmg;Sq78D`TkMVlH7*ddH>3L ziS>AsL$xt~lvWy45daeoACf*?UNmP`O+sUo3Y9pLBdN)36a1WKL)|U6x%KpIt0%Uh zao9p8;|Gj6wF(O`djvbSv!e3xLW>13jh5KuMlX5ESJhG zA6@2)`15SKm|Lbwn~@%3zE{rskZo1^SA(o_QCH)t1pRCzKK@If!Mj6_dT6%&<`2}{ zD@qFuzzSyNvN*o{69yn?nHY;c?}2?E1VtdeH}NKw4?Cd9iKjIw{{myftvPD55R;2v z6f3tv8+_H<$W;7;Yq1lRU6xlK5xK3adfDK2!n6<#tWK{hjyT)}A9HI~ng}^-z1)g8 zD|&_FfwyG3YVm13f`8=~6x1PTzgs`vuUZiAW^zt$$D_e?z6@-UhY|3$(sa5CNZzhz zvzIGV`V$q7YMJ@v`+@`&&#Il6@bbeOQ$=|us&1=TMJaAny@cH@Aip03ke^>hE1%5ScQxBbEtp{T!B6C~7rsYFma zsP)EidS+5Mq2Uuat%NQ<>0pgN_u2F3`xcnYZf_6SIeRuCcx~Ps58FP(75Q)UI-)r< zi{J#c?l-i|w97p0FwNBB;SloIe_Aax zIuJUh3j-6Ur3EN^7XT=c8ZR`$qAH~GYlM?Qyi00K13!Jl09GB*OvB$`I{9Jojm=h= zw9wNSAV0|$8kblwkV?}?utnaGdFlJ^-upMae9r&N4W*;v#2qfT9SJAYBFNs2`I8K1C=-{Pee*Hu9*lY?mL67 zxuvw>X0AV{jYrGKm6?3Evo`rhE_`_rKdmS$y8L2F?CZYx|4y(3tSh%-7w#Qlz#A0f zwNurJ5C74SCA|hH5nq4K4s};A-PyRXsc0iQxo_SL(^|mVwM}_?rp3Qfkpe5{EWrO& zW5%Asb0c5ktfw_gyEQe_&hZod?j%mnylVwI8~9weMsNCv@M}a0t$Wf`jN4`Oz;=Rh zoB?bY!Dp#kg8uO*wNPCxFyXOYq**~@f>e5=anr&DK8MQ0AmP@SyL#CSwbk~VAWnEavVge{kXd`=Zg2W(ya^Nk-UCcGqGsBO_WA~H0ZS_QN z`U9v=j~s}1{++ID(us7>;hP$g1)ebo`W`i&)&8^UF_t!q=Eb~<`H|20h(J+T3h`$fCZHJ(VjUlV<34wTg$ z4){!80J-njmdJ1U2D92aNuy@76P=<{Eu;TG@fCJw&7|J&i3tE9>S9v9j25__*w0<& zJg-l3=q&@XdA^^bUz>@D?wUT(cpRg|Q*6=t@_2tg!M(-_g(Yd>nlEt_Oe6vN{A%<3 zT)REAewi6SP*-yfX)v?#$8MzFa-Wy|2K6R+fEdt|t)NE5tBf^5&k-qm;;`xofTN$X zZm0CRAu#8!HOJg~(Akc0cFl+>p3+T|+7PU3xgTtmC|QGRcWX#F3UPyq8drW=vUf0# zY(Q>gEKEX;B|S^zO6otj9qhd1XN2~ay?@E`-YUB-rHKdG%Fs+tkT zzfxG2R@LTz&?_{!7W=@H?)U(jQ@Z_VSTm&u_zc;}fUt6CpMoHC{uCntr_Tw&58PqB zNd%OY=Zi}QBIJ>~tCWkaeO+poHh!=QKOtm%dGhp8fj-gxXys=M^0HY})B~N>^*dv| zS)w>9XeT0F;hm2)G{TpLZhRg`GI=^zyq;YpCI8A++0fpd491V6me2M-^?9Wx_W^e_?;E__B6|y3uqhjA=Hm*jeG67}3F)(D89= zGP9z&lw~g+WN+!#k<{k=^?B~0aW3aNt&0^K{Ra>lK|k%o>&_{<5+g~^`-3B0^239) z^>jXyMDn^?&-l{}!ZkbbM1soOttM&hOWs2Y2>4kcQyT3_*U%=&Mv& zYN3{fs3!+g3R(|ESs0B`XKZ~Fix$$e4!%rXT>Qbg=gEu}-gMYMG?CG<<<3IbQQ-^< z(cME`#1}<5BYhM@LN0m&3*haeDr>k}h2dMd{cNd?~u&g6P>MetqM)w!2QkS=?OTTaTsL6jit=Qo{P;C0>=sndHGz+0}z@fU2;YkwxrRd${>1ojWe)9G*~NQd{#*k-hVT(0d_fZ0H+l03&n#oUx*3kRr=@5~(qv zcZ2-Bki#aUz+GQtR~d!uP*?lWhVmg~QsXbUdR`tZ5e^r$7!gF0eJ6ipL1xW~j3D ztHfruUy&w&TxrtQ8W5AKXhKv7cOKpUrRFoqTl z=0ZoH3ZkuV)s^NaDOpHBk}a{YdpQG<8+>Z5|kdA(^b$6 z9SFoj&S^6c&A)e%to8<2jLSzJ`t_CRDGYwC<9#lY{y*?EW;{p>o=VCv1@+lmLVQ?c zoDncEEXom@={(EPIXOO6)K(21wlnAEUni$bRhr1Br5eb}W?-;}iUmfb(rlGu0IjmD zvI!pS5Z-B(hm)oYmAQtncuZ1@_VjD@dXv}{iG?D}bhyYZlW;gfd1bYAMK3`sR4k=S+62p6d$lX16(VJCBTWmn3tIV;a80x;=<|&7{X`= zgVk(nRo|ni0cq8HdirrvJq1{rlMP}uxUCEX6$R$qLPx7Rb*}f+@#)3y1`af1+v*%Q z*j4>MLf%BqK+pV=p6x(HKB5}5#+4cLa3kZ#uG?t^hdq1h!QfcPGKnY@jVN3m<|f9(022ny7SY*CQPBfW6tQ6A!D8Ry($^S}fo1=U0uiLS#j#CO1W1J8WO9(GP^0{gna zJe9o&hHlWTTK?NX&q^8ceg*^G!yV}r4n%Oi$4-nKV~LPthODPLx<8bBv~FEuF>u10 zwC|0fzr)fFkb0!z_I%0ogdx^zWA4F_zEtj~Lc#I$Y;2E4{)!(UKLR$Xrz1kfDQU9Hkx+W6E|K_^rm|(!&4ZCdO-ft0ZXmBBE(2a^9ICS{KhY0bayg(Pqoe1xy{<1~tjw#^d`G?^ zLH}XoTz!N@56ckRiU=4tKfa&8m3_6XY1vUcoMG=l(7cZEU+L@m;?7}!&JX3-wjU~T#ddn{dlrkd(}sE9F)&o#9?8uJ7}!|aAKFeOdTwvP)KAs2nx zzN4||0R4&uX-cKi#XBjI|L+b;ae8I&fJGlV7i@ip2j0RDX!Z~KSP-sUT-w&6CUx8a z)So|3THt8{SN;V>2B;ow3M?Q!i!eqDB?oQ;Ku0m5z-Q?_dx~D<@;Rb5iGG9kZbbR@ z(NOi+=)BJ@W?CGaSJYAJcP^72<&Qh5s9B|LjMGc=*zpB}#~&dJO9rN`4P@u$}KNzK&i55*3%MSw6JnZZ^sNd zEfm>*TbZX@wx&->q?kS7H+VW*q(Dro+{|ZCL0=c6e>qmf-%d0Ek&QM)3nfrS)8Nh1 zH#F`$%Mh9q)%%fQ5p8PlvP?%2)Jue%ODU}i@rdRS*Z#!Z{u0u@s20N%^Z$7;^h=M+ z!|N$Uo$y9Nd_Wk;5a0Dhy~S*-U$J8o(112X_tPxc{CN8tq`Pc2FGncg5Hg>phRV7y z8D^Qu=#O+vK0dH=`b?W(NK@8-7(+h|!swJ$KHn*YOn3=(@5l5goAEm3_l%4PB&+xV zqukBjN~GW_>Dhs+u)ZkKvx5#bLeMU%J-ylV*T7jUBF{vx2S(R(*jf4_8p5UMu)7~@ z`W85iRFR(-RLg^XVs1zC)#hm^G1Sn|a9&75oBN3$+~c%XCooy%qHjeCKtqRa1Wuui z_QgUCdKmC(Um~(8TzI0mO)Y1e#cdfy*k}%X1!SrXp$vi z=F=B>@ZI*FsVy{xEq76Ri^@EhX79Stu(U85%Dt}cX=AG8Zbj7k)7gmq;hN7FLO)a5D(|; z=%wie3t+Wl7_hSB*z+qh&I_(@!M^DAre}vshVp~jS)(7*ZamSP`xogB$wb6JHwDGO z2K4_m-Pv+T8u>J!UU?r0-+jvjb;)0z4ZL6*dE%^LY4nxG{3^2dWF>{zk;;9C0%-z_4cSnzl7f*fuHAIs(hz^! zZlhNS`DRCGal7Xlf|eS@AJS*m9XpdMn-XnA+^t(zN)RbkVxB|#*nElRdaWFj(TL2D zD37+Y6+d>P?1u%4YS5znV?pLI39dLx-mah0rJmNcv;9bXb_Gl#=L&D8i^W8{B$)il zPVNylmm?HVtR%f@#Dq6&{kDsDMGqgiaZ}tau@Wz;1U|ms;55N2q#sX00^7nX=c{5* zy?(YKV(>$69d>xpRHhCTu9n=}6*X751ZbATPjA`T7cWu5XK4_`W`~s*TD09*9CTR} zyP^U3s}-DGf5AE-#7ZfwiA=e{MT0E!4u4!vq!dZb3%p*WCAeWj6=g$qWMFH32AC=W zWHKuqaXIX_k?;9m#&SzwhLL7AH*S`?l*MrS=qPcBCkH(C!|B>uh+tqD-UB8uHmjJo z_Zdy{V`9L3xEA&(x>e1ZiVmk_0@4U0!P8cOgenT+^=V3qVW?mb#ERmo-e5b{@w@n0q6Hn+MGK*(iehlQsfCRFP^~RiMO2$^-b!k^MEsk28^%{46&UOi*?$pE1L1r z<>ZQaOH6+6NE9CFu+!8s-*05fvG$A(A{E_RrGbj84A<0#bNyO$)22G z4v34aJWImAn-jknVL+;&4&}0ci0p)4Sg~`l-_adQDEsE_?JDe6jId2M3^gWHL*8{b z2?4=nle1!GDhd`~L*sR5AG~|Kg3-0J@!vTmTYV#2p>G@^#xX1hHA``MO<0f^X9*ob z3sWzar1v9K`EtoUG?_v?G>v7VD`$Uvt`L6IGNlojAikFpiS^Wg%NCPdRkHplZXVmG zk^jZoX*}C3S!4wn*M6Qc({*{bDW9A_E{v*E1yXo^xdMo?_cF_5Mlu6cUdD_jP{A%{{gs~yR^6S8 z`LP`fJtWA4u{6fxJdj8pbJF&dQ)W0ji+?ECcFI)5sbQ!gTi94+WoPzj>)9%!@g)EV zj)x8&hF3beve2PY4`@@@EX#}Y+XC+?_|Y!R;I#Ci8 zXwt3z#Yu3GBuD!Lei!`vq;zDRs#RNlK`dWJFb2}`R#Gm-xSk!S;RDSjR+6H4tE7s# zG-hH{17!Sqx8)#F(u`iw2M`PPcB(XY6i=G$F0I`o7YiGfWhC1kiYtcJG$ap*XwU1YVT;bcBDXXWCF1?+=ui z*2H=`RxM`)l(8Pt;!&9vt9ZzcTCYj$?`vhD9IT!>zAv9&`r9;cL#CwT9zjzb*Dgv9%P3LUZ>} zy>PB~qQ;~Bf?p3s*$yXU;?AVeQD}Z(WSaYXQ8~ciQ5Mu5h}3Sd2$RisI-0MeH$nbl z;O?>Xv-uMAPwZWWEj^tbG9&2a!vaqFGha&4o;Qy%FqwQjDb05sG9&Z_=6fk@+SNAx zN*$%}?`!JUR%Xi0D*D&R5t3@tBh?9gOZBFMoL--w*}Pj|5o--yXTW~B>&0Y_^lY% zUddF{Q{v+&AN%bKiO2B)SWQMr*~+46J$NY{rsA5`!u{38pSyxIQG0L|J~Av@`Hv7C zh|~7AxZWU*WDix4O~ti-SEdImKe+V#BLpl>Xw0pP=NhQnyLcL$@^6@9rO93cWe5-& z0ik>ENGmo^Vv9?OS=F(0mkZ>u)Z+AeBV?U9gp>1M=AI9r*oiA?55iUSbdlg<*- zh9q3d`T_*k#s}#f>R>_W``8YCuPw@7raPccDrq*~pgSv40~u#i^GA0p}Wu zE?C>P>>v;+DE=+}NWP{a<2(Qsf(%;>K7ZRmLtJ%w>PfJ!dkj&Qv?Bphido37e(nDN;*`f`luOsR7X5O&n zmuP)wHV?8^=g>3oBNcyFsmG$m==yY>?X2riai(D2_bbi?6=})Z{Fhz4?Z6hg8iUn*aC&0(~SL|d=_VE%ns zt%peAjTgsG(_hmOi_Y!TK(9~kFHbG|i3%q2-%v^Q44DExzb>l8nu$lURM!&ZIlx1v{|v)Tbx4GQyVS#-+Qd)cu9aK@ zbpVq((^bQJ|IAhs;30$9qA>{<(PZK7S)b%XypPjlUAjJHrXqCT*{m9U+bYJ86h zQB5o3s9O2Nf9Vlx*e%!^!P%AgoS#Rb^&ks0dtvG)@9_uUHSEfd;lTsVJP+ninHi9Z z{B(vw1yZW3xLvwmo=K)6beuPM&ZR$Fo^;*VChcIoLXXB-G^TcMwkbJi_@CLE>~PA9 zFTc;s(i#N;z2-#Vnk*1T*a^r0po^2l0BuCLSDA zpQkY(DN-RO<-`m0ij=4$8(>&riq5xzAfEt>#iJ0~Y_9Mo+IWmq;{dbpSoS%t9bmZ`%C)qBk8`=HqRW?Yc<$PGuX z;t?x-tBVRbyo>2~uRE^g3Wp*0rxm4w2JGO284bC6P=#ay|p5PKx&ncxs6 z{g1u4d^{~FI;TmL$KXklEG!4C&TyHRkQ#|C+h$ogtw&aXZsdgISWX((0E&}>Pbz5? zLORW!>ZZfhUG6d9O&HfU9XX-au&PoTaV9Mf7JNCrUN5XilyjTxNifTG1y?~ zY07qo>!{JYr*D|S0Afk9%79x;xoXa$^$%cLUbB zWK6dXNVQ2{MLeQsh0ifQ-&uM6KOsv;(P-#W&-RB#5aP&^q*L6f0?fgfcd*ItKH^S` zCozM1cLA+=8N#l9g?lU+CetSFd5iT`BlVR{SO8r6(21X$JkF^k8)NngZJ~e- zRvuL8d0@C}T=c?DkGK-VJ4S5027fEhOS;V=!nz-GVxqdkXq?T)VxJFXB{BTq#qxNx z38ezFp_6^vx=+R8}#oDYs0Ou*4E~ogE-%dkpkF zL}D<(z&sdb9=KR6IBoNDb8cJ{fk?Od>*_aikCXSl?ZHqSJ~wc=K9R!bB(MCR{ZJH zt7!IZAunP@K4FI+MA4&80bB*JjkLJ|b>TOV5)Ehy0=U!{wm?3QrF6mrNUwhQ2kzi66<2xq5L1j0?!Hw%)PVMFLA5M7?;1snIAUuh-0X_+iza z6`=2v=?7rJ)c^?L!pjHxJoLv(KB%81HEUuKe7lD;2Tug=$1|03R@c6D8vN@9Jp
YSnV{W0Jf6@1wNaC+ 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 ../sites-available/000-default.conf - reaction.la-le-ssl.conf - reaction.la.conf + «example.com»-le-ssl.conf + «example.com».conf ``` -And the contents of reaction.la.conf are (before the https thingly has +And the contents of «example.com».conf are (before the https thingly has worked its magic) ```default - ServerName reaction.la - ServerAlias www.reaction.la - ServerAlias «foo.reaction.la» - ServerAlias «bar.reaction.la» + ServerName «example.com» + ServerAlias www.«example.com» + ServerAlias «foo.«example.com»» + ServerAlias «bar.«example.com»» ServerAdmin «me@mysite» - DocumentRoot /var/www/reaction.la + DocumentRoot /var/www/«example.com» - + Options -Indexes +FollowSymLinks AllowOverride All - ErrorLog ${APACHE_LOG_DIR}/reaction.la-error.log - CustomLog ${APACHE_LOG_DIR}/reaction.la-access.log combined + ErrorLog ${APACHE_LOG_DIR}/«example.com»-error.log + CustomLog ${APACHE_LOG_DIR}/«example.com»-access.log combined RewriteEngine on - RewriteCond %{HTTP_HOST} ^www\.reaction.la\.com [NC] - RewriteRule ^(.*)$ https://reaction.la/$1 [L,R=301] + RewriteCond %{HTTP_HOST} ^www\.«example.com»\.com [NC] + RewriteRule ^(.*)$ https://«example.com»/$1 [L,R=301] ``` All the other files don’t matter. The conf file gets you to the named -server. The contents of /var/www/reaction.la are the html files, the +server. The contents of /var/www/«example.com» are the html files, the important one being index.html. [install certbot]:https://certbot.eff.org/instructions @@ -1265,31 +1265,31 @@ your nameservers, and only those names, certbot automagically converts these from http virtual hosts to https virtual hosts and sets up redirect from http to https. -If you have an alias server such as www.reaction.la for reaction.la, -certbot will guess you also have the domain name www.reaction.la and get +If you have an alias server such as www.«example.com» for «example.com», +certbot will guess you also have the domain name www.«example.com» and get a certificate for that. Thus, after certbot has worked its magic, your conf file looks like ```default - ServerName reaction.la - ServerAlias foo.reaction.la - ServerAlias bar.reaction.la + ServerName «example.com» + ServerAlias foo.«example.com» + ServerAlias bar.«example.com» ServerAdmin me@mysite - DocumentRoot /var/www/reaction.la + DocumentRoot /var/www/«example.com» - + Options -Indexes +FollowSymLinks AllowOverride All - ErrorLog ${APACHE_LOG_DIR}/reaction.la-error.log - CustomLog ${APACHE_LOG_DIR}/reaction.la-access.log combined + ErrorLog ${APACHE_LOG_DIR}/«example.com»-error.log + CustomLog ${APACHE_LOG_DIR}/«example.com»-access.log combined RewriteEngine on RewriteCond %{HTTP_HOST} ^www\.example\.com [NC] - RewriteRule ^(.*)$ https://reaction.la/$1 [L,R=301] - RewriteCond %{SERVER_NAME} =reaction.la [OR] + RewriteRule ^(.*)$ https://«example.com»/$1 [L,R=301] + RewriteCond %{SERVER_NAME} =«example.com» [OR] RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent] ``` @@ -1379,11 +1379,11 @@ when your site has your actual content on it. Check again that the default nginx web page comes up when you browse to the server. -Create the directories `/var/www/blog.reaction.la` and `/var/www/reaction.la` and put some html files in them, substituting your actual domains for the example domains. +Create the directories `/var/www/«subdomain.example.com»` and `/var/www/«example.com»` and put some html files in them, substituting your actual domains for the example domains. ```bash -mkdir /var/www/reaction.la && nano /var/www/reaction.la/index.html -mkdir /var/www/blog.reaction.la && nano /var/www/blog.reaction.la/index.html +mkdir /var/www/«example.com» && nano /var/www/«example.com»/index.html +mkdir /var/www/«subdomain.example.com» && nano /var/www/«subdomain.example.com»/index.html ``` ```default @@ -1392,7 +1392,7 @@ mkdir /var/www/blog.reaction.la && nano /var/www/blog.reaction.la/index.html -

reaction.la index file

+

«example.com» index file

``` @@ -1400,7 +1400,7 @@ Delete the default in `/etc/nginx/sites-enabled`, and create a file, which I arbitrarily name `config` that specifies how your domain names are to be handled, and how php is to be executed for each domain names. -This config file assumes your domain is called `reaction.la` and your +This config file assumes your domain is called `«example.com»` and your service is called `php-fpm.service`. Create the following config file, substituting your actual domains for the example domains, and your actual php fpm service for the fpm service. @@ -1416,14 +1416,14 @@ nano /etc/nginx/sites-enabled/config ```default server { - return 301 $scheme://reaction.la$request_uri; + return 301 $scheme://«example.com»$request_uri; } server { listen 80; listen [::]:80; index index.php index.html; - server_name blog.reaction.la; - root /var/www/blog.reaction.la; + server_name «subdomain.example.com»; + root /var/www/«subdomain.example.com»; index index.php index.html; location / { try_files $uri $uri/ =404; @@ -1442,8 +1442,8 @@ server { listen 80; listen [::]:80; index index.php index.html; - server_name reaction.la; - root /var/www/reaction.la; + server_name «example.com»; + root /var/www/«example.com»; location / { try_files $uri $uri/ =404; } @@ -1458,8 +1458,8 @@ server { } } server { - server_name *.blog.reaction.la; - return 301 $scheme://blog.reaction.la$request_uri; + server_name *.«subdomain.example.com»; + return 301 $scheme://«subdomain.example.com»$request_uri; } ``` @@ -1486,12 +1486,12 @@ www gets redirected. Now we will create some php files in those directories to check that php works. ```bash -echo "" |tee /var/www/reaction.la/info.php +echo "" |tee /var/www/«example.com»/info.php ``` Then take a look at `info.php` in a browser. -If that works, then create the file `/var/www/reaction.la/index.php` containing: +If that works, then create the file `/var/www/«example.com»/index.php` containing: ```php ``` -[http://reaction.la]:http://reaction.la +[http://«example.com»]:http://«example.com» -Browse to [http://reaction.la] If that works, delete the `info.php` file as it reveals private information. You now have domain names being served +Browse to [http://«example.com»] If that works, delete the `info.php` file as it reveals private information. You now have domain names being served by lemp. Your database now is accessible over the internet through PHP on those domain names. @@ -1604,7 +1604,7 @@ map to the old server, until the new server works.) ```bash certbot register --register-unsafely-without-email --agree-tos certbot run -a manual --preferred-challenges dns -i nginx \ - -d reaction.la -d blog.reaction.la + -d «example.com» -d «subdomain.example.com» nginx -t ``` @@ -1646,11 +1646,11 @@ certbot renew --renew-by-default --http01 Because certbot automatically renews using the previous defaults, you have to have previously used a process to obtain certificate suitable for automation, which mean you have to have given it the information\ -(`--webroot --webroot-path /var/www/reaction.la`)\ +(`--webroot --webroot-path /var/www/«example.com»`)\ about how to do an automatic renewal by actually obtaining a certificate that way. To backup and restore letsencrypt, to move your certificates from one -server to another, `rsync -HAvaX reaction.la:/etc/letsencrypt /etc`, as root +server to another, `rsync -HAvaX «example.com»:/etc/letsencrypt /etc`, as root on the computer which will receive the backup. The letsencrypt directory gets mangled by `tar`, `scp` and `sftp`. @@ -1667,12 +1667,12 @@ The certbot modified file for your ssl enabled domain should now look like ```default server { - return 301 $scheme://reaction.la$request_uri; + return 301 $scheme://«example.com»$request_uri; } server { index index.php index.html; - server_name blog.reaction.la; - root /var/www/blog.reaction.la; + server_name «subdomain.example.com»; + root /var/www/«subdomain.example.com»; index index.php; location / { try_files $uri $uri/ =404; @@ -1688,15 +1688,15 @@ server { } listen [::]:443 ssl; # managed by Certbot listen 443 ssl; # managed by Certbot - ssl_certificate /etc/letsencrypt/live/reaction.la/fullchain.pem; # managed by Certbot - ssl_certificate_key /etc/letsencrypt/live/reaction.la/privkey.pem; # managed by Certbot + ssl_certificate /etc/letsencrypt/live/«example.com»/fullchain.pem; # managed by Certbot + ssl_certificate_key /etc/letsencrypt/live/«example.com»/privkey.pem; # managed by Certbot include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot } server { index index.html; - server_name reaction.la; - root /var/www/reaction.la; + server_name «example.com»; + root /var/www/«example.com»; location / { try_files $uri $uri/ =404; } @@ -1711,35 +1711,35 @@ server { } listen [::]:443 ssl ipv6only=on; # managed by Certbot listen 443 ssl; # managed by Certbot - ssl_certificate /etc/letsencrypt/live/reaction.la/fullchain.pem; # managed by Certbot - ssl_certificate_key /etc/letsencrypt/live/reaction.la/privkey.pem; # managed by Certbot + ssl_certificate /etc/letsencrypt/live/«example.com»/fullchain.pem; # managed by Certbot + ssl_certificate_key /etc/letsencrypt/live/«example.com»/privkey.pem; # managed by Certbot include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot } server { - server_name *.blog.reaction.la; - return 301 $scheme://blog.reaction.la$request_uri; + server_name *.«subdomain.example.com»; + return 301 $scheme://«subdomain.example.com»$request_uri; } server { - server_name *.reaction.la; - return 301 $scheme://reaction.la$request_uri; + server_name *.«example.com»; + return 301 $scheme://«example.com»$request_uri; } server { - if ($host = reaction.la) { + if ($host = «example.com») { return 301 https://$host$request_uri; } # managed by Certbot listen 80; listen [::]:80; - server_name reaction.la; + server_name «example.com»; return 404; # managed by Certbot } server { - if ($host = blog.reaction.la) { + if ($host = «subdomain.example.com») { return 301 https://$host$request_uri; } # managed by Certbot listen 80; listen [::]:80; - server_name blog.reaction.la; + server_name «subdomain.example.com»; return 404; # managed by Certbot } ``` @@ -1795,7 +1795,7 @@ mariadb CREATE DATABASE wordpress DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; GRANT ALL ON wordpress.* TO 'wordpress_user'@'localhost' -IDENTIFIED BY 'FGikkdfj3878'; +IDENTIFIED BY '«password»'; FLUSH PRIVILEGES; exit ``` @@ -1824,11 +1824,11 @@ cd temp curl -LO https://wordpress.org/latest.tar.gz tar -xzvf latest.tar.gz cp -v wordpress/wp-config-sample.php wordpress/wp-config.php -cp -av wordpress/* /var/www/blog.reaction.la -chown -R www-data:www-data /var/www/blog.reaction.la && find /var/www -type d -exec chmod 755 {} \; && find /var/www -type f -exec chmod 644 {} \; +cp -av wordpress/* /var/www/«subdomain.example.com» +chown -R www-data:www-data /var/www/«subdomain.example.com» && find /var/www -type d -exec chmod 755 {} \; && find /var/www -type f -exec chmod 644 {} \; # so that wordpress can write to the directory curl -s https://api.wordpress.org/secret-key/1.1/salt/ -nano /var/www/blog.reaction.la/wp-config.php +nano /var/www/«subdomain.example.com»/wp-config.php ``` Replace the defines that are there\ @@ -1845,7 +1845,7 @@ define('DB_NAME', 'wordpress'); /** MySQL database username */ define('DB_USER', 'wordpress_user'); /** MySQL database password */ -define('DB_PASSWORD', 'FGikkdfj3878'); +define('DB_PASSWORD', '«password»'); /** MySQL hostname */ define( 'DB_HOST', 'localhost' ); /** Database Charset to use in creating database tables. */ @@ -1878,7 +1878,7 @@ mdir temp && cd temp fn=blogdb db=wordpress dbuser=wordpress_user -dbpass=FGikkdfj3878 +dbpass=«password» mysqldump -u $dbuser --password=$dbpass $db > $fn.sql head -n 30 $fn.sql zip $fn.sql.zip $fn.sql @@ -1896,7 +1896,7 @@ Copy everything from the web server source directory of the previous wordpress installation to the web server of the new wordpress installation. ```bash -chown -R www-data:www-data /var/www/blog.reaction.la +chown -R www-data:www-data /var/www/«subdomain.example.com» ``` Replace the defines for `DB_NAME`, `DB_USER`, and `DB_PASSWORD` in `wp_config.php`, as described in [Wordpress on Lemp] @@ -1914,7 +1914,7 @@ mariadb DROP DATABASE IF EXISTS wordpress; CREATE DATABASE wordpress DEFAULT CHARACTER SET utf8; GRANT ALL ON wordpress.* TO 'wordpress_user'@'localhost' -IDENTIFIED BY 'FGikkdfj3878'; +IDENTIFIED BY '«password»'; exit ``` @@ -1936,7 +1936,7 @@ tar -xvf wordpress.sql.zst fn=wordpress db=wordpress dbuser=wordpress_user -dbpass=FGikkdfj3878 +dbpass=«password» mariadb -u $dbuser --password=$dbpass $db < $fn.sql mariadb -u $dbuser --password=$dbpass $db ``` @@ -1996,11 +1996,11 @@ Then edit the virtual servers to be logged, which are in the directory `/etc/ngi ```text server { - server_name reaction.la; - root /var/www/reaction.la; + server_name «example.com»; + root /var/www/«example.com»; … - access_log /var/log/nginx/reaction.la.access.log; - error_log /var/log/nginx/reaction.la.error.log; + access_log /var/log/nginx/«example.com».access.log; + error_log /var/log/nginx/«example.com».error.log; … } ``` @@ -2080,7 +2080,7 @@ obscurely connected to the configuration of each of the other things. ### Setting DNS entries for email -An MX record for `reaction.la` will read simply `mail` (no full stop, that +An MX record for `«example.com»` will read simply `mail` (no full stop, that is for the case that you are trying to have a totally unrelated host handle your mail) Check that it is working by using an MX lookup service such as [MX tools] and [Dig] @@ -2154,8 +2154,8 @@ know for sure it is from you, and has not been altered in transit, but not be able to prove to the whole world that it is from you. A DMARK record can tell the recipient that mail from -`rhocoin.org` will always and only come senders like -`user@rhocoin.org`. This can be an inconvenient restriction on +`«example.com»` will always and only come senders like +`user@«example.com»`. This can be an inconvenient restriction on one's ability to use a more relevant identity. Further, intermediate servers keep manging messages sent through them, @@ -2286,7 +2286,7 @@ The `postmaster: root` setting ensures that system-generated emails are sent to the `root` user. You want to edit these settings so these emails are rerouted to your email address. To accomplish that, replace «your_email_address» with your actual email address, or the name of a non root user.. Most systems do not allow email clients to -login as root, so you cannot easily access emails that wind up as `root@mail.rhocoin.org` +login as root, so you cannot easily access emails that wind up as `root@mail.«example.com»` Probably you should create a user `postmaster` @@ -2411,8 +2411,8 @@ Modify `/etc/postfix/main.cf` using the postconf command: # SMTP from other servers to yours # Make sure to substitute your certificates in for the smtp # and smtpd certificates. -postconf -e smtpd_tls_cert_file=/etc/letsencrypt/live/rhocoin.org/fullchain.pem -postconf -e smtpd_tls_key_file=/etc/letsencrypt/live/rhocoin.org/privkey.pem +postconf -e smtpd_tls_cert_file=/etc/letsencrypt/live/«example.com»/fullchain.pem +postconf -e smtpd_tls_key_file=/etc/letsencrypt/live/«example.com»/privkey.pem postconf -e smtpd_tls_security_level = may postconf -e smtpd_tls_auth_only = yes postconf -e smtpd_tls_mandatory_protocols=!SSLv2,!SSLv3,!TLSv1, !TLSv1.1 @@ -2424,8 +2424,8 @@ postconf smtpd_tls_session_cache_database # smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache # # SMTP from your server to others -postconf -e smtp_tls_cert_file=/etc/letsencrypt/live/rhocoin.org/fullchain.pem -postconf -e smtp_tls_key_file=/etc/letsencrypt/live/rhocoin.org/privkey.pem +postconf -e smtp_tls_cert_file=/etc/letsencrypt/live/«example.com»/fullchain.pem +postconf -e smtp_tls_key_file=/etc/letsencrypt/live/«example.com»/privkey.pem postconf -e smtp_tls_security_level=may postconf -e smtp_tls_note_starttls_offer=yes postconf -e smtp_tls_mandatory_protocols='!SSLv2, !SSLv3, !TLSv1, !TLSv1.1' @@ -2456,20 +2456,20 @@ cat /var/log/mail.log |grep TLS You should now see some TLS activity for those emails, and you should receive the emails. OK, now we are all done, unless you want people to send you emails at -cherry@rhocoin.org, and to be actually able to usefully read those emails +«username»@«example.com», and to be actually able to usefully read those emails without setting up forwarding to another address. Well, not quite done, for now that you can receive emails, need to add your email to to your DMARC policy.\ -`v=DMARC1; p=quarantine; rua=mailto:postmaster@rhocoin.org` +`v=DMARC1; p=quarantine; rua=mailto:postmaster@«example.com»` A dmarc record is a text record with the hostname `_dmarc`, and the policy is its text value. ### SASL At this point any random person on the internet can send mail to -`root@rhocoin.org`, and you can automatically forward it to an actually +`root@«example.com»`, and you can automatically forward it to an actually usable email address, but you cannot access his email account at -`root@rhocoin.org` from a laptop using thunderbird, and accessing it +`root@«example.com»` from a laptop using thunderbird, and accessing it through the command line using `mail` is not very useful. Because although Postfix by default accepts sasl authenticated mail @@ -2482,11 +2482,11 @@ smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_una It has yet as yet nothing configured to provide `sasl` authentication. We don't want random spammer on the internet to send email as -`random@rhocoin.org`, but we do want authenticated users to be able to do +`random@«example.com»`, but we do want authenticated users to be able to do as they please. So, need to install and configure Dovecot to provide sasl, to authenticate -cherry to Postfix. And need to tell Postfix to accept Dovecot authentication. +«username» to Postfix. And need to tell Postfix to accept Dovecot authentication. However, before we do any of that, there is a very big problem, that all email systems that allow clients to send email are a bleeding security hole, @@ -2585,19 +2585,19 @@ For each domain name that has an MX record pointing at this host add the ```bash postconf virtual_alias_domains -postconf -e virtual_alias_domains=reaction.la,blog.reaction.la +postconf -e virtual_alias_domains=«example.com»,«subdomain.example.com» postconf -e virtual_alias_maps=hash:/etc/postfix/virtual ``` Now create the file `/etc/postfix/virtual` which will list all the email addresses of users with email addresses ending in those domain names. ```default -ann@reaction.la ann -bob@reaction.la bob -carol@blog.reaction.la carol -dan@blog.reaction.la dan -@reaction.la blackhole -@blog.reaction.la blackhole +ann@«example.com» ann +bob@«example.com» bob +carol@«subdomain.example.com» carol +dan@«subdomain.example.com» dan +@«example.com» blackhole +@«subdomain.example.com» blackhole # ann, bob, carol, dan, and blackhole have to be actual users # on the actual host, or entries in its aliases file, even if there # is no way for them to actually login except through an @@ -2627,9 +2627,9 @@ We then enter the email address and password, and click on `configure manually` Select SSL/TLS and normal password -For the server, thunderbird will incorrectly propose `.blog.reaction.la` +For the server, thunderbird will incorrectly propose `.«subdomain.example.com»` -Put in the correct value, `rhocoin.org`, then click on re-test. Thunderbird will then correctly set the port numbers itself, which are the standard port numbers. +Put in the correct value, `«example.com»`, then click on re-test. Thunderbird will then correctly set the port numbers itself, which are the standard port numbers. [tutorial](https://www.linux.com/training-tutorials/how-set-virtual-domains-and-virtual-users-postfix/) @@ -2955,7 +2955,7 @@ To set up Git on the cloud, and to use git on the cloud [see](http://blog.davidecoppola.com/2016/12/how-to-set-up-a-git-repository-locally-and-on-a-remote-server/). -On my system, I ssh into the remote system `reaction.la` as the user +On my system, I ssh into the remote system `«example.com»` as the user `git` and then in the `git` home directory: ```bash @@ -2973,7 +2973,7 @@ git init git add * git commit -m"this is a project to so and so" git remote -v -git remote add origin git@reaction.la:~/MyProject +git remote add origin git@«example.com»:~/MyProject git remote -v git push -u origin --all # pushes up the repo and its refs for the first time git push -u origin --tags @@ -2993,8 +2993,8 @@ their public key with the putty key gen copy and paste public key. Make sure the config file `~/.ssh/config` contains - Host reaction.la - HostName reaction.la + Host «example.com» + HostName «example.com» Port 22 IdentityFile ~/.ssh/id_ed25519 @@ -3389,8 +3389,8 @@ to hppts governed by a lets encrypt certificate. [GitLab Mattermost](https://docs.gitlab.com/omnibus/gitlab-mattermost/#getting-started) expects to run on its own virtual host. In your DNS you would then have -two entries pointing to the same machine, e.g. gitlab.reaction.la and -mattermost.reaction.la. GitLab Mattermost is disabled by default, to +two entries pointing to the same machine, e.g. gitlab.«example.com» and +mattermost.«example.com». GitLab Mattermost is disabled by default, to enable it just put the external url in the configuration file. Github, on the other hand, allows you to point [your own domain name to @@ -3456,7 +3456,7 @@ Eight gig, two cores, which you will need to run gitlab for everyone, is Also, [vpn on the cloud](https://github.com/Nyr/openvpn-install). -Currency project should be [hosted on digital ocean at git.reaction.la, at +Currency project should be [hosted on digital ocean at git.«example.com», at \$20 per month (Four gig, two cores), using Gitlab free omnibus edition](ww.digitalocean.com/community/tutorials/how-to-use-the-gitlab-user-interface-to-manage-projects). They suggest configuring your own Postfix email server on the machine @@ -3558,10 +3558,10 @@ $ cat ~/.local/share/applications/bitcoin.desktop [Desktop Entry] Type=Application Name=Bitcoin -Exec=/home/cherry/bitcoin-22.0/bin/bitcoin-qt -min -chain=main +Exec=/home/«username»/bitcoin-22.0/bin/bitcoin-qt -min -chain=main GenericName=Bitcoin core peer Comment=Bitcoin core peer. -Icon=/home/cherry/bitcoin-22.0/bin/bitcoin-qt +Icon=/home/«username»/bitcoin-22.0/bin/bitcoin-qt Categories=Office;Finance Terminal=false Keywords=bitcoin;crypto;blockchain;qwe;asd; @@ -3571,7 +3571,7 @@ cat ~/.config/autostart/bitcoin.desktop [Desktop Entry] Type=Application Name=Bitcoin -Exec=/home/cherry/bitcoin-22.0/bin/bitcoin-qt -min -chain=main +Exec=/home/«username»/bitcoin-22.0/bin/bitcoin-qt -min -chain=main Terminal=false Hidden=false ```