lobsters/lobsters

GitHub: lobsters/lobsters

Lobsters 是一个基于 Rails 的开源链接聚合与讨论社区平台,允许开发者 fork 代码库搭建自己的技术社区站点。

Stars: 4772 | Forks: 974

### Lobsters Rails 项目 [![build status](https://static.pigsec.cn/wp-content/uploads/repos/cas/ad/ad5834178f7599af9fdda11629d49cae07f2997beec49821b2920eff5bfd50e7.svg)](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开发, 内存转储, 社区论坛, 链接聚合