阿里云
阿里云大学认证0元起
发表主题 回复主题
  • 154阅读
  • 0回复

[解决方案]社区系统 Icarus 1.3.0

级别: 论坛版主
发帖
370
云币
634

+nZG!nP  
W ,U'hk%  
y(S0 2v>l  
开源协议 jF5JpyOc  
ZLIB 0iB 1_)~  
2?ednMoE  
:_H88/?RR  
免费且商业友好,这个协议基本上和MIT相同。 lz*2wGI9  
Lg nGqIlx  
i :$g1  
特性 K@,VR3y /  
全局 oaK~:'  
k^]~NP  
GGuLxc?(  
文件上传(七牛云) pqr" x2=.  
Ygl!fC 4b  
9e5UTJ  
超宽屏支持 H:_`]X"  
DIRCP=5  
gkdjH8(2  
简易的移动端支持 !:8!\gE ^P  
a~|ge9? (  
<*+ MBF  
实时在线人数 >xjy P!bca  
t]ZSo-  
uprQy<I@  
Markdown发帖和评论 Uww^Sq  
Qi61(lK  
5-*]PAC  
包含主题、评论、百科内容的全文搜索(基于Elasticsearch) a? kQ2<@g  
h]#)41y<  
}NXESZYoi  
用户系统 1 W u  
AL0Rn e N  
p"@|2a  
注册、登录 ?zEF?LJoK  
-,dQ&Qf?  
"Tv7*3>  
邮件激活 {E/TC%  
?MH4<7?"  
u_B SWhiW  
邮箱找回密码 Y"qY@`  
'}u31V"SS  
d eg>m?Y  
修改个人信息 <B`V  
w%;'uN_  
8;8}Oq  
上传头像(七牛云) ja/[PHq"  
Kxn7sL$]=F  
C)j)j&  
每日签到 }H=OVbQor  
Be+:-t)  
TpgBS4q  
个人提醒 AX+d?M  
__j8jEV  
cAS_?"V a  
论坛 YHYB.H)  
EcIQ20Z_-  
ak `)>  
扁平化的内容展示 2r,'4%G  
d&`j 8O  
)_cv}.xe  
创建和管理板块 09Y?!,  
OU@x1G{Cy  
p'~5[JR:  
板块主题颜色 sv"mba.J  
zF&UdS3  
z :v, Vu  
发表和编辑主题 Y)}%SP>,  
)H)Udhz  
PU5mz.&0'  
文章页动生成快捷导航 /T)n5X  
1m;*fs  
v&2@<I>  
@功能 $3[\:+  
^G&D4uZ  
u3mT l  
百科 ?7)(qnbe"  
f\|?_k]  
ApYud?0b  
自定义侧边栏和主页 o MkY#<Q}  
:gscW& k  
3DC%I79  
文章的创建和编辑 l/zC##1+.  
c[_^bs>k  
S?\hbM]V-o  
全部文章列表 =4<S8Cp  
wZ8 MhE  
U q w}4C/0  
文章历史 <W59mweW#5  
ywynx<Wg  
[Cj)@OC  
随机页面 Y%:0|utQC  
_T|H69 J  
dIpW!Pj^  
管理后台 H9VXsFTW  
7k=F6k0)  
{{ *]bGko  
提供对板块、主题、用户、评论的管理 {&=qM!2e  
h@;)dLo0z  
Zxc7nLKF~  
管理日志 Mp"'?zf  
EEs-&  
Afy .3T @)  
安全机制 MziZN^(  
Ft;u\KT  
4[#6<Ixf  
前端密码加密,后端不取得用户的初始密码,最大限度降低了中间人攻击和数据库泄露的危害 o4 %Vt} K  
qwF*(pTHq  
jc&/}o$K  
后端二次加密,sha512加盐迭代十万次后储存用户密码 juMxl  
O5qW*r'  
)nNCB=YF!  
密码相关API均有防*破,可设置IP请求间隔和账号请求间隔,分别提升批量撞库和单点*破的难度 '9 e\.  
inPE/Ux  
~llMrl7  
隐私数据,例如IP地址脱敏后才可存入数据库 Xqg.kX  
slge+xq\J  
cK[R1 ReH  
如何部署 s[3![ "^Y  
内容较多,详见部署文档 p,w|=@=  
7Aio`&^  
#7]o6  
升级指南 @P_C%}(<  
首先停止服务并更新源码。 df4sOqU  
xvR?~  
>+:r '  
然后请寻找 backend/misc/upgrade 目录下对应的升级文件,例如1.2升级1.3使用u12-u13.py。 ,@Fgr(?'`>  
)X~Pr?52?  
=[P%_v``  
在 backend 目录下执行后删除即可。 }XCR+uAz  
'Aj(i/CM  
EO#gUv  
注意如果使用了 pipenv 或其他虚拟环境,要在项目对应环境中完成这个操作。 B2~f;zy`  
1C_'H.q<=  
/ R_ u\?k(  
然后分别升级前端项目(根目录)和后端项目(backend目录)的项目依赖。 aKv[  
T?X^0UdJj  
$D QD$  
如该版本无特别的升级说明,此时直接重新开启服务即可。 S3u yn78hI  
!8xKf*y  
[_WI8~g Y  
规划 +D :83h{  
由于空闲时间有限,而且是单枪匹马做整个项目的开发。 -a  *NbH  
j%pCuC&"  
hPa n  
目前的版本还有一些不完善的地方以及缺少的功能来不及完成,姑且规划如下: K`hz t  
u3]Uxy  
%_R$K#T^,  
近期: LGIalf*7  
Kb-W tFx  
4,2(nYF  
收藏、感谢、点赞 E{uf\Fc   
hUVk54~l  
^8:VWJM  
个人中心 RI-A"cc6A  
e RA7i  
Pg/T^n&  
强化移动端体验 tM)Iir*U#  
& g:%*>7P  
}'%^jt[3  
支持用户对评论进行自删和编辑等操作 lW p~t  
20aZI2sk`  
9`B0fv Q&  
后续: |xh&p(  
Uo2+:p  
F?z<xL@  
多终端同时登录的支持 Q"%QQo}}  
Okpwh kPL5  
il12T`a  
支持第三方登录 ^ Hg/P8q  
"V4Q2T T  
bDDqaO ,8  
搭建独立的项目站点 &|b4\uj9  
!EOQhh  
(YwalfG {C  
RSS支持 (s s3A9tG  
n!G.At'JP  
hGI+:Js6  
完善tests ,}0$Tv\1  
ydQ!4  
p&^J=_O  
abi[jxCG  
如何部署项目 =A@>I0(7  
首先 clone 项目。 @QdnjXII*  
5qbq,#Pf  
NQX>Qh 2  
git clone https://github.com/fy0/Icarus.git >;4!O%F  
下面逐项照做即可。 LL(|$}yW  
F_=1;,K%  
 l{$[}<  
迫于前端安装node_modules等待时间长,在环境安装完成后,前端篇和后端篇可以一起做,以节省时间。 +;Cr];b3  
l%~lz[  
|sIr?RL{C  
环境依赖篇 +C+<BzR~A.  
1. Python 3.6+ khx.yRx  
Windows上直接使用Anaconda3或者官方版本。 c8Z A5|  
FW..mD9)}  
E{y1S\7K  
Linux上部分发行版(例如ArchLinux)天然满足要求。 s5D:  
m#e*c [*G  
T95t"g?p  
对于其他的发行版,首选方案是通过pyenv来安装和管理不同版本的Python: @gY\;[#.  
6w| J -{2  
3mO;JXd  
curl -L https://github.com/pyenv/pyenv-installer/raw/master/bin/pyenv-installer | bash ""% A'TZ  
!GwL,)0@^  
bT )]'(Xy  
# 重新进入终端后,指定版本进行安装 J?&l*_m;t  
# 或者也可以选择这里不安装,到后面pipenv的时候会有选项自动安装。 5Bjgr  
pyenv update t"vRc4mf  
pyenv install 3.6 uw AwWgl  
来源:https://github.com/pyenv/pyenv ;H'gT+t<c  
xY<{qHcX  
upy\gkpnGO  
或者使用包管理器安装,这是一个 Debian/Ubuntu 解决方案: IH9.F  
Hfym30  
(MLwQiop  
sudo add-apt-repository ppa:deadsnakes/ppa ABh&X+YD  
sudo apt-get update 0bS|fMgc  
sudo apt-get install -y python3.6 python3.6-dev python3.6-venv r'GP$0rr9!  
sudo su -c "curl https://bootstrap.pypa.io/get-pip.py | python3.6" U_B(( Z(g  
2. NodeJS K`g7$r)U[  
建议使用LTS版本的 nodejs,通过包管理器安装: NSQp< m  
E"~2./+rd  
K/=|8+IDL  
https://nodejs.org/en/download/package-manager/ P{Lf5V9# <  
`=lc<T^  
)2IH 5  
curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash - l{j~Q^U})  
sudo apt-get install -y nodejs '' O7=\  
3. PostgreSQL <h-vjz  
官方提供了一系列操作系统的安装解决方案:https://www.postgresql.org/download/ 0Hxmm@X2  
9iUrnG*  
@.Ic z  
Windows下你可以下载安装包,主流Linux可以使用包管理器添加软件源。 T~0k"uTE  
$5D,sEC@  
. mLK`c6  
还是以ubuntu举例:https://www.postgresql.org/download/linux/ubuntu/ !8NC# s  
a2'^8;U*_  
R\@/U=iqR  
# 为 ubuntu 18.04 添加 PG 源 PYbVy<xc  
sudo su -c "echo 'deb http://apt.postgresql.org/pub/repos/apt/ bionic-pgdg main' > /etc/apt/sources.list.d/pgdg.list" 9RN-suE[  
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | \ 0Z[oKXm1p  
  sudo apt-key add - (3J$>Na  
sudo apt-get update 9l,a^@Y:  
p$Ox'A4  
~cTN~<{dq  
# 安装PostgreSQL,需要9.6以上版本  ;s`sn$@  
sudo apt-get install -y postgresql-10 "j;4 k.`h  
装好之后做一些配置 +gtrt^:]l  
r\qj!   
])xx<5Jt4  
sudo su postgres M`rl!Ci#  
psql [<DZ*|+  
# 进入 PQ Shell t2,A@2DU 2  
CREATE DATABASE icarus; 8"sb;  
CREATE USER icarus WITH PASSWORD 'IcaruStest123'; 3|.um_  
GRANT ALL ON DATABASE icarus TO icarus; &boOtl^  
\c icarus; ,lZB96r0  
CREATE EXTENSION IF NOT EXISTS hstore; JSW^dw&  
CREATE EXTENSION IF NOT EXISTS citext; f7m%|v!  
4. Redis $ s9Vrw0Z  
一般直接使用包管理器安装就可以了。 bGc~Wr|  
H&:jcgV*P  
U}[I   
Windows上可以使用微软提供的二进制版本 S H!  
N5a*7EJv+  
xuqv6b.  
后端篇 $0 vb^  
建议使用 pipenv 进行部署,首先切到backend目录,执行: u(fm@+$^  
SQX:7YF~  
1v71rf&w  
sudo pip3.6 install pipenv j'A_'g'^  
pipenv install 8_{X1bj  
不过有个问题就是 pipenv 太慢,总是在 Locking。 xai*CY@cQ  
|Y?H A&  
i\,-oO  
可以灵活使用 --skip-lock 参数跳过 Locking 阶段。 Wf|Q$MHos  
7S}_F^  
Mu+0<>   
或者使用requirements.txt进行比较传统的安装。 IZpP[hov  
o,_? ^'@  
LDPUD'  
特别地,在Windows上安装aioredis库时可能会遇到依赖的hiredis包无法安装的问题 kqFP)!37  
如果是anaconda用户,那么可以使用: kM,C3x{A  
k?+?v?I =  
<J) ]mh dm  
conda config --append channels conda-forge   D]zwl@sRX:  
conda install hiredis Gefne[  
来进行安装。 E|iQc8gr&  
如果不是anaconda用户,那么可以直接访问 https://anaconda.org/conda-forge/hiredis/files Zy`m!]G]80  
直接下载.tar.bz2压缩包把里面的site-packages/hiredis解压出来放到自己的site-packages即可 8WXQ Oo8  
]n6#VTz*  
~E17L]ete  
环境装完之后,这样启动服务: JRB9rSN^  
`sn^ysp  
;ub;l h3  
pipenv shell F1*>y  
python main.py dYJ(!V&  
运行 backend 目录下的 main.py,初次运行会创建自动 private.py 并退出。 T&6l$1J  
eA2@Nkw~)  
GeH#I5y  
private.py 里的内容会覆盖 config.py 中的配置。 La`NPY_:>  
xi~?>f  
Bs^aII$  
在初次创建后,用编辑器打开,逐项对内容进行修改,使其符合你机器的实际情况即可。 +^60T$  
LBYMCY  
=$'6(aDH  
前端篇 ^aItoJq  
# 安装项目依赖 hOjk3 k  
cd Icarus P3x8UR=fS  
npm install BC^ :=  
迫于安装时间过长,国内可以使用cnpm: ,wQ5.U,  
glO^yZs  
@0Ic3C[rH6  
npm install -g cnpm --registry=https://registry.npm.taobao.org n] ._uza  
cnpm install 5-:?&|JK;  
如果只是开发环境下看看效果,那么在后端已经跑起来的情况下: luh$2 \5B  
?gA 8x  
ZgTW.<.%2  
npm run serve  dm\F  
然后在浏览器中查看即可。 ,0 M_ Bk"  
n@<YI  
1+_`^|eK  
扩展篇:Nginx部署 t% d Z-Ym  
如果需要配置外部访问(注意!只是开发则不需要),可以按如下步骤操作: ZF!h<h&,  
p_RsU`[  
l!D}3jD  
我们的目标是将前端挂在某个域名或端口上,然后将后端挂在同一域名的/api下。 d[iQ` YW5  
%z=le7  
Vr3Zu{&2  
以此直接绕过同源策略的相关内容,简化配置。这也就是“单端口方案”的含义。 is?{MJZ_  
4>wP7`/+y  
)3cAQ'w  
首先,在 Icarus 目录下新建一个 private.js,并按照下例进行填写: G<L;4nA)  
T^zXt?  
L^1NY3=$  
// 单端口方案 9SX +  
var host = window.location.host tHU2/V:R  
>xN .F/[K  
Z%gh3  
export default { d-oMQGOklb  
    remote: { |Tv#4st  
        API_SERVER: '//' + host, ./\@Km?  
        WS_SERVER: 'ws://' + host + '/ws', l[dK[4  
    } =O~_Q-  
} ?e%ZOI  
npm run build p'Y^ X  
生成dist目录备用。 5tl< 3g `  
B`EJb71^Xy  
9=s<Ld  
随后是nginx的配置,当然你要首先安装它。 &5>Kl}7  
QFA8N  
~]sc^[  
我已经写好了配置文件的模板,只要简单改改放进配置目录就可以了。 &j;wCvE4+  
 \__i  
~?l | [  
这里使用的是单端口绑定前后端,整站使用 9001 向外网提供服务(但后端仍要对内开一个端口)。 \UA[  
VMZMG$C  
}H53~@WP>  
在将前端静态目录映射到/的同时,将后端所在的9999端口映射到/api。 Fw_#N6Q  
)Om*@;r(  
:'Vf g[Uq  
这样前端页面访问 /api 就是访问后端了,也不存在跨域问题。 EAUEQk?9  
b 1c y$I  
'B |JAi?  
sudo apt install nginx Y_liA  
cd Icarus yWmJ~/*lG  
sudo cp misc/icarus-1port.conf /etc/nginx/conf.d/ *tA1az-jO  
随后编辑 /etc/nginx/conf.d/icarus-1port.conf,将 I^.Om])  
3<Lx&p~%T  
. '6gZKXY  
# root /home/{user}/Icarus/dist; YP oSRA L  
修改为正确的路径,重启服务: (g]!J_Z"  
N%@Qf~  
$ Gf(38[w  
sudo service nginx restart KYm0@O>;  
访问服务器IP的9001端口,就可以看到最上面截图中的画面了。 l$KA)xbI  
j^*dmX  
\  #F  
第一个注册的用户将自动成为管理员。 Z-%\ <zT  
qZdQD  
sI=xl  
扩展篇:开启全文搜索与关联推荐功能 gT. sj d  
这事情简单,首先在机器上安装ES: b=C*W,Q_#  
T=DbBy0-  
bIDj[-CDG  
https://www.elastic.co/downloads/elasticsearch Oi.C(@^(  
P8:dU(nlW  
s[>,X#7 y  
然后搞到中文分词插件: v4TQX<0s  
:LQYo'@yB  
{lzWrUGO  
https://github.com/medcl/elasticsearch-analysis-ik/releases @D[_}JE  
1ba~SHi  
Pbn*_/H  
并将分词插件解压在ES插件目录,例如your-es-root/plugins/ik,然后把ES开起来: 1s&zMWC  
nF]W,@u"h  
C3f' {}  
# 超低配版,最小内存256M,最大1G J1U/.`Oy  
# 根据自己服务器情况酌情调整参数 oSKXt}sh  
cd elasticsearch-6.5.1 9rX&uP)j^#  
ES_JAVA_OPTS="-Xms256m -Xmx1g" ./bin/elasticsearch e2Pcm_Ahv*  
请注意两者版本需要一一对应,如果ES版本过新(更新非常频繁),后者可能尚未来得及更新。 R%WCH?B<}  
M<Ncb   
ub0.J#j@  
随后在第一次执行main.py自动生成的private.py中修改这一段的内容: Ml{,  
?p{Nwl#  
Mj3A5;#  
SEARCH_ENABLE = False H|<[YYk  
ES_INDEX_NAME = 'icarus-index' &t@jl\ND  
ES_HOSTS = [{ ?!:ha;n  
    "host": "localhost", tS5hv@9cWx  
    "port": 9200 U}[d_f  
}] 2wg5#i  
最省事可以只改一个: :r,pqnH_  
&{hL&BLr  
\)904W5R  
SEARCH_ENABLE = True bo>*fNqAIy  
然后在backend目录下运行: rU:`*b<  
P )"m0Lu<  
10~k2{Z  
pipenv shell 3S@7]Pg  
python3.6 misc/force_refresh_elasticsearch.py k Z .gO  
完成,重启后端进程main.py即可应用。 \ a<h/4#|  
`2WFk8) F  
xC:L)7#aw  
项目地址:https://github.com/fy0/Icarus ZY55|eE  
sqwGsO$#  
LgU_LcoM*  
[ 此帖被寒喵在2019-01-01 00:15重新编辑 ]
本人不是云栖社区工作人员。
无论您在使用中遇到什么问题,不要出言不逊!谢谢合作!
发表主题 回复主题
« 返回列表上一主题下一主题

限100 字节
批量上传需要先选择文件,再选择上传
 
验证问题: 93 + 3 = ?
上一个 下一个