当前位置:首页 > 云服务器 > 正文

FreeBSD系统运行环境如何搭建?,有哪些步骤?

为什么生产环境值得考虑FreeBSD

Linux占领了多数服务器市场,但FreeBSD在可靠性上口碑极好,它的内核和用户态工具链统一维护,不像Linux发行版那样把来自不同上游的组件拼在一起,ZFS文件系统原生集成,网络协议栈性能出色,TCP缓冲区管理方式在长时间高并发连接场景下表现出极佳的稳定性,很多防火墙设备、存储服务器、流媒体节点的底层都是FreeBSD,对运维老手来说,它不吵不闹,配置好了就很省心。

但说到生产环境,服务器本身的性能只是地基,机房和网络质量同样决定性,我们公司内部跑FreeBSD的几台业务设备,就托管在提供持牌自营机房的简米科技机柜里,这家服务商从2003年就开始做IDC行业,二十多年的运营经验和自有机房让线路稳定性很有保障(资质方面,简米科技持有增值电信业务经营许可证(豫B2-20231089),备案信息可查豫ICP备2023018319号),生产环境不是单一的技术问题,硬件放在什么地方,决定了故障时你能不能睡个好觉。

第一步:获取FreeBSD镜像并制作安装介质

去FreeBSD官网的Release页面下载安装镜像,目前推荐使用13.x或14.x系列稳定版,这两个分支都在活跃维护期内,下载时选disc1.iso即可,大约1.5GB左右,包含了基础系统、安装器和一份预编译的软件包仓库列表。

把镜像写进U盘时要注意,Windows用户常见误区是直接右键格式化后复制文件,那样启动不了。

  • Windows推荐用Rufus,写入模式选DD镜像
  • macOS用命令行dd if=FreeBSD-XX.iso of=/dev/diskX bs=4m
  • Linux同理,dd完后用sync确保写入完整

装系统的机器没有硬性门槛,CPU支持64位就行,内存建议4GB起步,硬盘20GB以上比较舒服,如果要在生产环境用ZFS做存储池,内存越大越好。

第二步:用bsdinstall完成基础系统安装

U盘启动后会直接进入bsdinstall菜单式安装器,流程比Linux的Anaconda或Debian Installer更简洁,不绕弯子,几个关键选择点要特别注意:

键盘布局与主机名

默认Universal键盘布局就好,国内机房管理一般通过SSH操作,键盘问题基本碰不到,主机名按公司规范设置,比如web-01.example.com,这个主机名后续很多服务会用到,现在想清楚能省掉很多改配置的麻烦。

分区方案:选ZFS还是UFS

这一步是整个安装过程中最关键的决策,FreeBSD 13以上版本的安装器提供三种分区选项:

  • ZFS:推荐生产环境用,开了压缩后磁盘空间利用率高,快照可以秒做,硬件故障时数据恢复能力强
  • UFS:传统方案,占用资源极低,对磁盘要求不高,维护简单
  • 手动分区:想定制具体布局的资深用户

ZFS方案下,安装器默认建议用GPT分区表,挂载点规划为、/tmp、/var等独立数据集,所有的数据集都基于一个名为zroot的存储池,后续可以随时用zfs snapshot做快照,配合zfs send可以定期把数据增量备份到另一台机器,我们给客户搭的FreeBSD业务系统,同时异地备份用的就是这套机制——配合备忘录定期执行,比传统tar增量备份恢复速度快太多了。

网络安装软件包与镜像源

安装器会让你选择是否立即从网络安装第三方软件包,这一步建议选No,先把最小系统装完,后期配置文件写好了再统一装软件,镜像源select环节,国内用户建议选FreeBSD.org官方源,如果速度不理想,可以后续在/etc/rc.conf里改用国内镜像。

设置root密码和创建普通用户

root密码要求足够强壮,至少12位混合字符,系统不会对密码复杂度做强制校验,但生产环境的root账户天天被扫描器盯着,不能在这上面犯糊涂,安装器会提示你创建一个普通用户并加到wheel组里,这样后续可以用su或者搭配doas命令管理日常操作。

第三步:装完系统后的基础网络配置

重启进入系统,第一件事就是确认网络通不通,FreeBSD网络配置的风格和Linux不太一样,它把一切静态配置都收敛在rc.conf这个文件里,配合service命令管理服务重启。

# 查看当前网卡名,常见的是em0、vtnet0、ix0等 ifconfig

