An opensource community/forum project write with python3 aiohttp and vue.js. 一个开源的社区程序,临时测试站:https://t.myrpg.cn
注意
目前的master分支已经合并了2.0部分内容,实际上等价于1.3的SSR版本。
此分支将暂时不再添加新的功能,只做BUG维护。功能的开发将在2.0分支进行。
这个版本就不单独release了,如有bug请及时反馈,谢谢。
如何部署
内容较多,详见部署文档
特性
全局
文件上传(七牛云)
超宽屏支持
简易的移动端支持
实时在线人数
Markdown发帖和评论
包含主题、评论、百科内容的全文搜索(基于Elasticsearch)
用户系统
注册、登录
邮件激活
邮箱找回密码
修改个人信息
上传头像(七牛云)
每日签到
个人提醒
论坛
扁平化的内容展示
创建和管理板块
板块主题颜色
发表和编辑主题
文章页自动生成快捷导航
@功能
百科
自定义侧边栏和主页
文章的创建和编辑
全部文章列表
文章历史
随机页面
管理后台
提供对板块、主题、用户、评论的管理
管理日志
安全机制
前端密码加密,后端不取得用户的初始密码,最大限度降低了中间人攻击和数据库泄露的危害
后端二次加密,sha512加盐迭代十万次后储存用户密码
密码相关API均有防爆破,可设置IP请求间隔和账号请求间隔,分别提升批量撞库和单点爆破的难度
隐私数据,例如IP地址脱敏后才可存入数据库
升级指南
首先停止服务并更新源码。
然后请寻找 backend/misc/upgrade
目录下对应的升级文件,例如1.2升级1.3使用u12-u13.py
。
在 backend
目录下执行后删除即可。
注意如果使用了 pipenv 或其他虚拟环境,要在项目对应环境中完成这个操作。
然后分别升级前端项目(根目录)和后端项目(backend目录)的项目依赖。
如该版本无特别的升级说明,此时直接重新开启服务即可.
from https://github.com/fy0/Icarus
----
如何部署项目
首先 clone 项目。
git clone https://github.com/fy0/Icarus.git
下面逐项照做即可。
迫于前端安装node_modules等待时间长,在环境安装完成后,前端篇和后端篇可以一起做,以节省时间。
环境依赖篇
1. Python 3.6+
Windows上直接使用Anaconda3或者官方版本。
Linux上部分发行版(例如ArchLinux)天然满足要求。
对于自带Python在3.6以下的发行版,可以通过pyenv
来安装和管理不同版本的Python:
curl -L https://github.com/pyenv/pyenv-installer/raw/master/bin/pyenv-installer | bash
# 在终端输入以下命令
pyenv update
pyenv install 3.6
# 此时会告诉你能够安装的3.6.x小版本,安装最新的一个就可以了
# 注意安装时间会有点长,这里是下载源码包进行编译的,下载源码包慢有办法解决
# 搜一下就好了,这里不赘述。编译安装慢请耐心等待(注意编译时没有回显,只是CPU占用很高)
pyenv install 3.6.x
# 最后切换到 python 3.6 环境
pyenv local 3.6.x
参考自: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/
Ubuntu apt安装,执行以下命令:
curl -sL https://deb.nodesource.com/setup_10.x | sudo -E bash -
sudo apt-get install -y nodejs
Centos/RH
curl -sL https://rpm.nodesource.com/setup_10.x | bash -
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-11
装好之后做一些配置
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目录,执行:
# 首先记得用pipenv切到3.6环境
sudo pip install pipenv
pipenv install
不过有个问题就是 pipenv 太慢,总是在 Locking。
可以灵活使用 --skip-lock
参数跳过 Locking 阶段。
特别地,在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
如果只是开发环境下看看效果,那么在后端已经跑起来的情况下:
npm run serve
然后在浏览器中查看即可。
如果需要部署,那么请参考下一节。
扩展篇:配置 Nginx
如果需要配置外部访问(注意!只是开发则不需要),可以按如下步骤操作:
我们的目标是将前端挂在某个域名或端口上,然后将后端挂在同一域名的/api
下。
以此直接绕过同源策略的相关内容,简化配置。这也就是“单端口方案”的含义。
首先,在 Icarus 目录下新建一个 private.js,并按照下例进行填写:
var host = '127.0.0.1:9999' // 服务端渲染访问的本地后端地址
if (process.browser) {
// 浏览器中API访问的后端地址
host = window.location.host
}
export default {
remote: {
API_SERVER: 'http://' + host,
WS_SERVER: 'ws://' + host + '/ws'
}
}
npx nuxt build
npx nuxt start
随后是nginx的配置,当然你要首先安装它。
我已经写好了配置文件的模板,只要简单改改放进配置目录就可以了。
这里使用的是单端口绑定前后端,整站使用 9001 向外网提供服务。
sudo apt install nginx
cd Icarus
sudo cp misc/icarus.conf /etc/nginx/conf.d/
随后编辑 /etc/nginx/conf.d/icarus.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
即可应用。
from https://github.com/fy0/Icarus/blob/master/misc/how-to-deploy.md
No comments:
Post a Comment