阿里云
阿里云多端小程序中小企业获客首选
发表主题 回复主题
  • 1005阅读
  • 0回复

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

级别: 论坛版主
发帖
371
云币
447

1vx:`2 A4  
#zZQ@+5zw  
bX=A77  
开源协议 mj{TqF  
ZLIB ,4)zn6tC  
C Rw.UC\  
W(9-XlYKE  
免费且商业友好,这个协议基本上和MIT相同。 "tn]s>iAd=  
/!P,o}l7  
XSpX6fq  
特性 wHEt;rc(  
全局 Kj;Q;Ii  
!c[?$#W4  
_RST[B.u6  
文件上传(七牛云) 5,Mc` IIK1  
qa.nm4"6+  
Xt_8=Q  
超宽屏支持 dNUi|IYm$  
B#OnooJI  
-2{NI.-Xd  
简易的移动端支持 N! }p  
AU OL?st  
[sy~i{Bm  
实时在线人数 AVF(YD<U  
W_Z%CBjcT  
J NPEyC  
Markdown发帖和评论 |Rd?s0u  
}~DlOvsq  
!D!~4h)  
包含主题、评论、百科内容的全文搜索(基于Elasticsearch) {P&{+`sov  
^ Vso`(Ss  
M ~z A  
用户系统 "v@Y[QI  
l=GcgxD+"d  
%JF^@\E!|  
注册、登录 O3/][\  
 Tvqq#;I  
ePv3M&\J  
邮件激活 ^~9fQJNs  
%UT5KYd!=N  
r'/&{?Je/  
邮箱找回密码 dWqKt0uh!  
!}[}YY?',i  
t(AW2{%}  
修改个人信息 #s>AiD  
I! eu|_cF  
2[ = =  
上传头像(七牛云) b+Sq[  
q!iTDg*$  
d9e_slx  
每日签到 0)F.Y,L  
P1C{G'cR  
-LzkM"  
个人提醒 #N Qpr  
7.)kG}q]  
x3DUz  
论坛 E+z),"QA  
~&HP }Q$#f  
`(tVwX4  
扁平化的内容展示 X})5XYvA*  
idsBw!DB  
*$e1Bv6 $  
创建和管理板块 tV?-   
Ey|{yUmU+  
X* 4C?v  
板块主题颜色 ]31>0yj[Q  
{E=BFs  
f/xQy}4+~E  
发表和编辑主题 W(5XcP(  
0JT"Pv_  
VAW:h5j2@  
文章页动生成快捷导航 RN^<bt{_U  
.*}!XKp0j  
J.;!l   
@功能 =/5^/vwgY  
=[JstiT?E  
;*%3J$T+  
百科 0oK_uY 4g  
F8H4R7 8>;  
QmgO00{  
自定义侧边栏和主页 ~ =GwNo_  
($nQmr;t  
h* 72 f/#  
文章的创建和编辑 M ^ZEAZi  
nsL"'iQ  
gV}c4>v(  
全部文章列表 %1mIngW=g  
0Q7|2{  
?B+]Ex(\B,  
文章历史 >sjvE4s  
_u3%16,o  
hbdB67,  
随机页面 ;fW`#aE  
%i6/= 'u  
'yo-`nNFD  
管理后台 S awf]/  
s%QCdU ]  
4wKQs&:  
提供对板块、主题、用户、评论的管理 M3U?\g  
kyi"U A82  
gy1R.SN  
管理日志 b_&:tE--]  
$D='NzE/  
x) jc  
安全机制 (A )f r4  
- lqD  
j.!5&^;u4  
前端密码加密,后端不取得用户的初始密码,最大限度降低了中间人攻击和数据库泄露的危害 \9fJ)*-  
XRmE  
Y[N@ )E_G  
后端二次加密,sha512加盐迭代十万次后储存用户密码 : q>)c]  
\[G"/]J  
C|V5@O?;&  
密码相关API均有防*破,可设置IP请求间隔和账号请求间隔,分别提升批量撞库和单点*破的难度 4/V;g%0uN;  
O5MV&Zb(  
O7%8F Y  
隐私数据,例如IP地址脱敏后才可存入数据库 6?ky~CV  
N1}r%!jk/  
l,6' S8=  
如何部署 v^J']p  
内容较多,详见部署文档 _ FNW[V  
*k,{[b  
bk0<i*ju7(  
升级指南  HzL~B#  
首先停止服务并更新源码。 'C=(?H)M  
qpQiMiB#g'  
Q;ZV`D/FA  
然后请寻找 backend/misc/upgrade 目录下对应的升级文件,例如1.2升级1.3使用u12-u13.py。 _%3p&1ld  
g[' 7$  
!<HF764@`  
在 backend 目录下执行后删除即可。 8>G5VhCm~o  
6-~ZOMlV  
gL~3z'$  
注意如果使用了 pipenv 或其他虚拟环境,要在项目对应环境中完成这个操作。 qu.AJ*  
^F qs,^~W  
nXk9 IG(  
然后分别升级前端项目(根目录)和后端项目(backend目录)的项目依赖。 V*r/0|vd  
)6BySk  
vT MCZ+^g  
如该版本无特别的升级说明,此时直接重新开启服务即可。 A#{I- *D[  
D-D8La?0p  
PZvc4  
规划 ([|^3tM  
由于空闲时间有限,而且是单枪匹马做整个项目的开发。 uP$i2Cy  
P8#_E{f  
W6`_ lGTj  
目前的版本还有一些不完善的地方以及缺少的功能来不及完成,姑且规划如下: elR1NhB|p  
>Hmho'  
P9R-41!  
近期: }O+S}Hbwy  
"$b{EYq6  
_+)n}Se  
收藏、感谢、点赞 _dECAk &b  
(#x&Y#5  
e\O625  
个人中心 rLY I\  
3''Uxlo\  
@+_pj.D  
强化移动端体验 ks69Z|D  
{u0sbb(  
=*.S<Ko)  
支持用户对评论进行自删和编辑等操作 fGW~xul_  
~OLyG$JJ  
&|h9L'mr  
后续: KNN$+[_;H4  
^jcVJpyT@R  
dj4a)p|YN  
多终端同时登录的支持 $VP\Ac,!  
&LG|YvMY6  
#Uep|A  
支持第三方登录 sHV?njZd  
G)f!AuN=  
90-s@a3B-j  
搭建独立的项目站点 PBcb*7W  
$"}[\>e*{  
K|Xe)  
RSS支持 W^c /l*>v  
KdzV^6K<c  
9l|*E  
完善tests ccx0aC3@I  
q0['!G%["  
Mhb~wDQl  
O%aHQL%Sz  
如何部署项目 &' y}L'  
首先 clone 项目。 Uc ; S@  
- (q7"h  
!/! Fc'A  
git clone https://github.com/fy0/Icarus.git PCa0I^d  
下面逐项照做即可。 b `}hw"f  
Gv[(0  
~zvZK]JoX  
迫于前端安装node_modules等待时间长,在环境安装完成后,前端篇和后端篇可以一起做,以节省时间。 G_WHW(8   
H;DjM;be  
*iyc,f^w  
环境依赖篇 >7 cDfv"  
1. Python 3.6+ _fHj8- s/  
Windows上直接使用Anaconda3或者官方版本。 Q )8I(*  
;RQ}OCz9}8  
*D`$oK,U  
Linux上部分发行版(例如ArchLinux)天然满足要求。 znIS2{p/`  
MOi1+`kwh  
[9F  
对于其他的发行版,首选方案是通过pyenv来安装和管理不同版本的Python: nyOmNvZf  
S0LaQ<9.  
PIoBKCJ  
curl -L https://github.com/pyenv/pyenv-installer/raw/master/bin/pyenv-installer | bash f|3LeOyz  
~\<L74BB  
EN8xn9M?  
# 重新进入终端后,指定版本进行安装 }gE^HH'  
# 或者也可以选择这里不安装,到后面pipenv的时候会有选项自动安装。 kjOkPp  
pyenv update >LPIvmT4D?  
pyenv install 3.6 Ht]O:io`  
来源:https://github.com/pyenv/pyenv $ERiBALN:  
kP^=  
8,e%=7h_e  
或者使用包管理器安装,这是一个 Debian/Ubuntu 解决方案: SDk^fTV8x  
Fr(;C>  
9g.5:  
sudo add-apt-repository ppa:deadsnakes/ppa "3_GFq  
sudo apt-get update M~+DxnJ=  
sudo apt-get install -y python3.6 python3.6-dev python3.6-venv $H&:R&Us  
sudo su -c "curl https://bootstrap.pypa.io/get-pip.py | python3.6" eF' l_*  
2. NodeJS Y n0iu$;n  
建议使用LTS版本的 nodejs,通过包管理器安装: $e{}SQ;fW  
C\^,+)Y\~  
.kgt? r  
https://nodejs.org/en/download/package-manager/ @18}'k  
10bv%ZX7  
fX>y^s?y  
curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash - bU/YU0ZIT  
sudo apt-get install -y nodejs 8`90a\t'Z  
3. PostgreSQL SzfMQ@~  
官方提供了一系列操作系统的安装解决方案:https://www.postgresql.org/download/ /Ba/gq0j  
\m:('^\6o  
O]Y   z7  
Windows下你可以下载安装包,主流Linux可以使用包管理器添加软件源。 POX{;[SV  
J@#rOOu  
~@T`0W-Py  
还是以ubuntu举例:https://www.postgresql.org/download/linux/ubuntu/ P>03 DkbB  
n9R0f9:*  
nyBT4e  
# 为 ubuntu 18.04 添加 PG 源 s#(%u t  
sudo su -c "echo 'deb http://apt.postgresql.org/pub/repos/apt/ bionic-pgdg main' > /etc/apt/sources.list.d/pgdg.list" #Jr4LQ@A9  
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | \ Q{yjIy/b  
  sudo apt-key add - 0s RcA-9  
sudo apt-get update k+Z2)j"  
g}L>k}I?!W  
IaU%L6Q]  
# 安装PostgreSQL,需要9.6以上版本 Z#YNL-x  
sudo apt-get install -y postgresql-10 3Vak C  
装好之后做一些配置 EBr?>hl  
&:1q3 gDm  
OB*V4Yv  
sudo su postgres {Byh:-e<  
psql bR8`Y(=F9b  
# 进入 PQ Shell 2gR*]?C*  
CREATE DATABASE icarus; f[ia0w5 m  
CREATE USER icarus WITH PASSWORD 'IcaruStest123'; 2( m#WK7>F  
GRANT ALL ON DATABASE icarus TO icarus; Wrh$`JC  
\c icarus; u(\O@5a  
CREATE EXTENSION IF NOT EXISTS hstore; $g/h=w@  
CREATE EXTENSION IF NOT EXISTS citext; n=|% H'U  
4. Redis i4nFjz  
一般直接使用包管理器安装就可以了。 (NN;1{DB8  
Q|e-)FS)  
c] t@3m  
Windows上可以使用微软提供的二进制版本 M>}_2G]#F  
3rjKwh7  
bZ``*{I/  
后端篇 6CSoQ|c{  
建议使用 pipenv 进行部署,首先切到backend目录,执行: r4<aEj;l  
-Tn%O|#K  
A7|L|+ ?  
sudo pip3.6 install pipenv yc`*zLWh  
pipenv install Ps{vN ~}  
不过有个问题就是 pipenv 太慢,总是在 Locking。 /?($W|9+l  
{8oGWQgrj  
Ez-Q'v(9  
可以灵活使用 --skip-lock 参数跳过 Locking 阶段。 k%Vprc  
"Mhn?PTq  
`b%lojT.  
或者使用requirements.txt进行比较传统的安装。 e<[ ] W4"A  
&/WE{W  
z^z`{B  
特别地,在Windows上安装aioredis库时可能会遇到依赖的hiredis包无法安装的问题 $mh\`  
如果是anaconda用户,那么可以使用: qZ&~&f|>e  
=0!j"z=  
#sDb611}#  
conda config --append channels conda-forge   ,wXmJ)/WZ  
conda install hiredis  >]~|Nf/i  
来进行安装。 Jazgn5  
如果不是anaconda用户,那么可以直接访问 https://anaconda.org/conda-forge/hiredis/files ,?k1if(0[  
直接下载.tar.bz2压缩包把里面的site-packages/hiredis解压出来放到自己的site-packages即可 N5h9){Mx  
q b/}&J7+  
W5=)B`v  
环境装完之后,这样启动服务: "H<us?r{  
\C h01LR"  
I[d<SHo  
pipenv shell (xRcG+3];  
python main.py "aCAA#$J  
运行 backend 目录下的 main.py,初次运行会创建自动 private.py 并退出。 `fTM/"  
XWyP'\  
upL3M`  
private.py 里的内容会覆盖 config.py 中的配置。 #j=yQrJ  
)1KyUQ\e  
(6Z^0GL  
在初次创建后,用编辑器打开,逐项对内容进行修改,使其符合你机器的实际情况即可。 zdd-n[%@V  
=R|XFZ,  
T9H*]LxK  
前端篇 IhYR4?e  
# 安装项目依赖 9;?u%  
cd Icarus <.B+&3')  
npm install *{!Y_FrL  
迫于安装时间过长,国内可以使用cnpm: G7Sw\wW  
]p 3f54!  
;ryNfP%  
npm install -g cnpm --registry=https://registry.npm.taobao.org d6YXITL)\>  
cnpm install ng"=vmu  
如果只是开发环境下看看效果,那么在后端已经跑起来的情况下: }|Mwv $`  
.'gm2  
Kbf(P95+uL  
npm run serve 9ziFjP+1  
然后在浏览器中查看即可。 IrqM_OjC  
.Dr!\.hL  
0)332}Oh  
扩展篇:Nginx部署 y]m: {  
如果需要配置外部访问(注意!只是开发则不需要),可以按如下步骤操作: h<`aL;.g  
)ffaOS!\  
.qO4ceW2-~  
我们的目标是将前端挂在某个域名或端口上,然后将后端挂在同一域名的/api下。 9Yv:6@.F  
>8>!wi9U  
)Y7H@e\1  
以此直接绕过同源策略的相关内容,简化配置。这也就是“单端口方案”的含义。 4a+gM._+O  
q[,p#uJ]  
:*M?RL@j  
首先,在 Icarus 目录下新建一个 private.js,并按照下例进行填写: Yi*F;V   
G`Nw]_ Z_  
d +D~NA[M  
// 单端口方案 ,X4+i8Yc  
var host = window.location.host P0,]`w  
~oa}gJl:}-  
wtY)(k a  
export default { S\g9 @g.  
    remote: { pj$JA  
        API_SERVER: '//' + host, \yr9j$  
        WS_SERVER: 'ws://' + host + '/ws', Jr2yn{s=S  
    } K381B5_h  
} QnWE;zN[7A  
npm run build Q)DEcx-|,  
生成dist目录备用。 4>*=q*<V5E  
{EoYU\x  
tOiz tYu  
随后是nginx的配置,当然你要首先安装它。 S hI1f  
A@}5'LzL  
Z7a@$n3h  
我已经写好了配置文件的模板,只要简单改改放进配置目录就可以了。 x77L"5g  
fEHFlgN3Ap  
>1j#XA8  
这里使用的是单端口绑定前后端,整站使用 9001 向外网提供服务(但后端仍要对内开一个端口)。 J:@gmo`M;V  
jIubJQR~  
d@R7b^#g  
在将前端静态目录映射到/的同时,将后端所在的9999端口映射到/api。 "cKD#  
ys9:";X;}  
XV]N}~h o`  
这样前端页面访问 /api 就是访问后端了,也不存在跨域问题。 8z`ZHn3=  
Hd~g\  
_J1\c~ke"  
sudo apt install nginx hIe.Mv-I)  
cd Icarus k&$ov  
sudo cp misc/icarus-1port.conf /etc/nginx/conf.d/ [bhKL5l  
随后编辑 /etc/nginx/conf.d/icarus-1port.conf,将 jY=y<R_oK  
cMY}Y [2c  
1Wpu  
# root /home/{user}/Icarus/dist; }~ D WB"  
修改为正确的路径,重启服务: #X-C~*|>j  
)'+[,z ;s  
D6bYg `  
sudo service nginx restart vi##E0,N'^  
访问服务器IP的9001端口,就可以看到最上面截图中的画面了。 iB)\* )  
1-y8Hy_a2  
T!c|O3m  
第一个注册的用户将自动成为管理员。 #]}Ii{1?Y  
KQf WpHwfj  
v@\S$qU2  
扩展篇:开启全文搜索与关联推荐功能 %~Yo{4mHs  
这事情简单,首先在机器上安装ES: /8l-@P. o  
s5*4<VxQN.  
* :L"#20:R  
https://www.elastic.co/downloads/elasticsearch IBa0O|*6  
aO1^>hy  
: @|Rj_S;  
然后搞到中文分词插件: 8jz>^.-o  
wpZ"B+oK!  
{ )qr3-EM#  
https://github.com/medcl/elasticsearch-analysis-ik/releases p/Ul[7A4e  
9lq5\ tL-  
7!J-/#!  
并将分词插件解压在ES插件目录,例如your-es-root/plugins/ik,然后把ES开起来: HyzSHI  
s{^B98d+W  
{"]!zL  
# 超低配版,最小内存256M,最大1G ?'k_K:_  
# 根据自己服务器情况酌情调整参数 EXSJ@k6=8s  
cd elasticsearch-6.5.1 'l'3&.{Yfk  
ES_JAVA_OPTS="-Xms256m -Xmx1g" ./bin/elasticsearch _mm(W=KiL  
请注意两者版本需要一一对应,如果ES版本过新(更新非常频繁),后者可能尚未来得及更新。 # xO PF9  
=`+D/ W\[Y  
Au2?f~#Fv  
随后在第一次执行main.py自动生成的private.py中修改这一段的内容:  /b=C  
e|k]te  
V*n$$-5 1-  
SEARCH_ENABLE = False O:0{vu9AQ  
ES_INDEX_NAME = 'icarus-index' ~v8X>XDL?T  
ES_HOSTS = [{ /si<Fp)z  
    "host": "localhost", *EuX7LEu_  
    "port": 9200 .))g]CH  
}] =q VT  
最省事可以只改一个: tdK&vqq  
s~OcL  5  
|3~m8v2-  
SEARCH_ENABLE = True _*H Hdd5I  
然后在backend目录下运行: O[d#-0s  
!H\;X`W|~D  
;O7"!\  
pipenv shell K<^p~'f4P  
python3.6 misc/force_refresh_elasticsearch.py -*7i:mg  
完成,重启后端进程main.py即可应用。 K+)3 LR^  
3t<a3"{9  
/xUF@%rT  
项目地址:https://github.com/fy0/Icarus 9\EW~OgTu  
bse`Xfg  
;B@#,6t/  
[ 此帖被寒喵在2019-01-01 00:15重新编辑 ]
本人不是云栖社区工作人员。
无论您在使用中遇到什么问题,不要出言不逊!谢谢合作!
发表主题 回复主题
« 返回列表上一主题下一主题

限100 字节
如果您在写长篇帖子又不马上发表,建议存为草稿
 
验证问题: 阿里云官网域名是什么? 正确答案:www.aliyun.com
上一个 下一个
      ×
      全新阿里云开发者社区, 去探索开发者的新世界吧!
      一站式的体验,更多的精彩!
      通过下面领域大门,一起探索新的技术世界吧~ (点击图标进入)