【问题标题】:Deploying Scala to NixOps将 Scala 部署到 NixOps
【发布时间】:2016-01-11 20:58:34
【问题描述】:

我正在尝试在带有 NixOps 的 NixOS 下的 Scala 中部署带有 Play 2 Web 服务的 VirtualBox。

我有这台机器:

{
  backoffice = {
    deployment.targetEnv = "virtualbox";
    deployment.virtualbox.memorySize = 1024; # MB
  };
}

在这个逻辑网络上:

{
  network.description = "Test";

  backoffice =
    { config, pkgs, ... }:
    let
        callPackage = pkgs.lib.callPackageWith (pkgs);
        Back = callPackage ../pkgs/Backoffice.nix {};
    in {
        environment.systemPackages = [
          pkgs.jdk
          Back
        ];

        systemd.services.backoffice = {
            description = "Backoffice";
            # Start the service after the network is available
            after = [ "network.target" ];
            script = "${Back}/webapps/bin/play-back";
            serviceConfig = {
              Restart = "always";
            };
          };

          networking.hostName = "backoffice";
          networking.firewall.allowedTCPPorts = [ 80 ];
          system.stateVersion = "15.09";
    };
}

Backoffice.nix 是这个派生的:

with import <nixpkgs> {};

stdenv.mkDerivation {
  name = "Backoffice";
  src = ../../back;
  buildInputs = [ sbt ];
  buildPhase = let
        sbtBootDir = "./.sbt/boot/";
        sbtIvyHome = "/var/tmp/`whoami`/.ivy";
        sbtOpts = "-XX:PermSize=190m -Dsbt.boot.directory=${sbtBootDir} -Dsbt.ivy.home=${sbtIvyHome}";
    in ''
        mkdir -p ${sbtBootDir}
        mkdir -p ${sbtIvyHome}
        sbt ${sbtOpts} stage
    '';

  installPhase = ''
    mkdir -p $out/webapps
    cp -ra ./target/universal/stage/* $out
  '';
}

VM 启动和部署正常。但是当我 ssh 进入它时,我在里面找不到我的 Backoffice 派生。

如果我在本地做

nix-build Backoffice.nix

...它构建没有问题,我可以在我的开发机器上的 /nix/store 中找到派生。

在虚拟机中,有一个 /nix/store/shaXXX-backoffice.service,所以它有点工作。但由于后台派生不存在,它什么也不做。

谁能告诉我我做错了什么?

【问题讨论】:

  • .service文件的内容是什么?
  • 非常感谢您提出这个问题,它对我在 nixos 中运行自己的 sbt 构建帮助很大。一项改进:使用let userHome = "/var/tmp/`whoami`"; sbtOpts = "-Duser.home=${userHome}"; in mkdir -p ${userHome}。这使您不必单独指定引导目录、常春藤目录、锌目录、coursier 缓存目录等。

标签: scala sbt nix nixops


【解决方案1】:

找到了! systemd.services.backoffice 中需要什么:

path = [ "${pkgs.jdk.home}" "${pkgs.gawk}" ];

Play Framework 脚本同时使用两者来启动自身。

【讨论】:

    猜你喜欢
    • 2020-11-07
    • 2018-07-27
    • 2017-04-25
    • 2020-04-18
    • 1970-01-01
    • 1970-01-01
    • 2017-11-27
    • 2018-01-02
    • 1970-01-01
    相关资源
    最近更新 更多