您以前是否为 Linux 部署而苦恼?
我需要将应用程序部署到没有外部网络访问权限的专用 Linux 机器中。 配置应尽可能简单,对不同的配置(缺少库和构建工具)具有鲁棒性,最好是自动的。我需要考虑的另一个困难是我需要连接到 Oracle 数据库。
作为最佳部署方式,您会推荐什么?我有一些想法,但不确定哪个是最好的。
- 我会使用 Java
- 我需要安装 JDK,这几乎可以解决所有问题
- 另一个大问题是我们目前使用 Java 编写的代码写得不好而且速度很慢。
- 我不确定是否需要安装 Instantclient 才能在 linux 下连接到 Oracle
- 我可以使用 C(我有一个写得很好的 LGPL 程序的源代码)
- 并使用dpkg部署
- Linux 机器很可能是 Ubuntu 服务器,但我不确定安装的是哪个版本
- 我不会使用
apt-get
,但我可以复制我需要的所有包 - 我知道我可以使用
dpkg -s
来检查它们是哪些包,但我真的不确定我是否会遗漏依赖项。 - 我想我需要 build-essentials 和 pcap 之类的东西
- 并使用静态链接
- 我用
./configure LDFLAGS=-static
配置它,没有错误,现在它可以在我的电脑上运行 - 我已将
chroot
放入此目录并运行它没有问题,这是否意味着没问题? - 我真的需要在新的 Linux 机器上测试一下以确保
- 我用
- 并使用 Statifier
- 我浏览了 stackoverflow 并找到了这个应用程序,还没有试用过。
- 似乎人们使用它取得了不同程度的成功。
- 并创建构建环境并制作
- 我不相信这会奏效
- 并使用dpkg部署
- 使用 C 会留下一些问题
- 但是程序不完整,我必须处理这些数据,最好不要用C。
- 我必须安装 Instantclient,它很难部署
- 我会使用 Perl
- 我不会使用 CPAN
- 我已经下载了这些库,所以也许我可以将它们复制到已部署的机器中,我不确定这是否有效
- Perl 很慢
- 无论如何我都必须安装 Instantclient
请分享您的类似经历。
最佳答案
具有静态链接的 C 以更大的可执行文件为代价解决了很多可移植性问题。为确保所有内容真正获得静态链接而不是 secret 依赖任何外部库,请在您的可执行文件上运行 ldd 并确保它不会动态加载所有内容。请注意,这不会在各种 Linux 机器之间 100% 可移植,因为 Oracle instantclient 对内核版本有一些依赖性,但它应该可以在任何合理的新内核上运行。
编辑:如果盒子有 LAN 访问权限但没有 Internet 访问权限,为什么不在本地网络上运行您自己的 apt 存储库。你甚至可以为你的应用程序创建一个 .deb 并将它放在同一台服务器上,而不是在那台机器上你只需要执行 apt-get myApplication 它会拉下你的应用程序和任何未安装的依赖项。设置 apt 镜像实际上非常简单,而且非常巧妙。如果网络访问全部丢失,您仍然可以创建一个安装 dvd,其中包含包括您的应用程序在内的所有 deb,并设置 apt-get 从那里提取。
关于linux - 请推荐一种在局域网环境下部署到Linux box的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2189521/