From 8adfa1bbdc118c0e2737c2aaeb8057bdebc4f69b Mon Sep 17 00:00:00 2001 From: jackyu66git Date: Wed, 30 Apr 2025 11:17:50 +0800 Subject: [PATCH] Add web server deployment --- .DS_Store | Bin 6148 -> 6148 bytes __pycache__/BI.cpython-312.pyc | Bin 8645 -> 0 bytes __pycache__/CTime.cpython-312.pyc | Bin 3367 -> 0 bytes __pycache__/ChanBIZS.cpython-312.pyc | Bin 3483 -> 0 bytes .../ChanLun_Classifier.cpython-312.pyc | Bin 19601 -> 0 bytes __pycache__/Enum.cpython-312.pyc | Bin 5237 -> 0 bytes __pycache__/KLC.cpython-312.pyc | Bin 4285 -> 0 bytes __pycache__/KLU.cpython-312.pyc | Bin 955 -> 0 bytes __pycache__/ZS.cpython-312.pyc | Bin 2681 -> 0 bytes __pycache__/__init__.cpython-312.pyc | Bin 164 -> 0 bytes deploy.sh | 82 ++++++++++++++++++ gunicorn_start.sh | 4 + start_service.sh | 17 ++++ system/chanlun.service | 14 +++ system/readme | 12 +++ 15 files changed, 129 insertions(+) delete mode 100644 __pycache__/BI.cpython-312.pyc delete mode 100644 __pycache__/CTime.cpython-312.pyc delete mode 100644 __pycache__/ChanBIZS.cpython-312.pyc delete mode 100644 __pycache__/ChanLun_Classifier.cpython-312.pyc delete mode 100644 __pycache__/Enum.cpython-312.pyc delete mode 100644 __pycache__/KLC.cpython-312.pyc delete mode 100644 __pycache__/KLU.cpython-312.pyc delete mode 100644 __pycache__/ZS.cpython-312.pyc delete mode 100644 __pycache__/__init__.cpython-312.pyc create mode 100644 deploy.sh create mode 100644 gunicorn_start.sh create mode 100644 start_service.sh create mode 100644 system/chanlun.service create mode 100644 system/readme diff --git a/.DS_Store b/.DS_Store index 6cd3efbfbdcb01df3ab8c2d15aee50b6d5fa35ec..34a17da7d692251cfd0629a5c729e5b29eadaef3 100644 GIT binary patch delta 174 zcmZoMXfc=&$(_oOo0D!BoSdIqu-TD$Ib%I10|NsaLoq`o5SK6@Ndv`U07X7G-^C>< xCqD@&$?;WlUf{C_#~gudG&Ly%)f8laoWYq}0JUZFZYCeri47W?**X650|0GEEz|%2 delta 211 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 bzc7t|W4h*naDT diff --git a/__pycache__/CTime.cpython-312.pyc b/__pycache__/CTime.cpython-312.pyc deleted file mode 100644 index bb87c580a19f29e037fa884cce114adb3b3ce66d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3367 zcmeHJUrZE77@yhOy<6@MuW~>QDpIY9S0kr}q+lCskSZoE6*w9>tINr(dcbiyyVOFi z(FfB&W1~C)F^1y_iA{R858{*97j62`rM8i5Y|^BC@vY?^n()-`+ub|P^U$R6v6Jj? z=KC`{-+c3Z-^`EYX~IxL2yr$~gTDYKZa>hXlyYfEi(R7v&#&=W)@QOZbEU|vQq)2Iu77!{cdP+~qN z0?*APpghbCC^HXW8Iu9M!(}1ADIJX95^}*BxP%M7>=)J&DVicmUYrtuqB%0<0xD+` zNr^z=Osl0NpmO^sDK}8y9Y^K?%AKc3Um!PL?Qc0lN`}cCZ41e!IIPCFDJ7DF`dQP( zV#B6*HaWyicOpJGq^qV|Q+tzx%oJlodeSV{R9!*;X?iSi4ySACz-f*<F2cV%!ozqqhgu67AYvI0FZ-4kGPxh(3diXR~&+9zK)bJ1p6*#F_SObQxo{6hk z_~6;tVAyhO{kdUNR+RW)TvwElbv7?YqdTpNQ(5KN>O99e+O)NA4u~@xT@kv zcY-v3hy_yNIz$=B@`qR;6CGJ$P&r}-vKvw-TJ(zl${^fI?h>tm;48UDw5F_+%z4^4 zy1*26H>}VwbbC!&w?g;LNd*D&Y~;*Q{u)ft(Cu}6J>s ze=75#5o|X6&A-1~abf*J!-J;#O%FR3>W!oAM#smGJ5DTioG?!I80|45c*^jf;z2Ox z|9JWD@xrUXfqWyvCV;{iaO+77f)T$R0ybr-*P^=R`NC|&{IN3i6Bw+Wsn^96y^dK^ zI2UGMV~~rEbd8+Cj0?Hicr|GA4FDlmQ5_5kRy0G6JU5_gxJaE7)Ma|I1?pNS>?x4j zlfysd?277%(0FLF`C4sSocuJ+X8UIPG8Jhh6UiK!Z@AZZw{f9)ewPtwHRRUk z;}28I@wb1Gq$<1S+pZCc4MF)8edm#(T5no7TD3Ol*GrLe(#U!-jnL1>3&z@-iJM z?Fy$%zhBxVyh-m3<%(cO(Mm`H zw?rBM_l1_FXdhPTqLzDQzY2C78z9gw0<3jmWE$=?ecSXTxN)*&`pDFgv_3mBGXl)U z+l})b3l$5I2gmOpe-vyVYx%RJPUK$q-R_6tPre^~MpyUauAarNo=3shXbYxs{doPO zimjvKSDxpq6}sKZ(*_uE6N#sEjcCB zrgp#ttr7ry5(r+sFm_?GV!CRoYV4vR*S=aqp%OcW@?EeXug9eeOClPmK4TzIJ5dV@ z{i=amr?*dSUkq$9EyP9E16XDa){L3UO$kOKJN>S>i%YMYHpGrsQ zvYSe+fReOrc^#FuWPz@;jJ5uP7F%&{709>YPqqvbX+?h5ws}8q1QJWOhSvV&qLltd PHvi+^LF<+YfHmh|((_Sg diff --git a/__pycache__/ChanBIZS.cpython-312.pyc b/__pycache__/ChanBIZS.cpython-312.pyc deleted file mode 100644 index 4c226f229cbe1293569a023129cb7c209158e574..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3483 zcmb_f-EUMy6u)1)d%Ju4LBF=UEzk-Gmty-sRHCSnB1kaRh{j}JZkC-(-Ll=5xpxz~ z*@r&Vq<~ctO^Tlo6HOE(#29U?${*lU6G+#a7)=bX9wOMQJ*g4X^z^ z4dJ|q&|vQdA+Ph{E$gz7O7c}7Fb^PW|=Q3WDi*9zr_H;W>EGC7r zd19aSw7h-R_0%zHdy$h_E0=X#FPt7513NE_#&Gx1T-w1Pu(EkC3~aREdNI!Vgh&G87<^pQ}Z;(&Yfb2Df)z>dmX&dZfN%p^uO-d z)af5iXHNIOLPv+~jN5;T+GkvvCU$=T1}&0y)BPB*j9}FEjg5P{1z@wTWfixGVD1xL z7zWN&AQMu#qkBqwyS|+0SxEHGCwf6?C?~gF?)#u`A-R7(xgR=MZ(r)P;-Ef-)vT1!H1k`i;w`QrHOtcd!4v^3(O@k0+Kc zzOy(xu{itH-J2gRz4iIx?AObmezx-Ay4$(>W$bR+EnZ7>rgENDU57zAY_?vhNq{-!Vli4D{IR-K&V zGCMQw$IrZS?HWJu$`^A>Kf=kY53JHQFr@8B(0``NkB+@w)Q?fe9&!*ZL?ZV?6pzaX zi!C)i;GMX+vkM5Eza4Kl_G@fQ*=SlYy5^0p1!Kp&vE#~-+eYuIDjChpH=9>f3Tr&z z8fm!NjbMQd>a514YFbsZu=WJ=YU?GdHi28=SyBsl-Q0b?zvkXs{^T-*$?=sRZm!Ht zE?t~@ZO{zUF0k_qbcd)X6bl@UBk4qfv0!T4t7yI68>BaPYD}yG<)PSG<5jgcdqu(|9%1RzwTI;mck;i>n-17&Qz!Vjf@N3a z3d%LP!eWHi%?&ZaJNt2hpCcF})3Jwvh;hmxE}fg^Va_iMa~U5Hfe+;xd=YdvRQqC6 zjjN#tJuHy5v;#8zzad+ky|57(K6C;Z$~DMzM24?XRmm1zPgY^W`a50sFxWP~*yWk; z?#+CQj>8ZZ@KCOXNB2NSv8~2wBKDuILWd8^bp3jUd;%cDYF@HK zxApB0p5>pP9>iFkLW{HKm%q7*KE^u`K1R6~AKrIys0ttN7y!eHpES*_;NZyr1L}eg zDp3UruT)YyN97xIM>el7;;8MH;`FrfGKgWMy}(&wR1hM$uJvZ~6md`IfJ UBenk~b^jS2kma^D2`QWV7rM70O8@`> diff --git a/__pycache__/ChanLun_Classifier.cpython-312.pyc b/__pycache__/ChanLun_Classifier.cpython-312.pyc deleted file mode 100644 index b79fd6944e2a331b01207f2858c71ca3230e0482..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19601 zcmch9d3;m%wda+reYYgbmb}R;7KFXo{8uC^!F> zxFvpSSSGL*-owg*TX6X$B{|hXeBn(?PeWPw2yY2rp4_c~^2-9spvtWxVX}ZasBvqE zTOQB`b#7fy@74zmZbQ)MHU>>@Q?T4!9yGhnL5tf$_!I$a(CW4lw=z%>tZ-Klw<=%@ z+T1qcRtGABmF`O7)RqiU{)&}fByW39Ox_~3-a65=w5~vQ=xNGxnwY!e=Q+?3s zZXjX$Kx44U-4twgH|Kd;g01dW;x+^p1>4+h#BB_?f{WdYiQ5!d5?tb5lILIQUIuxV z2ik)j?vCI+?t6lr?#|$H_wrzuyGuezsm&B^K19)$(^9_g+}#HxF6$h6`p1@bJR0#c zk&a=nZ%@a=OnBJui*^h!{->jim-cszLZpZGM!g*yc6&oE38#(@1^u)?5cQ&GBgFJE z-k{&5;&jO2>3iJs$tND(#2JWh+x7?hH+eQb_z0&Z{`C(M56`-D)8?Wm_s*iI^*bLX zK0Tibd?ZsolWp5KKrv9f5@WY*f3)D-08Rylu76Mn+*#z@v{{IE?-b&pD3_GeLreU9 zVJ7H}M*R$@f+qWyhem_IWo7&kZ*U~w_e8^WP3$}OQOx0IIn%Lb&h^pMOglTv>9>3kYk6FORUNa9w~dRh)|6>Xpu z@K)1CS_y9rZK751*3#v)8s0iubBJ>5X)RF0fijnwE6+D3vsnjUc?0CAeFN>#$`tgxe9w+_9e|t z2&4La#e0?kLP$Fwhfr+iK^;pCBj182CW#^+d7{Ez3H-v&MN7vZRPe==tYlar@E6{+ zgjG7I;SzhHFv>9%D`li~Sx7?5Vrr<1wvbwIu_{)LT&xth^&wKU8-m}PpHSw`|_I;oB6SUFS6%7=|Y%EDWy z^+xI`I9W*f`j~+=usT+MAFv(K$tYGAGe*mWG{a`WRd}-+R(qyg*w11nRyHnS^t6&T z2Q)!#tURcTnPGQS(v|@1_%Tb+7_$aVG2G3Sa7vZOY(@Du7xEQctdX|b!2|D#{M(j) zSLWYU`L{j)cI4mH`FBnJU5js8M(fVho!0UB$0`RYy8c@dpiV*?ifAKoHxb(WEeYLn zQW>j~QmmP+WUJ^_a9P+2VI1g1(Cclq>&)WQs(jw|qVZZH@JT4vKD>zMD5lttLN5{? z81aQq%u$r%Qr2;T`i6K4LmG$JLlroF;9r(+xh?M(daN?<7kaKL?-zQ`k@pKdYR~)I zF~3-K(TFWxSVtTw*2Go|^BQ&=o4_+J3H6p-iG`WoF>fW-K(Ewj0nIq5SS_m+-F2)6 zRwKkfcs;8X-Oi$#m71&dtg~pYHr$1~maQw|Ze$zidj_OzBi%V59hAnJ=;a@yCmPsl zwu$bd%g%J4&hIJ3JreB@`UZB3rGmTgrh9}r!Bm#!7`~^#Ex2OMp(pQ}^NPFXyj;ky z@P?c_?wa$;yXM?o$Wd@X&Qi8I)?75h?`50k&+wx0y3@RCE;aAiGN$ehy|+>*zwl-i zY}pui3oG`nEnX$I_{lqzv#OB4;G%oatQN|MwG_4cJ|R>>MOO>lY|BUO;q)3nm1Sqv z3ay7dy`r$E7xHHHCn$OyYk+<&E0l7i5_bBM^KU2Rx_|U6zy*yn|6Kn0FRuLCNfCI= z9RAY1_q1Gj@zCtore?qN+SS*-f91{3KfZZ=I2?)2PQEnr%@@R!y(3^`(%pCdp?6IFh0x^?P zxqAkN03nWeqq}>ZR}Q~1^Y*iRyL^2w|Lot^|NKWYM?VLZ zS(t-wG!hL5p~}!f5$KoazBlvQiS{_v&QlZR)Ij?WzZ z`b>Q4>Q8?(^YSSuq_{J${^G>dmyYmN7&Gn~3VE3Wy@BxHP$W9!n?rH)%DK8P{FhIh z`{p{X%scAKSLls(a|n3m5P`b1oI1Pd5FW9_(`_ zUpSD*{kslC8NZ*?`T_WRg8nEo_C%o-$Xfw**qG@L#Fg@%SggB}J1 zol>beHRB)j@NLnclWz~niYv$2M;hVrhkO9w83y+nmyE&fdk)d=9D?RK#H}vbmCssV z+x+{nL+kS6@#;FJ6C(1ych|Yfu5^*-59=5gL=3_oJl7zC=>iAImDvm~2*3$Lk~7;$ zz#J)(2KU@~3{djDvH{r&y+S$!yN1(+JbsuiAn1je$Q*!BisU@^zu}p~9UeqkwaCF) z$olZmFvXamU85+PML0#sGlXKI5@kH-MNaD5%PIHznO)(CA7h8ZyCR&9A>-+ZM4^vI z8z5_b{?1#bWNFThpS<$pZ?(6#kD_={yl8u!3~9+Hu%6gpP7Z?kP>7S^WE{E*^P1_0 zU=W}xU`PWXc1FV^BV=U5qahkkJA#!Kl&vOjX z`-^IH_2;j_Hqz_l)Pw$LUTT#MLSS^JYI+8QDXYTsyzjgRF}?P&mZg4}~)i0O5=x3)x{J%zBIxS3D;Nbp({Fhl8%r zTCQvW#!yGbkl)EY%u|@I3A0r0_C`RV!7yG7+J(f2;Tp0Lld3SdayUf<2G38sTA5~K za$=YP&%45*#2FWyQk;T6gE;-XlZ4aod?C;fa2kFvBCw}%D&9>GFo-!h<>MZHCMyr* z9R}Jz;2jM_^G6c12ifE>Ye!*C@r~mYG)YwGwuQYU4UKSW=z4wva2kI34#Gam>4o)3 zHe60y)M=a=I@iPCih;$C+dQeV;&Fb}C=T#%UB1p(L+JH<#d)8WuNm)=(`2=&kOpAu z$QMQmh;W+1Vu`duBL$fA(Qh*KIW6Cdq>smHZ`WxQMK?m$kuDj|^=np2SCP`z{; z8IBv`58hHxHv36S;)xS=lTB&+vP?yLT$8iZ99uiFHn}9(o3gY|Te{Mgu8gH8uDY(E zY8Fp)Pmab_x$64q>U+}F_e@p2vn4&WFa4PR8b$pZ$-~lA^*uK!s^$~Yw5lqu9Iw2r zHN^M5a9^VHJ#EcJU3tp9F{|5@vs7L)P>v-zy91m#dri*Sl&f~;DynkMhFpa$XR8Fq z^-7&X6E|G1qjdIM-ID3L&U9U8rmpJ-CDAXP(2SRjKbmV@GHysj-ZM2_D}%sm3d-z^ zD=wB>k5x}pCmx&JoGtH;D{d$#o%wgVhkvKrk=E^aUsnh1w%1HoxzbgxoWq%{PCJ%~ z@4DvXqsN1yw_#DLtvB7UI%lg%JT?)|iGD~|dAuW6-H>ccS1&1qH!jN6G~BZ5?a;qB z8mYR)T*FGPb}84~#WgSE?5&)${kl=*FvPcBw^6knIY(2jxjk2D|7}%Ma!aOaS{7^yZYgC#zeL)7htWwP{^#VlcTctLuOkSGP?&y3>yC_%`U@ z@&4rM}#xHNZ zrGY*^xgn`Mv3;^DUDKYa>WDv>tEfo~CESTmrz%|Wz6HMOMyUG}$*rmCj`;T6Jl|y~ zV9D_%$-ud#S;uB*skQRhwux;?#pFQN+7sUdO?9*+2UAt;Qx)eFQ^r)~{qZdjXs?Yw zc+p;imCKoIIa77c1dgg)Yg?|i;g((r!?5wl)>~DSsd7AeY;0mI)zp(UuE^Cjo*F(r zJYBacUAJmNd$GJKVLjzI?nt%tWXlV&E7Nr=?-mP{sBatBE*Kh^fJI%lI%8jl^?(JY ztIp|6N4Fl{I<0F+>l%`aC!a|-uFdM!K?KXZd^Jpe(78^RU|A4dE$|zJh3lj zTXezHhHJcm!1+s2;>v z5cn{k1y3oX5GatP^9AAq)c@D=ij-OhC&k0swNQj(){THXtWs^ zn9n0Q2qc0X2D>=fs+m*Z8LPQ{i!NmFD@?Nm$U*A2+6tVm)yJz()Z&aNH5o4G)?L0c zPsat_a(>u~yBM{%SgV_DK*35U0ex*5{FBjgT5(bV`cM^Ua(P`Y`cbE=BN|;5iATLI z@?*Fh{!AxTU@b7y7WjvG$Y?8u4a#FO&_B!RikJfal!c*UWvBDgWFs{$c?!T5(fX=l z>Vj5|wz2B@S{J&KRntUs2)ctRa1*T{@W^5s&}6IFG6;9D8lctRkbzdaBBq7OCF?NL#WUZk@xo2Mz%gU%jN>w<^X(-okz{|N0j zXuO3s)Xr;z5!xVXz6;rceq72LL4%AV2@mN(Q>?tGjwYd(X<1%xpXUYbbG;BJp^p4R z6u~xmhOL6D@Mgt)VrEu1Tv><_T&!8hEoNaY8>ypKpLCG&NuPrLidk7JZQZjGmV=a* zqeWsudPFayVihrK6p<`>*mAalmYs15tpRO(p{@E}B-L6cz^5&tL@wmwFH&HVQ+7nUfLsUz}`Vr8ZY}om!*{?r$`OTj$tec>5@qj^c zU}%4@Q{*gGGl6RD%3B9PQFZyP7f~bh{N(KGZ_YfQneVY>&xMzXgYZ6F8V>kbDk#Clp!xI%ncvBog?CW$oPqyog=g^?X&GZGD|<#-y%ZmjPrMkZVw~htmsk zU``@&A_*c1AqgWH0m9i)qy>p(2qZuMJlU2Ugv=;1DPjK5L%t}lhH8Q!S7kwJlQ2HvP-q~`8TjrN@+QYIbBNT5 z^fW!d>4`(&;6Q%E01o6g@|M%&r9FU)fCduY#Ysjm8vUGfpfiFyp0Ml}ymwPSmW(S{6d}#>Z!j=?cJBw?O(_Qa@R)bCMmo=A$>%8ouc$RrNum$H$<+NZa|)gM4oFE z+B!{2<+$dcY?UDO*&J~#8oV`^?TvtfGxilXsU~&P;RoXn#P=esv@V`pG1-<`Ab{&w5Wq%l>0&y-?nY%1_hbGmkO>WQb~ z{ZOfCYjfJ#JbB=JU1~6xvNmU|A%fja_LR|?t8t#{Ki)sC26S_BXVQM+Gn2k_ZD+>5 zJiaw&t3MW+2qoRgPp531)3z09+lq|s-uPyK%v&XoND|Ma>N+Mzr`%K9-;t$jHl-f> zbbJRu{OQ`&>DtxjHlN>}@`h5it24FX!~Gz?^j$WZ$5*`Y*@X8!V?7|@lx=<1v;iao zfY}vQyl9cJE{bo;IqFX>JHBjEo^iCtx8=Il{-$Exq&Lx-h`hLR!aFHR+gz!Nbs#cT zAVN1g60OPBbCPU%Z+tyM{;dfn*_7CwGB3*N+AbL(;K(x|*Ntm(bqx9zg0w9FCv|%Bp=sheRwuQg~#EHr7kg6245}{p8K1jtB z@TY`76)lOW;jLk1U=jjNFF-SGsml#fJRHa~jQiVyXAc|=5y_DTRx>Of(*+hVT<2jW zfErM8uo?m{L4OLRsiPwJV&wwgo+n|SGn9&#Oa z&x}Ip&}Z$Xc?wtTfaiW082I3Ng&b-E#)VipTRvPTlvjAeD49yf3_A;4f(v@NL@4$m zI?1969sVf>|p*S8l0spEu)){+%Bff95H6F5Jt zSXSzBIlznrmqs}qV(vWwA6VniOaRs@&#s}o2ZIOp6MGtidInDUX#ckUhaT(a6yA{$ ze~9J*{L>gEBk5&e!-_Bw4A6k!5CYR9SmX%U=i~#Rc#3jLNQVV7{~oxQGe}T0;G`oo zgIEHLLs779c(9{D!U?0jo;iXMWs%V!n76^2biid_0QnhQ;G9Zqh*D^TZk~w@tm0t# z2BV}9iuL7Gz)Z%2)8;Miq%mcX8>h;1MmVjIX0P8zY(vapEK>=VT;Fa)@4JS`81oJL z5yn}G^fLs#n7@obiqp~qLO=wBG-zjpGk}492(JWqd|(8MMsQ*XOXs#XuinFMFNOUV z+6Cc$I2BO<=mP9-rmR)RR!yv$wz$$3*Q6_B=?0UE*>=n|;hHutN}Cr=sxs!zxbjk^ zJ+8}@TjC0^2gG%kELPyNRRK`9RNtVa>bCfXoY8#rnZwV#ykxquC*9bSG4_C#d)m~P zHZ>-@E|?ZwlLH&*bglI_sYZ1JCa65wmDqRUzW0oaE&_}P*JJ}&FveBabW~OKbmfwC z<&sS0viKGNv?j~=eHo)O`M`U|mW%aZpm=4+OFO>(P^P|nTzAP)1Bke;^;GD1C{x#d zgOceN=T*y=+JygQ-H4{}?6W^S( z)!v}wddIjlXQ?>W`_n_#Qj&B0}{P^bITJ6`g zz<*swS*yWhGA_TQtD4r;gP|j-&FYrsbmpTw4(~{`{6^=zwn+kwzttz9s+*JBGmcJB zgsWE^-WuOD-i0{51ytdI$7oG6{F&KT>H4euG7 zQ0S;yH@P8UIaPO}E>*Q|Tn+>+U)n@p8Z2K5N)PR>OY7e8$N6jhQaa&SxqAqR#u_9$^NVcaMI#Zn+f4TF#?H@m#+UZSi@}@TKN*R1v z6^$$g=gUpWK&G*4>hW{Ce(>aU&-QfBc95kWd*a=|bpJrQe*i?vVaWs1TNI^UFTH3i zKf3?${)8@LYoq+;m~@{pE(4vV-h`JJ~-;R&DE6oL^$u z)+;M5!6e|!{M$+}caVFOP~8PjL8d6kJb>oafL%54){1hE4)DDw;}kN9iqcLg^|2`T zXiKS(S>5URa*vkCJ%C?9v8^dwRxH#pFZbYKMxH`UUhdJba#n*I9+5}zcw6uY@(3Wy zLN02d9-;&!N4?&;kPlvfF0_nQmEw5DTHpX#s5&pdh^U(tM--5L#Zl7&`K1Enz>1>r zSMqX^kmnv=ekqJlKAt5P=gIhga9*}F*o83>P-BX}DT@8kUohU0O<{0hmhkr0*k z)9CsSNd6-d#KTMqNf1dI$$Ll&5IBQgguhG{$ps`tV~)s|nFdlC@-jJ$|1A)>-73_J z!?5>}TtxB#lK+I{cS!z#>}z@~QOp&t$!Hc3@BH?*iEef+8*rOY*oh zEcsjD(ypm3Q@trOUTe9GD6`?^t|Xgj>Ymztj`=}gdc}_PiXG?oryh5|%T7Nun0{yw zQ05-VdV(@H+zn+mNt(m+Q6{x&n?!Mbv1OZbKFY+M6t&6DD__z`@*+%4mt2E^&mEvUw4V>oY(H1xYG=iFA;m0=PUtV7Hu?>Ho zFZlA~<7f^4pTDyC8><=fz~#-a!iPa(-}L_p)wcOBWTsx6J^4NUV-#rI)w8e9d?9{y z>htiWQqd*c*{{Db`=hV%Hz1ZkTK*cuE9m+*k}f2ZK!{$E&-v=vLzmy0x$$BfmeR`wh+iO9X&I1;+s6v_mBzH^l+CU{>3Xlcyspo@61d* z-|JFxD&YflP7OwH{?l|$!GDy_ybURsH<0`s$(ul2Cf?9a(2x^D35X&%D~#R|B#1f+ zmjsyC(2Hx6K|>XTQUQNo0M{Ml*o*;ABukMjLvjeoPm!EMLTd3dbYU%+w~&xZ{daWz z5eXa)6sa=#cw3mi!kahO8^rqz{FQ0v?Z{|8$Lk1(jsXEUWTN0oX7AzNl(rVtD(1ed zZZjaCOIqvQ?^2tqkF`&Za{0)Ap6;l;_)0Px({! zl^OfMVMAOouE0yvdtX?cXn0RsO^U>$5{d*Z4qR>4PJrSkV`_@a!DxSMcw%_k)|R%l zO;%)V9iSTQ=>1Lk>dA)jrxRUY**DRUd?0OZNtLgTD}X=-*2ZM(WNXIK8CPAjHYNKe z``&5DS~tek7t3oC1IdAN4`j>N!X0XT#rQyCVCsRaenngg>A*T|Xv(UZK`#V~r!C2y ziM1)i;;d>3AMjw(mspoFEXk^t@&SFxuEc#QLt9qm!T?QTdBT@y6Z1$J>a!{*#AFRZ zB@7$0D!j>SZ-DRb;l6dwY()zHt6Sm9v`KS~QmHk6xzR+K?<2PFf22&CR?Fu700CNF z$eI2!jNSjunO^Ghpm^TG6}MO!D=l?XRp2SoRlr5aq7zqM(Dy`9S|QIoT}4?bdA*>g zA-al^Jaq8~m0+#?=rcPip2)*Cp&o@dTQ(^EIDv3>z%@Inlz!$8CqAz81y2#)D8mgw z$Qi!xk&PaM0C8{S&z;-9FP!_{3FSAXzQA%S2)%JY%^^^b4GXTSS7*feJjzV*kq3SVaSGye@LM|NwMp=bvr zqGbf576_ET#;_=oQ6!?=$Z1jXqWRwnAsZunqDJ;VA`Mi3~ z#@ickPaU)0zJ1}B^Y8<8mm|WSutFr$MJJdqwk-X4<(t?OZ<9lX0#(*N}FCkzq|rwT8dA z3__^*fc}?X&v@_dSkc{YTJq61Sc+ztw0}(T**pYK(P$grf9#owXOg2}H^~^=Q>u2-5|^UC|3ixprlCjt z7O8zW5)SqC!!MuoGyemUyUP0e^4~RiT+%*fF@{O|KD3MHkzln#!!3Wsu)mM_pU7s! zA2z`+tUMl0xZaoQmNdLbls%jg$5JL3#$%pyeS(3@6Auj74oi| zh7A&V_06r)MN~P!3{H zv;ETtqHrGJK8 zHcDYO0sVlgCjadV9Pd+>52*UzQQaR<%^y%5eC+#F#qX%$3)JwRWg(@c;|7J4%#;5E Db#t4+ diff --git a/__pycache__/Enum.cpython-312.pyc b/__pycache__/Enum.cpython-312.pyc deleted file mode 100644 index eeca940f655a48e644143a5ed6a807c3213884fd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5237 zcmb_g&2JmW72oA9$t6YcOQz&+%WWK#bzntSYqUWcU_~y)HJ7_Ixs+}8uwliuEQOSu zA>~$X3akJFwILKW;Dh}a1Py%cAJAig06~1RG(b_HJ@w{7EDEHTzBjv+mMk5lwh7Fe zH@}&kd0#X0hF?xjMmhNX?LU8Bl_DJXcWexPL6153is!f|T#IY*ZLY&N_)ee^;ISQO z3mvf`@?3yh;#$Iet|i+1Gr|3?5oBl((2x%eF*FRQvM3u?%`|c)D&}%GOe*AR%U^H@xb8PUnyYth(w$pxu6#0AA)D*=N^kBKu|MsR zX3L)2f=;W|>^0|dx0@StsOY6T+awI1GJ^5lodI&6+fN>Q9CFnCiNx*|C%+$!@4mZ} zBZ$;+puvs>AY~EDlDuppWW@F~vYT

x&jq+ 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 HwMG5|iU9tP diff --git a/__pycache__/KLU.cpython-312.pyc b/__pycache__/KLU.cpython-312.pyc deleted file mode 100644 index f99936db88c64bbc3407b1aafa39e0213bb3a941..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 955 zcmX|9y>HV{5Wi`s2Pwtac3tv$-lebyN`Fid*7Fr>wxlJd^?;lfL}!B!e_>` zi^eqs5U?0r(ptz1U`|-rd^U5-(rx>~{Ssr9$kgl<69(YY4$*0k~SgF2L0T4UrFZn=Adz z?!I4}1(TwSb^N9U0<}K^fmS6WhHPFMMh3E3qW~if8D*9-(vi(a0V9sgSoln2=9~po zbJ4*NY^^7$sBNj*Ni2$CKUBPkl293boaIQeewZqL6dfKZJxcf79^Vl%LI1_8U%L{a=LG`lG~@wejdu)IrjV$=bg-sL%(niWO!OgF9@9hIz`|W zp0j=Ar4G*PNq?v;A)+)Ygg9%`$(&hK{29VI{OoL8^3Tn2YYo-Xcy%3Bea>cwD{VZq z#_flw8snALCBL$!m<|47tVk9sd4S{^$|X=xDL63Jvzfey%+}<6RHdC$*5;<9997H1 zLf~}H8r1BJkSAY4IEOJca%IUDvYu_w-=$s>3Zd#kBv~+s$!-d9I`HDkBUdn1wh_KS znOEKvpNhG9jtt!EPK@VJ7sa37v&;tj=t%?swJ@MYGXJaQppseKIyf<%le(!5$ z{aY*+Ch+|7>%+C5RYLwiMLeMMr~M5Kd&DA^R3TN#kgBpFOQ_2grK%cgRWr0|zz9@> zMzE?II=3m6kP(74N+oQB`4}-GGWncX>JG8A2eP-h5p5{xz+b4OWv0%TOD@x|ZMo&m zTCtMWSa^Q6Fl#O>W|!w#Utwi-K5H)K7Ot7g`2q_URjv$d+U)tFk5UKpd8`Lktc5GXj-7sS9nJY`h}m<8fo)SQe5y zD5M9SIIsy|uZWoETC_)t`5OArC$t81LT(}5&s4WuwOQCpE0@*v^4dC6Dx2Ritz5J0 zTTHFlw_K)dQJdoCOo#NFm9pcqKyho!u31ch85RTyE5o#J%VxR80x)dWT^1}mrcmfXHJEM!N!c~cW&|dL62fg=fbU6bZ1QmCVCJ^^Lw{>~sPdwHWKjxq46RnX8V2HMc;xL3; z!?-Nc8cEz%ccX3KB_+RwKtY)|CWecR2}Jx_1 z=_qW&qUasA0d^9_Zlf0fL~yvKC%A}M4{g)z>qOUSqc|>30YG>o7kSS0=rcY3SdZ^d z9bP`T{6wGP#n_FWj{86IPAAYSiQuDX9y{LLLc#J1c5K?+(0SRJE~+G4c;|!*^b$-o`@3p_HO0J%o*PYq2eI>d zK=IZS1II_c;X8}WbQnNXj$c9;p}4PtMT>t0 zcoI8u8te|9FL1j1Lfy|l)hD>mxpW_1=(S?iHcb{b&FZFAub>5?{bq)J*GVZxXA++-W(yoB@J;15c`ZETfmYZUWMRRE@DYxOF{e+3l(3{dfq diff --git a/deploy.sh b/deploy.sh new file mode 100644 index 0000000..2931380 --- /dev/null +++ b/deploy.sh @@ -0,0 +1,82 @@ +#!/bin/bash +# 缠论分析系统生产环境部署脚本 + +# 显示执行的命令 +set -x + +# 确保脚本在错误时停止 +set -e + +# 项目根目录 +PROJECT_DIR=$(pwd) +echo "项目将部署在: $PROJECT_DIR" + +# 创建虚拟环境 +echo "创建Python虚拟环境..." +python3 -m venv venv +source venv/bin/activate + +# 安装依赖 +echo "安装依赖包..." +pip install --upgrade pip +pip install flask pandas matplotlib ccxt pytz talib-binary gunicorn + +# 安装任何额外的系统依赖 +# sudo apt-get update +# sudo apt-get install -y python3-dev + +# 检查目录结构 +echo "检查目录结构..." +mkdir -p web/templates + +# 创建日志目录 +mkdir -p logs + +# 创建启动脚本 +echo "创建启动脚本..." +cat > start_service.sh << 'EOF' +#!/bin/bash +# 缠论分析系统启动脚本 + +# 项目根目录 +PROJECT_DIR=$(pwd) +cd $PROJECT_DIR + +# 激活虚拟环境 +source venv/bin/activate + +# 启动服务 +cd web +echo "启动缠论分析系统服务..." +gunicorn app:app --bind=0.0.0.0:8123 --workers=4 --timeout=120 --log-level=info --log-file=logs/chanlun.log --daemon + +echo "服务已启动,端口8123" +echo "日志文件位置: $PROJECT_DIR/web/logs/chanlun.log" +EOF + +# 创建停止脚本 +echo "创建停止脚本..." +cat > stop_service.sh << 'EOF' +#!/bin/bash +# 停止缠论分析系统服务 + +echo "停止缠论分析系统服务..." +pkill -f "gunicorn app:app" +echo "服务已停止" +EOF + +# 添加执行权限 +chmod +x start_service.sh +chmod +x stop_service.sh + +# 修改app.py中的调试模式(生产环境应关闭调试模式) +if [ -f web/app.py ]; then + echo "配置app.py为生产环境模式..." + sed -i 's/app.run(debug=True, host='\''0.0.0.0'\'', port=8123)/# 在生产环境中,使用gunicorn启动服务\n# app.run(debug=False, host='\''0.0.0.0'\'', port=8124)/' user_data/Chan/web/app.py +else + echo "警告: 未找到app.py文件" +fi + +echo "部署完成!" +echo "使用 ./start_service.sh 启动服务" +echo "使用 ./stop_service.sh 停止服务" \ No newline at end of file diff --git a/gunicorn_start.sh b/gunicorn_start.sh new file mode 100644 index 0000000..3cc3427 --- /dev/null +++ b/gunicorn_start.sh @@ -0,0 +1,4 @@ +#!/bin/bash +cd /path/to/your/project/user_data/Chan/web +source /path/to/your/virtualenv/bin/activate # 如果使用虚拟环境 +exec gunicorn app:app -b 0.0.0.0:8123 --workers=4 --timeout 120 \ No newline at end of file diff --git a/start_service.sh b/start_service.sh new file mode 100644 index 0000000..ddacc45 --- /dev/null +++ b/start_service.sh @@ -0,0 +1,17 @@ +#!/bin/bash +# 缠论分析系统启动脚本 + +# 项目根目录 +PROJECT_DIR=$(pwd) +cd $PROJECT_DIR + +# 激活虚拟环境 +source venv/bin/activate + +# 启动服务 +cd web +echo "启动缠论分析系统服务..." +gunicorn app:app --bind=0.0.0.0:8123 --workers=4 --timeout=120 --log-level=info --log-file=logs/chanlun.log --daemon + +echo "服务已启动,端口8123" +echo "日志文件位置: $PROJECT_DIR/web/logs/chanlun.log" \ No newline at end of file diff --git a/system/chanlun.service b/system/chanlun.service new file mode 100644 index 0000000..cf0742b --- /dev/null +++ b/system/chanlun.service @@ -0,0 +1,14 @@ +[Unit] +Description=Chan Lun Trading Analysis +After=network.target + +[Service] +User=your_username +Group=your_groupname +WorkingDirectory=/path/to/your/project/user_data/Chan/web +ExecStart=/path/to/your/project/gunicorn_start.sh +Restart=always +RestartSec=10 + +[Install] +WantedBy=multi-user.target \ No newline at end of file diff --git a/system/readme b/system/readme new file mode 100644 index 0000000..03439a7 --- /dev/null +++ b/system/readme @@ -0,0 +1,12 @@ +# copy chanlun.service to: +/etc/systemd/system/chanlun.service +# run command: +sudo systemctl daemon-reload +sudo systemctl enable chanlun +sudo systemctl start chanlun + +# check status: +sudo systemctl status chanlun + +# check logs: +sudo journalctl -u chanlun -f \ No newline at end of file