我的docker随笔43:问答平台answer部署

本文介绍开源问答社区平台Answer的容器化部署。

起因

笔者一直想搭建一个类似stack overflower这样的平台,自使用了Typora,就正式全面用Markdown+Typora+git来积累自己的个人知识库,但没有做到web化,现在也还在探索更好的方法。

无意间看到了 Answer 项目,觉得可能满足需求。其实这个项目早在 2022 年就已经由 SegmentFault 团队开源了,去年就进入了Apache 软件基金会孵化器。只是我知道的晚而已。

本文直接使用官方提供的docker镜像来部署。该项目使用 Golang 编写,有时间可以研究一下,当然这是后话。

概述

Answer主要功能有(摘自官方文档):

  • 提问和回答 - 提出问题并从你的用户和团队那里获得答案。
  • 组织内容 - 将你的内容组织为分类和标签。
  • 集成 - 与你现有的工具和服务集成。
  • 游戏化 - 奖励用户的贡献。
  • 现代用户界面 - 现代且响应式的用户界面。
  • 可扩展 - 使用插件扩展 Answer。
  • 开源 - 免费且开源。

服务部署

官方有详细的安装文档,这里结合自己的实际情况给出步骤。

下载镜像

通过以下命令下载官方镜像:

docker pull apache/answer

注:也可以在docker-comose阶段自动下载。虽然自动方便,不过笔者喜欢按部就班做。

容器启动脚本

docker-compose.yaml文件:

# cat docker-compose.yaml 
version: "3"
services:answer:image: apache/answercontainer_name: answerports:- '9080:80'restart: on-failurevolumes:- ./answer-data:/data#  - /etc/localtime:/etc/localtime#environment:#  - TZ=Asia/Shanghai
#volumes:
#  answer-data:./data

docker-compose.yaml文件根据实际情况作了修改,说明如下:

  • Anserver使用目录/data存在数据,将其映射至宿主机目录。
  • 映射外部端口8090。
  • 本想自动设置时区,但经测试无效,因此保留注释。

启动:

docker-compose up -d

启动日志如下:

Attaching to answer
answer    | [upload-dir] try to install...
answer    | [upload-dir] install success, upload directory is /data/uploads
answer    | [i18n] try to install i18n bundle...
answer    | [i18n] find i18n bundle 42
answer    | [i18n] install af_ZA.yaml bundle...
answer    | [i18n] install af_ZA.yaml bundle success
answer    | [i18n] install ar_SA.yaml bundle...
...
answer    | [i18n] install zh_CN.yaml bundle...
answer    | [i18n] install zh_CN.yaml bundle success
answer    | [i18n] install zh_TW.yaml bundle...
answer    | [i18n] install zh_TW.yaml bundle success
answer    | install all initial environment done
answer    | [SUCCESS] answer installation service will run at: http://localhost:80/install/ 

使用说明

输入http://<ip>:9080/,根据提示进行安装。

页面配置

步骤1:选择语言。

在这里插入图片描述

步骤2:选择数据库。为简单起见,使用了sqlite3。
在这里插入图片描述

值得说明的是,Answer 支持MarialDB/MySQL、PostgreSQL 和 SQLite 数据库。前2者需要配置数据库信息,如数据库地址、用户、密码等,见下图。而SQLite不需要额外的配置。
在这里插入图片描述

步骤3:创建配置文件

在这里插入图片描述

步骤4:配置网站信息,注意,这里填写的用户是管理员。
在这里插入图片描述

登录后页面如下:
在这里插入图片描述

添加问题/回答

根据网页提示添加即可。需要说明的是,问题必须有对应的标签,可自定义添加,也可用管理员登录统一添加。页面示例:
在这里插入图片描述

添加用户

路径:后台管理->用户管理。

可以批量添加用户。格式为用户名,邮箱,密码,注意事项:

  • 用户名长度需大于4字符。
  • 邮箱不能与已存在用户的相同。
  • 密码长度需大于8字符。

示例如下:
在这里插入图片描述

可以修改用户状态,如停用、删除、提升至管理员,等。

网站设置

路径:后台管理->站点设置。

一般的设置较简单,根据网站提示即可。这里说一下笔者设置的地方。

登录设置,不允许用户注册。
在这里插入图片描述

特权设置,使用级别1。
在这里插入图片描述

小结

就目前情况看,即使搭建了这个平台,即使在内部推行了这个平台,使用者还是自己而已。但无论如何,还是走出了一步,还需看后续效果。

官方网站:https://answer.apache.org/

源码:https://github.com/apache/incubator-answer

启动日志(有删改):

$ docker-compose logs
Attaching to answer
answer    | [upload-dir] try to install...
answer    | [upload-dir] install success, upload directory is /data/uploads
answer    | [i18n] try to install i18n bundle...
answer    | [i18n] find i18n bundle 42
answer    | install all initial environment done
answer    | [SUCCESS] answer installation service will run at: http://localhost:80/install/ 
[fengxuan@master incubator-answer]$ docker-compose logs -f
Attaching to answer
answer    | [upload-dir] try to install...
answer    | [upload-dir] install success, upload directory is /data/uploads
answer    | [i18n] try to install i18n bundle...
answer    | [i18n] find i18n bundle 42
answer    | install all initial environment done
answer    | [SUCCESS] answer installation service will run at: http://localhost:80/install/ 
answer    | [config-file] try to create at  /data/conf/config.yaml
answer    | [config-file] create directory success, config file is /data/conf/config.yaml
answer    | [config-file] install success
answer    | check table not exist
answer    | [i18n] try to install i18n bundle...
answer    | [i18n] find i18n bundle 42answer    | [i18n] install zh_CN.yaml file exist, try to replace it
answer    | [i18n] install zh_CN.yaml bundle...
answer    | [i18n] install zh_CN.yaml bundle success
answer    | [i18n] install zh_TW.yaml file exist, try to replace it
answer    | [i18n] install zh_TW.yaml bundle...
answer    | [i18n] install zh_TW.yaml bundle success
answer    | try to create cache directory /data/cache
answer    | try to load cache file from /data/cache/cache.db
answer    | open /data/cache/cache.db: no such file or directory
answer    | try to create database directory /data
answer    | try to save cache file to /data/cache/cache.db
answer    | upgrade done
answer    | config file path:  /data/conf/config.yaml
answer    | Answer is starting..........................
answer    | 2024-01-14 16:03:00.773     INFO    data/data.go:118        try to load cache file from /data/cache/cache.db
answer    | start cron
answer    | answer Version: 1.2.1  Revision: d8c5577

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/457972.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Swift Combine 从入门到精通一

