Total Pageviews

Saturday, 17 July 2021

论坛程序icarus

 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