啊喵~ 发表于 2021-3-28 01:43:00

关于 FreeBSD12.2 + MySQL + Nginx + PHP7.4 的使用记录

本帖通过Markdown创建 ( 当然存在冲突的时候 附带了点 bbcode


### FreeBSD 是A5推荐的 一款比Linux性能更高效的真Unix-like系统

曾经我以为运维是十分有趣的一件事,直到遇到了FreeBSD,它——让我感受到了痛苦。

#### 硬件信息

![https://img.shields.io/badge/CPU-2%20核-blue.svg?style=for-the-badge&logo=freeBSD](https://img.shields.io/badge/CPU-2%20核-blue.svg?style=for-the-badge)

![https://img.shields.io/badge/内存-4%20G-black.svg?style=for-the-badge&logo=freeBSD](https://img.shields.io/badge/内存-4%20G-black.svg?style=for-the-badge)

![https://img.shields.io/badge/OperatingSystem-FreeBSD%2012.2-red.svg?style=for-the-badge&logo=freeBSD](https://img.shields.io/badge/OperatingSystem-FreeBSD%2012.2-red.svg?style=for-the-badge&logo=freeBSD)   

![https://img.shields.io/badge/server_environment-NGINX%201.18.0-green.svg?style=for-the-badge&logo=nginx](https://img.shields.io/badge/server_environment-NGINX%201.18.0-green.svg?style=for-the-badge&logo=nginx)   

![https://img.shields.io/badge/Sql-MySQl%201.18.0-informational.svg?style=for-the-badge&logo=mysql](https://img.shields.io/badge/Sql-MySQl%201.18.0-informational.svg?style=for-the-badge&logo=mysql)   

![https://img.shields.io/badge/Server-PHP%207.4.16-lightgrey.svg?style=for-the-badge&logo=php](https://img.shields.io/badge/Server-PHP%207.4.16-lightgrey.svg?style=for-the-badge&logo=php)

# 升级系统
## 1、阿里云ECS 升级系统   



在此之前 强烈建议先安装vim wget curl 这三个
`pkg install -y vim wget curl`   
正常情况下 升级FreeBSD 其实很简单,耗时过程在于需要访问外网   
而且国内没有什么好的update镜像站,所以一个命令可以睡一天。   
只有两步:



!(https://www.misakarinkon.com/wp-content/uploads/2021/03/carbon-1024x270.png)

# 详细情况统一说明一下



(为了让它看起来更像控制台的结果 以及方便我节选内容 我选择使用carbon code 展示 ):   
freebsd-update 的镜像大陆的基本没有   
最近的也就只有日本和台湾 而且也不全   ( 主要是freebsd官方不允许 )   
所以如果忍不了巨慢的速度   
可以先行使用freebsd.cn的镜像 速度很快 ( 至于觉得安全与否看个人了 )   
```
vim /etc/freebsd-update.conf   
将 ServerName update.FreeBSD.org
修改为 ServerName update.freebsd.cn
```
这样速度就会快很多   
!(https://www.misakarinkon.com/wp-content/uploads/2021/03/carbon-3.png)   
但是 如果你是阿里云的ECS   
你可能需要打补丁 阿里云目前不少机器已经支持了 12.1   
但是没有支持到12.2 所以需要自行升级 燃鹅 自行升级是有问题的,重启是绝对启动不起来   
在执行 `freebsd-update upgrade -r 12.2-RELEASE` 以及 `/usr/sbin/freebsd-update install` 后千万不要重启!!!!   


### 2、给阿里云的系统打补丁

需要进行以下操作
> 1. 下载并解压FreeBSD内核源码。
>```
>wget https://mirrors.aliyun.com/freebsd/releases/amd64/12.2-RELEASE/src.txz -O /src.txz
>cd /
>tar -zxvf /src.txz
>```
> 2. 下载补丁包。   
>本示例中,为virtio驱动打补丁包0001-virtio.patch。   
>```
>cd /usr/src/sys/dev/virtio/   
>wget `https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/0001-virtio.patch`
>patch -p4 < 0001-virtio.patch   
>```
> 3. 复制内核文件,并编译安装内核。
>make -j<N> 表示指定编译时的并行数,需要根据您执行编译的环境配置来决定。
>例如,1 vCPU环境建议设置-j2,即vCPU核数与变量N的比值为1:2。   
>buildworld的时候 不建议用较多的线程 会出现失败 剩下两个可以   
>```
>cd /usr/src/
>cp ./sys/amd64/conf/GENERIC .
>make -j2 buildworld KERNCONF=GENERIC
>make -j2 buildkernel KERNCONF=GENERIC
>make -j2 installkernel KERNCONF=GENERIC
>```
>
> 4. 编译完成后,删除源码。   
>```
>rm -rf /usr/src/*
>rm -rf /usr/src/.*
>```
> 5. 最后reboot重启 自此阿里云的ECS升级就完成了
>
(https://help.aliyun.com/document_detail/111842.html?spm=5176.11065259.1996646101.searchclickresult.2c917d46MwA1Hj#title-q6l-tow-bd8)




## _3、后续步骤_


freebsd 更新并不会像自称unix-like的系统那样更新所有组件      
它只更新内核 所以还需要自行使用pkg upgrade 进行升级组件   


## _cloud-init_



这里有个坑 你需要通过 `pkg lock py37-cloud-init-20.3`   
至于名称的话 可以通过 `pkg info | grep cloud-init` 查询获得   
不然新升级的cloud-init 20.4.1 会覆盖之前的Python文件   
导致cloud-init启动和初始化报错   
这样你也无法更新你的ssh密钥和hosts名称等信息   
```
# 清空本机缓存信息
cloud-init clean
# 初始化
cloud-init init --local
cloud-init init
```
然后就可以下载从控制台绑定的密钥到本机了   
( 最好把root里的.ssh中的authorized_keys清空一下 ,不然你会有很多以前的密钥可以登录
233333 等服务器自己重启更新实在是太慢了 反正我是没成功过的)   
```
vim /etc/cloud/cloud.cfg
#注释掉以下两个 根本不指望cloud-init还能帮你重置磁盘分区 我更建议手动处理
# - growpart
# - resizefs
```
因为实际上是这么干的   
```
# 查看磁盘信息 会显示出磁盘设备名称 例如 ada0
gpart show
gpart recover ada0
# 尝试修复,修改后剩余未分配容量显示正确 ( 一般也没啥可修复的)
gpart resize -i 3 ada0
# 扩展第3分区,将所有未分配容量加到第3分区里
# 一般看情况 gpt就通常是第三分区 mbr通常是第一分区 实际按显示的分区来
service growfs onestart # 启动 growfs 服务,自动完成扩展
```



## _ssh_


建议更换默认的port端口   
不然会被扫描攻击 ( 虽然阿里云默认通过密钥登录 而且 密码是随机生成的 )
```
vim /etc/ssh/sshd_config
以下内容为去掉#额外的 // 为注释信息
Port 211 // 更改端口号
PasswordAuthentication yes // 验证权限
PermitEmptyPasswords no // 不允许空密码
PermitRootLogin yes // 允许root登录
vim /etc/inetd.conf 修改该文件 去掉ssh前面的#
```
否则会经常的出现ssh异常信息在vnc界面里   
虽然在ssh控制台里没有   



## _hosts_

```
vim /etc/hosts
127.0.0.1 localhost
```
后面接上你的域名 以及本机ip后面也接上你购买的域名
当然 前提是得先解析上



# MySql


> 有可能会出现以下情况 先按照其中的修改方案先执行 比较保险
```
===> Creating groups.
Creating group ‘mysql’ with gid ’88’.
===> Creating users
Creating user ‘mysql’ with uid ’88’.
pw: user ‘mysql’ disappeared during update
===> Creating homedir(s)
install: unknown user mysql
pkg: PRE-INSTALL script failed
```   
**出现该原因,是因为数据未同步,不止pkg安装,包括自己创建用户时,也可能会出现**   
_解决方案: `/usr/sbin/pwd_mkdb -p /etc/master.passwd`_

>
[安装错误 创建用户失败 PRE-INSTALL script failed](https://blog.qmun.com/system/249/)

# PHP


安装php7.4以及一些常见用得着的模块
```
pkg install -y php74-ctype-7.4.16 php74-filter-7.4.16 php74-gd-7.4.16 php74-iconv-7.4.16 php74-json-7.4.16 php74-mbstring-7.4.16 php74-mysqli-7.4.16 php74-openssl-7.4.16 php74-pdo-7.4.16 php74-pdo_mysql-7.4.16 php74-session-7.4.16 php74-xml-7.4.16 php74-zlib-7.4.16 php74-curl-7.4.16
sysrc php_fpm_enable=yes # 使php-fpm开机自启
# vim /usr/local/etc/php.ini
max_execution_time = 300 # 设置的脚本被解析器中止之前允许的最大执行时间
```
安装WordPress 可能会遇到504错误   
在这里更新下 默认是30 单位是秒   
自己按需给
然后启动php-fpm service php-fpm start   

_**其实也可以不着急先启动**_


# Nginx


安装Nginx
`pkg install -y nginx`
安装 certbot
`pkg install py37-certbot`
官方有两种方式 standalone 需要 先停止80端口的 Nginx   
webroot不需要
`certbot certonly --standalone`   
`certbot certonly --webroot`   
以 standalone 为例 都可以接多个 但你需要先拥有域名 以及先解析到正确的ip
`certbot certonly --standalone --email ident@mail.com -d domain.com -d www.domain.com -d abab.domain.com`   
不出意外 控制台会告诉你 把证书存储在   
`/usr/local/etc/letsencrypt/live/domain.com/` 目录下 里面都是软连接   
`fullchain.pem` 是总证书文件 `privkey.pem` 是key文件   
如果你要换别的地方 可以直接复制这些软链接到其它位置   
nginx 默认是www用户启动 空密码的 无法切换过去   
所以 解压文件后 需要 `chown -R www:www` 将 解压的文件夹所有者变更为 www用户   
真实的路径在 `/usr/local/www/nginx-dist`   
剩下便是 `/usr/local/etc/nginx/nginx.conf` 的配置文件信息
同样的 还是放图片 以便好康一点点   
关于监听多个域名我只是图方便 所以重复的比较多   
但一定有更简洁的方式 我现在懒得写   
另外如果要放开文件上传限制   
不光`nginx.conf` 还有 `php.ini` 也需要 例如 `upload_max_filesize = 10M`

_**修改php-fpm 后 需要重启 php-fpm 和 nginx 只修改nginx不用**_



!(https://www.misakarinkon.com/wp-content/uploads/2021/03/carbon-4.png)


0xAA55 发表于 2021-3-28 02:36:21

这边表示腾讯云给的 FreeBSD 11 虽然太老了但是可以逐步顺利升级到 FreeBSD 12.2。

以及

不喜欢 wget ,宁愿用 curl 也不用 wget 。无法信任 wget 的行为。此外,我肯定会装 screen ,它总之是必备软件。

啊喵~ 发表于 2021-3-28 10:11:58

0xAA55 发表于 2021-3-28 02:36
这边表示腾讯云给的 FreeBSD 11 虽然太老了但是可以逐步顺利升级到 FreeBSD 12.2。

以及



0.markdown 的排版很方便就是了
1.阿里云这边如果服务器配置很低,仍然只有11.2,直接跃迁也是不行
2.我买的是3月促销的 实际花了1k左右 原价好像8k
3.你不信任wget是腾讯魔改的缘故,阿里云还是可以信任的
所以 装机日常就是更换源...把不信任的卸载了重新装
3.实际上我并不喜欢curl也不喜欢wget 我更喜欢直接上传
4.screen 对我来说不是必备的 _(:з」∠)_

页: [1]
查看完整版本: 关于 FreeBSD12.2 + MySQL + Nginx + PHP7.4 的使用记录