请推荐一种在局域网环境中部署到Linux服务器的方法。

3

你以前有没有遇到部署 Linux 的困难?

我需要将一个应用程序部署到一台没有外部网络访问的专用 Linux 机器上。配置应该尽可能简单,对于不同的配置(缺失的库和构建工具)应该是健壮的,最好是自动化的。我需要考虑的另一个困难是,我需要连接到一个 Oracle 数据库。

您会推荐什么作为最佳部署方式?我有一些想法,但不确定哪个是最好的。

  • 我可以使用 Java
    • 我需要安装 JDK,并解决大部分问题
    • 另一个大问题是,我们目前在 Java 中编写的代码质量较差且速度慢。
    • 我不确定是否需要在 Linux 下安装 Instantclient 来连接 Oracle
  • 我可以使用 C (我已经拥有了一个非常精确编写的 LGPL 程序的源代码)
    1. 并使用 dpkg 进行部署
      • Linux 机器很可能是 Ubuntu 服务器,但我不确定安装了哪个版本
      • 我不能使用 apt-get,但我可以复制我需要的所有包
      • 我知道我可以使用 dpkg -s 来检查它们是哪些包,但我真的不确定是否会遗漏依赖项。
      • 我猜我需要 build-essentials 和 pcap 等
    2. 并使用静态链接
      • 我已经使用 ./configure LDFLAGS=-static 进行了配置,没有错误,并且现在在我的计算机上可以使用它
      • 我已经 chroot 到这个目录并运行它了,没有问题,这意味着这样做是可行的吗?
      • 我确实需要在新的 Linux 机器上测试这个
    3. 并使用 Statifier
      • 我浏览了 stackoverflow 并找到了这个应用程序,还没有尝试过。
      • 看起来人们有时使用它成功,有时不成功。
    4. 并创建一个构建环境和 make
      • 我对此没有信心
  • 使用 C 会带来一些问题
    • 但该程序是不完整的,我必须处理这些数据,最好不要使用 C。
    • 我必须安装 Instantclient,这很难部署
  • 我可以使用 Perl
    • 我不能使用 CPAN
    • 我已经下载了库文件,所以也许我可以将它们复制到部署的机器中,但我不确定如何操作或者是否行得通
    • Perl 很慢
    • 无论如何我仍然需要安装 Instantclient

请分享您相似的经验。

1个回答

1

使用静态链接的C语言可以解决很多可移植性问题,但代价是更大的可执行文件。为了确保所有内容都真正地被静态链接,而不是秘密依赖于任何外部库,请在可执行文件上运行ldd,并确保它没有动态加载所有内容。请注意,这在各种Linux机器之间不会完全可移植,因为Oracle instantclient对内核版本有一些依赖,但它应该在任何相当新的内核上工作。

编辑:如果该计算机具有局域网访问权限,只是没有互联网访问权限,为什么不在本地网络上运行自己的apt存储库呢?您甚至可以为您的应用程序创建一个.deb文件并将其放在同一服务器上,然后在该计算机上,您只需要执行apt-get myApplication,它就会下载您的应用程序以及任何未安装的依赖项。设置apt镜像实际上非常容易,这将非常流畅。如果完全缺少网络访问权限,则仍然可以创建包含所有deb文件(包括您的应用程序)的安装DVD,并设置apt-get从中获取。


我曾经考虑过只是镜像我需要的所有软件包,问题是我不确定是否都正确获取了。 我刚刚使用VirtualBox模拟了一个干净的Ubuntu安装,静态二进制文件可以正常工作。我想这样解决了我的问题。 - TiansHUo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接