lobsters/lobsters
GitHub: lobsters/lobsters
Lobsters 是一个基于 Rails 的开源链接聚合与讨论社区平台,允许开发者 fork 代码库搭建自己的技术社区站点。
Stars: 4772 | Forks: 974
### Lobsters Rails 项目 [](https://github.com/lobsters/lobsters/actions/workflows/check.yml)
[Lobsters](https://lobste.rs) 是一个 Rails 代码库,并在数据库中使用 SQL(生产环境中使用 SQLite)作为后端。
该代码是开源的,这是我们[对透明度的承诺](https://lobste.rs/about#transparency)的一部分。
它曾被用于运行[姊妹站点](https://github.com/lobsters/lobsters/blob/main/sister_sites.md),但我们主要还是希望人们能够理解并改进 Lobsters 本身的运作方式。
尽管该网站是一个运行在[相当糟糕的代码库](https://web.archive.org/web/20230213161624/https://old.reddit.com/r/rails/comments/6jz7tq/source_code_lobsters_a_hacker_news_clone_built/)上的[超级尴尬的](https://bsky.app/profile/anirudh.fi/post/3mdikk6u2w22e)[鬼城](https://xcancel.com/webshitweekly/status/1399935275057389571),但至少我们与那位自助大师[毫无关系](https://lobste.rs/about#michaelbolton)。
## 生产环境
你可以自由使用此代码来启动你自己的[姊妹站点](/sister_sites.md)
因为该代码是在[宽松许可证](https://github.com/lobsters/lobsters/blob/main/LICENSE)(3-clause BSD)下提供的。
我们欢迎提交 Bug 报告和代码贡献,以帮助我们改进 [lobste.rs](https://lobste.rs)。
作为一个志愿项目,我们不愿承担对我们的网站没有帮助的工作,所以如果我们不想采纳你的自定义功能,请予以理解。
这些说明假设你已经掌握了在 Linux 服务器上进行 Ruby on Rails Web 开发的基础知识。
重要提示:创建一个在线社区的难点不在于代码库本身。
一个新的社交网站必须解决一个鸡生蛋还是蛋生鸡的问题:
在其他人都参与进来之前,没有人会愿意在一个新网站上活跃。
在你开始编写代码之前,先制定一个计划:如何接触到潜在的社区成员,以及什么内容能让他们在网站早期觉得有趣。
如果你无法吸引足够多的早期用户以达到自我维持的活动水平,代码再好也没用!
截至 2025 年 2 月,我们建立了一个[基于 Zulip 的聊天室](https://lobsters.zulipchat.com),用于讨论代码库,并为姊妹站点的所有者提供有限的支持,例如关于破坏性更改的警告和漏洞公告。
如果你使用此代码库运行网站,加入该聊天室会让你受益匪浅。
设置:
1. Fork 该仓库,并将其 clone 到你的本地计算机。
你应该将 lobsters 添加为 git remote,以便能够继续拉取我们的更改。
2. 编辑 `config/application.rb`,填入你的网站名称和域名。
3. 我们使用一个名为 [Hatchbox](https://hatchbox.io) 的付费服务来设置和部署服务器。
复用此配置将比使用 Heroku/Render/等容易得多。
...Hatchbox 提供了一个非常巧妙的向导式启动流程。
我将解释我们最终的设置是什么,而不是试图紧跟向导的设置步骤。
这应该是你需要的所有信息,只是顺序略有不同。
* 按照 [Hatchbox 文档](https://hatchbox.relationkit.io/)创建账户并连接 Hosting Provider。
我们使用 DigitalOcean,因为我已经对它很熟悉了。
* 创建一个 Cluster,我们的名为 `lobsters`。
我们没有自定义任何 Cluster 设置。
* 在你的 Cluster 中,创建一个 Server。
存在一个 [DO 的限制](https://www.digitalocean.com/community/questions/how-do-i-create-a-reverse-dns-ptr-record),即服务器名称必须与你的域名相匹配,这样他们才能为你创建电子邮件所需的反向 DNS PTR 记录。
我们没有自定义任何 Server 设置。
* 创建服务器后,检查其 [IP 地址是否被列入发送电子邮件的黑名单](https://dnschecker.org/ip-blacklist-checker.php?query=68.183.100.95)。
垃圾邮件发送者不断尝试在每个 Hosting Provider 上创建服务器。
提供商封禁了他们,但该 IP 地址会留下不良记录,当它分配给你时,可能已被列入黑名单。
尽快检查你的服务器 IP;删除并重新创建服务器比从黑名单中脱身要容易得多,特别是因为外部人员根本无法了解 Google、Apple 和 Microsoft 等大型电子邮件提供商的内部黑名单情况。
* 你需要创建一个数据库;我们在生产环境中使用 SQLite。
* 创建一个 App。依次查看 Settings 各个部分:
* Processes:添加一个 `solid_queue` 进程,命令为 `bundle exec rails solid_queue:start`。
* Activity:这是日志,无需更改。
* Repository:连接你的 GitHub 仓库。
* Domains & SSL:添加你的域名,同时包含 `example.org` 和 `www.example.org`。
* Environment:
BUNDLE_WITHOUT development:test
DATABASE_URL trilogy://[username]:[password]@[1.2.3.4]/lobsters
INGRESS_PASSWORD [random generated key]
PORT 9000
RACK_ENV production
RAILS_ENV production
RAILS_LOG_TO_STDOUT true
RAILS_MAX_THREADS 10
SECRET_KEY_BASE [random generated key]
在代码库中搜索 `ENV` 全局变量的使用,以查找更多可以轻松配置的选项。
* Databases:由于历史原因,我们独立于 Hatchbox 管理此项,参见 `#539`。
* Cron Jobs:
expire_page_cache * * * * * script/expire_page_cache
script/lobsters-cron */5 * * * * bundle exec script/lobsters-cron
* Settings:
我们对生产环境的配置文件进行了一些调整,并希望[在我们的 git 仓库中跟踪它们](https://github.com/lobsters/lobsters/tree/main/hatchbox)。
我们配置了一些设置来运行一个(不幸地)非常巧妙的 hook,以便在部署时更新这些内容,见下文。
Pre-build script: `hatchbox/pre-build`
Custom build script: blank
Post-build script: blank
Post-deploy script: `hatchbox/post-deploy`
Failed deploy script: blank
Caddyfile: 复制本仓库中 `hatchbox/Caddyfile` 文件的文本。
如文件所述,你必须在更改时手动将其粘贴进去并点击 'Update Caddy'。
* 使用 Hatchbox 进行一次部署。呼!
4. 以 `root` 用户身份 SSH 登录你的服务器以设置部署 hook。
ln -s /home/deploy/lobsters/current/hatchbox/root-deploy.service /etc/systemd/system
ln -s /home/deploy/lobsters/current/hatchbox/root-deploy.path /etc/systemd/system
systemctl daemon-reload
systemctl enable --now root-deploy.service # first backup takes 10ish min
systemctl enable --now root-deploy.path
5. 再次使用 Hatchbox 进行部署,以运行 hook 并完成服务器配置。
6. 以 `deploy` 用户身份 SSH 登录你的服务器
1. 运行 `rails credentials:edit` 在此处设置凭据,就像你在开发环境中做的那样。
使用 `config/credentials.yml.sample` 作为模板。
在设置时,Rails 会为你提供新的随机 `secret_key_base` 值,你可以随时使用 `rails secret` 生成其他值。
切勿 `git commit` 或分享你的 `config/credentials.yml.enc` 或 `config/master.key`。
2. [测试你的邮件配置是否容易被判定为垃圾邮件](https://www.mail-tester.com/)。
运行 `echo "Test Postfix email, visit scnenic https://example.com" | mail -s "Postfix Test" test-whatever@srv1.mailtester.com`
3. 运行 `rails console` 并为自己创建一个 `User`,设置 `is_admin = true`。
你可能还需要创建一个 `Category` 和一个 `Tag`,网站才能正常运行。
4. 在 `~deploy/sitename/shared/log` 中查看日志。
如果一切正常,你现在应该已经拥有一个正在运行的实例了。
#### 管理
基本的审核工作在网站上即可完成,但某些管理任务需要在生产环境中使用 rails console。
管理员可以在 `/tags` 创建和编辑标签,mod 面板位于 `/mod`。
标签:Ruby on Rails, SQLite, Syscall, Web开发, 内存转储, 社区论坛, 链接聚合