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

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

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

p:,Y6[gMo  
>&L|oq7$  
D{|qP nE4  
开源协议 l}{{7~C`  
ZLIB T}~TW26v  
~{c ?-qb  
l =^A41L_  
免费且商业友好,这个协议基本上和MIT相同。 }ze+ tf  
4.6$m  
!Jg;%%E3:i  
特性 ,RP-)j"Wff  
全局 [^>XR BSm  
>hKsj{=R7  
r4.6W[| d  
文件上传(七牛云) L aTcBcI  
-luQbGcT3  
! VwU=5  
超宽屏支持 <+8'H:wz  
8(3(kZxS  
;!yK~OBxt  
简易的移动端支持 $QX$rN  
=j]y?;7q  
| %_C$s%  
实时在线人数 nx9PNl@?V  
AZ:7_4jz  
DF%d/a{]  
Markdown发帖和评论 LS@TTiN   
M,Gy.ivz  
P \7DA4]  
包含主题、评论、百科内容的全文搜索(基于Elasticsearch) [hJ1]RW8  
s8j |>R|k  
;qx#]Z0 <  
用户系统 ,CE/o7.FG  
%wD#[<BGn>  
i4C{3J^  
注册、登录 'Kelq$dn#  
mq:k |w^6  
;W|kc</R*  
邮件激活 <J%qzt}  
UG1<Xfu|  
/%$Zm^8c  
邮箱找回密码 9#E *o~1  
tldT(E6  
]l7W5$26 @  
修改个人信息 0 _!0\d#c  
t@KTiJI ]  
NP>v @jO  
上传头像(七牛云) ]&'!0'3`  
g 2Fg  
So5/n7  
每日签到 F`}'^>  
cIug~ x>  
{uDW<u_!  
个人提醒 =D zrM%  
l;$F[/3a  
j/v>,MM  
论坛 N=mvr&arP  
3=S |U,  
'r'=%u$1C  
扁平化的内容展示 bLT3:q#s  
deVd87;@7[  
=lNW1J\SW  
创建和管理板块 jAQ{H  
Q`CuZkP(  
Vjs2Yenx  
板块主题颜色 `&;#A*C0  
q/U-WQ<+  
+\dVC,,=^g  
发表和编辑主题 /N0mF< P  
QPy h.9:N  
nC:T0OJv  
文章页动生成快捷导航 ~B<\#oO  
{/[@uMS_6]  
aru2H6  
@功能 6Ga'_P:  
(nqhX<T>  
zU5@~J  
百科 wXNng(M7  
y)r`<B  
k_g@4x1y*  
自定义侧边栏和主页 ?!ap @)9  
;5X6`GlS#5  
1I;q@g0  
文章的创建和编辑 !&%KJS6p4  
_ $PeFE2  
lh-.I]>&`  
全部文章列表 1@Ba7>%'  
jLFaf#G]  
a- *sm~u  
文章历史 >A )Sl'  
za>%hZf\  
 hyxv+m[  
随机页面 e_-g|ukC  
N\|B06X  
#m#IBRD:  
管理后台 DzC`yWstP  
:7@[=n  
>$kFYb>~q  
提供对板块、主题、用户、评论的管理 :b9#e g  
l(Y32]Z   
?`TQ!m6y  
管理日志  H_g]q  
Y1o[|yt W  
' !huU   
安全机制 ZW M:Wj192  
hGFi|9/-u  
U["<f`z4\  
前端密码加密,后端不取得用户的初始密码,最大限度降低了中间人攻击和数据库泄露的危害 {F_>cyR  
*wAX&+);  
4=MVn  
后端二次加密,sha512加盐迭代十万次后储存用户密码 Ov" wcJ  
}[%F  
J^t0M\  
密码相关API均有防*破,可设置IP请求间隔和账号请求间隔,分别提升批量撞库和单点*破的难度 ~N /%R>(v  
t:dvgRJt*  
K*^'t ltJ  
隐私数据,例如IP地址脱敏后才可存入数据库 A@M2(?w4  
+:m)BLA4l  
'"Cqq{*  
如何部署 ,%Pn.E* r;  
内容较多,详见部署文档 t<`wK8)  
i K@RQi  
5I* 1CIO  
升级指南 +%CXc%  
首先停止服务并更新源码。 W)`>'X`  
D}%VZA}].  
[YQtX_;w  
然后请寻找 backend/misc/upgrade 目录下对应的升级文件,例如1.2升级1.3使用u12-u13.py。 -X*.scw  
!d0$cF):  
y 2k's  
在 backend 目录下执行后删除即可。 r<]^.]3zj  
,>g( %3C  
JAW7Y:XB  
注意如果使用了 pipenv 或其他虚拟环境,要在项目对应环境中完成这个操作。 M|y!,/'  
=5:vKL j  
W9Us I  
然后分别升级前端项目(根目录)和后端项目(backend目录)的项目依赖。 %jUZc:06  
%to.'R  
[)Ia Xa  
如该版本无特别的升级说明,此时直接重新开启服务即可。 b%VBSNZ  
<-d-. 8  
zv1,DnkqF  
规划 b6g9!  
由于空闲时间有限,而且是单枪匹马做整个项目的开发。 3F6'3NvVc2  
qvsfU*wo?  
@8YuMD;  
目前的版本还有一些不完善的地方以及缺少的功能来不及完成,姑且规划如下: fk#Ggp<  
VQ~eg wJL  
O[ans_8  
近期: PC=s:`Y}R  
_#<l -R`  
TR?jT U  
收藏、感谢、点赞 11J:>A5zt  
7|m{hSc  
ZZL%5{ w_  
个人中心 L8;`*H  
xoSBMf  
BZQJ@lk5  
强化移动端体验 ']Km%uwL  
(ds*$]  
a 0FU[*q  
支持用户对评论进行自删和编辑等操作 5o|u!#6  
Mf:x9#  
:Ea ]baM"  
后续: 51%<N\>/4  
k/xNqN(  
_*(:6,8  
多终端同时登录的支持 ]o8~b-  
=2wy;@f  
Zfr?(y+3  
支持第三方登录 X<"#=u(  
4p&SlJ  
qr/N?,  
搭建独立的项目站点 B415{  
!I8( Y  
k|^nrjStC  
RSS支持 )&elr,b /y  
#lm1"~`5  
@}N;C ..Y$  
完善tests ]| =#FFz  
X"G3lG  
dv \ oVD  
`!T6#6h  
如何部署项目 KWV{wW=-  
首先 clone 项目。 T1b9Zqc)f  
D#9W [6  
k}Vu!+cz  
git clone https://github.com/fy0/Icarus.git kjW`k?'s  
下面逐项照做即可。 K31rt-IIt  
.!t' &eV  
dQFx]p3L  
迫于前端安装node_modules等待时间长,在环境安装完成后,前端篇和后端篇可以一起做,以节省时间。 WS0RvBvb  
v4< x 4  
'W j Q  
环境依赖篇 T%F8=kb-9  
1. Python 3.6+ P3YG:*  
Windows上直接使用Anaconda3或者官方版本。 V# 6`PD6  
Xl%&hM  
P8s'e_t  
Linux上部分发行版(例如ArchLinux)天然满足要求。 pr-!otz  
MhB kr{8  
N|1k6g=0  
对于其他的发行版,首选方案是通过pyenv来安装和管理不同版本的Python: C31SXQ  
A]vQ1*pnk  
'm"H*f  
curl -L https://github.com/pyenv/pyenv-installer/raw/master/bin/pyenv-installer | bash /T*]RO4%>]  
[XQoag;!  
\9BIRY`  
# 重新进入终端后,指定版本进行安装 TM':G9n  
# 或者也可以选择这里不安装,到后面pipenv的时候会有选项自动安装。 GRj{*zs  
pyenv update |xaA3UA  
pyenv install 3.6 ;xa]ke3]  
来源:https://github.com/pyenv/pyenv EY!aiH6P  
R16" lG  
!/$BXUrd  
或者使用包管理器安装,这是一个 Debian/Ubuntu 解决方案: aX1|&erI  
rC<m6  
+B'9!t4 2  
sudo add-apt-repository ppa:deadsnakes/ppa s\Cl3  
sudo apt-get update <OW` )0UX  
sudo apt-get install -y python3.6 python3.6-dev python3.6-venv Md[nlz  
sudo su -c "curl https://bootstrap.pypa.io/get-pip.py | python3.6" '89D62\89  
2. NodeJS Oy[t}*Ik  
建议使用LTS版本的 nodejs,通过包管理器安装: O`mW,  
3!CI=(^IY  
Q_1EAxt  
https://nodejs.org/en/download/package-manager/ W~Mj6c~S"  
 c:~o e  
\"PlM!0du  
curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash - poHDA=# 3  
sudo apt-get install -y nodejs %-T]!3"n  
3. PostgreSQL ( {zp$P}  
官方提供了一系列操作系统的安装解决方案:https://www.postgresql.org/download/ 'J<KL#og  
r0j:ll d  
m.EWYO0XQ  
Windows下你可以下载安装包,主流Linux可以使用包管理器添加软件源。 9^s sT>&/  
T0RgCU IV  
6576RT  
还是以ubuntu举例:https://www.postgresql.org/download/linux/ubuntu/ )kgy L,9  
|2c'0Ibu  
zYSXG-k  
# 为 ubuntu 18.04 添加 PG 源 S` X;2\:  
sudo su -c "echo 'deb http://apt.postgresql.org/pub/repos/apt/ bionic-pgdg main' > /etc/apt/sources.list.d/pgdg.list" FQ(=Fnqn  
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | \ ]b<k%  
  sudo apt-key add - -F|(Y1OE  
sudo apt-get update 'n.eCd j  
^X0<ZI  
/2?GRwU~P  
# 安装PostgreSQL,需要9.6以上版本 {u46m  
sudo apt-get install -y postgresql-10 eVbHPu4  
装好之后做一些配置 eB!0:nHN  
>48zRi\N  
|$9k z31  
sudo su postgres ;U}lh~e11  
psql Q} f=Ye(&}  
# 进入 PQ Shell }QG6KJh_%  
CREATE DATABASE icarus; <(@m913|  
CREATE USER icarus WITH PASSWORD 'IcaruStest123'; eyl+D sK  
GRANT ALL ON DATABASE icarus TO icarus; ^i#q{@g  
\c icarus; qz(0iZ]Y  
CREATE EXTENSION IF NOT EXISTS hstore; P7"g/j""  
CREATE EXTENSION IF NOT EXISTS citext; q^goi 1  
4. Redis YJXh|@LT  
一般直接使用包管理器安装就可以了。 Alp9] 0(  
xk.\IrB_  
1c+[S]7rY  
Windows上可以使用微软提供的二进制版本 C8@SuJ  
T3)/?f?|  
sRb)*p'  
后端篇 =JNoC01D  
建议使用 pipenv 进行部署,首先切到backend目录,执行: +lU:I  
!lL21C6g+  
SH5GW3\h  
sudo pip3.6 install pipenv d^WVWk K  
pipenv install ^B> 4:+^  
不过有个问题就是 pipenv 太慢,总是在 Locking。 nP4jOq*H  
i4v7x;m_p  
AXz'=T}{  
可以灵活使用 --skip-lock 参数跳过 Locking 阶段。 oC.:mI  
N~g'Z `  
vXRfsv y  
或者使用requirements.txt进行比较传统的安装。 W9{6?,]  
)1Os+0az  
?fc({zb  
特别地,在Windows上安装aioredis库时可能会遇到依赖的hiredis包无法安装的问题 4vW:xK  
如果是anaconda用户,那么可以使用: wp-*S}TT  
q%"]}@a0  
>j_,3{eJ  
conda config --append channels conda-forge   eB<R@a|?S  
conda install hiredis GmPNzHDb  
来进行安装。 kiZA$:V8  
如果不是anaconda用户,那么可以直接访问 https://anaconda.org/conda-forge/hiredis/files dBX%/  
直接下载.tar.bz2压缩包把里面的site-packages/hiredis解压出来放到自己的site-packages即可 $2 ~RZpS  
rH$0h2  
b,$H!V *  
环境装完之后,这样启动服务: @T|mHfQ8  
G?8LYg!-  
{Z3B#,V(g  
pipenv shell =Qp~@k=2  
python main.py $F`jM/B6  
运行 backend 目录下的 main.py,初次运行会创建自动 private.py 并退出。 FG38)/  
\NDSpT<Z  
}rxFX  
private.py 里的内容会覆盖 config.py 中的配置。 RN]4Is:  
Ma: xxsH.  
Gnr]qxL  
在初次创建后,用编辑器打开,逐项对内容进行修改,使其符合你机器的实际情况即可。 r,A750P^  
@]Aul9.h  
T8JM4F  
前端篇 Ef;_im  
# 安装项目依赖 5 b( [1*  
cd Icarus 2d>kc2=*  
npm install 1%G<gbHpI  
迫于安装时间过长,国内可以使用cnpm: PBTGN;y  
Y]0oF_ :7  
~Wm`SIV  
npm install -g cnpm --registry=https://registry.npm.taobao.org ;m,lS_[c  
cnpm install 68kxw1xY  
如果只是开发环境下看看效果,那么在后端已经跑起来的情况下: cwlXb!S$  
<bDjAVq  
TSt-#c4B  
npm run serve C=t:0.:PJ  
然后在浏览器中查看即可。 @ZK#Y){  
VTa?y  
xO`w| k  
扩展篇:Nginx部署 Vrf2%$g  
如果需要配置外部访问(注意!只是开发则不需要),可以按如下步骤操作: p^Kp= z  
MGCwT@P  
\5BI!<  
我们的目标是将前端挂在某个域名或端口上,然后将后端挂在同一域名的/api下。 f9cS^v_:  
2[}^ zTtA  
!:,d^L!bh  
以此直接绕过同源策略的相关内容,简化配置。这也就是“单端口方案”的含义。 S)p{4`p%  
R4"["T+L`  
7]_UZ)u  
首先,在 Icarus 目录下新建一个 private.js,并按照下例进行填写: {6!Mf+Xq  
@] 1E~  
t48(,  
// 单端口方案 `zAV#   
var host = window.location.host N{IY \/;\  
?D/r1%Z  
)NGBA."t  
export default { 2-ev7:  
    remote: { L01R.3Z+  
        API_SERVER: '//' + host, $g$~TuA w  
        WS_SERVER: 'ws://' + host + '/ws', .^N+'g  
    } [aU#"k)M  
} MeW8aL r  
npm run build #\"8sY,j  
生成dist目录备用。 S])YU?e  
W78Z<Vm  
X&0m$x  
随后是nginx的配置,当然你要首先安装它。 'D#}ce)s#  
c5>&~^~>Tx  
k2sb#]-/}  
我已经写好了配置文件的模板,只要简单改改放进配置目录就可以了。 &ME[H  
`W e M  
Z%\9y]zs  
这里使用的是单端口绑定前后端,整站使用 9001 向外网提供服务(但后端仍要对内开一个端口)。 =<s+cM  
BhJqMK>'S  
L;I .6<K.  
在将前端静态目录映射到/的同时,将后端所在的9999端口映射到/api。 _SjS^z~  
>Y?B(I2e  
e2*0NT^R  
这样前端页面访问 /api 就是访问后端了,也不存在跨域问题。 di]z  
x-:vpv%6y  
}P#%aE&-  
sudo apt install nginx Na=9 ju  
cd Icarus 6* cm  
sudo cp misc/icarus-1port.conf /etc/nginx/conf.d/ g3 6oEz~|  
随后编辑 /etc/nginx/conf.d/icarus-1port.conf,将 SE)_5|k*  
B++.tQ=X.  
38b%km#  
# root /home/{user}/Icarus/dist; .*:SZ3v  
修改为正确的路径,重启服务: J4 .C"v0a  
Q4{%)}2$  
zLc.4k  
sudo service nginx restart L^yQb4$&M  
访问服务器IP的9001端口,就可以看到最上面截图中的画面了。 CTp~bGIv!=  
$TU=^W)X  
6_=qpP-?  
第一个注册的用户将自动成为管理员。 L7_(KCh  
,*Y*ov23aQ  
B]ul~FX  
扩展篇:开启全文搜索与关联推荐功能 xcnHj1r-o'  
这事情简单,首先在机器上安装ES: yBE1mA:x7:  
KGxF3xS*7  
9m0`;~!  
https://www.elastic.co/downloads/elasticsearch iN8?~T}w  
+"Ih'bb`j  
yc|C}oQF  
然后搞到中文分词插件: 7Gnslp?[U  
gP/[=:  
DalQ.   
https://github.com/medcl/elasticsearch-analysis-ik/releases >&TSz5Q  
|Yh-`~~A"  
3H%R`ha  
并将分词插件解压在ES插件目录,例如your-es-root/plugins/ik,然后把ES开起来: g9}u6q  
*yKsgH  
O_K@\<;~  
# 超低配版,最小内存256M,最大1G >F8&wh'BjY  
# 根据自己服务器情况酌情调整参数 4A^hP![c#]  
cd elasticsearch-6.5.1 zwR@^ 5^6  
ES_JAVA_OPTS="-Xms256m -Xmx1g" ./bin/elasticsearch ;38W41d{  
请注意两者版本需要一一对应,如果ES版本过新(更新非常频繁),后者可能尚未来得及更新。 N#@xo)-H  
}oYR.UH  
ih.UzPg  
随后在第一次执行main.py自动生成的private.py中修改这一段的内容: |xZDc6HDW  
B}X   C  
ogs9obbZ!  
SEARCH_ENABLE = False auAST;"Z8  
ES_INDEX_NAME = 'icarus-index' $5GvF1  
ES_HOSTS = [{ $Rv}L'L  
    "host": "localhost", Odxq]HlbO  
    "port": 9200 P{)H7B>  
}] L$zT`1Hy  
最省事可以只改一个: K6KEdXM4  
daaUC  
B3O^(M5W  
SEARCH_ENABLE = True ioi0^aM  
然后在backend目录下运行: -))>7skc  
#j d?ocoY  
[?RLvhU|  
pipenv shell U(-9xp+  
python3.6 misc/force_refresh_elasticsearch.py FRF3V>  
完成,重启后端进程main.py即可应用。 '97)c7E  
po*s  
`=uCp^ +v  
项目地址:https://github.com/fy0/Icarus v!t*Ng  
CWE jX-  
_S8]W !c  
[ 此帖被寒喵在2019-01-01 00:15重新编辑 ]
本人不是云栖社区工作人员。
无论您在使用中遇到什么问题,不要出言不逊!谢谢合作!
发表主题 回复主题
« 返回列表上一主题下一主题

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