开发者社区 问答 正文

社区系统 Icarus 1.3.0




开源协议
ZLIB


免费且商业友好,这个协议基本上和MIT相同。


特性
全局


文件上传(七牛云)


超宽屏支持


简易的移动端支持


实时在线人数


Markdown发帖和评论


包含主题、评论、百科内容的全文搜索(基于Elasticsearch)


用户系统


注册、登录


邮件激活


邮箱找回密码


修改个人信息


上传头像(七牛云)


每日签到


个人提醒


论坛


扁平化的内容展示


创建和管理板块


板块主题颜色


发表和编辑主题


文章页自动生成快捷导航


@功能


百科


自定义侧边栏和主页


文章的创建和编辑


全部文章列表


文章历史


随机页面


管理后台


提供对板块、主题、用户、评论的管理


管理日志


安全机制


前端密码加密,后端不取得用户的初始密码,最大限度降低了中间人攻击和数据库泄露的危害


后端二次加密,sha512加盐迭代十万次后储存用户密码


密码相关API均有防*破,可设置IP请求间隔和账号请求间隔,分别提升批量撞库和单点*破的难度


隐私数据,例如IP地址脱敏后才可存入数据库


如何部署
内容较多,详见部署文档


升级指南
首先停止服务并更新源码。


然后请寻找 backend/misc/upgrade 目录下对应的升级文件,例如1.2升级1.3使用u12-u13.py。


在 backend 目录下执行后删除即可。


注意如果使用了 pipenv 或其他虚拟环境,要在项目对应环境中完成这个操作。


然后分别升级前端项目(根目录)和后端项目(backend目录)的项目依赖。


如该版本无特别的升级说明,此时直接重新开启服务即可。


规划
由于空闲时间有限,而且是单枪匹马做整个项目的开发。


目前的版本还有一些不完善的地方以及缺少的功能来不及完成,姑且规划如下:


近期:


收藏、感谢、点赞


个人中心


强化移动端体验


支持用户对评论进行自删和编辑等操作


后续:


多终端同时登录的支持


支持第三方登录


搭建独立的项目站点


RSS支持


完善tests



如何部署项目
首先 clone 项目。


git clone https://github.com/fy0/Icarus.git
下面逐项照做即可。


迫于前端安装node_modules等待时间长,在环境安装完成后,前端篇和后端篇可以一起做,以节省时间。


环境依赖篇
1. Python 3.6+
Windows上直接使用Anaconda3或者官方版本。


Linux上部分发行版(例如ArchLinux)天然满足要求。


对于其他的发行版,首选方案是通过pyenv来安装和管理不同版本的Python:


curl -L https://github.com/pyenv/pyenv-installer/raw/master/bin/pyenv-installer | bash


# 重新进入终端后,指定版本进行安装
# 或者也可以选择这里不安装,到后面pipenv的时候会有选项自动安装。
pyenv update
pyenv install 3.6
来源: https://github.com/pyenv/pyenv


或者使用包管理器安装,这是一个 Debian/Ubuntu 解决方案:


sudo add-apt-repository ppa:deadsnakes/ppa
sudo apt-get update
sudo apt-get install -y python3.6 python3.6-dev python3.6-venv
sudo su -c "curl https://bootstrap.pypa.io/get-pip.py | python3.6"
2. NodeJS
建议使用LTS版本的 nodejs,通过包管理器安装:


https://nodejs.org/en/download/package-manager/


curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -
sudo apt-get install -y nodejs
3. PostgreSQL
官方提供了一系列操作系统的安装解决方案: https://www.postgresql.org/download/


Windows下你可以下载安装包,主流Linux可以使用包管理器添加软件源。


还是以ubuntu举例: https://www.postgresql.org/download/linux/ubuntu/


# 为 ubuntu 18.04 添加 PG 源
sudo su -c "echo 'deb http://apt.postgresql.org/pub/repos/apt/ bionic-pgdg main' > /etc/apt/sources.list.d/pgdg.list"
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | \
  sudo apt-key add -
sudo apt-get update


# 安装PostgreSQL,需要9.6以上版本
sudo apt-get install -y postgresql-10
装好之后做一些配置


sudo su postgres
psql
# 进入 PQ Shell
CREATE DATABASE icarus;
CREATE USER icarus WITH PASSWORD 'IcaruStest123';
GRANT ALL ON DATABASE icarus TO icarus;
\c icarus;
CREATE EXTENSION IF NOT EXISTS hstore;
CREATE EXTENSION IF NOT EXISTS citext;
4. Redis
一般直接使用包管理器安装就可以了。


