Criando um serviço systemd para o Flask via nginx

2

Estou executando um aplicativo Flask em um servidor via nginx. Eu quero criar um arquivo systemd e aqui está o que eu tenho:

[Unit]
Description=my123 website
After=syslog.target
Requires=postgresql.service

[Service]
ExecStart=/home/user_123/my_web_app/run.py &
ExecStop=
Restart=on-abort
WorkingDirectory=/home/user_123/my_web_app/
SyslogIdentifier=my_web_app
User=user_123

[Install]
WantedBy=multi-user.target

Localmente, executo-o como ./run.py . Agora, o que devo ter em ExecStart e ExecStop ? Eu acho que ExecStart está correto porque eu tenho o & nele. Mas e quanto a ExecStop ?

    
por ako25 09.01.2017 / 03:37

1 resposta

4

Não, você deve nunca adicionar & a ExecStart . Isso fará com que o sistema pense que a sua unidade é o processo que faz a bifurcação. Além disso, você não precisa de ExecStop para um serviço que entende SIGTERM (o servidor embutido do flask faz), o systemd sabe para onde enviar o sinal.

i.e. O systemd rastreia o PID que ExecStart iniciou e sabe onde enviar SIGTERM quando você pede para finalizar o processo.

(Uma unidade type= pode tornar os garfos um pouco mais complicados do que isso. Mas a unidade padrão type= considera que não há garfos.)

Extra

A execução do servidor de frascos embutido atrás do Nginx irá torná-lo muito vulnerável a até mesmo um ataque DoS trivial . O servidor embutido no frasco não é destinado ao uso em produção. Com o Nginx, você deve usar algo como uWSGI .

Os documentos do Flask têm uma seção no uwsgi , e você pode mapear facilmente a linha de comando para editar Opções do arquivo de configuração do uWSGI. E os documentos do uWSGI têm uma seção no systemd . E você realmente deveria estar usando o systemd para iniciar um servidor web real como o uWSGI, não o frasco embutido.

    
por 09.01.2017 / 03:53