我是Nix的新手并尝试实现一个通过Nginx proxy_pass
传递Python Flask Web服务的服务。这是我到目前为止所尝试过的。
with import <nixpkgs> {};
let
buildInputs = [
nginx
python35Packages.python
python35Packages.flask
python35Packages.pyyaml
];
installPhase = ''
mkdir -p $out/pynix
cp -rv src config.yml $out/pynix
cd $out/pynix && nohup python src/main.py &> log.txt
'';
in {
network.description = "Local machine";
webserver = {
deployment = {
targetEnv = "virtualbox";
virtualbox.memorySize = 1024;
};
services = {
nginx = {
enable = true;
config = '';
http {
include ${nginx}/conf/mime.types;
server_name localhost;
location / {
proxy_pass http://localhost:5000;
}
}
'';
};
};
};
}
src/main.py
是在端口5000上运行的Python Flask服务。当我nixops deploy -d DEPLOYMENT_NAME
时,如何启动并运行此Web服务?请帮忙。
答案 0 :(得分:2)
我认为你混淆了包和服务。包是构建的静态输出,而服务管理包的运行时激活。我认为你的配置目前试图描述一个在构建时运行的python应用程序,而没有任何服务在运行时激活它。这与你想要的完全相反!特别是与nixops一样,您可能会在不同的环境中运行您的服务
你应该能够通过查看nginx package和nginx service的nix表达式来了解我的意思 -
特别是services.systemd.nginx
部分。从这里您可以看到nginx 服务管理nginx 包的运行。我想你会想为你的python应用程序编写类似的表达式。您还可以看到是否有专门用于基于python的NixOS服务的表达式,您可以将其用作基础,但nginx表达式也应该是一个充分的指南。