> For the complete documentation index, see [llms.txt](https://freebsd-journal-cn.bsdcn.org/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://freebsd-journal-cn.bsdcn.org/20180506-an-quan/choosing-freebsd-as-a-production-environment.md).

# 选择 FreeBSD 作为生产环境

我领导一个小型开发者团队，在 Accordium APS 编写和运营服务于小（但不断增长的）客户群的软件。以下是关于我们如何最终选择 FreeBSD 作为生产环境以及这一选择的一些优缺点的记述。

## 我们一开始怎么选了 FreeBSD？

我自 2001 年起就是自由和开源软件的倡导者，自那以后一直使用 Linux 机器作为主要驱动。直到 2017 年，我与 FreeBSD 唯一的近距离接触是在 2007 年某个时候设置 LDAP 实例。当时我觉得它很合理，但从未多想。2017 年也是 Accordium 诞生的一年，也是我第一次从一开始就完全负责生产环境。

## 怀疑基于 Linux 的操作系统——systemd

大约 2014 年，Linux 生态系统开始经历一场我一开始并不理解的变化——当 systemd 项目开始引起关注时。当时我没多想，但后来当 Arch Linux（我当时偏好的操作系统）开始推动我使用它时，我不得不开始使用它。

立刻，我遇到一堆事后看来可以描述为成长痛苦的问题。systemd 之前的操作系统是一个内核和一堆松散耦合的程序，虽然我讨厌缺乏统一性，但至少我知道我的计算机大部分时间在做什么。在这一点上，我对事物的总体状态感到恼火，尤其是当大多数主流发行版决定把 systemd 强加给所有人时（显著的例外：Gentoo）。

我试图和它共处一段时间。但它不断打破我对计算机如何运行的期望。变化无处不在，再怎么努力也无法让我了解它到底想实现什么。后来我意识到 systemd 试图呈现一个连贯的接口——统一所有基于 Linux 的操作系统——这是一个值得称赞的目标。

我的计算机会不断拒绝关闭，显示神秘消息如“A stop job is running for < something >”然后挂在那里。它们会以神秘的错误消息启动，排除故障让我成为在 GitHub 和 Unix Stack Overflow 上翻找的专家。再加上不断的漏洞和项目对此的荒谬回应，我真的想从使用 systemd 的操作系统切换走了。

## 评估 BSD

2016 年 11 月，我开始考虑 BSD 作为潜在的避难所，至少用于个人使用。我和 Cherry G. Mathew（一位 NetBSD 开发者）是好朋友，已经有一段时间在考虑使用 BSD，至少用于个人使用。他当然为 NetBSD 站台并试图让我使用它，但也很帮忙地告诉我它不能做什么——比如运行 VirtualBox。

我决定寻找一个无 systemd 的 Linux 并坚持在我的桌面上使用它。

大约同一时间，Philip Paeps（trouble）和我一起待了几天，在其中一次聊天中，他解释了 FreeBSD 的连贯性——以及它是一个与应用程序一起开发的单一操作系统。他还告诉我 FreeBSD 在服务器端的用户群，我很惊讶地了解到它是一个非常受欢迎的选择。

当然，我设置了一个虚拟机并尝试了一下，看看 Linux 用户在 FreeBSD 环境中表现如何。

## ACCORDIUM 的 FreeBSD

Accordium 的开发于 2017 年 4 月正式开始，只有两名开发者（包括我）。我发现自己负责选择服务器环境，无需向任何人解释。这是我第一次就整个软件栈做出选择，我渴望至少测试一下 FreeBSD。令我松了一口气的是，有可用于在 Amazon Web Services 上部署的 FreeBSD 镜像。

我们的需求非常少，只是用 Spring Boot 框架编写的一些 API 端点，运行在 JVM 上，一个 Postgres 数据库服务器和一个 RabbitMQ 实例——所有这些都作为二进制软件包提供。当时没有生产环境，唯一的用户是我们自己。

我们所有的开发都在 Linux 机器上进行。Ahmed Uways Zulkurnain，现在管理我们所有生产机器的工程师，当时不熟悉 FreeBSD。他提出一些非常合乎逻辑的问题，主要的一个是“为什么不用 Linux，毕竟我们自己也在用它。”我请他耐心一点，先测试一下，承诺如果他曾发现 FreeBSD 不足，就更换环境。现在是 2018 年 4 月，他还没有回来提出反对。

我在 2017 年 6 月切换到使用 TrueOS，这样至少有一个人使用 FreeBSD 进行开发。我的开发速度没有以任何方式受到影响——如果通过 `pkg` 不可用，我就在 Ports 中找。

## 系统管理

Ahmad Uways Zulkurnain 是第一个在 Accordium 工作的工程师，对 FreeBSD 有以下评论：

“在加入 Accordium 之前，我不熟悉除 Debian GNU/Linux 以外的任何操作系统。我对 BSD 的唯一了解是它们传奇的运行时间和更宽松的许可证。尽管我缺乏经验，我能够学习如何安装/配置应用程序、编写启动脚本和配置防火墙，没有太多努力。我不记得曾参考过 FreeBSD 网站上书籍和文章以外的任何文档。我惊喜地发现软件包版本如此最新。

在当前的生产版本中，我没有太多需要做的来管理我们的 FreeBSD 实例：

1. 跟上安全公告。
2. 必要时更新软件包。
3. 留在当前支持的生产版本上。
4. 定期审计日志。

一年后，FreeBSD 已成为我选择的服务器操作系统。systemd 日志一直让我烦恼；我很高兴再次拥有纯文本日志文件。”

## 我们会向初创公司推荐 FreeBSD 吗？

如果你所有的应用都是每个虚拟机一个进程，FreeBSD 是一个安全、明智的选择。我鼓励每个人给它一个机会，省去很多痛苦。

如果你需要进程/环境隔离（如 Docker 提供），FreeBSD 有一个稳定、经过良好测试的功能叫 jail，可以帮助你轻松实现。

如果你发现自己面对操作系统特定的问题，手册通常会有足够的信息。

主要是出于我的个人信念，但对我们来说，运行 BSD 机器是有意义的。

* 操作系统配置是集中化的。基本系统配置放在 **/etc/**，本地安装特定配置放在 **/usr/local/etc**。
* 软件可用性——我们从不需要挠头说“这在 FreeBSD 中不可用”。
* 更新定期且易于进行。

我们已经运行了大约五个月，服务于越来越多的客户需求。我们的问题都不是因为 FreeBSD。它坚定地不碍事，是一个不知疲倦、可靠的工作马。

## 现在我们想从 FreeBSD 得到什么？

Accordium 是一家 Java 和 JavaScript 商店。OpenJDK 8 在 FreeBSD 上运行良好，但 Java 的后续版本（9/10/11）没有支持 FreeBSD 的迹象。BSD 移植工作似乎很少。当 OpenJDK 11 推出时，如果没有 FreeBSD 版本，我们将不得不继续前进，特别是当有趣的东西如 GraalVM 出现时。

## FreeBSD 在生产中——ACCORDIUM 进入 BETA

2017 年 12 月初，我们发布了软件的有限测试版——一组运行在 JVM 上的 API，前端是 JavaScript 编写的客户端应用。我们就这样直接用了 FreeBSD 在生产中，没有停下来想——为什么要更换运转良好的东西呢？

以下是我为选择了 FreeBSD 而感到高兴的几件事：

* 我们的计算机从未因操作系统问题而崩溃。
* 一切都按预期工作——日志文件在 **/var/log**，配置在 **/usr/local/etc** 或 **/etc** 等等。组织得很好。
* 我们应用的服务脚本很容易编写。

***

**ASHIK SALAHUDEEN** 已经在计算机领域工作了大约 18 年，大部分时间与类 UNIX 操作系统和开源技术打交道。他在 Accordium 运营工程团队，业余时间参与其他 FOSS 社区，主要是印度语言计算组 Swathanthra Malayalam Computing。

**AHMAD UWAYS ZULKURNAIN** 在 2005 年发现开源软件。此后他探索了与计算相关的广泛领域，主要集中在信息安全领域。他目前是 Accordium 的全栈软件开发者。他喜欢扭计谜题和象棋。


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://freebsd-journal-cn.bsdcn.org/20180506-an-quan/choosing-freebsd-as-a-production-environment.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