1. Combine 简介 用 Apple 官方的话来说&#xff0c;Combine 是: a declarative Swift API for processing values over time. Combine 是 Apple 用来实现函数响应式编程的库&#xff0c; 类似于 RxSwift。 RxSwift 是 ReactiveX 对 Swift 语言的实现。 Combine 使用了许多可以…

论文阅读-Transformer-based language models for software vulnerability detection

「分享了一批文献给你&#xff0c;请您通过浏览器打开 https://www.ivysci.com/web/share/biblios/D2xqz52xQJ4RKceFXAFaDU/ 您还可以一键导入到 ivySCI 文献管理软件阅读&#xff0c;并在论文中引用 」 本文主旨&#xff1a;本文提出了一个系统的框架来利用基于Transformer的语…

开启一个服务,将服务器指定的文件读取,传播到网上其他终端

from flask import Flask, render_template_string app Flask(__name__)app.route(/get-data) def get_data():# 读取data.txt文件的内容with open(r./2024/2/4/data.txt, r) as file:data file.read()print(data)# 返回数据的HTML表示return render_template_string(<div…

基于Linux的HTTP代理服务器搭建与配置实战

在数字化世界中&#xff0c;HTTP代理服务器扮演着至关重要的角色&#xff0c;它们能够帮助我们管理网络请求、提高访问速度&#xff0c;甚至在某些情况下还能保护我们的隐私。而Linux系统&#xff0c;凭借其强大的功能和灵活性&#xff0c;成为了搭建HTTP代理服务器的理想选择。…

【计算机网络】17、http request header Origin 属性、跨域 CORS、同源、nginx 反向代理、预检请求

文章目录 一、Origin 含义二、跨源资源共享&#xff1a;**Cross-Origin Resource Sharing** CORS2.1 跨域的定义2.2 功能概述2.3 场景示例2.3.1 简单请求2.3.2 Preflighted requests&#xff1a;预检请求 2.4 header2.4.1 http request header2.4.1.1 Origin2.4.1.2 Access-Con…

【Algorithms 4】算法(第4版)学习笔记 05 - 2.2 归并排序

文章目录 前言参考目录学习笔记1&#xff1a;归并排序的简单演示1.1&#xff1a;基本思路1.2&#xff1a;归并排序的 demo 演示1.3&#xff1a;代码实现2&#xff1a;自顶向下的归并排序2.1&#xff1a;比较次数与访问次数的证明2.2&#xff1a;代码优化2.3&#xff1a;优化后代…

Rhino.Inside带材质将Revit模型bake到Rhino

Hello大家好&#xff01;我是九哥~ 今天来讲一个小技巧&#xff0c;就是我通常采用RIR将Revit的模型的Geometry Bake到Rhino&#xff0c;肯定是没有材质的&#xff0c;那么如果我们需要带材质那要怎么办呢&#xff1f; 对于会的人&#xff0c;其实挺简单的&#xff0c;只需要…

Retinexformer论文精读笔记

Retinexformer论文精读笔记 论文为2023年ICCV的Retinexformer: One-stage Retinex-based Transformer for Low-light Image Enhancement。论文链接&#xff1a;browse.arxiv.org/pdf/2303.06705.pdf&#xff0c;代码链接&#xff1a;caiyuanhao1998/Retinexformer: “Retinexfo…

vscode预览github上的markdown效果

需要安装的插件有&#xff1a; Github Markdown Preview Markdown Checkboxes Markdown Emoji Markdown footnotes Markdown Preview Github Styling Markdown Preview Mermaid Support Markdown yaml Preamble ctrlshiftv结合双页功能

4、ChatGPT 无法完成的 5 项编码任务

ChatGPT 无法完成的 5 项编码任务 这是 ChatGPT 不能做的事情的一个清单,但这并非详尽无遗。ChatGPT 可以从头开始生成相当不错的代码,但是它不能取代你的工作。 我喜欢将 ChatGPT 视为 StackOverflow 的更智能版本。非常有帮助,但不会很快取代专业人士。当 ChatGPT 问世时…

万物皆可问 — 私有部署网易有道QAnything

什么是 QAnything&#xff1f; QAnything&#xff08;Question and Answer based on Anything&#xff09;是一个本地知识库问答系统&#xff0c;旨在支持多种文件格式和数据库&#xff0c;允许离线安装和使用。使用QAnything&#xff0c;您可以简单地删除本地存储的任何格式的…

WifiConfigStore初始化读取-Android13

WifiConfigStore初始化读取 1、StoreData创建并注册2、WifiConfigStore读取2.1 文件读取流程2.2 时序图2.3 日志 1、StoreData创建并注册 packages/modules/Wifi/service/java/com/android/server/wifi/WifiConfigManager.java mWifiConfigStore.registerStoreData(mNetworkL…