Windows上可以使用微软提供的二进制版本


后端篇
建议使用 pipenv 进行部署,首先切到backend目录,执行:


sudo pip3.6 install pipenv
pipenv install
不过有个问题就是 pipenv 太慢,总是在 Locking。


可以灵活使用 --skip-lock 参数跳过 Locking 阶段。


或者使用requirements.txt进行比较传统的安装。


特别地,在Windows上安装aioredis库时可能会遇到依赖的hiredis包无法安装的问题
如果是anaconda用户,那么可以使用:


conda config --append channels conda-forge  
conda install hiredis
来进行安装。
如果不是anaconda用户,那么可以直接访问 https://anaconda.org/conda-forge/hiredis/files
直接下载.tar.bz2压缩包把里面的site-packages/hiredis解压出来放到自己的site-packages即可


环境装完之后,这样启动服务:


pipenv shell
python main.py
运行 backend 目录下的 main.py,初次运行会创建自动 private.py 并退出。


private.py 里的内容会覆盖 config.py 中的配置。


在初次创建后,用编辑器打开,逐项对内容进行修改,使其符合你机器的实际情况即可。


前端篇
# 安装项目依赖
cd Icarus
npm install
迫于安装时间过长,国内可以使用cnpm:


npm install -g cnpm --registry=https://registry.npm.taobao.org
cnpm install
如果只是开发环境下看看效果,那么在后端已经跑起来的情况下:


npm run serve
然后在浏览器中查看即可。


扩展篇:Nginx部署
如果需要配置外部访问(注意!只是开发则不需要),可以按如下步骤操作:


我们的目标是将前端挂在某个域名或端口上,然后将后端挂在同一域名的/api下。


以此直接绕过同源策略的相关内容,简化配置。这也就是“单端口方案”的含义。


首先,在 Icarus 目录下新建一个 private.js,并按照下例进行填写:


// 单端口方案
var host = window.location.host


export default {
    remote: {
        API_SERVER: '//' + host,
        WS_SERVER: 'ws://' + host + '/ws',
    }
}
npm run build
生成dist目录备用。


随后是nginx的配置,当然你要首先安装它。


我已经写好了配置文件的模板,只要简单改改放进配置目录就可以了。


这里使用的是单端口绑定前后端,整站使用 9001 向外网提供服务(但后端仍要对内开一个端口)。


在将前端静态目录映射到/的同时,将后端所在的9999端口映射到/api。


这样前端页面访问 /api 就是访问后端了,也不存在跨域问题。


sudo apt install nginx
cd Icarus
sudo cp misc/icarus-1port.conf /etc/nginx/conf.d/
随后编辑 /etc/nginx/conf.d/icarus-1port.conf,将


# root /home/{user}/Icarus/dist;
修改为正确的路径,重启服务:


sudo service nginx restart
访问服务器IP的9001端口,就可以看到最上面截图中的画面了。


第一个注册的用户将自动成为管理员。


扩展篇:开启全文搜索与关联推荐功能
这事情简单,首先在机器上安装ES:


https://www.elastic.co/downloads/elasticsearch


然后搞到中文分词插件:


https://github.com/medcl/elasticsearch-analysis-ik/releases


并将分词插件解压在ES插件目录,例如your-es-root/plugins/ik,然后把ES开起来:


# 超低配版,最小内存256M,最大1G
# 根据自己服务器情况酌情调整参数
cd elasticsearch-6.5.1
ES_JAVA_OPTS="-Xms256m -Xmx1g" ./bin/elasticsearch
请注意两者版本需要一一对应,如果ES版本过新(更新非常频繁),后者可能尚未来得及更新。


随后在第一次执行main.py自动生成的private.py中修改这一段的内容:


SEARCH_ENABLE = False
ES_INDEX_NAME = 'icarus-index'
ES_HOSTS = [{
    "host": "localhost",
    "port": 9200
}]
最省事可以只改一个:


SEARCH_ENABLE = True
然后在backend目录下运行:


pipenv shell
python3.6 misc/force_refresh_elasticsearch.py
完成,重启后端进程main.py即可应用。


项目地址: https://github.com/fy0/Icarus


展开
收起
寒喵 2018-12-31 23:58:48 3524 分享 版权
0 条回答
写回答
取消 提交回答