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

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

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

>9h@Dj[|!  
EQ;,b4k?&g  
d=q&UCC  
开源协议 |.]:#)^X?  
ZLIB w]BZgF.  
;M<jQntqS{  
sz5&P )X  
免费且商业友好,这个协议基本上和MIT相同。 %*>ee[^L ,  
ws{2 0  
JZCRu_M>|  
特性 L_3undy,  
全局 qre.^6x  
q- U/JC  
-Qt>yzD3  
文件上传(七牛云) b~M3j&  
H*l2,0&W  
r9x.c7=O  
超宽屏支持 L5E|1T  
GzJ("RE0)v  
s'&/8RR  
简易的移动端支持 ^,Paih 2  
H;QE',a9+i  
pa7Iz^i  
实时在线人数 :r<uH6x|  
l.DC20bs  
H#/}FoBiS  
Markdown发帖和评论 (s/hK  
a0vg%Z@!  
p8%/T>hK  
包含主题、评论、百科内容的全文搜索(基于Elasticsearch) O23dtH  
g3p*OYf  
i+ I%]  
用户系统 yQ33JQr  
B( ]=I@L=W  
2#sJ`pdQ  
注册、登录 "?I]h  
.A: #l?  
[LwmzmV+F  
邮件激活 4M)  s  
QLq^[ >n  
8vhg{L..  
邮箱找回密码 Q:.q*I!D<4  
Up61Xn  
B(x$ Ln"y[  
修改个人信息 /V66P@[>  
k79" xyXX  
_m;#+`E  
上传头像(七牛云) ;&|MNN^  
WU:~T.Su  
3JB?G>\!  
每日签到 YT)jBS~&  
gO0X-fN8  
7J ~usF>A  
个人提醒 ar-N4+!@  
jhd&\z-  
z(sfX}%  
论坛 k"*A@  
ZzU3j^  
xPFNH`O&  
扁平化的内容展示 ]>E)0<t  
Zt3"4d4  
:'*;>P .(  
创建和管理板块 !f 7CN<  
s-V5\Lip,  
-O.q$D=as  
板块主题颜色 UY@^KT]  
#t.)4$  
[,A*nU$  
发表和编辑主题 {q=(x]C  
jH+ddBVA  
X,m6#vLK2  
文章页动生成快捷导航 E-P;3lS~  
%,HuG-L  
oD_n+95B  
@功能 )tB:g.2k  
+n]z'pijb  
wR)U&da`@  
百科 drr W?U  
|y,%dFNLf  
B=E<</i  
自定义侧边栏和主页 JHF <vyt5<  
oD0WHp  
A1VbqA  
文章的创建和编辑 |=R@nn   
%}T' 3  
o75Hit  
全部文章列表 $K_G|Wyi  
2)_Zz~P^f  
58TH|Rj+I  
文章历史 PubO|Mf  
7iI6._"!w  
ssf.ef$  
随机页面 I.C,y\  
>bgx o<  
PWavq?SR  
管理后台 UEm~5,>$0  
 l,}^<P]  
\J]qd4tF  
提供对板块、主题、用户、评论的管理 Xs,[Z2_iq  
n@`D:;?{  
<i<[TPv";  
管理日志 Ub>Pl,~'  
;v}f7v '  
a$}n4p  
安全机制 F. N4Q'2Z  
-#TF&-  
h;s~I/e(  
前端密码加密,后端不取得用户的初始密码,最大限度降低了中间人攻击和数据库泄露的危害 rM|] }M=_V  
")gd)_FOS  
TbK;_pg  
后端二次加密,sha512加盐迭代十万次后储存用户密码 8w 2$H  
do-mkvk  
GnCO{"n  
密码相关API均有防*破,可设置IP请求间隔和账号请求间隔,分别提升批量撞库和单点*破的难度 -Hx._I$l  
('9LUFw\  
=|Q7k+b  
隐私数据,例如IP地址脱敏后才可存入数据库 E0SP  
J|'e.1v  
dn? #}^,"  
如何部署 t;^NgkP{$  
内容较多,详见部署文档 2r 0u[  
|=\w b^l+  
K6 {0`'x  
升级指南 {6/Yu: ;  
首先停止服务并更新源码。 }3}{}w0Y  
Pc{0Js5VzE  
! u4'1jd[d  
然后请寻找 backend/misc/upgrade 目录下对应的升级文件,例如1.2升级1.3使用u12-u13.py。 _QS+{  
G`Ix-dADJm  
XBTtfl &  
在 backend 目录下执行后删除即可。 4mqA*c%6S  
>k\lE(  
.b3c n  
注意如果使用了 pipenv 或其他虚拟环境,要在项目对应环境中完成这个操作。 hYj!*P)uV  
yv2&K=rZp  
SL j2/B0  
然后分别升级前端项目(根目录)和后端项目(backend目录)的项目依赖。 h_SDW %($  
Wej'AR\NX  
K~U5jp c  
如该版本无特别的升级说明,此时直接重新开启服务即可。 ]O\m(of R  
*8a8Ng  
o1dECLQa  
规划 ^hMJNy&R  
由于空闲时间有限,而且是单枪匹马做整个项目的开发。 52zD!(   
NrNxI'M G  
K]<49`MX  
目前的版本还有一些不完善的地方以及缺少的功能来不及完成,姑且规划如下: O6P{+xj$  
9"#,X36  
S<-e/`p=H  
近期: ,[Bv\4Ah  
@N?u{|R:d  
7e`ylnP!  
收藏、感谢、点赞 YpGG^;M$  
WZ3GI l  
Pd~{XM,yfW  
个人中心 =Eh~ wm  
8ph*S&H  
>7fNxQ  
强化移动端体验  $O)fHD'  
`L. kyL  
j3J\%7^i  
支持用户对评论进行自删和编辑等操作 g aq"+@fH  
  OH*  
 ^O9_dP:  
后续: uxKj7!(#  
\'BA}v &/  
@gn}J'  
多终端同时登录的支持 {zri6P+s  
lV*dQwa?i  
E76#xsyhF  
支持第三方登录 m"r=p  
A%zX LV=3O  
qoo+=eh!  
搭建独立的项目站点 |P>Yf0  
_!} L\E~  
t.ci!#/d  
RSS支持 (sfy14>\  
wUj#ACqB  
[@PD[-2QG3  
完善tests 9 :ubPqt  
[T<Z?  
qSg=[7XOO  
G%RL8HU  
如何部署项目 0[O."9  
首先 clone 项目。 (9phRo)>  
p /x ]  
$ncJc  
git clone https://github.com/fy0/Icarus.git 'T7=.Hq<4  
下面逐项照做即可。 L2jjkyX]  
t 5{Y'  
N Qdz]o  
迫于前端安装node_modules等待时间长,在环境安装完成后,前端篇和后端篇可以一起做,以节省时间。 B}&9+2M  
\mIm}+!H  
]((Ix,ggP  
环境依赖篇 vK10p)ZV  
1. Python 3.6+ 6 #vc"5@M  
Windows上直接使用Anaconda3或者官方版本。 Wj}PtQ%lp/  
]w+n39da  
 !=f$ [1  
Linux上部分发行版(例如ArchLinux)天然满足要求。 @7fx0I'n  
Ne=o+ $.(  
_x&fK$Y)B  
对于其他的发行版,首选方案是通过pyenv来安装和管理不同版本的Python: t V:oBT*  
3%NbT  
kYl')L6  
curl -L https://github.com/pyenv/pyenv-installer/raw/master/bin/pyenv-installer | bash 9td[^EB#(h  
'cpO"d?{  
T]fBVA  
# 重新进入终端后,指定版本进行安装 rZt7C(FM$7  
# 或者也可以选择这里不安装,到后面pipenv的时候会有选项自动安装。 d${RZ}/  
pyenv update iL](w3EM  
pyenv install 3.6 ~ZN]2}  
来源:https://github.com/pyenv/pyenv B/n/bi8T  
+kXj+2  
[/Figr]  
或者使用包管理器安装,这是一个 Debian/Ubuntu 解决方案: DClV&\i=o  
^-Knx!z  
F-g7*  
sudo add-apt-repository ppa:deadsnakes/ppa Vjc*D]  
sudo apt-get update `n{yls7.  
sudo apt-get install -y python3.6 python3.6-dev python3.6-venv *@C]\)  
sudo su -c "curl https://bootstrap.pypa.io/get-pip.py | python3.6" j_I  
2. NodeJS $d +n},[C{  
建议使用LTS版本的 nodejs,通过包管理器安装: [:MpOl-KIz  
bB#6Xx  
\B$Q%\-PX  
https://nodejs.org/en/download/package-manager/ (K}Md~  
, id`=L=  
$:aKb#l)  
curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash - [HV9KAoA  
sudo apt-get install -y nodejs k\~A\UIYo  
3. PostgreSQL _]Ei,Ua  
官方提供了一系列操作系统的安装解决方案:https://www.postgresql.org/download/ =)p/p6  
sXmZ0Dv  
G|"`kAa  
Windows下你可以下载安装包,主流Linux可以使用包管理器添加软件源。 eL7rX"!  
ti)4J2c,8  
;?A?1q8*  
还是以ubuntu举例:https://www.postgresql.org/download/linux/ubuntu/ Q.dHg7+D  
P!Mz5QZ+  
ic+tn9f\  
# 为 ubuntu 18.04 添加 PG 源 9m:qQ1[\  
sudo su -c "echo 'deb http://apt.postgresql.org/pub/repos/apt/ bionic-pgdg main' > /etc/apt/sources.list.d/pgdg.list" DJF-J#  
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | \ r$7D;>*O{  
  sudo apt-key add - z [qO5z~I  
sudo apt-get update X[XSf=  
0k];%HV|  
/wj L<  
# 安装PostgreSQL,需要9.6以上版本 >H ,t^i}@  
sudo apt-get install -y postgresql-10 r|bvpZV  
装好之后做一些配置 4eOQP  
r}gp{Pf7e  
8")1,   
sudo su postgres Xu1tN9:oE  
psql X5@rPGc  
# 进入 PQ Shell u.}z}'-  
CREATE DATABASE icarus; y?|JBf  
CREATE USER icarus WITH PASSWORD 'IcaruStest123'; JQ*CF(9  
GRANT ALL ON DATABASE icarus TO icarus; y3 {om^ f  
\c icarus; [y>;  
CREATE EXTENSION IF NOT EXISTS hstore; _~M*XJ] `  
CREATE EXTENSION IF NOT EXISTS citext; >,8DwNuq  
4. Redis d.7pc P  
一般直接使用包管理器安装就可以了。 ypuW}H%`  
?hu$  
T/V 5pYl  
Windows上可以使用微软提供的二进制版本 07T"alXf:A  
2<aBUGA  
F1@gYNbI,  
后端篇 \pzqUTk  
建议使用 pipenv 进行部署,首先切到backend目录,执行: ~CQYF,[Th  
Y%UfwbX!g  
NhxTSyT"t  
sudo pip3.6 install pipenv A22h+8yG  
pipenv install \advFKN  
不过有个问题就是 pipenv 太慢,总是在 Locking。 xQ `>\f  
(R*K)(Nw[  
FuNc#n>  
可以灵活使用 --skip-lock 参数跳过 Locking 阶段。 /\-qz$  
+h6c Aqm]  
b7It8  
或者使用requirements.txt进行比较传统的安装。 a X>bC-  
ta*B#2D>  
AepAlnI@  
特别地,在Windows上安装aioredis库时可能会遇到依赖的hiredis包无法安装的问题 r/E;tm [\  
如果是anaconda用户,那么可以使用: -<gGNj.x-  
j*m7&wOE  
"CdL?(  
conda config --append channels conda-forge   Tp.0@aC  
conda install hiredis CT@JNG$<"  
来进行安装。 ?|8H|LBIr  
如果不是anaconda用户,那么可以直接访问 https://anaconda.org/conda-forge/hiredis/files SU.T0>w  
直接下载.tar.bz2压缩包把里面的site-packages/hiredis解压出来放到自己的site-packages即可 m4{F-++dk  
:,$:@  
6,sZo!G  
环境装完之后,这样启动服务: p4;A[2Ot`:  
LL+ROX^M  
~3 Y)o|D3  
pipenv shell gaaW:**y  
python main.py +A 6xY  
运行 backend 目录下的 main.py,初次运行会创建自动 private.py 并退出。 =PiDZS^"  
"VxZnT  
Gxu&o%x [  
private.py 里的内容会覆盖 config.py 中的配置。 TC1#2nE&T  
.'C$w1[w  
klduJ T >  
在初次创建后,用编辑器打开,逐项对内容进行修改,使其符合你机器的实际情况即可。 xQX,1NbH5  
w#w lZ1f  
$\l7aA5~  
前端篇 9"g=it2Rh6  
# 安装项目依赖 7pDov@K<{  
cd Icarus <JE-#i  
npm install m5lMh14E  
迫于安装时间过长,国内可以使用cnpm: ]q DhGt  
B5>h@p-UV  
oR>o/$z$)g  
npm install -g cnpm --registry=https://registry.npm.taobao.org "Zd4e2>{M\  
cnpm install uM,bO*/f  
如果只是开发环境下看看效果,那么在后端已经跑起来的情况下: _4iTP$7[  
A-e#&pJ  
hc}d S$=C  
npm run serve } )O ^xF ~  
然后在浏览器中查看即可。 vdrV)^  
|[n-H;0  
x g~q'>  
扩展篇:Nginx部署 Z,/BPK<e  
如果需要配置外部访问(注意!只是开发则不需要),可以按如下步骤操作: D4[1CQ@}4D  
#W,BUN}  
8FyJo.vr(  
我们的目标是将前端挂在某个域名或端口上,然后将后端挂在同一域名的/api下。 z5-vx`  
ALS\}_8  
yCZV:R;  
以此直接绕过同源策略的相关内容,简化配置。这也就是“单端口方案”的含义。 +HNY!fv9  
!0:uM)_k  
Uj&2'>MJ$  
首先,在 Icarus 目录下新建一个 private.js,并按照下例进行填写: !_rAAY  
U^SJWYi<Y  
I`kaAOe  
// 单端口方案 %E Jv!u*-  
var host = window.location.host &gxRw l  
$wUFHEl  
laN:H mR8  
export default { /gT$d2{  
    remote: { ko\VDyt,  
        API_SERVER: '//' + host,  b=v  
        WS_SERVER: 'ws://' + host + '/ws', T8E=}!68w}  
    } [mph iH/  
} @sRRcP~  
npm run build FOiwB^$ >  
生成dist目录备用。 'EoJo9p6}  
"mc/fp  
|D<J9+  
随后是nginx的配置,当然你要首先安装它。 ve[` 0  
M72.  
"!()yjy  
我已经写好了配置文件的模板,只要简单改改放进配置目录就可以了。 D@ut -J(.  
JVbR5"+.  
@NlE2s6a  
这里使用的是单端口绑定前后端,整站使用 9001 向外网提供服务(但后端仍要对内开一个端口)。  (c;F%m|  
8A/"ia  
'fO[f}oa_.  
在将前端静态目录映射到/的同时,将后端所在的9999端口映射到/api。 "L^]a$&  
6lw)L  
|?k3I/;  
这样前端页面访问 /api 就是访问后端了,也不存在跨域问题。 o))z8n?b  
5v6 x  
[.Vy  
sudo apt install nginx F N6 GV  
cd Icarus Zp@j*P  
sudo cp misc/icarus-1port.conf /etc/nginx/conf.d/ Hhx"47:  
随后编辑 /etc/nginx/conf.d/icarus-1port.conf,将 9IJBK  
Q\.~cIw_AQ  
.l?sYe64S  
# root /home/{user}/Icarus/dist; xUl=N   
修改为正确的路径,重启服务: {a aI<u  
;NNYJqWd^]  
A|>~/OW=@  
sudo service nginx restart y#F`yXUj  
访问服务器IP的9001端口,就可以看到最上面截图中的画面了。 nmI os]B  
Wno{&I63  
r'bctFsD  
第一个注册的用户将自动成为管理员。 dH]0 (aJ  
!O|d,)$q  
j v9DQr  
扩展篇:开启全文搜索与关联推荐功能 VF#2I %R*  
这事情简单,首先在机器上安装ES: scr`] tD  
e !V3/*F  
a'zXLlXgGd  
https://www.elastic.co/downloads/elasticsearch T''PzY!Qf  
[l~Gwaul>  
>~%!#,C(|U  
然后搞到中文分词插件: sA^_I6>M"  
dU4  h  
p7SX,kpt>  
https://github.com/medcl/elasticsearch-analysis-ik/releases YoC{ t&rY  
-@*[   
~HW8mly'  
并将分词插件解压在ES插件目录,例如your-es-root/plugins/ik,然后把ES开起来: ^wnlZ09J  
]IF QD  
 3)D'Yx  
# 超低配版,最小内存256M,最大1G SynL%Y9)|,  
# 根据自己服务器情况酌情调整参数 n,,hE_  
cd elasticsearch-6.5.1 !V%h0OE\  
ES_JAVA_OPTS="-Xms256m -Xmx1g" ./bin/elasticsearch LUPh!)8  
请注意两者版本需要一一对应,如果ES版本过新(更新非常频繁),后者可能尚未来得及更新。 =`&7pYd,  
,Z3 (`ftC  
%R|_o<(#MJ  
随后在第一次执行main.py自动生成的private.py中修改这一段的内容: Ai*R%#  
adCTo  
 !' }  
SEARCH_ENABLE = False v d{`*|x  
ES_INDEX_NAME = 'icarus-index' yW =I*f  
ES_HOSTS = [{ Q4;%[7LU  
    "host": "localhost", YGdzA]3>  
    "port": 9200 wSV}{9}wr%  
}] 1')_^]  
最省事可以只改一个: ~]w|ULNa3|  
XJ$mRh0`K  
P0mY/bBU  
SEARCH_ENABLE = True k vu SE  
然后在backend目录下运行: G5l?c@o  
fen~k#|l  
o[A y2"e?  
pipenv shell d*B^pDf  
python3.6 misc/force_refresh_elasticsearch.py `F(ghC  
完成,重启后端进程main.py即可应用。 ^CBc~um2  
<<SUIY@X  
hx.ln6=4  
项目地址:https://github.com/fy0/Icarus -%G}T}"_  
_o+z#Fnz  
@H83Ad  
[ 此帖被寒喵在2019-01-01 00:15重新编辑 ]
本人不是云栖社区工作人员。
无论您在使用中遇到什么问题,不要出言不逊!谢谢合作!
发表主题 回复主题
« 返回列表上一主题下一主题

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