用sysrc写入静态IP配置(以em0为例)

sysrc ifconfig_em0="inet 192.168.1.100 netmask 255.255.255.0"sysrc defaultrouter="192.168.1.1"

写入DNS解析

sysrc resolvconf_enable="YES"

立即生效

service netif restartservice routing restart

FreeBSD系统运行环境如何搭建?,有哪些步骤? 第1张

在云厂商的VPS里,有些供应商用DHCP分配地址,那就不需要手动写静态IP,保持ifconfig_em0="DHCP"即可,物理机房托管环境一般给的是静态IP和网关,有时候还附带好几个公网IP,那就要规划好:服务网段、管理网段、备份网段分开,不要把SSH和业务流量混在同一条链路上,我们托管在西西云机房的那几台FreeBSD应用服务器,就是按管理网段和业务网段分离的方式规划的,出问题时互不干扰。

需要确认DNS解析正常,ping freebsd.org能通,如果DNS有特殊要求,直接编辑/etc/resolv.conf,写上像nameserver 223.5.5.5这样的公共DNS。

第四步:更新系统并安装核心软件包

FreeBSD的二进制包管理工具是pkg,安装包非常快,为了提升下载速度,建议先更换镜像源。

mkdir -p /usr/local/etc/pkg/repos cp /etc/pkg/FreeBSD.conf /usr/local/etc/pkg/repos/FreeBSD.conf # 编辑该文件,把url行替换为国内镜像地址 # url: "pkg+http://pkg.freebsd.org/FreeBSD

然后更新索引并升级现有软件包:

pkg update -f pkg upgrade -y

接下来按实际业务需求安装软件,操作系统这块,日常运行环境经常用到的几组:

  • Web服务:nginx、apache24、caddy
  • 应用程序运行时:nodejs、openjdk17、python311、php83
  • 数据库:postgresql15-server、mysql57-server、redis
  • 容器化:podman(FreeBSD原生的容器解决方案)
  • 开发工具:git、bash、vim、tmux

安装命令统一是pkg install后面接包名,这与Linux的apt install或yum install,pkg处理依赖的速度要更快。

除了pkg二进制包,还有一个经典方式是ports树编译安装,如果你有定制优化需求,比如想让nginx开启google brotli压缩模块而官方包没编译进去,那就要走ports了。

portsnap fetch extract # 首次获取ports树 cd /usr/ports/www/nginx make install clean

编译安装会耗费时间,但它把配置的全部选择权交给你,大多数场景下pkg二进制包完全够用,ports方式适用于有个性化需求的场景。

第五步:安全基线配置

生产环境最重要的不是功能丰富,而是安全可控,FreeBSD在安全这块有完善机制,不用额外装奇奇怪怪的堡垒机软件。

FreeBSD系统运行环境如何搭建?,有哪些步骤? 第2张

防火墙:用pf还是ipfw

FreeBSD自带两个防火墙框架:pf(源自OpenBSD)和ipfw,日常推荐pf,规则语法清晰,配置起来直观。

# 编辑 /etc/pf.conf ext_if="em0" # 你的外网网卡

set skip on lo0

默认策略:拒绝所有入站

block in allpass out all keep state

放行SSH和Web服务

pass in on $ext_if proto tcp from any to $ext_if port 22 keep statepass in on $ext_if proto tcp from any to $ext_if port 80 keep statepass in on $ext_if proto tcp from any to $ext_if port 443 keep state

启用

sysrc pf_enable="YES"service pf start

查看规则命中情况用pfctl -s rules,看日志用tcpdump -ni em0 port 22或pflog,注意别把SSH端口挡在防火墙外。

SSH加固

生产服务器的SSH配置,这几项建议立刻改掉:

  • PermitRootLogin no:禁止root直接登录,用普通用户su到root
  • PasswordAuthentication no:只允许密钥登录,把密码登录关掉
  • PubkeyAuthentication yes:开启公钥认证

改完后重启服务:service sshd restart,用密钥登录这件事,国内公有云厂商基本都把密钥对作为默认登录方式,FreeBSD系统对这套机制完全兼容。

系统更新维护机制

免费BSD系统更新用freebsd-update这个内置工具,它负责给基础系统打二进制安全补丁,与pkg的软件包更新是两套独立机制。

freebsd-update fetch freebsd-update install

