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

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

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

J%[K;WjrZJ  
ZRX>SyM  
0CDTj,eK  
开源协议 ~pF'Qw" z|  
ZLIB Xajjzl\b  
`b] NB^/  
fqr}tvMr=T  
免费且商业友好,这个协议基本上和MIT相同。 9:kb0oBa?l  
c{852R  
,:v}gS?Uq  
特性 k(7! W  
全局 Q!Op^4Jz  
'/"(`f,  
r@!~l1$s`  
文件上传(七牛云) m?m,w$K  
xQD#; 7  
@.g4?c  
超宽屏支持 cf j6I  
&R8zuD`#  
-I|yi'  
简易的移动端支持 cKxJeM07  
\{&55>  
|FNP~5v  
实时在线人数 _{ba  
JZ<O-G+  
f{)*"  
Markdown发帖和评论 P_?1Rwm-45  
\(z)]D  
\fKv+  
包含主题、评论、百科内容的全文搜索(基于Elasticsearch) &/ zs Ix+  
Y Jv{Z^;M  
kO5KZ;+N-  
用户系统 NT-du$! u  
 r>G$u  
# I<G:)  
注册、登录 w"sRK  
hyBSS,I  
:*8@Mj Z4  
邮件激活 <8y8^m`P9  
C qxP@  
xA-G&oC]<T  
邮箱找回密码 I{2e0  
lz>5bR'  
7f(UbO@BD  
修改个人信息 N@)g3mX>  
:2?'mKa7  
 q)%C|  
上传头像(七牛云) d82IEhZ#  
R<wb8iir  
0 @ ,@  
每日签到 2AlLcfAW  
^@)+P/&  
%%f=aPw  
个人提醒 qD9B[s8  
&B3kzs  
c#rbyx?5  
论坛 7N""w5  
4o|~KX8Qz  
6?t5g4q*nn  
扁平化的内容展示 $]hf2Yr(  
(_W[~df4  
}??q{B@v  
创建和管理板块 ) ejvT-  
J6Kf z~%  
`&+ L/  
板块主题颜色 :bh[6 F  
A 7sej  
 %k2zsM  
发表和编辑主题 ,CvU#ab8$  
{=(4  
*yJb4uALB  
文章页动生成快捷导航 @hv9 =v+  
>U}~Hv]  
O_:Q#  
@功能 ](W #Tj5-  
YvU#)M_h  
1n5&PNu  
百科 <Q8bn?Z  
v(0vP}[Q7E  
oW8[2$_N+  
自定义侧边栏和主页 Z uE 0'9  
R52!pB0[  
Wqqo8Y~fq  
文章的创建和编辑 fHgfI@{=j  
mEqV&M1;7l  
I?:V EN:  
全部文章列表 jXdn4m/O  
G cbal:q  
Tu"yoF  
文章历史 i0 R=P[  
<9Chkb|B  
>s>5k O  
随机页面 (thzW r6;  
;P{ *'@  
 "3v%|  
管理后台 7j]@3D9[:p  
;Rt,"W)  
K>q,?x b  
提供对板块、主题、用户、评论的管理 x^ Wgo`v)  
57#:GN$EL  
.c',?[S/vH  
管理日志 fGxa~Unx  
Zs4N0N{  
w?R6$n`  
安全机制 ik]UzB  
rUuM__;d  
ugL$W@   
前端密码加密,后端不取得用户的初始密码,最大限度降低了中间人攻击和数据库泄露的危害 Ufk7%`  
4f>Vg$4  
e]5QqM7  
后端二次加密,sha512加盐迭代十万次后储存用户密码 ClEtw   
P--#5W;^oB  
's9)\LS>p  
密码相关API均有防*破,可设置IP请求间隔和账号请求间隔,分别提升批量撞库和单点*破的难度 S5XFYQ  
^ o{O5&i]  
y@(U 6ZOyx  
隐私数据,例如IP地址脱敏后才可存入数据库 X-%*`XG'  
'Kq%t M26!  
@hCGV'4  
如何部署 ,,6e }o6  
内容较多,详见部署文档 phNv^R+  
avT>0b:  
@Pa ;h  
升级指南 t#d~gBe?V  
首先停止服务并更新源码。 0h5T&U]${Y  
jKtbGVZ 7r  
]v+\v re  
然后请寻找 backend/misc/upgrade 目录下对应的升级文件,例如1.2升级1.3使用u12-u13.py。 8'f:7KF  
Xl}>mbB  
{? 6]_J  
在 backend 目录下执行后删除即可。 toP7b  
_kar5B$  
t<Og ?m}(  
注意如果使用了 pipenv 或其他虚拟环境,要在项目对应环境中完成这个操作。 gXF.e.uU  
Bq\%]2;eo{  
DSQ2z3s2  
然后分别升级前端项目(根目录)和后端项目(backend目录)的项目依赖。 0uj3kr?cv  
HtXzMSGo7  
d#A.A<p*  
如该版本无特别的升级说明,此时直接重新开启服务即可。 R@ihN?k  
"EA%!P:d,  
aiz_6@Qfz*  
规划 $L3UDX+F  
由于空闲时间有限,而且是单枪匹马做整个项目的开发。 "zYlddh  
vQ 5 p  
k3u3X~u  
目前的版本还有一些不完善的地方以及缺少的功能来不及完成,姑且规划如下: @C?RbTHy  
k|&@xEbS  
U t0oh  
近期: Yz[^?M%(D  
dMYDB  
{wK98>$a  
收藏、感谢、点赞 1*#64Y5F  
](B+ilr   
\y{C>! WX4  
个人中心 va| 1N/&  
6>zO"9  
xa??OT`(  
强化移动端体验 yX/ 9jk  
{QI"WFdGx  
YG$Y4h" @"  
支持用户对评论进行自删和编辑等操作 +A O(e  
&KT*rL  
Il,2^54q  
后续: E&/#Ov  
]haZT\  
x}{/) ?vC  
多终端同时登录的支持 ;&oS=6$  
4Un(}P'   
;3'ta!.c  
支持第三方登录 V+(1U|@~  
%`?IY<  
Et}S*!IS  
搭建独立的项目站点 f,9/Yg_  
k+t?EZ6L  
tZB" (\  
RSS支持 ;p)RMRMg  
Yw7txp`i  
Arc6d5Q  
完善tests 9J+ p.N  
0%&ZR=y(G  
piULIZ0  
7@oM?r7td  
如何部署项目 y(^t&tgjS  
首先 clone 项目。 Y7vUdCj  
|qm_ESzl  
D`d*bNR  
git clone https://github.com/fy0/Icarus.git >}? jOB  
下面逐项照做即可。 Lz6b9W  
![1+=F !  
B8.a#@R  
迫于前端安装node_modules等待时间长,在环境安装完成后,前端篇和后端篇可以一起做,以节省时间。 *hWpJEV  
pW5ch"HE  
%B}<5iO  
环境依赖篇 w :nYsuF  
1. Python 3.6+ ^Y%'"QwJS  
Windows上直接使用Anaconda3或者官方版本。 `D-P}hDm!  
Ah 2*7@U  
,ArHS  
Linux上部分发行版(例如ArchLinux)天然满足要求。 2NMg+Lt8v  
VdL*"i  
2]of 4  
对于其他的发行版,首选方案是通过pyenv来安装和管理不同版本的Python: O:E0htdWr  
^yLhL^Y  
W{RZ@ 3ZY  
curl -L https://github.com/pyenv/pyenv-installer/raw/master/bin/pyenv-installer | bash ;NMv>1fI  
5bB\i79$  
y#T.w0*  
# 重新进入终端后,指定版本进行安装 #Z. QMWq  
# 或者也可以选择这里不安装,到后面pipenv的时候会有选项自动安装。 -=cxUDB  
pyenv update '\O[j*h^.  
pyenv install 3.6 oyT`AYa  
来源:https://github.com/pyenv/pyenv ,B~5;/ |  
,xw1B-dx  
6& (bL<8b  
或者使用包管理器安装,这是一个 Debian/Ubuntu 解决方案: N_^PoX935O  
[I?[N.v  
<78*-Ob  
sudo add-apt-repository ppa:deadsnakes/ppa 3q W](  
sudo apt-get update C547})  
sudo apt-get install -y python3.6 python3.6-dev python3.6-venv 4^Ss\$*  
sudo su -c "curl https://bootstrap.pypa.io/get-pip.py | python3.6" (_%l[:o6  
2. NodeJS Sa[?B  
建议使用LTS版本的 nodejs,通过包管理器安装: < z#.J]  
Sse%~:FL  
?edf$-"z/  
https://nodejs.org/en/download/package-manager/ %4wEAi$I  
ZO!h!2*  
cQkj{u  
curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash - 2 g\O/oz  
sudo apt-get install -y nodejs %iB,hGatE  
3. PostgreSQL - {}(U  
官方提供了一系列操作系统的安装解决方案:https://www.postgresql.org/download/ m@Dra2Cv'@  
**$kW bS  
R; w$_1  
Windows下你可以下载安装包,主流Linux可以使用包管理器添加软件源。 -^)<FY\  
s#'Vasu  
E-%$1=;  
还是以ubuntu举例:https://www.postgresql.org/download/linux/ubuntu/ $Zr \$z2  
cTW$;Fpc+  
2 OV$M~  
# 为 ubuntu 18.04 添加 PG 源 =0L%<@yA  
sudo su -c "echo 'deb http://apt.postgresql.org/pub/repos/apt/ bionic-pgdg main' > /etc/apt/sources.list.d/pgdg.list" -X_\3J  
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | \ 9OFH6-;6`\  
  sudo apt-key add - `ZZ3!$czR  
sudo apt-get update $EHF f$M  
4X",:B}  
?2_h.  
# 安装PostgreSQL,需要9.6以上版本 H,W8JNPs  
sudo apt-get install -y postgresql-10 cNT !}8h^  
装好之后做一些配置 HE{UgU:tY  
BL~#-Mm<|l  
,{\Ae"{6  
sudo su postgres 2 FoLJ  
psql f[vm]1#  
# 进入 PQ Shell fN@ZJ~F%j  
CREATE DATABASE icarus; Buso `G  
CREATE USER icarus WITH PASSWORD 'IcaruStest123'; ;jaugKf  
GRANT ALL ON DATABASE icarus TO icarus; "N ">RjJ"  
\c icarus; }z#M!~  
CREATE EXTENSION IF NOT EXISTS hstore; C:t?HLY)fG  
CREATE EXTENSION IF NOT EXISTS citext; *P5\T4!+d  
4. Redis m,"-/)  
一般直接使用包管理器安装就可以了。 QgKR=GR6  
.N>*+U>>P  
;&gk)w6*  
Windows上可以使用微软提供的二进制版本  3Z`"k2k  
$UdBZT-  
ZXL'R |?  
后端篇 WVsj  
建议使用 pipenv 进行部署,首先切到backend目录,执行:   NV-l9  
~(^pGL3<  
WUjRnzVM  
sudo pip3.6 install pipenv #_x5-?3  
pipenv install */JYP +  
不过有个问题就是 pipenv 太慢,总是在 Locking。 5!S#}=f=  
vE8BB$D  
PNd'21N  
可以灵活使用 --skip-lock 参数跳过 Locking 阶段。 g\q4-  
mR1b.$  
 DAiS|x  
或者使用requirements.txt进行比较传统的安装。 !s^XWsb8  
\.oJ/++  
}:YL'$:5!  
特别地,在Windows上安装aioredis库时可能会遇到依赖的hiredis包无法安装的问题 j24DL+  
如果是anaconda用户,那么可以使用: po'b((q  
'_V9FWDZ  
!;mn]wR>a  
conda config --append channels conda-forge   ^&C/,,U  
conda install hiredis KAD2_@l  
来进行安装。 - AgD  
如果不是anaconda用户,那么可以直接访问 https://anaconda.org/conda-forge/hiredis/files ab2Cn|F  
直接下载.tar.bz2压缩包把里面的site-packages/hiredis解压出来放到自己的site-packages即可 E:M,nSc)53  
< `"  
%7 yQ0'P  
环境装完之后,这样启动服务: 1$.svR  
&4KUXn[F  
d/F^ez  
pipenv shell u-y?i`  
python main.py 7FPSBvU#/  
运行 backend 目录下的 main.py,初次运行会创建自动 private.py 并退出。 AaxQBTB  
kvbW^pl  
.)+c01  
private.py 里的内容会覆盖 config.py 中的配置。 %qo.n v  
(yi zM  
&y1iLk h^  
在初次创建后,用编辑器打开,逐项对内容进行修改,使其符合你机器的实际情况即可。 .%7Le|Fb"  
6{^\7`  
YLTg(*  
前端篇 D iOd!8Y  
# 安装项目依赖 OomC%9/=,  
cd Icarus U ^GVz%\  
npm install ,g}$u'A+d  
迫于安装时间过长,国内可以使用cnpm: fap]`P~#L  
{wA8!5Gu  
~+0IFJ`}  
npm install -g cnpm --registry=https://registry.npm.taobao.org _V1:'T8  
cnpm install 2cQ~$  
如果只是开发环境下看看效果,那么在后端已经跑起来的情况下: et~D9='E  
 XD8 I.q  
P2f^]z  
npm run serve KMkD6g  
然后在浏览器中查看即可。 x=xo9wEg  
R= mT J'y  
hx;kNcPbI  
扩展篇:Nginx部署 N0^SWA|S  
如果需要配置外部访问(注意!只是开发则不需要),可以按如下步骤操作: *A8*FX>\F  
,D }Ka?  
=oh%-Sh:  
我们的目标是将前端挂在某个域名或端口上,然后将后端挂在同一域名的/api下。 kO*\JaD  
]o"E 4Vht  
xrBM`Bj0@  
以此直接绕过同源策略的相关内容,简化配置。这也就是“单端口方案”的含义。 \db=]L=|  
/1{:uh$  
?.F^Oi6 u  
首先,在 Icarus 目录下新建一个 private.js,并按照下例进行填写: ;qUB[Kw  
[kN_b<Pc,  
@J 5TDq @  
// 单端口方案 tCO?<QBE  
var host = window.location.host BH~zeJ*Pr  
z a_0-G%C2  
R\7r!38  
export default { +2eri_p  
    remote: { Z&iW1  
        API_SERVER: '//' + host, ;8&/JSN M  
        WS_SERVER: 'ws://' + host + '/ws', P/[RH e  
    } N;-%:nC  
} J!~kqNI  
npm run build `kvIw,c.  
生成dist目录备用。 aN*{nW  
3o>JJJ=]  
m='}t \=  
随后是nginx的配置,当然你要首先安装它。 d(^HO~p  
0nD?X+u  
O#[bNLV  
我已经写好了配置文件的模板,只要简单改改放进配置目录就可以了。 <Rn-B).3bs  
`w >D6K+  
P/WGB~NH  
这里使用的是单端口绑定前后端,整站使用 9001 向外网提供服务(但后端仍要对内开一个端口)。 }{@y]DcdM4  
^;s/4  
j8 2w 3  
在将前端静态目录映射到/的同时,将后端所在的9999端口映射到/api。 SYsO>`/ )  
L'KKU4zj  
M"p%CbcI]  
这样前端页面访问 /api 就是访问后端了,也不存在跨域问题。 $")Gd@aR  
V;CRs\aYf  
u]O}Ub`  
sudo apt install nginx >iK LC  
cd Icarus 0iR?r+|  
sudo cp misc/icarus-1port.conf /etc/nginx/conf.d/  Rm)hgmZ  
随后编辑 /etc/nginx/conf.d/icarus-1port.conf,将 3$P  
ZWS:-]P.  
,ZY\})`p  
# root /home/{user}/Icarus/dist; [) >Yp-n  
修改为正确的路径,重启服务: ZQ`4'|"  
N Czabl  
Dmy=_j?ej  
sudo service nginx restart wX6-WQR  
访问服务器IP的9001端口,就可以看到最上面截图中的画面了。 N\.g+ W  
bw/mF5AsW  
pnx^a}|px  
第一个注册的用户将自动成为管理员。 E'mT%@M OM  
z!b:|*m]w  
2g5 4<G*e  
扩展篇:开启全文搜索与关联推荐功能 yk4py0xVl  
这事情简单,首先在机器上安装ES: <v_Wh@m  
nwfu@h0G  
T1Z*>(M  
https://www.elastic.co/downloads/elasticsearch #"TYk@whWf  
jjEu  
N`H`\+  
然后搞到中文分词插件: `S? _=JIX  
|cuKC \  
/5epDDP-t5  
https://github.com/medcl/elasticsearch-analysis-ik/releases }LX!dDuwA  
p(4B"[!S  
"B"ql-K  
并将分词插件解压在ES插件目录,例如your-es-root/plugins/ik,然后把ES开起来: (Lj*FXmz  
iDgc$'%?  
k[<i+C";  
# 超低配版,最小内存256M,最大1G mrG#ox4$  
# 根据自己服务器情况酌情调整参数 x+'Ea.^  
cd elasticsearch-6.5.1 %Y#W#G  
ES_JAVA_OPTS="-Xms256m -Xmx1g" ./bin/elasticsearch ##mBOdx  
请注意两者版本需要一一对应,如果ES版本过新(更新非常频繁),后者可能尚未来得及更新。 ih75 C"  
2p 7;v7)y  
`)w=@9B)"  
随后在第一次执行main.py自动生成的private.py中修改这一段的内容: \oGU6h<  
MX!N?k#KhP  
`GY]JVW  
SEARCH_ENABLE = False B 'd@ms  
ES_INDEX_NAME = 'icarus-index' pxyFM@Z](  
ES_HOSTS = [{ t v`c" Pb  
    "host": "localhost", ^K~=2^sh  
    "port": 9200 CSWA/#&8>  
}] 5OFB[  
最省事可以只改一个: n1R{[\ >1  
W_/$H_04+  
||7x51-yj  
SEARCH_ENABLE = True N0K <zxR  
然后在backend目录下运行: JH2-'  
9&B #@cw  
.ubZ  
pipenv shell y<v-,b*  
python3.6 misc/force_refresh_elasticsearch.py CA$|3m9)NM  
完成,重启后端进程main.py即可应用。 v`7~#Avhz  
g~=- ,j|  
wYv++< z  
项目地址:https://github.com/fy0/Icarus Wn2J]BH  
Fs=E8' b  
{irl}EeyC  
[ 此帖被寒喵在2019-01-01 00:15重新编辑 ]
本人不是云栖社区工作人员。
无论您在使用中遇到什么问题,不要出言不逊!谢谢合作!
发表主题 回复主题
« 返回列表上一主题下一主题

限100 字节
如果您提交过一次失败了,可以用”恢复数据”来恢复帖子内容
 
验证问题: ECS是阿里云提供的什么服务? 正确答案:云服务器
上一个 下一个