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

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

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

(c(c MC'  
zdn e2  
GFvZdP`s4  
开源协议 </<_e0  
ZLIB 1rC8] M.N  
ld94ek  
kgK7 T  
免费且商业友好,这个协议基本上和MIT相同。 uc%75TJ@  
'#t"^E2$  
~!]FF}6  
特性 E?&dZR  
全局 8E/$nRfO d  
p<'mc|hGq  
5 d|*E_yu  
文件上传(七牛云) uW4G!Kw28  
-w 2!k  
133lIX+(k  
超宽屏支持 U*/  
E?z 3&C  
F=B>0Q5   
简易的移动端支持 .x6*9z#q  
xpFu$2T6P.  
c R$2`:e  
实时在线人数 .)})8csl.d  
H1|X0 a(j  
ix^:qw;  
Markdown发帖和评论 `(=)8>|e  
WKBPqfC  
 'm}~  
包含主题、评论、百科内容的全文搜索(基于Elasticsearch) #x#.@  
OjMDxG w  
e kI1j%fO  
用户系统 ;eG%#=>  
{_3ZKD(\  
 2b1LC!'U  
注册、登录 %S>lPt  
-sO EL{  
/ c/!13|  
邮件激活 ~,R_  
.IpwTke'  
2|EH Ny!  
邮箱找回密码 +?MjY[8j  
}K"=sE  
VbBZ\`b  
修改个人信息 R9S7p)B  
ICq;jfML  
.eZ4?|at.F  
上传头像(七牛云) k6[t$|lMy  
4x8mJ4[H^  
N Ja]UZx  
每日签到 %~Nf,  
xkUsZ*X8B  
/J{P8=x}_:  
个人提醒 ~DqNA%Mb  
"793R^Tz  
K+T`'J4  
论坛 w'M0Rd]  
<%pi*:E|  
?\$77k  
扁平化的内容展示 \jq1F9,  
.h~)|" uzW  
P|HY=RM a  
创建和管理板块 sS5#Q  
q#sMew\{  
P[XE5puC  
板块主题颜色 &??(EA3  
2Y  6/,W  
E6)FYz7x  
发表和编辑主题 IeN!nK-  
YqNhD6  
v%zI~g.L  
文章页动生成快捷导航 /^/'9}7  
8l!S<RA  
> )#*}JI  
@功能 fM S-  
A.WJ#1i}E  
Mqw&%dz'_  
百科 *WX6C("M  
y0(k7D|\  
8{?Oi'-|0  
自定义侧边栏和主页 & NOKrN~HX  
_Seiwk &  
9SAyU%mS:  
文章的创建和编辑 3%<ia$  
!EpP-bq'*  
aN;L5;m#>{  
全部文章列表 w`#lLl B  
;PS [VdV  
/-BplU*"9  
文章历史 :4Q_\'P  
MIt\[EB  
t~U:{g~  
随机页面 &,)9cV /  
W4>8  
3QV|@5L`[  
管理后台 v`Sllv5bV  
^=R>rUCmv  
hrcR"OZ~X  
提供对板块、主题、用户、评论的管理 [eWB vAiW  
l'3NiIX  
4|++0=#D$  
管理日志 8swj'SjX  
kk!}mbA_}  
xTAC&OCk^[  
安全机制 { Ja#pt  
Q'Q+mt8u5  
(V e[FhA  
前端密码加密,后端不取得用户的初始密码,最大限度降低了中间人攻击和数据库泄露的危害 2]> s@?[  
nH T2M{R  
1RcaE!\p  
后端二次加密,sha512加盐迭代十万次后储存用户密码 SrHRpxy  
/ebYk-c  
AV&W&$  
密码相关API均有防*破,可设置IP请求间隔和账号请求间隔,分别提升批量撞库和单点*破的难度 VnIJ$5Y  
WfO6Fvx%  
pOS.`rSK  
隐私数据,例如IP地址脱敏后才可存入数据库 H%])>  
<[a9"G 7  
\" .3x PkE  
如何部署 =cRJtn  
内容较多,详见部署文档 p=7kFv  
mH}AVje{ `  
Sf*VkH  
升级指南 V (X)Qu@R  
首先停止服务并更新源码。 %AW  
|5![k<o#  
Xb;CY9&  
然后请寻找 backend/misc/upgrade 目录下对应的升级文件,例如1.2升级1.3使用u12-u13.py。 TH6g:YP`7  
uMqo)J@s  
<'B`b  
在 backend 目录下执行后删除即可。 ~yO.R)4v  
= <33(   
 -JUv'fk  
注意如果使用了 pipenv 或其他虚拟环境,要在项目对应环境中完成这个操作。 Lb/a _8<E?  
[_H9l)  
M{z+=c&w  
然后分别升级前端项目(根目录)和后端项目(backend目录)的项目依赖。 S!g&&RDx  
eUBk^C]\  
=ohdL_6  
如该版本无特别的升级说明,此时直接重新开启服务即可。 |4-Ey! P  
KQr=;O\T  
,P9B8oIq  
规划 VMtR4!:q  
由于空闲时间有限,而且是单枪匹马做整个项目的开发。 X\YeO> C  
O gycP4z[  
#Q|$&b  
目前的版本还有一些不完善的地方以及缺少的功能来不及完成,姑且规划如下: KE(kR>OB]  
$'[( DwLS  
];Z_S`JR  
近期: w1s#8:  
(cA=~Bw[=  
EzthRe9  
收藏、感谢、点赞 -G*u2i_*  
=@ON>SmPs  
I#9K/[  
个人中心 o.j;dsZ  
wBmbn=>#S  
1hRC Bwx  
强化移动端体验 LFh(. }  
&=s{ +0  
E2dSOZS:)%  
支持用户对评论进行自删和编辑等操作 2@A7i<p  
oM< &4F  
dn5T7a~   
后续: KXdls(ROP  
2U#OBvNU  
j&#p&`B  
多终端同时登录的支持 UB(8N7_/  
ozGK -$  
,,,5pCi\  
支持第三方登录 +LX&1GX  
'3<YZWS  
Lp{l& -uQ  
搭建独立的项目站点 0 J ANj  
LWIU7dw  
eJ?SLMLY  
RSS支持 5@Rf]'1B0  
a:P% r  
vO"AJ`_  
完善tests p%,JWZ[  
v'Lckw@G4  
sy]1Ba%  
EI/_=.d  
如何部署项目 #>!!#e!*  
首先 clone 项目。 ,"*[T\u  
Zb}=?fcL;@  
uT;9xV%ch  
git clone https://github.com/fy0/Icarus.git R=PjLH&)  
下面逐项照做即可。 BDcl1f T  
!5p 01]7  
3pl.<;9r  
迫于前端安装node_modules等待时间长,在环境安装完成后,前端篇和后端篇可以一起做,以节省时间。 0R *!o\y  
sd#a_  
vY.p~3q :)  
环境依赖篇 :a`l_RMU  
1. Python 3.6+ JJ[J'xl@  
Windows上直接使用Anaconda3或者官方版本。 ~Uga=&  
K4oLb"gB1  
LoNz 1KJL  
Linux上部分发行版(例如ArchLinux)天然满足要求。 tohYwXN  
~2 =B:;  
;2& (]1X  
对于其他的发行版,首选方案是通过pyenv来安装和管理不同版本的Python: 'fZHtnmc0  
X;zy1ZH  
4xg%OH  
curl -L https://github.com/pyenv/pyenv-installer/raw/master/bin/pyenv-installer | bash M|76,2u   
j63w(Jv/  
B;_M52-B  
# 重新进入终端后,指定版本进行安装 6i>xCb  
# 或者也可以选择这里不安装,到后面pipenv的时候会有选项自动安装。 E[ e ''  
pyenv update ;Wb W\,P'  
pyenv install 3.6 v')T^b F@  
来源:https://github.com/pyenv/pyenv p?5`+Z  
?2DYz"/')  
&K|CH? D  
或者使用包管理器安装,这是一个 Debian/Ubuntu 解决方案: ~F DJKGK  
8+ Hho@=  
VxaJ[s3PQ&  
sudo add-apt-repository ppa:deadsnakes/ppa oXb}6YC  
sudo apt-get update u9}=g%TV  
sudo apt-get install -y python3.6 python3.6-dev python3.6-venv d94Lc-kq^  
sudo su -c "curl https://bootstrap.pypa.io/get-pip.py | python3.6" 3X%>xUI  
2. NodeJS qfG`H#cA<  
建议使用LTS版本的 nodejs,通过包管理器安装:  ;-U :t4  
<C]s\ "o-`  
x!gu&AA<*  
https://nodejs.org/en/download/package-manager/ i!sKL%z}  
r1$ O<3\  
E}4R[6YD  
curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash - 'TezUBRAz  
sudo apt-get install -y nodejs 6|["!AUI  
3. PostgreSQL \*a7DuVw  
官方提供了一系列操作系统的安装解决方案:https://www.postgresql.org/download/ 1;g>?18@  
T [&1cth  
O,XVA  
Windows下你可以下载安装包,主流Linux可以使用包管理器添加软件源。 2 ;U(r: ]  
,in`JM<o  
`3\5&Bf  
还是以ubuntu举例:https://www.postgresql.org/download/linux/ubuntu/ [ 7Q|vu  
~ b\bpu  
c?j/ H$  
# 为 ubuntu 18.04 添加 PG 源 #!C/~"Y*`|  
sudo su -c "echo 'deb http://apt.postgresql.org/pub/repos/apt/ bionic-pgdg main' > /etc/apt/sources.list.d/pgdg.list" WXaLKiA*(  
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | \ S'vrO}yU  
  sudo apt-key add - zc\e$M O  
sudo apt-get update !&?(ty^F  
0ir]  
l<! ?`V6}  
# 安装PostgreSQL,需要9.6以上版本 c$bb0J%  
sudo apt-get install -y postgresql-10 K'Bq@6@C g  
装好之后做一些配置 fg^$F9@  
d1vC-n N  
wHAoO#`wn5  
sudo su postgres L+(5`Y  
psql M7BJ$fA0E  
# 进入 PQ Shell 349W0>eOT  
CREATE DATABASE icarus; bK<'J=#1  
CREATE USER icarus WITH PASSWORD 'IcaruStest123'; +t,JCY6  
GRANT ALL ON DATABASE icarus TO icarus; fu"#C}{  
\c icarus; &X }GJLC3  
CREATE EXTENSION IF NOT EXISTS hstore; e4j:IK>  
CREATE EXTENSION IF NOT EXISTS citext; 6"/cz~h  
4. Redis u @?n3l  
一般直接使用包管理器安装就可以了。 :l'61$=  
V80g+)|  
N/4`afiV.  
Windows上可以使用微软提供的二进制版本 S[n ;u-U  
B_aLqB]U  
8rx?mX,}  
后端篇 5k)/SAU0  
建议使用 pipenv 进行部署,首先切到backend目录,执行: [>U'P1@ql  
[D=ba=r0X  
dmgoVF_qR  
sudo pip3.6 install pipenv DZ<q)EpC  
pipenv install 9o@5:.b<j  
不过有个问题就是 pipenv 太慢,总是在 Locking。 fb0i6RC~&  
?>92OuG%W?  
@!1o +x  
可以灵活使用 --skip-lock 参数跳过 Locking 阶段。 8' M4 3n  
,qz$6oxh\  
(J I4ibP  
或者使用requirements.txt进行比较传统的安装。 ^_0zO$z,  
{ZP0%MD  
:D|"hJ  
特别地,在Windows上安装aioredis库时可能会遇到依赖的hiredis包无法安装的问题 +*Y/+.4WE$  
如果是anaconda用户,那么可以使用: e`27 ?  
>> yK_yg  
j *B,b4  
conda config --append channels conda-forge   __dSEOGoe  
conda install hiredis 5?9K%x'b  
来进行安装。 ;~CAHn|Fe  
如果不是anaconda用户,那么可以直接访问 https://anaconda.org/conda-forge/hiredis/files j> Ce06G  
直接下载.tar.bz2压缩包把里面的site-packages/hiredis解压出来放到自己的site-packages即可 #fk#RNt  
[CTE"@A  
lgWEB3f .  
环境装完之后,这样启动服务: W@Et  
C^oj/} ^  
=BW;n]ls  
pipenv shell G0 *>S`:4  
python main.py `=TV4h4  
运行 backend 目录下的 main.py,初次运行会创建自动 private.py 并退出。 _ `5?/\7  
Y_'3pX,  
y:,Ro@H%  
private.py 里的内容会覆盖 config.py 中的配置。 di $\\ Ah  
WD.td  
"V|&s/9  
在初次创建后,用编辑器打开,逐项对内容进行修改,使其符合你机器的实际情况即可。 H%y!lR{c^D  
Y=0D[o8  
YytO*^e}}  
前端篇 XLQt>y)  
# 安装项目依赖 G)5R iRcs  
cd Icarus 2aj9:S  
npm install W@S>#3,  
迫于安装时间过长,国内可以使用cnpm: Lh`B5  
V&e 9?5@  
Q1hHK'3w  
npm install -g cnpm --registry=https://registry.npm.taobao.org AIN Fv;  
cnpm install < KB V  
如果只是开发环境下看看效果,那么在后端已经跑起来的情况下: at<N?r  
}[2  
B L^?1x  
npm run serve $?`-} wY  
然后在浏览器中查看即可。 0o-. m  
pb8sx1.j;  
TjDDvXY  
扩展篇:Nginx部署 ^UJB%l  
如果需要配置外部访问(注意!只是开发则不需要),可以按如下步骤操作: kz=Ql|@  
bEvlk\iql  
kxvzAKz~  
我们的目标是将前端挂在某个域名或端口上,然后将后端挂在同一域名的/api下。 +q<G%PwbV  
kz30! L  
,76xa%k(U|  
以此直接绕过同源策略的相关内容,简化配置。这也就是“单端口方案”的含义。 L[s7q0 F`l  
9Su4nt`i  
k4i*80  
首先,在 Icarus 目录下新建一个 private.js,并按照下例进行填写: 2?c##Izn  
t,P_&0X  
l4O&*,}l##  
// 单端口方案 gPT<%F  
var host = window.location.host  Q{K '#  
'GyO  
3:]c>GPQ  
export default { oeKVcVP|'&  
    remote: { O-uno{Fd*  
        API_SERVER: '//' + host, ;URvZ! {/Z  
        WS_SERVER: 'ws://' + host + '/ws', >(.GIR  
    } NP#6'eH\  
} f$y`tT %o  
npm run build `xXpP"*o}  
生成dist目录备用。 -|.Izgc  
D,hZVKa  
dilom#2l  
随后是nginx的配置,当然你要首先安装它。 =Ts5\1sc>  
9'" F7>d  
#lDW?  
我已经写好了配置文件的模板,只要简单改改放进配置目录就可以了。 w! kWG,{C  
[C-4*qOaa2  
,%=SO 82W  
这里使用的是单端口绑定前后端,整站使用 9001 向外网提供服务(但后端仍要对内开一个端口)。 R` HC EX)  
$S6%a9m   
*"qS  
在将前端静态目录映射到/的同时,将后端所在的9999端口映射到/api。 {VmJVO]S  
 Gv(?u  
7B@ 1[  
这样前端页面访问 /api 就是访问后端了,也不存在跨域问题。 ~NV 8avZ  
je#OV,uHM  
Kg;u.4.-M  
sudo apt install nginx WeiDg,]e$b  
cd Icarus &02I-lD4+  
sudo cp misc/icarus-1port.conf /etc/nginx/conf.d/ ? h |&kRq  
随后编辑 /etc/nginx/conf.d/icarus-1port.conf,将 =bHS@h8N<  
Rt+ak}  
C{<H)?]*BF  
# root /home/{user}/Icarus/dist; jY1^I26E  
修改为正确的路径,重启服务: [C^&iLX/F*  
zB68%  
_c$F?9:  
sudo service nginx restart x@LNjlP  
访问服务器IP的9001端口,就可以看到最上面截图中的画面了。 cp_<y)__  
t6C2DHh7$  
Fm#`}K_  
第一个注册的用户将自动成为管理员。 e0:[,aF`  
ZBuh(be  
SNOML7pd  
扩展篇:开启全文搜索与关联推荐功能 DD fw& y  
这事情简单,首先在机器上安装ES: oAprM Z 7Y  
Q)[DSM  
IY"+hHt  
https://www.elastic.co/downloads/elasticsearch 6* 6 |R93  
= 9!|%j  
+(U;+6 b  
然后搞到中文分词插件: e.VQ!)>  
(jp!q ,)  
`e[>S  
https://github.com/medcl/elasticsearch-analysis-ik/releases RRUv_sff  
:*I=' M9B  
3C gmZ7[  
并将分词插件解压在ES插件目录,例如your-es-root/plugins/ik,然后把ES开起来: Q+7+||RW  
NCa3")k  
/<VR-yr  
# 超低配版,最小内存256M,最大1G mJ>msI @  
# 根据自己服务器情况酌情调整参数 JUCp#[q  
cd elasticsearch-6.5.1 b*)F7{/Z  
ES_JAVA_OPTS="-Xms256m -Xmx1g" ./bin/elasticsearch :|a$[g5  
请注意两者版本需要一一对应,如果ES版本过新(更新非常频繁),后者可能尚未来得及更新。 tjg?zlj  
83!{?EPE  
lj /IN[U/  
随后在第一次执行main.py自动生成的private.py中修改这一段的内容: 6]|-%  
AL{iQxQ6  
_;mA(j  
SEARCH_ENABLE = False 'm^]X3y*  
ES_INDEX_NAME = 'icarus-index' QV[#^1  
ES_HOSTS = [{ qM18 Ji*  
    "host": "localhost", Vji:,k=3\  
    "port": 9200 M2Jb<y]  
}] b5)a6qtb  
最省事可以只改一个: 7{lWg x  
q.kDx_  
37 b6w6{D  
SEARCH_ENABLE = True L/?jtF:o  
然后在backend目录下运行: 1*f*}M  
4MrUo9L$s  
6~OJB!  
pipenv shell &!F"3bD0  
python3.6 misc/force_refresh_elasticsearch.py -Q6Vz=ku  
完成,重启后端进程main.py即可应用。 &Jd_@F#J  
88KQ) NU  
= N^Ec[u(l  
项目地址:https://github.com/fy0/Icarus g(C/J9J  
.hRtQU  
'#a;n  
[ 此帖被寒喵在2019-01-01 00:15重新编辑 ]
本人不是云栖社区工作人员。
无论您在使用中遇到什么问题,不要出言不逊!谢谢合作!
发表主题 回复主题
« 返回列表上一主题下一主题

限100 字节
批量上传需要先选择文件,再选择上传
 
验证问题: ECS是阿里云提供的什么服务? 正确答案:云服务器
上一个 下一个
      ×
      全新阿里云开发者社区, 去探索开发者的新世界吧!
      一站式的体验,更多的精彩!
      通过下面领域大门,一起探索新的技术世界吧~ (点击图标进入)