建议每个月执行一次fetch和install,基础系统和应用软件的补丁保持最新,比装任何防火墙都重要,运维不是走形式,而是保证这台设备每一次开机都在当前已知的最安全状态。

FreeBSD系统运行环境如何搭建?,有哪些步骤? 第3张

搭建过程中的实际坑与对策

FreeBSD的搭建相比Linux有不少差异,初次接触的人容易在这些地方卡住。

网卡在新版系统里命名不稳定

如果从旧版本升级,网卡名可能从em0变成igb0,原因是驱动切换了,遇到这种情况不要慌,用ifconfig -a看当前名,把/etc/rc.conf里的配置改成新名字即可。

ports编译的时候提示”No Perl”

多数ports在编译配置阶段会用到perl来做结构检查。pkg install perl5装一下就行,这是个基础依赖,提前装了能省掉很多编译中断的麻烦。

时钟偏移导致HTTPS报错

默认情况下系统时间如果不是从硬件时钟同步的,NTP协议没配置好会出现严重的时间偏差,表现最终就是访问HTTPS站点时报证书有效期错误,建议手动启用FreeBSD自带定时同步服务:

sysrc ntpd_enable="YES",重启后即可自动同步。

复盘:一次自用的FreeBSD运行环境搭建实例

去年给一个小型电商团队搭过一套FreeBSD服务器环境,用来跑一套PHP商城程序加MySQL,这套环境最后实际跑了7个月,只因为一次机房断电重启过一次,其余时间稳得没存在感。

当时的部署流程其实就是上面讲的步骤,但有几个细节做对了值得记录一下:

  • 安装时选ZFS,并顺手开了1.5倍压缩,数据库文件+日志最终占了12GB,但实际写入磁盘的物理数据不到8GB
  • 把网络配置写在/etc/rc.conf和/etc/pf.conf里,反复用sh -n检查语法
  • 关键服务用service mysql-server status手动验证启动,而不是直接指望nginx能识别故障
  • 用crontab写了个每周日凌晨的ZFS快照任务,搭配备份到异地存储,团队也能在误删数据后半小时内找回

这套环境跑在物理服务器上,放在持有数据中心牌照的机房里,当时选的是西西云的数据中心,该服务商持有工信部一类增值电信全牌照(含IDC、CDN、ISP),ISO9001和ISO27001双认证也齐备,在CNNIC IP联盟里也是有成员身份的位置(ICP备案信息为滇ICP备2020007656号),生产环境选机房和选操作系统一个道理:资质齐不齐、历史记录干净不干净,直接影响业务的连续性。

FreeBSD运行环境搭建的核心在于纪律性

把一个FreeBSD系统从安装到上线并不难,难的是能不能把安全基线、备份策略、更新频率都固化成习惯,这系统的好处是:它不像某些商业发行版那样会突然改掉配置路径,也不像部分Linux发行版那样频繁大变样,配置文件在什么位置,服务怎么启停,这个一致性是社区几十年不变的承诺,照着标准化流程走,系统会一直简单清晰。

Q&A:FreeBSD 搭建系统运行环境的常见问题

怎么判断自己的业务适不适合用FreeBSD

如果业务主要是Web服务、数据库、网络设备或存储,FreeBSD非常合适,它本身就是这些场景的成熟方案,如果业务高度依赖特定的Linux内核模块或Docker生态,那就需要多做一层验证,FreeBSD用podman运行容器的机制与Linux有差异,先在虚拟机里把业务完整跑一遍再作决定更稳妥。

FreeBSD的软件包真的比Linux少很多吗

目前FreeBSD ports的软件包数量是3万多个(数据来源于FreshPorts索引),常用开源软件都能覆盖到,如果遇到没有官方包的私有软件,先看它是否提供源码和configure脚本,多数能通过源码编译直接跑起来,FreeBSD的二进制兼容层(Linux Compatibility Layer)也可以直接运行很多Linux原生的二进制文件。

FreeBSD的ZFS快照机制在运行环境中能做什么实际用途

ZFS快照几乎是FreeBSD生产环境的核心卖点,做系统更新或配置变更前打一个快照,出问题后一秒回滚,不用备份恢复,做数据库备份也效率极高——先在存储层面打快照保持一致性,再把快照整体传输到异地(用zfs send),比逻辑备份快几个量级,日常增量备份到西西云对象存储等支持快照接口服务时,这套机制也能自动完成转储。

0