1. 为什么要在麒麟ARM64上离线部署PostGIS?
最近接手了一个项目,需要在完全隔离的内网环境里,把一套地理信息系统(GIS)给跑起来。服务器是国产的银河麒麟V10,ARM64架构,最关键的是,这台机器连不上外网。项目核心依赖PostgreSQL的空间扩展PostGIS,这玩意儿在联网环境下,一个apt-get install或者yum install就搞定了,但在离线环境里,简直是一场噩梦。
我一开始也想过走传统路线:下载一堆源码包,在麒麟系统上手动编译。结果呢?光是GEOS、PROJ、GDAL这些依赖库的版本兼容性问题,就让我折腾了好几天,各种编译错误层出不穷,不是缺这个库就是那个头文件找不到。麒麟系统虽然基于Linux,但一些软件源的包名和路径和常见的CentOS、Ubuntu不太一样,依赖关系处理起来特别费劲。后来我灵机一动,既然服务器上已经装了Docker,为什么不利用容器技术呢?Docker最大的好处之一,就是能把应用和它的运行环境一起打包,真正做到“一次构建,到处运行”。对于ARM64这种特殊架构,我们完全可以在另一台能联网的、同样是ARM64架构的机器上(比如一台ARM架构的云服务器,或者另一台能上网的麒麟测试机),把包含PostGIS的完整Docker镜像拉取下来,然后像搬家一样,把整个“集装箱”完整地迁移到内网服务器上。
这个方法完美避开了在目标服务器上手动编译、解决依赖的繁琐过程,尤其适合企业里那些对安全要求极高、网络物理隔离的生产环境。整个过程就像我们平时用U盘拷贝文件一样简单直观,接下来,我就把这次“搬家”的全过程,以及中间踩过的坑和总结的经验,毫无保留地分享给你。
2. 战前准备:理清思路与备齐工具
在开始“搬家”之前,我们得先把思路理清楚,把工具准备好。整个流程可以概括为“三步走”战略,理解了这个,后面的操作就不会迷路。
第一步,寻找“镜像工厂”。我们需要一台能访问互联网的机器,作为我们的“镜像打包车间”。这台机器的系统架构必须和目标内网的麒麟服务器一致,也就是ARM64(aarch64)。你可以在命令行里输入 uname -m 来确认。如果输出是 aarch64,那就对了。用x86_64的机器打包的镜像是无法在ARM64上运行的,这是第一个要避开的坑。这台机器可以是阿里云、华为云上的ARM实例,也可以是公司里另一台能上网的测试服务器。
第二步,打包“标准集装箱”。在“镜像工厂”里,我们用Docker拉取一个现成的、兼容ARM64的PostGIS镜像,并启动一个容器进行验证。确认一切正常后,我们把这个容器(或者镜像)导出成一个独立的、不依赖任何外部仓库的tar包。这个tar包就是我们最终要搬运的“集装箱”。
第三步,内网“部署上线”。把这个tar包通过U盘、内部文件服务器或者其他安全方式,拷贝到内网的麒麟服务器上。然后使用Docker的命令将其导入,最后启动容器,配置数据库,完成部署。
接下来是工具清单。对于“镜像工厂”和最终的内网服务器,我们都需要提前安装好Docker环境。在麒麟V10上离线安装Docker本身也是一个常见需求,我简单提一下要点,你可以参考网络上的详细教程。核心就是去Docker官网下载对应ARM64架构的静态二进制包(比如 docker-20.10.7.tgz),解压后把二进制文件复制到 /usr/bin/,再配置好systemd服务即可。同时,为了方便定义和启动多容器应用(虽然我们这次只用PostGIS,但良好的习惯很重要),我强烈建议把Docker Compose也一并安装好。同样,去GitHub releases页面下载对应架构的 docker-compose-linux-aarch64 二进制文件,放到 /usr/local/bin/ 并赋予执行权限。
准备好这些,我们的“作战平台”就搭建完毕了。
3. 核心操作:获取并验证PostGIS镜像
万事俱备,现在我们在那台能联网的“镜像工厂”服务器上开始操作。首先,我们需要一个能在ARM64上运行的PostGIS镜像。经过一番搜寻和测试,我发现 Docker Hub 上的 kartoza/postgis 和 postgis/postgis 官方镜像对ARM架构的支持比较好,但版本需要仔细选择。另一个备选是社区维护的 nickblah/postgis,它也有明确的ARM标签。
这里我以 postgis/postgis 镜像为例,因为它更新更活跃。打开终端,执行拉取命令:
docker pull postgis/postgis:15-3.3-alpine
我选择的是 15-3.3-alpine 这个标签,它包含了PostgreSQL 15和PostGIS 3.3,并且基于轻量级的Alpine Linux构建,镜像体积小,安全性也相对更高。拉取完成后,用 docker images 命令确认一下镜像已经躺在本地仓库了。


847

被折叠的 条评论
为什么被折叠?



