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

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

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

F!.E5<&7=  
CpQN,-4  
+NFzSal  
开源协议 %N#%|2B  
ZLIB Zec <m8~  
'u` .P:u?  
1$*%"5a  
免费且商业友好,这个协议基本上和MIT相同。 =rR~`  
VS&TA>  
#M!!CX*k  
特性 dZ _zg<  
全局 |!F5.%PY  
wW"z  
RQFI'@Ks  
文件上传(七牛云) x}twsc`  
^`<w&I@  
".dZn6"mI  
超宽屏支持 rS1fK1dy s  
"YB** Y  
C.kxQ<  
简易的移动端支持 s{w[b\rA  
BYKoel  
SwU\ q]^|Z  
实时在线人数 F_bF  
?2Kt'1s#  
Z/ Tm)Xd  
Markdown发帖和评论 srV.)Ur  
fBQ?|~:n  
>Yt/]ta4+  
包含主题、评论、百科内容的全文搜索(基于Elasticsearch) "k Te2iS  
'Z`$n8  
;sch>2&ZWU  
用户系统 %_UN<a  
?EX"k+G  
r &Ca" dI  
注册、登录 r_YIpnJ  
>{ me  
$v8l0JA *  
邮件激活 <58l;<0  
LB/C-n.`  
=:SN1#G3n  
邮箱找回密码 DKVT(#@T  
% },Pe  
3zT_^;:L  
修改个人信息 `m.eM  
Il`tNr  
4Z*U}w)  
上传头像(七牛云) s6o>m*{  
,p;_\\<  
X bkb5EkA  
每日签到 A-CUv[pM  
>"3>fche  
0@Kkl$O>mb  
个人提醒 *^ \FIUd  
69#8Z+dw7  
fRTo.u  
论坛 6aOp[-Le  
oojiJ~  
ezTZnutZ  
扁平化的内容展示 4 c'4*`I  
ED} 31L  
ELa ja87  
创建和管理板块 u@%|k c`  
h7qBp300  
kpob b  
板块主题颜色 K'6[J"dB  
kReG:  
nq`q[KV:  
发表和编辑主题 {,O`rW_eS  
igDyp0t  
i+M*J#'  
文章页动生成快捷导航 s ?l%L!  
`hB1b["(  
|k-XBp  
@功能 DpL8'Dib  
S-E++f9D~  
\k&1*b?h  
百科 @Hr+/52B  
p4/$EPt)lY  
Gm=>!.p  
自定义侧边栏和主页 fU*C/ d3  
Z}cIA87U  
`B#Z;R  
文章的创建和编辑 LR$z0rDEM  
Ob&W_D^=N  
B7 "Fp  
全部文章列表 VbxAd 2')  
F ! )-|n}  
*PB/iVH%6  
文章历史 -l.pA(O  
{fG|_+tl3o  
<%,'$^'DS  
随机页面 ZC\mxBy  
+Hyk'=.W  
NV!4(_~  
管理后台 M]ap:  
 1KJZWZy  
%aLCH\e  
提供对板块、主题、用户、评论的管理 uZ[/%GTX{)  
mmN|F$;r  
i=da,W=0  
管理日志 %1jdiHTaL  
|e"/Mf[  
9A*rE.B+W  
安全机制 NTVHnSoHh  
_> Ln@  
DrFur(=T  
前端密码加密,后端不取得用户的初始密码,最大限度降低了中间人攻击和数据库泄露的危害 iwkJ~(5z  
g =x"cs/[  
>e_%M5 0  
后端二次加密,sha512加盐迭代十万次后储存用户密码 @{bb'q['@  
{tmKCG  
=WjJN Q  
密码相关API均有防*破,可设置IP请求间隔和账号请求间隔,分别提升批量撞库和单点*破的难度 u !.DnKu  
NE[y|/  
c'~[!,[b<  
隐私数据,例如IP地址脱敏后才可存入数据库 uA^hCh-js  
4[(? L{  
@4@PuWI0-  
如何部署 4n4j=x]@  
内容较多,详见部署文档 wVQdUtmk  
Y^X:vI  
9IOGc}  
升级指南 # hZQ>zcF  
首先停止服务并更新源码。 fK);!Hh  
t,1in4sN  
])S$x{.g  
然后请寻找 backend/misc/upgrade 目录下对应的升级文件,例如1.2升级1.3使用u12-u13.py。 5<^'Cy  
|""=)-5N  
|a>}9:g,=*  
在 backend 目录下执行后删除即可。 ,FY-d$3)  
[Ek42%  
=9fEv,Jk  
注意如果使用了 pipenv 或其他虚拟环境,要在项目对应环境中完成这个操作。 OH0S2?,{>  
PE|PwqX  
2Gm-\o&Td"  
然后分别升级前端项目(根目录)和后端项目(backend目录)的项目依赖。 x'zihDOI  
xl3zy~;M  
T G_bje  
如该版本无特别的升级说明,此时直接重新开启服务即可。 p %L1uwLG  
rNZO.qij z  
%N>\:8 5?  
规划 YsZ{1W  
由于空闲时间有限,而且是单枪匹马做整个项目的开发。 &ad Y  
Ny.*G@&  
0~qf-x  
目前的版本还有一些不完善的地方以及缺少的功能来不及完成,姑且规划如下: xv^Sh}\}  
@81-kdTx  
amMjuyW  
近期: '7t|I6$ow  
| xp$OL"a  
*X~B-a|nJ  
收藏、感谢、点赞 kJI3`gS+  
3R'.}^RN  
]/LWrQD  
个人中心 $p jf#P8U  
&S<? 07Z  
.F4oo=  
强化移动端体验 D!X>O}  
nDyvX1]  
1$);V,DK!  
支持用户对评论进行自删和编辑等操作 :-w@^mli  
PP!l  
,>&?ty9o  
后续: ==nYe { 2  
_t$lcOT  
j\!~9  
多终端同时登录的支持 {An8/"bv}  
MhHr*!N"}  
v$[ @]`  
支持第三方登录 2_Pz^L  
W"W@WG9X0  
|)28=Z|Z  
搭建独立的项目站点 =]!8:I?C<  
's=Q.s  
g!p+rq_f  
RSS支持 ]&&I|K_  
iSOD&J_  
n wY2BIB  
完善tests p^p'/$<6_  
'wCS6_K  
CbnR<W-j  
`DI{wqV9  
如何部署项目 ^fA3<|  
首先 clone 项目。 }W- K  
TjKzBAX  
(nkUeQQN  
git clone https://github.com/fy0/Icarus.git j%6|:o3G(  
下面逐项照做即可。 1i5 vW-'4  
&i4 (s%z#  
RH<@c^ S  
迫于前端安装node_modules等待时间长,在环境安装完成后,前端篇和后端篇可以一起做,以节省时间。 2A dX)iF@  
M \ :"~XW  
PFImqojHd  
环境依赖篇 {Uik|  
1. Python 3.6+ F7k4C2r  
Windows上直接使用Anaconda3或者官方版本。 ~J8cS  
8r7/IGFg  
jK ?  
Linux上部分发行版(例如ArchLinux)天然满足要求。 [15hci+-  
Sa?~t3*H  
S*~Na]nS0  
对于其他的发行版,首选方案是通过pyenv来安装和管理不同版本的Python: &5kjjQ*HB  
B`RW-14g  
S>/I?(J  
curl -L https://github.com/pyenv/pyenv-installer/raw/master/bin/pyenv-installer | bash u;l6sdo  
pAPQi|CN  
@&am!+z  
# 重新进入终端后,指定版本进行安装 "K4X:|Om"  
# 或者也可以选择这里不安装,到后面pipenv的时候会有选项自动安装。 0ER6cTo-t  
pyenv update <.y^  
pyenv install 3.6 ?kT~)k  
来源:https://github.com/pyenv/pyenv {nWtNyJpS  
Hw3 ES  
?~9X:~6\  
或者使用包管理器安装,这是一个 Debian/Ubuntu 解决方案: X=}0+W  
zT zG&B-  
@k;3$  
sudo add-apt-repository ppa:deadsnakes/ppa T7X2$ '  
sudo apt-get update KAaeaiD  
sudo apt-get install -y python3.6 python3.6-dev python3.6-venv yr DYw T  
sudo su -c "curl https://bootstrap.pypa.io/get-pip.py | python3.6" -i gZU>0B_  
2. NodeJS 'GT`% ck  
建议使用LTS版本的 nodejs,通过包管理器安装: :O=Vr]Y8K  
p{GDW_  
'v5gg2  
https://nodejs.org/en/download/package-manager/ M#,+p8  
[# H8Mb+7  
VUhu"h@w%  
curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash - X:bgY  
sudo apt-get install -y nodejs =-Tetp  
3. PostgreSQL 3_:k12%p  
官方提供了一系列操作系统的安装解决方案:https://www.postgresql.org/download/ 4(](' [M  
P40eK0 e6  
"[ ,XS`  
Windows下你可以下载安装包,主流Linux可以使用包管理器添加软件源。 'JVvL  
v.J#d>tvf  
/qr8  
还是以ubuntu举例:https://www.postgresql.org/download/linux/ubuntu/ l1-FL-1  
5}VP-04vh  
|M&/( 0  
# 为 ubuntu 18.04 添加 PG 源  }P#gXG  
sudo su -c "echo 'deb http://apt.postgresql.org/pub/repos/apt/ bionic-pgdg main' > /etc/apt/sources.list.d/pgdg.list" chbs9y0  
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | \ 2sH5<5G'  
  sudo apt-key add - [0emOS  
sudo apt-get update  73X]|fy  
~b/>TKn+  
I_Qnq4Sk(  
# 安装PostgreSQL,需要9.6以上版本 Ek6W:Q:@  
sudo apt-get install -y postgresql-10 fq'Of wT  
装好之后做一些配置 z~al h?H  
ycN_<  
* G4;  
sudo su postgres h9mR+ng*oD  
psql E'}$'n?:  
# 进入 PQ Shell &3efJ?8  
CREATE DATABASE icarus; "lt[)3*  
CREATE USER icarus WITH PASSWORD 'IcaruStest123'; y{<7OTA)  
GRANT ALL ON DATABASE icarus TO icarus; kaLRI|hC  
\c icarus; lHU$A;  
CREATE EXTENSION IF NOT EXISTS hstore; &}ow-u9c3  
CREATE EXTENSION IF NOT EXISTS citext; D3OV.G]`  
4. Redis iGIaZ!j aW  
一般直接使用包管理器安装就可以了。 s.U p<Rw  
(46)v'?  
>JhQ=j  
Windows上可以使用微软提供的二进制版本 w~`P\i@  
]z,?{S  
2=  _.K(  
后端篇 rBL)ct  
建议使用 pipenv 进行部署,首先切到backend目录,执行: 7%tn+  
=J,:j[D(  
!PgYn  
sudo pip3.6 install pipenv 1/ HofiIa  
pipenv install b#F3,T__`Y  
不过有个问题就是 pipenv 太慢,总是在 Locking。 Y 4U $?%j  
Ugn"w E  
;O CYx[|  
可以灵活使用 --skip-lock 参数跳过 Locking 阶段。 lxeolDl  
Y<B| e91C  
yC -4wn*  
或者使用requirements.txt进行比较传统的安装。 W<2-Q,>Y  
Bn.8wMB  
5o,82 Kti  
特别地,在Windows上安装aioredis库时可能会遇到依赖的hiredis包无法安装的问题 1@am'#<  
如果是anaconda用户,那么可以使用: ]k hY8it  
qnOAIP:0  
|Qm 7x[i  
conda config --append channels conda-forge   -6? 5|\  
conda install hiredis j/sZ:Q  
来进行安装。 <v\|@@X  
如果不是anaconda用户,那么可以直接访问 https://anaconda.org/conda-forge/hiredis/files j8lbn|.  
直接下载.tar.bz2压缩包把里面的site-packages/hiredis解压出来放到自己的site-packages即可 O_E[F E:+  
%bAv.'C  
'b-}KDP  
环境装完之后,这样启动服务: <_D+'[  
yJ^}uw  
WPPmh~:  
pipenv shell | 2mEowAd  
python main.py pvX\k X3}  
运行 backend 目录下的 main.py,初次运行会创建自动 private.py 并退出。 E]68IuP@'  
]1klfp,`  
G,J$lT X  
private.py 里的内容会覆盖 config.py 中的配置。 B"G;"X  
 3N;X|pa  
,ujoGSx}  
在初次创建后,用编辑器打开,逐项对内容进行修改,使其符合你机器的实际情况即可。 =ahD'*R^A  
GSypdEBj+w  
n#4Ra+dD  
前端篇 I(C_}I>Wb  
# 安装项目依赖 SA'  zy45  
cd Icarus 'E6)6N  
npm install :=-h'<D  
迫于安装时间过长,国内可以使用cnpm: [~x Q l  
<CeDIX t  
m#Rll[  
npm install -g cnpm --registry=https://registry.npm.taobao.org Z(Xu>ap  
cnpm install cd\0  
如果只是开发环境下看看效果,那么在后端已经跑起来的情况下: iMF:~H-Yq#  
w!h!%r  
gV A$P  
npm run serve !tN]OQ)'  
然后在浏览器中查看即可。 B+,Z 3*  
y;uk|#qnPS  
:h"Y>1P  
扩展篇:Nginx部署 ^ygN/a>rr  
如果需要配置外部访问(注意!只是开发则不需要),可以按如下步骤操作: >wZ!1Jq  
Y8(g8RN  
[@Y?'={qE  
我们的目标是将前端挂在某个域名或端口上,然后将后端挂在同一域名的/api下。 (C1]R41'  
fZ$8PMZv  
^,@Rd\q  
以此直接绕过同源策略的相关内容,简化配置。这也就是“单端口方案”的含义。 'xhX\?mD  
FK0nQ{uB"  
// g~1(  
首先,在 Icarus 目录下新建一个 private.js,并按照下例进行填写: njX!Ez  
>tYptRP  
c)+IX;q-C  
// 单端口方案 0OP6VZ\  
var host = window.location.host *o`bBdZ  
% ?@PlQ  
aOETmsw  
export default { Ub%5# <k|-  
    remote: { 7C F-?M!  
        API_SERVER: '//' + host, [PdatL2  
        WS_SERVER: 'ws://' + host + '/ws', |s+y]3-_  
    } fU8 &fo%ER  
} {a\m0Bw/  
npm run build b~z1%?  
生成dist目录备用。 3t)07(x_B  
^g"G1,[%w  
9m/v^  
随后是nginx的配置,当然你要首先安装它。 K]1A,Q  
lo5,E(7~h  
$_onSYWr  
我已经写好了配置文件的模板,只要简单改改放进配置目录就可以了。 n>" 0y^v  
\GO^2&g(  
oqc89DEbJ  
这里使用的是单端口绑定前后端,整站使用 9001 向外网提供服务(但后端仍要对内开一个端口)。 oYG9i=lZ  
R%=u<O  
YKlYo~fGN9  
在将前端静态目录映射到/的同时,将后端所在的9999端口映射到/api。  olB?"M=H  
w^6rgCl  
C4Z}WBS(  
这样前端页面访问 /api 就是访问后端了,也不存在跨域问题。 )v !GiZ" 7  
c |.~f+  
<lopk('7  
sudo apt install nginx 9~/k25P  
cd Icarus US[{ Q  
sudo cp misc/icarus-1port.conf /etc/nginx/conf.d/ QpxRYv  
随后编辑 /etc/nginx/conf.d/icarus-1port.conf,将 >slD.rb]  
% P .(L  
I|8'#QX  
# root /home/{user}/Icarus/dist; !W4A 9Th  
修改为正确的路径,重启服务: +L03. rf  
h8B:}_Cu  
W5z<+8R  
sudo service nginx restart ]/g&y5RG  
访问服务器IP的9001端口,就可以看到最上面截图中的画面了。 Fjch<gAofS  
g?&_5)&  
tUU`R{=(  
第一个注册的用户将自动成为管理员。 . 7*k}@k  
cetHpU ,  
O =m_P}K  
扩展篇:开启全文搜索与关联推荐功能 Se~< Vpo  
这事情简单,首先在机器上安装ES: 9j<qi\SSI  
r:;nv D  
9n9Z  
https://www.elastic.co/downloads/elasticsearch OD{()E?1B  
{&7%wZ"t_  
-7-r~zmr  
然后搞到中文分词插件: Xf 0)i  
K!~j}z*  
tV.qdy/]}  
https://github.com/medcl/elasticsearch-analysis-ik/releases @>:V?  
|y%pJdPk=  
w8veh[%3n  
并将分词插件解压在ES插件目录,例如your-es-root/plugins/ik,然后把ES开起来: Hreu3N  
6="Qwrk  
J)o.@+Q}  
# 超低配版,最小内存256M,最大1G =f~8"j  
# 根据自己服务器情况酌情调整参数 yBKEw(1  
cd elasticsearch-6.5.1 r{LrQ  
ES_JAVA_OPTS="-Xms256m -Xmx1g" ./bin/elasticsearch  vNWCv  
请注意两者版本需要一一对应,如果ES版本过新(更新非常频繁),后者可能尚未来得及更新。 3(o}ulp  
'0b!lVe  
"R<c  
随后在第一次执行main.py自动生成的private.py中修改这一段的内容: 1PGY/c  
lKVV*RR}  
fI<|]c}P&J  
SEARCH_ENABLE = False  {4]sJT  
ES_INDEX_NAME = 'icarus-index' ;r8< Ed  
ES_HOSTS = [{ zjE|UK{  
    "host": "localhost", [k~}Fe) x  
    "port": 9200 u B~C8}  
}] ) t#>fnN  
最省事可以只改一个: qX9x#92  
V Zz>)Kz:  
|7CFm  
SEARCH_ENABLE = True gI T3A*x  
然后在backend目录下运行: {D{' \]+  
D`9a"o  
M7`iAa.}  
pipenv shell F=g +R~F  
python3.6 misc/force_refresh_elasticsearch.py _8 C:Md`  
完成,重启后端进程main.py即可应用。 ~fF_]UVq3  
%|izt/B  
0Z4o3r[  
项目地址:https://github.com/fy0/Icarus dy' J~Eo7  
L,\wB7t  
<*Bk.>f!  
[ 此帖被寒喵在2019-01-01 00:15重新编辑 ]
本人不是云栖社区工作人员。
无论您在使用中遇到什么问题,不要出言不逊!谢谢合作!
发表主题 回复主题
« 返回列表上一主题下一主题

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