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

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

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

Wky=]C%  
x48Y#"'  
Y0:y72mK  
开源协议 oqH811  
ZLIB }A3(g$8KR  
cobq+Iyu  
W|_ @ju  
免费且商业友好,这个协议基本上和MIT相同。 :j)H;@[I  
Pf5RlpL:p  
; {$9Sc $  
特性 xwhH_[  
全局 -&I%=0q  
12n5{'H2%  
Nlemb:'eP3  
文件上传(七牛云) XP~bmh,T,  
t$^1A1Ef  
M/C7<?&  
超宽屏支持 .^j6  
8wz%e(  
~H!s{$.5  
简易的移动端支持 Lsv[@Rl  
+InAK>NZ'  
xp-.,^q\w  
实时在线人数 k4r;t: O^  
pwAawm  
'lNy&  
Markdown发帖和评论 aHx(~&hRcL  
lj0"2@z3"E  
by; %k/  
包含主题、评论、百科内容的全文搜索(基于Elasticsearch) D# |+PG7  
? RL[#d+y  
o}H7;v8H  
用户系统 oe,I vnt  
1FCqkwq[  
) *Mr{`  
注册、登录 (n:d {bKV  
88(h`RGMh  
fa7Z=:a G  
邮件激活 1|$V  
:{@&5KQ8)  
T\7z87Q  
邮箱找回密码 PqV9k,5f  
-4ityS @  
1OB,UU"S$  
修改个人信息 c'M#va  
,#&\1Vxf  
JGQlx-qv  
上传头像(七牛云) k"_i7  
IvuKpX>*  
(A!+$}UR  
每日签到 [vMksHk4  
Co[fq3iX#  
$="t7C9S  
个人提醒 7|4t;F!  
' >a(|  
1>hY!nG h  
论坛 K@av32{  
/5cFa  
g<C_3ap/  
扁平化的内容展示 zN}1Qh  
hP1}Do  
anDwv }  
创建和管理板块 /^_~NF#  
-L%J,f[&,  
>6fc` 3*!  
板块主题颜色 @JJ,$ ?  
#rZF4>c  
u!kC+0Y  
发表和编辑主题 Dn{ hU $*  
IQn|0$':Z  
poJ7q (  
文章页动生成快捷导航 )_[eqr  
Rb!|2h)  
K)NB{8 _  
@功能 5/U|oZM"  
T-" zK r!  
61qs`N=k  
百科 QGv$~A[h  
rHS;wT  
>lyX";X#  
自定义侧边栏和主页 3O{*~D&n  
f~U~f}Uw4  
g&z)y  
文章的创建和编辑 E0F8FR'  
ZkbaUIQ  
VD=}GY33=  
全部文章列表 #Az#dt]H  
|r5e#3w  
977%9z<h  
文章历史 N^G $:GC  
tyEa5sy4  
J%8M+!`F  
随机页面 J[Ck z]  
C*+gQeK  
rV yw1D  
管理后台 +XaRwcLC.  
]4{ )VXod  
S5Hb9m&&  
提供对板块、主题、用户、评论的管理 1z .  
{P'_s ]B)  
Yf=an`"  
管理日志 ]lT8Z-h@  
H@+1I?l  
x.5!F2$  
安全机制 i~};5j(  
{;z{U;j  
n\-nBrVSf  
前端密码加密,后端不取得用户的初始密码,最大限度降低了中间人攻击和数据库泄露的危害 S]}hh,A  
3MmpB9l#H  
ce3UB~Q  
后端二次加密,sha512加盐迭代十万次后储存用户密码 jOkc'  
$;4y2?E  
:4Gc'b R  
密码相关API均有防*破,可设置IP请求间隔和账号请求间隔,分别提升批量撞库和单点*破的难度 2HNAB4 E  
uW%(ySbq  
b7^Db6qu  
隐私数据,例如IP地址脱敏后才可存入数据库 /?ZO-]q  
YaBZ#$r  
3R}O3#lj,  
如何部署 *]7$/%.D  
内容较多,详见部署文档 `{Jo>L .  
{ R`"Nk  
)Ja&Y  
升级指南  ?W3l  
首先停止服务并更新源码。 wHR# -g'  
|zkZF|-  
O x),jc[/  
然后请寻找 backend/misc/upgrade 目录下对应的升级文件,例如1.2升级1.3使用u12-u13.py。 anzt;V.;Y  
nOCCOTf  
W=S<DtG2  
在 backend 目录下执行后删除即可。 ng{ "W|  
MS~+P'  
%K[u  
注意如果使用了 pipenv 或其他虚拟环境,要在项目对应环境中完成这个操作。 bzWWW^kNL  
1EemVZdY  
>]}c,4D(  
然后分别升级前端项目(根目录)和后端项目(backend目录)的项目依赖。 1=Z, #r  
XCd[<\l  
_ *.ImD  
如该版本无特别的升级说明,此时直接重新开启服务即可。 p9-s'F|@i  
/Y`u4G()  
UbEK2&q/8  
规划 I /z`)  
由于空闲时间有限,而且是单枪匹马做整个项目的开发。 wZ%a:Z4TcM  
tyU'[LF?  
-d4|EtN  
目前的版本还有一些不完善的地方以及缺少的功能来不及完成,姑且规划如下: >pm`(zLn  
gZ>) S@  
x(+H1D\W   
近期: WyU\,"  
WD>z  
E}g)q;0v|2  
收藏、感谢、点赞 2_Gb K-  
vLs*}+f  
#SX-Y)> 1@  
个人中心 )wNcz~ Y  
e0ULr!p  
hf\/2Vl  
强化移动端体验 uqvS  
KP&$Sl  
`t#9 yN  
支持用户对评论进行自删和编辑等操作 (9Of,2]&E  
oV'G67W  
@y2cC6+'t  
后续: dK41NLGQ  
oTg 'N  
x c|1?AFj  
多终端同时登录的支持 <~zPt&C]V  
E1s~ +  
wpg7xx!  
支持第三方登录 30W.ks5(  
9y*2AaxW  
"j8`)XXa(  
搭建独立的项目站点 X<Ag['r  
jAdZS\?w  
`R*SHy! _  
RSS支持 =~TPrO^  
P)O:lYX  
0ev='v8?  
完善tests *).!  
Nw '$r  
+ryB*nT  
" u)e,gu  
如何部署项目 e>x+Xj1  
首先 clone 项目。 eV"s5X[$  
~ga WZQXyu  
LqLhZBU9  
git clone https://github.com/fy0/Icarus.git P#}vi$dZ  
下面逐项照做即可。 eo~b]D  
g> m)XY  
cRE6/qrXGg  
迫于前端安装node_modules等待时间长,在环境安装完成后,前端篇和后端篇可以一起做,以节省时间。 }tL]EW^  
6xFchdMG{m  
\Hw*q|  
环境依赖篇 s>)?MB*vb  
1. Python 3.6+ _WZ{i,  
Windows上直接使用Anaconda3或者官方版本。 j`#H%2W\;  
.Rt~d^D@  
J%lrXm(l{  
Linux上部分发行版(例如ArchLinux)天然满足要求。 -qBdcbi|x)  
 % s@  
i-9W8A  
对于其他的发行版,首选方案是通过pyenv来安装和管理不同版本的Python: CF:L#r  
hcM9Sx"!  
4I9Yr  
curl -L https://github.com/pyenv/pyenv-installer/raw/master/bin/pyenv-installer | bash ke k/C`7  
P/xE n_*v  
`KZu/r-M9  
# 重新进入终端后,指定版本进行安装 ]L2b|a3  
# 或者也可以选择这里不安装,到后面pipenv的时候会有选项自动安装。 iRx`Nx<@  
pyenv update _SkiO }c8  
pyenv install 3.6 5gkQ6& m  
来源:https://github.com/pyenv/pyenv %`~+^{Wp  
BLAF{vVaf  
W>qu~ak?x  
或者使用包管理器安装,这是一个 Debian/Ubuntu 解决方案: <oi'yr  
B@S~v+Gr  
X(BX+)YR  
sudo add-apt-repository ppa:deadsnakes/ppa t/_\w"  
sudo apt-get update 'h^Ya?g  
sudo apt-get install -y python3.6 python3.6-dev python3.6-venv e tL?UF$  
sudo su -c "curl https://bootstrap.pypa.io/get-pip.py | python3.6" Yf/e(nV  
2. NodeJS p]<)6sZ  
建议使用LTS版本的 nodejs,通过包管理器安装: MPKrr  
@^DVA}*b)  
\ueCbfV!Z4  
https://nodejs.org/en/download/package-manager/ +o'xyR'(  
}%AfZ 2g;h  
=qbN?a/?2  
curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash - 5;G0$M0  
sudo apt-get install -y nodejs 1k^$:'  
3. PostgreSQL A,xPA  
官方提供了一系列操作系统的安装解决方案:https://www.postgresql.org/download/ mU  
.C &kWM&j  
P{BW^kAdH  
Windows下你可以下载安装包,主流Linux可以使用包管理器添加软件源。 R*D5n>~  
{$5g29  
54B`T/>R:E  
还是以ubuntu举例:https://www.postgresql.org/download/linux/ubuntu/ gz~ug35  
V;^N:I\js  
q317~ z_nl  
# 为 ubuntu 18.04 添加 PG 源 Bo14t*(  
sudo su -c "echo 'deb http://apt.postgresql.org/pub/repos/apt/ bionic-pgdg main' > /etc/apt/sources.list.d/pgdg.list" ~:PM_o*6  
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | \ mq:WBSsV  
  sudo apt-key add - _ker,;{9C  
sudo apt-get update q@~{ g[   
,qo^G0XO  
; yE.R[I  
# 安装PostgreSQL,需要9.6以上版本 s$,G5Feub  
sudo apt-get install -y postgresql-10 cui%r!D  
装好之后做一些配置 HG< z,gE 2  
CE!cZZ  
}Y|M+0   
sudo su postgres $tI<MZ&Z  
psql MM*~X"A  
# 进入 PQ Shell 1 0.Z Bfn  
CREATE DATABASE icarus; ]=ZPSLuEm%  
CREATE USER icarus WITH PASSWORD 'IcaruStest123'; Iz83T9I&  
GRANT ALL ON DATABASE icarus TO icarus; Q[aF"5h%  
\c icarus; k@s<*C  
CREATE EXTENSION IF NOT EXISTS hstore; :Ny[?jt c  
CREATE EXTENSION IF NOT EXISTS citext; UZmUYSu;  
4. Redis 63_#*6Pv28  
一般直接使用包管理器安装就可以了。 E.sZjo1  
jJNl{nyq  
 LAM{ ,?~  
Windows上可以使用微软提供的二进制版本 Iw`|,-|  
N6p0`  
TQ :e! 32  
后端篇 1Y;.fZE  
建议使用 pipenv 进行部署,首先切到backend目录,执行: %Tu(>vnuj  
PFx.uqp  
GA` bWl  
sudo pip3.6 install pipenv p:$kX9mT&  
pipenv install b<#zgf  
不过有个问题就是 pipenv 太慢,总是在 Locking。 BNA1"@9q  
oR!h eCnu  
5} <OB-9  
可以灵活使用 --skip-lock 参数跳过 Locking 阶段。 |uz\XK  
^'du@XCf}  
2~7*jA+Ab  
或者使用requirements.txt进行比较传统的安装。 "VHT5k  
7lAJ 0  
%Ie,J5g5  
特别地,在Windows上安装aioredis库时可能会遇到依赖的hiredis包无法安装的问题 ~Ym*QSD  
如果是anaconda用户,那么可以使用: %C #Ps   
{q+gm1iC  
{06ClI  
conda config --append channels conda-forge   ahZ@4v  
conda install hiredis 92R,o'#  
来进行安装。 X(17ESQ/Y  
如果不是anaconda用户,那么可以直接访问 https://anaconda.org/conda-forge/hiredis/files w S?Kc^2O  
直接下载.tar.bz2压缩包把里面的site-packages/hiredis解压出来放到自己的site-packages即可 l-20X{$m:  
])bgUH  
J#4pA{01w  
环境装完之后,这样启动服务: 5 8L@:>"  
Pg`+Q^^6S  
RhT:]  
pipenv shell g`C"t3~%S  
python main.py kB5y}v.3 S  
运行 backend 目录下的 main.py,初次运行会创建自动 private.py 并退出。 Oml3=TV  
H8B.c%_|U  
._;It198f  
private.py 里的内容会覆盖 config.py 中的配置。 F3$8l[O_  
Yt:%)&50}-  
*%_M?^  
在初次创建后,用编辑器打开,逐项对内容进行修改,使其符合你机器的实际情况即可。 -iW>T5f  
vO"E4s  
`:m=rT_  
前端篇 Uvi@HB HJ  
# 安装项目依赖 Ln+ k_  
cd Icarus P@n rcgM.  
npm install C R't  
迫于安装时间过长,国内可以使用cnpm: #a9R3-aP  
DIvxut  
tpeMq -  
npm install -g cnpm --registry=https://registry.npm.taobao.org '&gUAt  
cnpm install EL2z&  
如果只是开发环境下看看效果,那么在后端已经跑起来的情况下: $gk=~p|  
9WQ'"wyAQ  
=KnHa.%  
npm run serve i1b3>H*3  
然后在浏览器中查看即可。 +:c}LCI9<  
lD _iIe~c  
eSMno_Gt3  
扩展篇:Nginx部署 .>y3`,0h  
如果需要配置外部访问(注意!只是开发则不需要),可以按如下步骤操作: xBw ua;  
G"vEtNoV  
3rX8H`R  
我们的目标是将前端挂在某个域名或端口上,然后将后端挂在同一域名的/api下。 Z%r8oj\n  
Nk F2'Z{$+  
^*~4[?]S  
以此直接绕过同源策略的相关内容,简化配置。这也就是“单端口方案”的含义。 &,]yqG 2  
tf9a- s  
}k8&T\V!  
首先,在 Icarus 目录下新建一个 private.js,并按照下例进行填写: )$2h:dw_  
X%B2xQM 5  
A2fuNV_  
// 单端口方案 ,/Y$%.Rp  
var host = window.location.host K5+ONA<c  
4&`d$K  
*NI hYg6  
export default { Vt4,?"  
    remote: { cW^u4%f't'  
        API_SERVER: '//' + host, FvBnmYn W  
        WS_SERVER: 'ws://' + host + '/ws', + j6^g*  
    } qKuHd~M{ 1  
} <L3ig%#B  
npm run build `{J(S'a`  
生成dist目录备用。 ]#$r TWMl'  
]=]`Mnuxb  
T\T>\&nY+|  
随后是nginx的配置,当然你要首先安装它。 k jR-p=}  
v,c:cKj  
X,+N/ nku  
我已经写好了配置文件的模板,只要简单改改放进配置目录就可以了。 1 swqs7rR|  
z8w@pT  
<d3N2  
这里使用的是单端口绑定前后端,整站使用 9001 向外网提供服务(但后端仍要对内开一个端口)。 _We4%  
rJcZ a#  
dxWG+S  
在将前端静态目录映射到/的同时,将后端所在的9999端口映射到/api。 ebB8.(k9G3  
s#)tiCSVW  
+0n,>eDjg^  
这样前端页面访问 /api 就是访问后端了,也不存在跨域问题。 aw'o=/a8  
G%fNGQwT  
n0'"/zyc  
sudo apt install nginx CLY>M`%?+p  
cd Icarus dw< b}2  
sudo cp misc/icarus-1port.conf /etc/nginx/conf.d/ m9 f[nT  
随后编辑 /etc/nginx/conf.d/icarus-1port.conf,将 nA XWbavY  
VxGR[kq$]  
QU^?a~r  
# root /home/{user}/Icarus/dist; U^xtS g  
修改为正确的路径,重启服务: % KmhR2v  
>U'gQS?\]  
6SmawPPP  
sudo service nginx restart FKu^{'Y6E0  
访问服务器IP的9001端口,就可以看到最上面截图中的画面了。 eop7=!`-~~  
u-#J!Z<T8  
/7XVr"R  
第一个注册的用户将自动成为管理员。 -#"7F:N1  
's6hCs&|NV  
GxcW^{;  
扩展篇:开启全文搜索与关联推荐功能 -&_;x&k /  
这事情简单,首先在机器上安装ES: _f~m&="T!  
3D"?|rd~  
)qV&sru.$  
https://www.elastic.co/downloads/elasticsearch Z?tw#n[T  
v?(9ZY]  
QDJ:LJz\  
然后搞到中文分词插件: y5lhmbl: e  
qx\P(dOUf  
}=JuC+#~n  
https://github.com/medcl/elasticsearch-analysis-ik/releases b&Go'C{p  
14;lB.$p  
#sp8 !8|y  
并将分词插件解压在ES插件目录,例如your-es-root/plugins/ik,然后把ES开起来: 66shr  
23=SXA!  
,}_uk]AQ  
# 超低配版,最小内存256M,最大1G 0] $5jW6]  
# 根据自己服务器情况酌情调整参数 # ^oF^!  
cd elasticsearch-6.5.1 u9R:2ah&K  
ES_JAVA_OPTS="-Xms256m -Xmx1g" ./bin/elasticsearch `h|>;u   
请注意两者版本需要一一对应,如果ES版本过新(更新非常频繁),后者可能尚未来得及更新。 T hLR<\  
-$m?ShDd  
j8"2K^h=  
随后在第一次执行main.py自动生成的private.py中修改这一段的内容: gR:21*&cz  
=)Q0=!%-  
Ffp<|2T2_  
SEARCH_ENABLE = False @:"GgkyDl#  
ES_INDEX_NAME = 'icarus-index' mrz@Y0mgL  
ES_HOSTS = [{ gC qQ~lWZ  
    "host": "localhost", >E3 lY/[  
    "port": 9200 PofHe  
}] iNAaTU  
最省事可以只改一个: !%{s[eO\  
>ey- j\_v  
_{5t/^w&!  
SEARCH_ENABLE = True N>}2&'I  
然后在backend目录下运行: J6Q}a7I#  
j,/t<@S>  
%d\|a~p:  
pipenv shell c_r&)8  
python3.6 misc/force_refresh_elasticsearch.py 2dF:;k k  
完成,重启后端进程main.py即可应用。 h8MkfHH7{  
dnP3{!"b  
XiB]I5(hcc  
项目地址:https://github.com/fy0/Icarus eL+L {Ac  
HKdR?HM1  
@GiR~bKZ  
[ 此帖被寒喵在2019-01-01 00:15重新编辑 ]
本人不是云栖社区工作人员。
无论您在使用中遇到什么问题,不要出言不逊!谢谢合作!
发表主题 回复主题
« 返回列表上一主题下一主题

限100 字节
批量上传需要先选择文件,再选择上传
 
验证问题: 阿里云官网域名是什么? 正确答案:www.aliyun.com
上一个 下一个