soatok / faq-off
挑战-响应自动化
v0.4.0
2020-04-18 05:24 UTC
Requires
- php: ^7.3
- ext-json: *
- ext-pdo: *
- ezyang/htmlpurifier: ^4
- kelunik/two-factor: ^1
- league/commonmark: ^0|^1
- monolog/monolog: ^1.17
- paragonie/anti-csrf: ^2
- paragonie/constant_time_encoding: ^2
- paragonie/hidden-string: ^1
- sebastian/diff: ^1|^3
- slim/slim: ^3.1
- soatok/anthrokit: ^0.7|^1
- soatok/anthrokit-auth: >=0.8|^1
- soatok/anthrokit-session: ^0|^1
- twig/twig: ^2
- ulrichsg/getopt-php: ^3
Requires (Dev)
- phpunit/phpunit: ^8
- vimeo/psalm: ^3
README
FAQ Off 允许您构建游戏手册风格的 FAQ 网站,以对抗社交媒体上的 海狮行为 和群体骚扰。
FAQ Off 是一个基于 Slim Framework 3 和 AnthroKit 的自托管微服务,由 Soatok 开发,并在他的 Twitch.tv 频道 上实时展示。
公共演示: https://faq.dhol.es
邀请链接提供给达到 卓越 级别的 Patreon 支持者。
想了解更多,请参阅介绍 FAQ Off 的 Patreon 文章。
FAQ Off 特点一览
- 交互式问答网站:
- 引导您的读者找到他们问题的答案。
- 短路常见的破坏性对话。
写一次,回答无数次!
- 支持 HTML 和 Markdown
- 垃圾邮件和垃圾信息防御:
- 管理员可以启用“仅限邀请”模式,这需要现有用户的邀请码才能注册。
- 邀请树:管理员可以看到谁邀请了谁,以确定不端用户的常见入口点,以管理自己的社区。
- 协作:
- 用户可以与同事共享一个 作者 个人资料并作为团队发布。
- 用户可以属于无限数量的 作者。
- 作者可以与无限数量的用户共享访问权限,或仅共享一个。
- 安全性:
- 条目以 HTML / Markdown 编写,并通过 HTML Purifier 处理,以防止跨站脚本攻击。
- 密码以 安全方式存储,或您可以使用 Twitter。
- 您的用户名或 Twitter 处理方式仅由 管理员 知道。提供一个随机生成的
公共 ID
,以保持您的登录处理方式和/或 Twitter 处理方式对其他人匿名。
安装
获取代码和依赖项
首先,克隆 git 仓库。
git clone https://github.com/soatok/faq-off target-dir-name
然后,在目标目录中运行 composer install --no-dev
。
数据库设置
运行 bin/create-config.php
以创建本地配置文件。在此阶段,您应该有有效的 PostgreSQL 数据库凭证。
接下来,运行 bin/install
以完成数据库表的安装。
Web 服务器配置
确保您已配置虚拟主机以使用 public
目录作为其文档根。
- 错误:
/var/www/faq-off
- 正确:
/var/www/faq-off/public
一般规则:如果您的用户可以阅读此 README.md
文件,则您已错误地配置了您的服务器,需要再向下层。
强烈建议您使用 HTTPS (TLSv1.3, TLSv1.2)。如果您无法承担 TLS 证书的费用,Let's Encrypt 提供免费证书和自动续订(通过 certbot
)。
例如,nginx 配置可能如下所示
server { listen 443 ssl; listen [::]:443 ssl; ssl_certificate /etc/letsencrypt/live/faq.example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/faq.example.com/privkey.pem; include snippets/ssl-params.conf; root /var/www/faq-off/public; server_name faq.example.com; index index.php index.html index.htm; location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/var/run/php/php7.3-fpm.sock; } location / { # First attempt to serve request as file, then # as directory, then fall back to displaying a 404. try_files $uri $uri/ /index.php?$args; } location ~ /.well-known { allow all; } } server { listen 80; listen [::]:80; root /var/www/faq-off/public; index index.html index.htm; server_name faq.example.com; location ~ /.well-known { allow all; } location / { # First attempt to serve request as file, then # as directory, then fall back to displaying a 404. try_files $uri $uri/ =404; } # Redirect to HTTPS return 301 https://faq.example.com$request_uri; }