记一次系统部署.md 2.7 KB


title: "记一次系统部署" date: 2021-12-08T11:17:58+07:00

draft: true

Debug Process

环境:

OS: Debian 9 PHP: 7.2 fpm

部署一个 PHP 工程,首先 git pull 代码,但立马出现一个错误:

server certificate verification failed. CAfile: /etc/ssl/certs/cacertificates.crt CRLfile: none

因为自建的 git server 刚刚更新支持了 HTTPS,更新原因是 go get 不支持 HTTP 协议。

目前来说,要解决这个问题,查了一下,最多的方案是

# linux
export GIT_SSL_NO_VERIFY=1
# windows
set GIT_SSL_NO_VERIFY 1
# git
git config --global http.sslVerify false

就是忽略校验,这中解决方案简单高效,99.923% 的情况下不会出什么问题(针对安全性而言)。只是我更希望找到真正的解决问题本身的方案,也算一个学习的过程。 最终,需要执行

apt update
apt upgrade
update-ca-certificates

就是需要升级系统而已。但是升级过程报了一堆错误,导致 270M 的一系列升级包无法安装。其中最重要的两处错误大致是

  • Err1: https://packages.sury.org 有校验错误
  • import **_pkg 一处 Python 错误 针对第一个错误,https://packages.sury.org/php/README.txt有完整的升级方案,照着执行就完了。 第二个错误,看了一下是因为 Debian 9 默认 Python3 是 3.5 的,而我后来加装了 3.7,而 python3 当前指向 Python3.7,利用 update-alternative 还原为 3.5 就可以了,这类错误之前就遇到过,apt 命令簇都是 python 写的。

问题得到了解决,可以正常 git pull 了。

After Story

一通瞎操作后,系统部署升级完毕,客户端登录怎么都不成功。调试发现 PHP 没有安装 redis module。

php -m | grep redis
php -m | grep swoole

没有任何输出。

因为这并非首次部署,只是一次升级,所以肯定是刚才 apt upgrade 的时候冲掉了,详细没过多分析。

apt install php7.2-redis
apt install php7.2-swoole
systemctl restart php7.2-fpm

登录成功。

可以想象,apt upgrade的时候也很可能掉了其他 module(s),PHP 折腾了这么多年 PSR,是不是也做个 virtualenv + requirements.txt 的小东西?我真忘了都需要哪些 module 了!

Conclude

从 git server 中 push 了一个 Golang 项目之后就这么一环套一环的出了这么多问题,而我个人不喜欢 "临时方案" 来应付,所以还挺有趣的。最大的感受是系统需要及时更新,这必然会要求工程也要一直升级,包括一些依赖库,这其实很难,成本极高,我听说有些线上业务仍然用的 FreeBSD 200x 年的某个版本,就是系统版本和工程依赖之间的两难结果。