ActivityPub 是一种去中心化的内容聚合协议，可以让其他用户远程订阅你的内容。它很像升级版的 RSS，但是支持远程推送，因此订阅者可以及时获取你的内容，而不必时不时从客户端进行抓取。下面是目前支持 ActivityPub 协议的开源软件，可以在自己的服务器架设服务。微博（Twitter 的替代品）：Mastodon，Pleroma照片分享（Instagram 的替代品）：Pixelfed视频分享（Youtube 的替代品）：Peertube博客（Facebook 的替代品）：WriteFreely，WordPress + ActivityPub 插件，Plume聊天（Slack 的替代品）：Mattermost，Matrix音乐分享（Spotify 的替代品）：Funkwhale
一款优雅强大的开源终端工具-Nushell ,在Mac,Linux系统下的安装以及Nushell的常用命令。
一款开源非常优秀强大的终端神器 -Nushell ，附上Mac os和Linux系统下的安装教程。Nushell 项目。这个项目的目标是采用 Unix 的 shell 哲学，其中管道将简单的命令连接在一起，并将其带入现代开发风格。因此，Nushell 不是 shell 或编程语言，而是通过将丰富的编程语言和功能齐全的 shell 结合到一个包中来连接两者。Nu 从许多熟悉的领域中汲取灵感：传统 shell（如 bash）、基于对象的 shell（如 PowerShell）、渐进式语言（如 TypeScript）、函数式编程、系统编程等等。但是，Nu 并没有试图成为万事通，而是将精力集中在做好几件事上：成为具有现代感的灵活的跨平台外壳作为一种适用于数据结构的现代编程语言来解决问题提供明确的错误信息和干净的 IDE 支持Linux系统下安装 Nushell 有两种方法，一种就是直接Nushell官方仓库下载二进制，然后手动配置环境变量。第二种就是使用cargo 安装，这里介绍第二种方法,首先我们需要先安装cargo ，cargo 是Rust 语言开发环境，安装好Rust 即可直接使用命令安装Rust 的程式，类似于golang 的go get命令安装golang程式一样。。安装cargocurl https://sh.rustup.rs -sSf | sh安装Nushellcargo install nu然后输入nu即可进入nu终端工具，如果想要退出道默认的bash终端，执行exit命令即可。Mac os安装Nushell brew install nushell修改用户的shell类型为nusudo chsh -s /usr/local/bin/nu username关闭终端，重新打开终端即可享受Nushell的强大和优雅了。下面Nushell的常用命令当您运行这样的命令时，您会注意到的第一件事ls是返回的不是文本块，而是一个结构化表格。 > ls ╭────┬───────────────────────┬──────┬───────────┬─────────────╮ │ # │ name │ type │ size │ modified │ ├────┼───────────────────────┼──────┼───────────┼─────────────┤ │ 0 │ 404.html │ file │ 429 B │ 3 days ago │ │ 1 │ CONTRIBUTING.md │ file │ 955 B │ 8 mins ago │ │ 2 │ Gemfile │ file │ 1.1 KiB │ 3 days ago │ │ 3 │ Gemfile.lock │ file │ 6.9 KiB │ 3 days ago │ │ 4 │ LICENSE │ file │ 1.1 KiB │ 3 days ago │ │ 5 │ README.md │ file │ 213 B │ 3 days ago │ ... 该表不仅仅是以不同的方式显示目录。就像电子表格中的表格一样，该表格允许我们以更交互的方式处理数据。我们要做的第一件事是按大小对表格进行排序。为此，我们将从中获取输出ls并将其提供给一个命令，该命令可以根据列的内容对表进行排序。 > ls | sort-by size | reverse ╭────┬───────────────────────┬──────┬───────────┬─────────────╮ │ # │ name │ type │ size │ modified │ ├────┼───────────────────────┼──────┼───────────┼─────────────┤ │ 0 │ Gemfile.lock │ file │ 6.9 KiB │ 3 days ago │ │ 1 │ SUMMARY.md │ file │ 3.7 KiB │ 3 days ago │ │ 2 │ Gemfile │ file │ 1.1 KiB │ 3 days ago │ │ 3 │ LICENSE │ file │ 1.1 KiB │ 3 days ago │ │ 4 │ CONTRIBUTING.md │ file │ 955 B │ 9 mins ago │ │ 5 │ books.md │ file │ 687 B │ 3 days ago │ ... 您可以看到，为了完成这项工作，我们没有将命令行参数传递给ls. 相反，我们使用sort-byNu 提供的命令对ls命令的输出进行排序。为了在顶部查看最大的文件，我们还使用了reverse.Nu 提供了许多可用于表的命令。例如，我们可以过滤ls表的内容，使其只显示超过 1 KB 的文件： > ls | where size > 1kb ╭───┬───────────────────┬──────┬─────────┬────────────╮ │ # │ name │ type │ size │ modified │ ├───┼───────────────────┼──────┼─────────┼────────────┤ │ 0 │ Gemfile │ file │ 1.1 KiB │ 3 days ago │ │ 1 │ Gemfile.lock │ file │ 6.9 KiB │ 3 days ago │ │ 2 │ LICENSE │ file │ 1.1 KiB │ 3 days ago │ │ 3 │ SUMMARY.md │ file │ 3.7 KiB │ 3 days ago │ ╰───┴───────────────────┴──────┴─────────┴────────────╯ 就像在 Unix 哲学中一样，能够让命令相互对话为我们提供了在许多不同组合中混合搭配的方法。让我们看一个不同的命令： > ps ╭─────┬──────┬──────────────────────┬─────────┬───────┬───────────┬──────────╮ │ # │ pid │ name │ status │ cpu │ mem │ virtual │ ├─────┼──────┼──────────────────────┼─────────┼───────┼───────────┼──────────┤ │ 0 │ 7570 │ nu │ Running │ 1.96 │ 23.2 MiB │ 32.8 GiB │ │ 1 │ 3533 │ remindd │ Sleep │ 0.00 │ 103.6 MiB │ 32.3 GiB │ │ 2 │ 3495 │ TVCacheExtension │ Sleep │ 0.00 │ 11.9 MiB │ 32.2 GiB │ │ 3 │ 3490 │ MusicCacheExtension │ Sleep │ 0.00 │ 12.9 MiB │ 32.2 GiB │ ... ps如果您使用过 Linux ，您可能会熟悉该命令。通过它，我们可以获得系统当前运行的所有进程的列表，它们的状态是什么，它们的名称是什么。我们还可以看到进程的 CPU 负载。如果我们想显示正在使用 CPU 的进程怎么办？就像我们之前对ls命令所做的一样，我们也可以使用ps命令返回给我们的表： > ps | where cpu > 5 ╭───┬──────┬────────────────┬─────────┬────────┬───────────┬──────────╮ │ # │ pid │ name │ status │ cpu │ mem │ virtual │ ├───┼──────┼────────────────┼─────────┼────────┼───────────┼──────────┤ │ 0 │ 1583 │ Terminal │ Running │ 20.69 │ 127.8 MiB │ 33.0 GiB │ │ 1 │ 579 │ photoanalysisd │ Running │ 139.50 │ 99.9 MiB │ 32.3 GiB │ ╰───┴──────┴────────────────┴─────────┴────────┴───────────┴──────────╯ 到目前为止，我们一直在使用ls和ps列出文件和进程。Nu 还提供了其他可以创建有用信息表的命令。接下来，让我们探索date和sys。运行date now为我们提供了有关当前日期和时间的信息： > date now 2022-03-07 14:14:51.684619600 -08:00 要将日期作为表格，我们可以将其输入date to-table > date now | date to-table ╭───┬──────┬───────┬─────┬──────┬────────┬────────┬──────────╮ │ # │ year │ month │ day │ hour │ minute │ second │ timezone │ ├───┼──────┼───────┼─────┼──────┼────────┼────────┼──────────┤ │ 0 │ 2022 │ 3 │ 7 │ 14 │ 45 │ 3 │ -08:00 │ ╰───┴──────┴───────┴─────┴──────┴────────┴────────┴──────────╯ Runningsys提供有关 Nu 正在运行的系统的信息： > sys ╭───────┬───────────────────╮ │ host │ {record 6 fields} │ │ cpu │ [table 4 rows] │ │ disks │ [table 3 rows] │ │ mem │ {record 4 fields} │ │ temp │ [table 1 row] │ │ net │ [table 4 rows] │ ╰───────┴───────────────────╯ 这与我们之前看到的表格有点不同。该sys命令为我们提供了一个表格，其中包含单元格中的结构化表格，而不是简单的值。要查看此数据，我们需要 获取 要查看的列： > sys | get host ╭────────────────┬────────────────────────╮ │ name │ Debian GNU/Linux │ │ os version │ 11 │ │ kernel version │ 5.10.92-v8+ │ │ hostname │ lifeless │ │ uptime │ 19day 21hr 34min 45sec │ │ sessions │ [table 1 row] │ ╰────────────────┴────────────────────────╯ 该get命令让我们跳转到表的一列的内容。在这里，我们正在查看“主机”列，其中包含有关运行 Nu 的主机的信息。操作系统名称、主机名、CPU 等。让我们获取系统上用户的名称： > sys | get host.sessions.name ╭───┬────╮ │ 0 │ jt │ ╰───┴────╯ 现在，系统上只有一个名为“jt”的用户。您会注意到我们可以传递列路径（host.sessions.name部分）而不仅仅是列的名称。Nu 将采用列路径并转到表中相应的数据位。您可能已经注意到其他不同之处。我们没有数据表，只有一个元素：字符串“jt”。Nu 适用于数据表和字符串。字符串是在 Nu 之外使用命令的重要部分。让我们看看字符串在 Nu 之外是如何工作的。我们将采用之前的示例并运行外部echo命令（^告诉 Nu 不要使用内置echo命令）： > sys | get host.sessions.name | each { |it| ^echo $it } jt 如果这看起来与我们之前的非常相似，那么您的眼光很敏锐！它很相似，但有一个重要的区别：我们调用^echo了我们之前看到的值。这允许我们将数据从 Nu 传递到echo（或 Nu 之外的任何命令，git例如）。#获得帮助可以使用命令发现任何 Nu 内置命令的帮助文本help。要查看所有命令，请运行help commands. 您还可以通过执行搜索主题help -f <topic>。 > help path Explore and manipulate paths. There are three ways to represent a path: * As a path literal, e.g., '/home/viking/spam.txt' * As a structured path: a table with 'parent', 'stem', and 'extension' (and * 'prefix' on Windows) columns. This format is produced by the 'path parse' subcommand. * As an inner list of path parts, e.g., '/ home viking spam.txt '. Splitting into parts is done by the `path split` command. All subcommands accept all three variants as an input. Furthermore, the 'path join' subcommand can be used to join the structured path or path parts back into the path literal. Usage: > path Subcommands: path basename - Get the final component of a path path dirname - Get the parent directory of a path path exists - Check whether a path exists path expand - Try to expand a path to its absolute form path join - Join a structured path or a list of path parts. path parse - Convert a path into structured data. path relative-to - Get a path as relative to another path. path split - Split a path into parts by a separator. path type - Get the type of the object a path refers to (e.g., file, dir, symlink) Flags: -h, --help Display this help message 玩得愉快。https://www.nushell.sh/book/https://github.com/nushell/nushell
ctop一款开源的docker容器监控工具,类似于htop这种系统的监控工具。ctop提供多个容器的实时指标的简明扼要概述：以及用于检查特定容器的单个容器视图。ctop内置对 Docker 和 runC 的支持；其他容器和集群系统的连接器计划在未来发布。Debian/Ubuntu由第三方维护 sudo apt-get install ca-certificates curl gnupg lsb-release curl -fsSL https://azlux.fr/repo.gpg.key | sudo gpg --dearmor -o /usr/share/keyrings/azlux-archive-keyring.gpg echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/azlux-archive-keyring.gpg] http://packages.azlux.fr/debian \ $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/azlux.list >/dev/null sudo apt-get update sudo apt-get install docker-ctop Arch sudo pacman -S ctop ctop is also available for Arch in the AURLinux (Generic) sudo wget https://github.com/bcicen/ctop/releases/download/v0.7.7/ctop-0.7.7-linux-amd64 -O /usr/local/bin/ctop sudo chmod +x /usr/local/bin/ctop OS X brew install ctop or sudo port install ctop or sudo curl -Lo /usr/local/bin/ctop https://github.com/bcicen/ctop/releases/download/v0.7.7/ctop-0.7.7-darwin-amd64 sudo chmod +x /usr/local/bin/ctop Windowsctop is available in scoop: scoop install ctop Docker docker run --rm -ti \ --name=ctop \ --volume /var/run/docker.sock:/var/run/docker.sock:ro \ quay.io/vektorlab/ctop:latest Config fileWhile running, use S to save the current filters, sort field, and other options to a default config path (~/.config/ctop/config on XDG systems, else ~/.ctop).Config file values will be loaded and applied the next time ctop is started.选项选项描述-a仅显示活动容器-f <string>设置初始过滤字符串-h显示帮助对话框-i反转默认颜色-r反向容器排序顺序-s选择初始容器排序字段-v输出版本信息并退出键绑定钥匙行动打开容器菜单a切换所有（运行和非运行）容器的显示f过滤显示的容器（esc打开时清除）H切换 ctop 标题h打开帮助对话框s选择容器排序字段r反转容器排序顺序o打开单一视图l查看容器日志（t打开时切换时间戳）e执行外壳c配置列S将当前配置保存到文件q退出ctop备择方案有关与 Docker 一起使用的类似工具，请参阅Awesome Docker 列表。https://github.com/bcicen/ctop
重装开源微博pleroma的方法，首先要删除旧的数据库，否则问题一大堆， 删除数据库和数据库用户 sudo -Hu postgres psql -c 'DROP DATABASE <pleroma_db>;'; sudo -Hu postgres psql -c 'DROP USER <pleroma_db>;' 比如 sudo -Hu postgres psql -c 'DROP DATABASE pleroma;'; sudo -Hu postgres psql -c 'DROP USER pleroma;' 使用上面的命令需要进入到当前用户目录执行。然后按照下面pleroma官方教程重新跑一遍就行了，为了不必要的麻烦和浪费时间，重跑一遍是最保险的了。https://docs-develop.pleroma.social/backend/installation/otp_en/
另一款BT（宝塔面板）开源的服务器管理面板工具mdserver-web
另一款BT开源的服务器管理面板工具mdserver-web？其实不是（BT宝塔面板）开源的，是这款工具的作者表示非常喜欢BT（宝塔面板）的后台管理面板，所以后台就延续了（BT宝塔面板）的样式，但是功能各方面也差不多。（BT（宝塔面板）的后台样式）SSH工具面板收藏功能网站子目录绑定网站备份功能插件方式管理OpenResty - 轻量级，占有内存少，并发能力强。PHP[52-81] - PHP是世界上最好的编程语言。MySQL - 一种关系数据库管理系统。MongoDB - 一种非关系NOSQL数据库管理系统。phpMyAdmin - 著名Web端MySQL管理工具。Memcached - 一个高性能的分布式内存对象缓存系统。Redis - 一个高性能的KV数据库。CSVN - 最流行的SVN代码共享管理软件。PureFtpd - 一款专注于程序健壮和软件安全的免费FTP服务器软件。Gogs - 一款极易搭建的自助Git服务。Rsyncd - 通用同步服务。mysql主从配置。swap插件[虚拟内存]。https://github.com/midoks/mdserver-web
从入门到放弃，类似于4chan的专业开源画板程序-vichan，附上安装和配置教程。
https://www.vpslala.com/t/854这篇文章介绍了另外一款开源的类似于4chan的画板程序-tinyib但是相对来讲，tinyib的功能不是那么强大，tinyib只是一个4chan功能的基本实现而这款类似于4chan的专业实用强大的开源画板程序-vichan，则是专业级的。vichan 是一个免费的轻量级、快速、高度可配置和用户友好的图像板软件包。它是用 PHP 编写的，几乎没有依赖项。 从官方公告来看，vichan 应该是已经完全停止开发了，除了安全性漏洞的修复外。官方不建议使用vichan ，但是同时也表示不排除将来会推到vichan进行重构。vichan的安装要求PHP >= 5.4（我们仍然尽量保持与 php 5.3 的兼容性）明确支持 PHP 7.0。PHP 7.2 也可以工作，但可能会导致尚未报告的错误。MySQL/MariaDB 服务器mbstringPHP GDPHP PDO类 Unix 操作系统，最好是 FreeBSD 或 LinuxPHP composer我们试图确保 vichan 与所有主要的 Web 服务器兼容。vichan 不包含 Apache.htaccess文件，也不需要它推荐的数据库和缓存MySQL/MariaDB 服务器 >= 5.5.3ImageMagick（首选命令行 ImageMagick 或 GraphicsMagick）。APC（替代 PHP 缓存）、 XCache或 Memcached测试使用了memcached和redis两种缓存服务器，感觉使用redis缓存服务器响应最快。安装下载 vichan 并将其解压缩到您的 Web 目录或获取最新的开发版本：git clone git://github.com/vichan-devel/vichan.git 2. `composer install`在目录中运行 3. 在您的网络浏览器中导航`install.php`并按照提示进行操作。 4. 现在应该安装 vichan。`mod.php`使用默认的用户名和密码组合登录：admin **/ password** 。 请记住更改管理员帐户密码。后台管理地址是doumain.com/mod.php//这里安装脚本有点问题，建议直接先导入install.sql数据到数据库，然后直接修改网站根目录下的inc/instance-config.php文件数据库名称，用户名和密码下面就开始配置vichan了，vichan的根配置文件是inc/config.php文件，通常不建议去修改它而是使用inc/instance-config.php文件来配置vichan的功能。vichan非常强大，你可以使用inc/instance-config.php实现不同板块的功能，比如创建了/demo/分类和/twodemo/分类，那么修改inc/instance-config.php文件复制到两个分类下即可实现/demo/分类和/twodemo/分类下的不同权限和功能的实现。下面是折腾了两天测试和使用后没有问题vichan的inc/instance-config.php文件配置代码iShot_2022-05-27_10.36.19.png <?php /* * Instance Configuration * ---------------------- * Edit this file and not config.php for imageboard configuration. * * You can copy values from config.php (defaults) and paste them here. */ // 數據庫配置 $config['db']['type'] = 'mysql'; $config['db']['server'] = '127.0.0.1'; $config['db']['user'] = '数据库用户名'; $config['db']['password'] = '数据库用户名密码'; $config['db']['database'] = '数据库名称'; $config['db']['persistent'] = true; //永久链接 $config['db']['timeout'] = 60; //全局公告 $config['global_message'] = 'Don\'t touch porn anyting! Dou\' touch Child Porn！thank you!'; //緩存和排錯，更新 $config['check_updates'] = true; $config['check_updates_time'] = 43200; // 12小时 $config['debug'] = false; $config['verbose_errors'] = false; $config['deprecation_errors'] = false; $config['debug_explain'] = false; $config['has_installed'] = '.installed'; $config['syslog'] = true; $config['fcrdns'] = true; $config['cache']['enabled'] = 'redis'; $config['cache']['timeout'] = 60 * 1; $config['cache']['redis'] = array('127.0.0.1', 6379, '', 1); $config['cache_config'] = false; $config['lock']['enabled'] = 'redis'; $config['queue']['enabled'] = 'redis'; // xD //Cookie 设置 $config['cookies']['mod'] = 'mod'; $config['cookies']['js'] = 'serv'; $config['cookies']['path'] = '/'; $config['cookies']['expire'] = 60 * 60 * 24 * 30 * 1; $config['cookies']['salt'] = 'oF^A3!DkK!cyjMQfbL%sWTWAUf!EfJ@um!v$n4X72H()'; $config['cookies']['httponly'] = true; $config['secure_trip_salt'] = ')(mCb3&7ZvCNt59SSDJyy4MVgeNP&47Wy\zhL@%jWv%'; //防止拉圾信息 $config['anti_bump_flood'] = true; $config['spam']['hidden_inputs_min'] = 4; $config['spam']['hidden_inputs_max'] = 12; $config['spam']['hidden_inputs_max_pass'] = 12; $config['spam']['hidden_inputs_expire'] = 60 * 60 * 3; $config['spam']['unicode'] = true; $config['spam']['hidden_input_names'] = array( 'user', 'username', 'login', 'search', 'q', 'url', 'firstname', 'lastname', 'text', 'message' ); $config['spam']['valid_inputs'] = array( 'hash', 'board', 'thread', 'mod', 'name', 'email', 'subject', 'post', 'body', 'password', 'sticky', 'lock', 'raw', 'embed', 'g-recaptcha-response', 'captcha_cookie', 'captcha_text', 'spoiler', 'page', 'file_url', 'json_response', 'user_flag', 'no_country', 'tag' ); $config['captcha']['enabled'] = false; $config['recaptcha'] =true; $config['recaptcha_public'] = '自行到谷歌后台创建'; $config['recaptcha_private'] = '自行到谷歌后台创建'; //https://www.google.com/recaptcha/admin/create //适用v2版本，v3版本没有测试 $config['new_thread_capt'] = false; //为ture是会启用系统自带验证码而不是谷歌验证码 $config['proxy_check'] = true; $config['proxy_save'] = true; $config['filters'][] = array( 'condition' => array( 'flood-match' => array('ip', 'body'), // Match IP address and post body 'flood-time' => &$config['flood_time_ip'], '!body' => '/^$/', // Post body is NOT empty ), 'action' => 'reject', 'message' => &$config['error']['flood'] ); $config['filters'][] = array( 'condition' => array( 'flood-match' => array('file'), // Match file hash 'flood-time' => 60 * 2 // 2 minutes minimum ), 'action' => 'reject', 'message' => &$config['error']['flood'] ); $config['filters'][] = array( 'condition' => array( 'name' => '/^关键词$/', 'body' => '/关键词2,\s+(the )?s关键词3$/i', 'OP' => false ),//关键词过滤，如果发布内容包含上门的字符就会被丢弃 'action' => 'ban', 'add_note' => true, 'expires' => 60 * 60 * 3, // 3 hours 'reason' => 'Go away, spammer.' ); $config['flood_cache'] = 60 * 60 * 2; // 发布设置‘ $config['force_body'] = true; $config['force_body_op'] = true; $config['force_image_op'] = false; $config['strip_superfluous_returns'] = true; $config['strip_combining_chars'] = true; $config['max_body'] = 1800; $config['body_truncate'] = 15; $config['body_truncate_char'] = 2500; $config['max_links'] = 20; $config['max_cites'] = 30; $config['max_cross'] = $config['max_cites']; $config['track_cites'] = true; $config['max_filename_len'] = 255; $config['max_filename_display'] = 30; $config['allow_delete'] = true; $config['delete_time'] = 10; $config['reply_limit'] = 250; $config['image_hard_limit'] = 0; $config['reply_hard_limit'] = 0; $config['robot_enable'] = true; $config['robot_strip_repeating'] = true; $config['robot_mute'] = true; $config['robot_mute_hour'] = 336; $config['auto_unicode'] = true; $config['markup_urls'] = true; $config['allow_upload_by_url'] = false; $config['early_404'] = false; $config['early_404_page'] = 3; $config['early_404_replies'] = 5; $config['early_404_staged'] = false; $config['field_disable_name'] = true; $config['field_disable_email'] = true; $config['field_disable_subject'] = false; $config['field_disable_reply_subject'] = false; $config['field_disable_password'] = true; $config['slugify'] = false; $config['slug_max_size'] = 80; //标记设置 $config['markup'][] = array("/'''(.+?)'''/", "\$1"); $config['markup'][] = array("/''(.+?)''/", "\$1"); $config['markup'][] = array("/\*\*(.+?)\*\*/", "\$1"); $config['markup'][] = array("/^[ |\t]*==(.+?)==[ |\t]*$/m", "\$1"); $config['markup_code'] = false; $config['markup_repair_tidy_bare'] = true; $config['always_regenerate_markup'] = false; // 图像设置 $config['max_images'] = 1; $config['multiimage_method'] = 'split'; $config['thumb_width'] = 255; $config['thumb_height'] = 255; $config['thumb_op_width'] = 255; $config['thumb_op_height'] = 255; $config['thumb_ext'] = 'png'; $config['thumb_keep_animation_frames'] = 1; $config['thumb_method'] = 'convert'; $config['convert_args'] = '-size %dx%d %s -thumbnail %dx%d -auto-orient +profile "*" %s'; $config['convert_auto_orient'] = false; $config['convert_manual_orient'] = false; $config['ie_mime_type_detection'] = '/<(?:body|head|html|img|plaintext|pre|script|table|title|a href|channel|scriptlet)/i'; $config['allowed_ext'][] = 'jpg'; $config['allowed_ext'][] = 'jpeg'; $config['allowed_ext'][] = 'bmp'; $config['allowed_ext'][] = 'gif'; $config['allowed_ext'][] = 'png'; $config['allowed_ext'][] = 'webp'; $config['file_thumb'] = 'static/%s'; $config['spoiler_image'] = 'static/spoiler.png'; $config['image_deleted'] = 'static/deleted.png'; $config['minimum_copy_resize'] = false; $config['max_filesize'] = 1 * 1024 * 1024; // 1MB $config['max_width'] = 4096; $config['max_height'] = $config['max_width']; $config['image_reject_repost'] = true; $config['image_reject_repost_in_thread'] =true; $config['show_filename'] =false; $config['gnu_md5'] = true; //显示设置 $config['mod']['shadow_name'] = false; $config['anonymous'] = '匿名'; $config['threads_per_page'] = 10; $config['max_pages'] = 10; $config['threads_preview'] = 5; $config['threads_preview_sticky'] = 1; $config['board_abbreviation'] = '/%s/'; $config['report_limit'] = 3; $config['allow_subtitle_html'] = false; $config['locale'] = 'zh_TW'; $config['timezone'] = 'Asia/Macau'; $config['post_date'] = '%y/%m/%d / %H:%M:%S'; $config['ban_date'] = '%A %e %B, %Y'; $config['button_newtopic'] = _('新話題'); $config['button_reply'] = _('新回覆'); $config['thread_subject_in_title'] = false; //$config['footer'][] = _('所有本頁上的商標、著作權、留言、圖片、軟體分別為當事人所擁有並負責.'); //添加页脚声明 $config['genpassword_chars'] = 'jX4TctfVswFprFRtAfNGEWni57Lsz$hv$s9%fUATd$fQhLs@tto&5esxmfd$mBgPfm()_+'; // available stylesheets (or create your own). $config['stylesheets']['Yotsuba B'] = ''; // Default; there is no additional/custom stylesheet for this. $config['stylesheets']['Yotsuba'] = 'yotsuba.css'; $config['stylesheets']['Futaba'] = 'futaba.css'; $config['stylesheets']['Dark'] = 'dark.css'; $config['default_stylesheet'] = array('Yotsuba B', $config['stylesheets']['Yotsuba B']); $config['stylesheets_board'] =true; $config['font_awesome'] = true; $config['font_awesome_css'] = 'stylesheets/font-awesome/css/font-awesome.min.css'; $config['boards'] = array( array('分类14', '分类15'), array('分类1', '分类2', '分类3', '分类4', 'g'), array('h', 'i', 'j'), array('k', array('l', 'm')), //array('status' => 'http://status.example.org/') );//添加链接到网站头部导航 $config['boardlist_wrap_bracket'] = false; $config['page_nav_top'] = true; $config['catalog_link'] = 'catalog.html'; $config['minify_html'] = true; //视频嵌入，通过修改和自定义支持任何网站，比如P站。 $config['enable_embedding'] = true; $config['embedding'] = array( array( '/^https?:\/\/(\w+\.)?youtube\.com\/watch\?v=([a-zA-Z0-9\-_]{10,11})(&.+)?$/i', ' ' ), array( '/^https?:\/\/(\w+\.)?vimeo\.com\/(\d{2,10})(\?.+)?$/i', ' ' ), array( '/^https?:\/\/(\w+\.)?dailymotion\.com\/video\/([a-zA-Z0-9]{2,10})(_.+)?$/i', ' ' ), array( '/^https?:\/\/(\w+\.)?metacafe\.com\/watch\/(\d+)\/([a-zA-Z0-9_\-.]+)\/(\?[^\'"<>]+)?$/i', ' ' ), array( '/^https?:\/\/(\w+\.)?vocaroo\.com\/([a-zA-Z0-9]{2,12})$/i', ' ' ) ); // Embedding width and height. $config['embed_width'] = 300; $config['embed_height'] = 246; //靜態文件 $config['file_index'] = 'index.html'; $config['file_page'] = '%d.html'; // NB: page is both an index page and a thread $config['file_page50'] = '%d+50.html'; $config['file_page_slug'] = '%d-%s.html'; $config['file_page50_slug'] = '%d-%s+50.html'; $config['file_mod'] = 'mod.php'; $config['file_post'] = 'post.php'; $config['file_script'] = 'main.js'; // Board directory, followed by a forward-slash (/). $config['board_path'] = '%s/'; // Misc directories. $config['dir']['img'] = 'src/'; $config['dir']['thumb'] = 'thumb/'; $config['dir']['res'] = 'res/'; $config['dir']['template'] = getcwd() . '/templates'; // Location of Tinyboard "themes". $config['dir']['themes'] = getcwd() . '/templates/themes'; // Same as above, but a URI (accessable by web interface). $config['dir']['themes_uri'] = 'templates/themes'; // Home directory. Used by themes. //$config['dir']['home'] = ''; // "## Admin" makes everything red and bold, including the name and tripcode: $config['custom_capcode']['Admin'] = array( ' ## %s', 'color:red;font-weight:bold', // Change name style; optional 'color:red;font-weight:bold' // Change tripcode style; optional ); $config['mod']['dns_lookup'] = true; // Number of posts to display on the reports page. $config['mod']['recent_reports'] = 10; // Number of actions to show per page in the moderation log. $config['mod']['modlog_page'] = 350; // Number of bans to show per page in the ban list. $config['mod']['banlist_page'] = 350; // Number of news entries to display per page. $config['mod']['news_page'] = 40; // Number of results to display per page. $config['mod']['search_page'] = 200; // Number of entries to show per page in the moderator noticeboard. $config['mod']['noticeboard_page'] = 50; // Number of entries to summarize and display on the dashboard. $config['mod']['noticeboard_dashboard'] = 5; $config['mod']['rebuild_timelimit'] = 120; $config['mod']['raw_html_default'] = false; $config['mod']['dismiss_reports_on_lock'] = true; $config['mod']['config_editor_php'] = false; //公共页面 $config['search'] = array(); $config['search']['enable'] = false; $config['board_search'] = false; $config['search']['queries_per_minutes'] = Array(15, 2); $config['search']['queries_per_minutes_all'] = Array(20, 2); $config['search']['search_limit'] = 10; $config['public_logs'] = 1; $config['api']['enabled'] = false; $config['meta_keywords'] = '生活,成人,健康,音樂,電影,軟體,程序,工具,娛樂'; $config['purge_timeout'] = 3; $config['gzip_static'] = true; $config['board_regex'] = '[0-9a-zA-Z$_\x{0080}-\x{FFFF}]{1,58}'; $config['youtube_js_html'] = ' '. ''. ' '. ' '; $config['password_crypt'] = '$6$rounds=25000$'; $config['password_crypt_version'] = 1; ?> iShot_2022-05-27_10.37.40.png为什么说4chan从入门到放弃？事实上一直都想搭建一个干净的交流平台找到志同道合，或者可以让人干净分享生活，工作点滴的平台经过两天的思考，最终决定还是放弃了，想想有再牛逼技术的程序员都放弃构建自己的交流平台一是非常耗费自己的时间，而来就是你真的无法去管理网络的复杂性和可控性所以更不可能去搭建一个匿名的网络平台了，官方代码仓库https://github.com/vichan-devel/vichan有兴趣可以看看。
基于Java开发非常强大的免费的开源通用跨平台数据库工具-dbeaver
基于Java开发非常强大的免费的开源通用跨平台数据库工具-dbeaver下载使用dbeaver，首先要在本地安装Java。需要 Java 11 或更高版本。dbeaver-免费的多平台数据库工具，适用于开发人员、数据库管理员、分析师和所有需要使用数据库的人。支持所有流行的数据库：MySQL、PostgreSQL、SQLite、Oracle、DB2、SQL Server、Sybase、MS Access、Teradata、Firebird、Apache Hive、Phoenix、Presto 等。data_edit-450x220.png主要功能如下数据库导航器* [过滤数据库对象](https://github.com/dbeaver/dbeaver/wiki/Filter-Database-Objects) * [配置过滤器](https://github.com/dbeaver/dbeaver/wiki/Configure-Filters) * [简单和高级视图](https://github.com/dbeaver/dbeaver/wiki/Simple-and-Advanced-View)项目视图项目浏览器查询管理器后台任务数据库对象编辑器* [属性编辑器](https://github.com/dbeaver/dbeaver/wiki/Properties-Editor)数据编辑器* [导航](https://github.com/dbeaver/dbeaver/wiki/Navigation) * [数据视图和格式](https://github.com/dbeaver/dbeaver/wiki/Data-View-and-Format) * [数据过滤器](https://github.com/dbeaver/dbeaver/wiki/Data-Filters) * [数据刷新](https://github.com/dbeaver/dbeaver/wiki/Data-Refresh) * [数据查看和编辑](https://github.com/dbeaver/dbeaver/wiki/Data-Viewing-and-Editing) * [面板](https://github.com/dbeaver/dbeaver/wiki/Panels) * [管理图表](https://github.com/dbeaver/dbeaver/wiki/Managing-Charts) ![img](/usr/uploads/commercial.png) * [数据搜索](https://github.com/dbeaver/dbeaver/wiki/Data-Search) * [SQL 生成](https://github.com/dbeaver/dbeaver/wiki/SQL-Generation) * [使用空间/GIS 数据](https://github.com/dbeaver/dbeaver/wiki/Working-with-Spatial-GIS-data) * [使用 XML 和 JSON](https://github.com/dbeaver/dbeaver/wiki/Working-with-XML-and-JSON) * [管理数据格式](https://github.com/dbeaver/dbeaver/wiki/Managing-Data-Formats) * [虚拟列表达式](https://github.com/dbeaver/dbeaver/wiki/Virtual-column-expressions)SQL 编辑器* [SQL 模板](https://github.com/dbeaver/dbeaver/wiki/SQL-Templates) * [SQL 辅助和自动完成](https://github.com/dbeaver/dbeaver/wiki/SQL-Assist-and-Auto-Complete) * [SQL 格式化](https://github.com/dbeaver/dbeaver/wiki/SQL-Formatting) * [SQL 执行](https://github.com/dbeaver/dbeaver/wiki/SQL-Execution) * [变量面板](https://github.com/dbeaver/dbeaver/wiki/Variables-panel) * [查询执行计划](https://github.com/dbeaver/dbeaver/wiki/Query-Execution-Plan) * [可视化查询生成器](https://github.com/dbeaver/dbeaver/wiki/Visual-Query-Builder) ![img](/usr/uploads/commercial.png) * [脚本管理](https://github.com/dbeaver/dbeaver/wiki/Script-Management) * 客户端命令 * [导出命令](https://github.com/dbeaver/dbeaver/wiki/Export-Command) * 调试 * [PostgreSQL 调试器](https://github.com/dbeaver/dbeaver/wiki/PGDebugger)ER图* [数据库结构图](https://github.com/dbeaver/dbeaver/wiki/Database-Structure-Diagrams) * [自定义图表](https://github.com/dbeaver/dbeaver/wiki/Custom-Diagrams) * [编辑模式](https://github.com/dbeaver/dbeaver/wiki/Edit-mode) ![img](/usr/uploads/commercial.png)搜索* [文件搜索](https://github.com/dbeaver/dbeaver/wiki/File-Search) * [数据库全文检索](https://github.com/dbeaver/dbeaver/wiki/DB-Full-Text-Search) * [数据库元数据搜索](https://github.com/dbeaver/dbeaver/wiki/DB-Metadata-Search)架构比较 数据比较 模拟数据生成 仪表板、数据库监控项目* [项目安全](https://github.com/dbeaver/dbeaver/wiki/Project-security) ![img](/usr/uploads/commercial.png) * [团队合作（Git）](https://github.com/dbeaver/dbeaver/wiki/Project-team-work) ![img](/usr/uploads/commercial.png)书签捷径数据库管理样本数据库数据库连接创建连接编辑连接连接到数据库无效/重新连接到数据库断开与数据库的连接更改当前用户密码高级设置SSH 配置代理配置SSL 配置Kerberos 身份验证 网络配置文件连接类型mock_data.png交易自动和手动提交模式事务日志待交易数据库驱动程序任务数据导出/导入数据迁移数据导入和替换数据库备份/恢复数据库维护工具任务管理任务调度器 复合任务 通过电子邮件发送结果 云浏览器AWSAWS 凭证AWS SSO企业数据库支持MongoDB卡桑德拉涌入数据库雷迪斯AWS（亚马逊网络服务）动态数据库文档数据库雅典娜键空间GCP（谷歌云平台）大表沙发底座沙发数据库Apache Hive/Spark/Impala内特扎SQLite 地穴Informix自定义 DBeaver更改界面语言DBeaver 扩展 - Office、调试器、SVG、SSH安装扩展 - 主题、版本控制等最实用的还是使用ssh登录功能，一般mysql都是绑定在本地使用的。使用ssh登录功能就可以像本地一样使用和管理mysql数据库了。好方便。还有功能更强大的，面向专业的DBA人员使用的专业版，无需信用卡支持14天试用。https://github.com/dbeaver/dbeaver
一款超赞的开源视频下载工具-Hitomi-DownloaderHitomi-Downloader功能特性非常简洁的UI加速下载支持24线程下载加速（单任务）同样支持限速，防止流量侦测自定义用户脚本BitTorrent 和磁力支持M3U8 和 MPD 视频支持暗黑模式轻量级，支持便携式监视剪贴板简单的任务组织how_to_download.gifHitomi-Downloader缺点目前只支持Windows系统。不够Hitomi-Downloader是开源的对于专业程序员来说，移植其它平台不难。https://github.com/KurtBestor/Hitomi-Downloader
基于PHP实现类似于4chan开源网站图像的公告板程序-tinyib
4chan是一个简单的基于图像的公告板，任何人都可以发表评论和分享图像。有专门用于各种主题的板块，从日本动画和文化到视频游戏，音乐和摄影。用户在加入社区之前不需要注册帐户。随意点击下面你感兴趣的板子，然后直接跳进去事实上你可以理解为4chan也是类似于Reddit,但是Reddit用户和流量是顶级的。不过4chan流量也不低，摘自官方介绍4chan由主机代管服务器和CDN（CloudFlare）提供支持，使我们能够每天提供超过100TB的数据，每月为超过2200万独立访问者提供超过6.8亿次页面浏览量！找到了一款基于PHP实现类似于4chan开源网站图像的公告板程序tinyibtinyib功能如下使用MySQL，PostgreSQL或SQLite进行能够处理大量流量,没有数据库？可将帖子存储为文本文件，以便能够在几乎任何PHP主机上运行的便携式设置。TinyIB能够在不需要图像的情况下允许新的公告，或者完全不允许图像。GIF，JPG，PNG，SWF，MP4和WebM上传。YouTube，Vimeo和SoundCloud嵌入。验证码：包括一个简单的自承载实现。支持 hCaptcha。支持 ReCAPTCHA。（但不推荐)参考链接。>>###自动获取新回复。（请参见TINYIB_AUTOREFRESH)通过密码删除帖子。举报帖子。屏蔽关键字。管理面板：账户系统：超级用户（所有权限）管理员（除帐户管理之外的所有权限）版主（只能粘性话题、锁定话题、批准帖子和删除帖子）禁止在所有董事会上发布冒犯性/辱骂性海报。使用原始 HTML 发布。通过 git 安装时自动升级。（仅在 Linux 上测试）下面是tinyib的安装和配置教程 apt-get install ffmpeg git clone https://code.rocketnine.space/tslocum/tinyib.git cd tinyib Copy settings.default.php settings.php 下面是配置文件，自行修改 <?php /* TinyIB https://code.rocketnine.space/tslocum/tinyib Support: https://code.rocketnine.space/tslocum/tinyib/issues See README for instructions on configuring, moderating and upgrading your board. Set TINYIB_DBMODE to a MySQL-related mode if it's available. By default it's set to flatfile, which can be very slow. Many settings require the imageboard to be rebuilt to take effect. To do this, click Rebuild All in the management panel. */ // Internationalization define('TINYIB_LOCALE', ''); // 网站语言 ['' to run in English] define('TINYIB_TIMEZONE', 'UTC'); // 网站时区 - e.g. America/Los_Angeles define('TINYIB_DATEFMT', '%g/%m/%d(%a)%H:%M:%S'); // Date and time format (see php.net/strftime) // Board description and behavior // Warning: Enabling reCAPTCHA will cause all visitors to be tracked by Google. See https://nearcyan.com/you-probably-dont-need-recaptcha/ define('TINYIB_BOARD', 'b'); // Unique identifier for this board using only letters and numbers define('TINYIB_BOARDDESC', 'TinyIB'); // 网站显示名称 define('TINYIB_BOARDTITLE', ''); // 网站title. When blank, defaults to TINYIB_BOARDDESC (when set) or "TinyIB" define('TINYIB_ALWAYSNOKO', false); // Redirect to thread after posting define('TINYIB_CAPTCHA', ''); // 网站三种验证码实现: simple / hcaptcha / recaptcha ['' to disable] define('TINYIB_REPLYCAPTCHA', ''); // Reduce spam by requiring users to pass a CAPTCHA when posting a reply: simple / hcaptcha / recaptcha ['' to disable] define('TINYIB_REPORTCAPTCHA', ''); // Reduce invalid reports by requiring users to pass a CAPTCHA when reporting: simple / hcaptcha / recaptcha ['' to disable] define('TINYIB_MANAGECAPTCHA', ''); // Improve security by requiring users to pass a CAPTCHA when logging in to the management panel: simple / hcaptcha / recaptcha ['' to disable] define('TINYIB_REPORT', false); // Allow users to report posts define('TINYIB_AUTOHIDE', 0); // Amount of reports which will cause a post to be hidden until it is approved [0 to disable] define('TINYIB_REQMOD', ''); // Require moderation before displaying posts: files / all ['' to disable] define('TINYIB_BANMESSAGE', true); // Allow staff to append a custom message to posts when banning users define('TINYIB_UPDATEBUMPED', true); // Update thread position when a reply is deleted define('TINYIB_SPOILERTEXT', false); // Allow users to hide text until it is hovered over using the tags text here or <spoiler>text here</spoiler> define('TINYIB_SPOILERIMAGE', false); // Allow users to blur thumbnails via a "Spoiler" checkbox define('TINYIB_AUTOREFRESH', 30); // Delay (in seconds) between attempts to refresh a thread automatically [0 to disable] define('TINYIB_CLOUDFLARE', false); // Only enable when the site is served via Cloudflare to identify IP addresses correctly define('TINYIB_DISALLOWTHREADS', ''); // When set, users attempting to post a new thread are shown this message instead ['' to disable] define('TINYIB_DISALLOWREPLIES', ''); // When set, users attempting to post a reply are shown this message instead ['' to disable] // Board appearance define('TINYIB_INDEX', 'index.html'); // Index file define('TINYIB_LOGO', ''); // Logo HTML define('TINYIB_THREADSPERPAGE', 10); // Amount of threads shown per index page define('TINYIB_PREVIEWREPLIES', 3); // Amount of replies previewed on index pages define('TINYIB_TRUNCATE', 15); // Messages are truncated to this many lines on board index pages [0 to disable] define('TINYIB_WORDBREAK', 80); // Words longer than this many characters will be broken apart [0 to disable] define('TINYIB_EXPANDWIDTH', 85); // Expanded content size as a percentage of the screen's width define('TINYIB_BACKLINKS', true); // Display reflinks to replies that reference a post define('TINYIB_CATALOG', true); // Generate catalog page define('TINYIB_JSON', true); // Generate JSON files define('TINYIB_DEFAULTSTYLE', 'futaba'); // Default page style $tinyib_hidefieldsop = array(); // Fields to hide when creating a new thread - e.g. array('name', 'email', 'subject', 'message', 'file', 'embed', 'password') $tinyib_hidefields = array(); // Fields to hide when replying $tinyib_anonymous = array('Anonymous'); // Default name (or names) $tinyib_capcodes = array(array('Admin', 'red'), array('Mod', 'purple')); // Administrator and moderator capcode label and color // Stylesheets (located in css) // Format: File name excluding extension => Title $tinyib_stylesheets = array( 'futaba' => 'Futaba', 'burichan' => 'Burichan' ); // Post control define('TINYIB_DELAY', 30); // Delay (in seconds) between posts from the same IP address to help control flooding [0 to disable] define('TINYIB_MAXTHREADS', 100); // Oldest threads are discarded when the thread count passes this limit [0 to disable] define('TINYIB_MAXREPLIES', 0); // Maximum replies before a thread stops bumping [0 to disable] define('TINYIB_MAXNAME', 75); // Maximum name length [0 to disable] define('TINYIB_MAXEMAIL', 320); // Maximum email length [0 to disable] define('TINYIB_MAXSUBJECT', 75); // Maximum subject length [0 to disable] define('TINYIB_MAXMESSAGE', 8000); // Maximum message length [0 to disable] // Upload types // Empty array to disable // Format: MIME type => (extension, optional thumbnail) $tinyib_uploads = array('image/jpeg' => array('jpg'), 'image/pjpeg' => array('jpg'), 'image/png' => array('png'), 'image/gif' => array('gif')); // 'application/x-shockwave-flash' => array('swf', 'swf_thumbnail.png'); // 'audio/aac' => array('aac'); // 'audio/flac' => array('flac'); // 'audio/ogg' => array('ogg'); // 'audio/opus' => array('opus'); // 'audio/mp3' => array('mp3'); // 'audio/mpeg' => array('mp3'); // 'audio/mp4' => array('mp4'); // 'audio/wav' => array('wav'); // 'audio/webm' => array('webm'); // 'video/mp4' => array('mp4'); // Video uploads require ffmpeg (see README for instructions) // 'video/webm' => array('webm'); // oEmbed APIs // Empty array to disable $tinyib_embeds = array('SoundCloud' => 'https://soundcloud.com/oembed?format=json&url=TINYIBEMBED', 'Vimeo' => 'https://vimeo.com/api/oembed.json?url=TINYIBEMBED', 'YouTube' => 'https://www.youtube.com/oembed?url=TINYIBEMBED&format=json'); // File control define('TINYIB_MAXKB', 2048); // Maximum file size in kilobytes [0 to disable] define('TINYIB_MAXKBDESC', '2 MB'); // Human-readable representation of the maximum file size define('TINYIB_THUMBNAIL', 'gd'); // Thumbnail method to use: gd / ffmpeg / imagemagick (see README for instructions) define('TINYIB_UPLOADVIAURL', false); // Allow files to be uploaded via URL define('TINYIB_STRIPMETADATA', false);// Attempt to strip all metadata from uploaded files (requires ExifTool) define('TINYIB_NOFILEOK', false); // 设置为true，时允许用户不上传图片发布新帖子， // Thumbnail size - new thread define('TINYIB_MAXWOP', 250); // Width define('TINYIB_MAXHOP', 250); // Height // Thumbnail size - reply define('TINYIB_MAXW', 250); // Width define('TINYIB_MAXH', 250); // Height // Tripcode seed - Must not change once set! define('TINYIB_TRIPSEED', ''); // 随机密匙，自行生成，这是必须等 (used when generating secure tripcodes, hashing passwords and hashing IP addresses) // CAPTCHA - hCaptcha / reCAPTCHA // The following settings only apply when using hcaptcha // For API keys visit https://dashboard.hcaptcha.com/signup define('TINYIB_HCAPTCHA_SITE', ''); // Site key define('TINYIB_HCAPTCHA_SECRET', ''); // Secret key // The following settings only apply when using recaptcha // For API keys visit https://www.google.com/recaptcha define('TINYIB_RECAPTCHA_SITE', ''); // Site key define('TINYIB_RECAPTCHA_SECRET', '');// Secret key // Management panel define('TINYIB_MANAGEKEY', ''); // When set, the [Manage] link is hidden and the management panel may only be accessed via imgboard.php?manage=TINYIB_MANAGEKEY ['' to disable] // Administrator and moderator passwords // When TINYIB_ADMINPASS is set, an administrator account is created with username "admin" // When TINYIB_MODPASS is set, a moderator account is created with username "moderator" // These settings are for installation and anti-lockout purposes only // Once the account(s) are created, blank both of these settings define('TINYIB_ADMINPASS', ''); // 管理员的密码 define('TINYIB_MODPASS', ''); // 版主密码 ['' to disable] // Database // Recommended database modes from best to worst: // pdo, mysqli, mysql, sqlite3, sqlite (deprecated), flatfile (only useful if you need portability or lack any kind of database) define('TINYIB_DBMODE', 'flatfile'); // 数据存储方式，如mysql,sqlite等 // Table names // Use the same table name across boards for global accounts, bans, etc. define('TINYIB_DBACCOUNTS', 'accounts'); // Staff accounts define('TINYIB_DBBANS', 'bans'); // Bans define('TINYIB_DBKEYWORDS', 'keywords'); // Keywords define('TINYIB_DBLOGS', 'logs'); // Staff logs define('TINYIB_DBPOSTS', TINYIB_BOARD . '_posts'); // Posts define('TINYIB_DBREPORTS', TINYIB_BOARD . '_reports'); // Reports // See README for migration instructions define('TINYIB_DBMIGRATE', false); // Enable database migration tool // Database configuration - MySQL / pgSQL // The following only apply when TINYIB_DBMODE is set to mysql, mysqli or pdo with default (blank) TINYIB_DBDSN define('TINYIB_DBHOST', 'localhost'); // Hostname define('TINYIB_DBPORT', 3306); // Port (set to 0 if you are using a UNIX socket as the host) define('TINYIB_DBUSERNAME', ''); // Username define('TINYIB_DBPASSWORD', ''); // Password define('TINYIB_DBNAME', ''); // Database // Database configuration - SQLite / SQLite3 // The following only apply when TINYIB_DBMODE is set to sqlite or sqlite3 define('TINYIB_DBPATH', '.tinyib.db'); // SQLite DB path // Database configuration - PDO // The following only apply when TINYIB_DBMODE is set to pdo (see README for instructions) define('TINYIB_DBDRIVER', 'mysql'); // PDO driver to use (mysql / pgsql / sqlite / etc.) define('TINYIB_DBDSN', ''); // Enter a custom DSN to override all of the connection/driver settings above (see README for instructions) // When changing this, you should still set TINYIB_DBDRIVER appropriately. // If you're using PDO with a MySQL or pgSQL database, you should leave this blank. 后台管理地址youdomain.com/imgboard.php?manage注意每次修改完配置文件都需要进入后台执行rebuildall重新生成，否则配置不会生效。官方代码仓库https://code.rocketnine.space/tslocum/tinyib
一款看起来有点像推特的ruby开源论坛程序
一款看起来有点像推特的ruby开源论坛程序Forem是用于构建社区的开源软件。为您的同行，客户，粉丝群，家人，朋友以及人们需要聚集在一起成为集体一部分的任何其他时间和空间的社区。根据上下文的不同，成为社区的一部分有许多不同的目的，我们希望构成社区的想法能够随着像您这样的创作者而扩展。 每个Forem将作为自己的独立Web应用程序在线生活，具有自己的独立数据库，身份验证机制，配置，专用URL等。除了这种独立性之外，我们的愿景是让Forems彼此高度兼容，以建立一个有凝聚力的生态系统，在这个生态系统中，多个Forems的成员可以在社区应用程序之间无缝移动 - 即使这些应用程序不共享有关个人的任何数据。 这就是围绕隐私，包容性以及开放和平等网络的理想需要满足对产品开发的热情和卓越的用户体验的地方 - 我们希望我们才刚刚开始这一旅程。我们不打算构建仅吸引技术人群的利基开源软件;我们决心与您一起为每个人构建普遍可访问，令人愉快和丰富的软件。技术架构如下Ruby: we recommend using rbenv to install the Ruby version listed on the badge.Yarn 1.x: please refer to their installation guide.PostgreSQL 11 or higher.ImageMagick: please refer to ImageMagick's installation instructions.Redis 4 or higher.支持docker部署，下载本地使用docker结果跑不起来，报错一大堆，就不上演示了基于forem构建的官方线上论坛程序https://dev.to/官方代码仓库https://github.com/forem/forem