开源协议
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
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。