supervisord as service and sensitive environment variables












0















I'm using supervisor to monitor a gunicorn process for a Django application.
My config:



[program:app]
environment=
SETTINGS="%(ENV_SETTINGS)s",
DB_NAME="%(ENV_DB_NAME)s",
DB_PASS="%(ENV_DB_PASS)s",
DB_USER="%(ENV_DB_USER)s",
EMAIL_HOST_PASSWORD="%(ENV_EMAIL_HOST_PASSWORD)s",
SECRET_KEY="%(ENV_SECRET_KEY)s"
command=/home/app/bin/gunicorn_start
user=username
autostart=true
autorestart=true
redirect_stderr=true
stdout_logfile=/home/app/logs/gunicorn-error.log


I have the environment variables defined in /etc/bashrc. These variables contain sensitive data (per recommendation of the "Two Scoops of Django" book to store them in the environment) I have verified with the env command that my variables are present in the environment.



Supervisor is throwing an error that it can not access my environment variables:




ERROR: CANT_REREAD: Format string
'nSETTINGS="%(ENV_SETTINGS)s"...'
for 'environment' contains names ('ENV_SETTINGS') which
cannot be expanded. Available names: ENV_HOME, ENV_LANG, ENV_LOGNAME,
ENV_PATH, ENV_SHELL, ENV_USER, group_name, here, host_node_name,
process_num, program_name in section 'program:app' (file:
'/etc/supervisord/supervisord.conf')




This problem has been described before (link). When launched as a service, supervisor can not access variables defined in shell configuration files by a particular user. Indeed those variables that it lists as available are just a small subset of what is available to me if I run the env command.



Where should I define my secrets as env variables? Should I take them out of /etc/bashrc and define them in the supervisor config file? Or in the gunicorn_start script even (/home/app/bin/gunicorn_start)?










share|improve this question



























    0















    I'm using supervisor to monitor a gunicorn process for a Django application.
    My config:



    [program:app]
    environment=
    SETTINGS="%(ENV_SETTINGS)s",
    DB_NAME="%(ENV_DB_NAME)s",
    DB_PASS="%(ENV_DB_PASS)s",
    DB_USER="%(ENV_DB_USER)s",
    EMAIL_HOST_PASSWORD="%(ENV_EMAIL_HOST_PASSWORD)s",
    SECRET_KEY="%(ENV_SECRET_KEY)s"
    command=/home/app/bin/gunicorn_start
    user=username
    autostart=true
    autorestart=true
    redirect_stderr=true
    stdout_logfile=/home/app/logs/gunicorn-error.log


    I have the environment variables defined in /etc/bashrc. These variables contain sensitive data (per recommendation of the "Two Scoops of Django" book to store them in the environment) I have verified with the env command that my variables are present in the environment.



    Supervisor is throwing an error that it can not access my environment variables:




    ERROR: CANT_REREAD: Format string
    'nSETTINGS="%(ENV_SETTINGS)s"...'
    for 'environment' contains names ('ENV_SETTINGS') which
    cannot be expanded. Available names: ENV_HOME, ENV_LANG, ENV_LOGNAME,
    ENV_PATH, ENV_SHELL, ENV_USER, group_name, here, host_node_name,
    process_num, program_name in section 'program:app' (file:
    '/etc/supervisord/supervisord.conf')




    This problem has been described before (link). When launched as a service, supervisor can not access variables defined in shell configuration files by a particular user. Indeed those variables that it lists as available are just a small subset of what is available to me if I run the env command.



    Where should I define my secrets as env variables? Should I take them out of /etc/bashrc and define them in the supervisor config file? Or in the gunicorn_start script even (/home/app/bin/gunicorn_start)?










    share|improve this question

























      0












      0








      0








      I'm using supervisor to monitor a gunicorn process for a Django application.
      My config:



      [program:app]
      environment=
      SETTINGS="%(ENV_SETTINGS)s",
      DB_NAME="%(ENV_DB_NAME)s",
      DB_PASS="%(ENV_DB_PASS)s",
      DB_USER="%(ENV_DB_USER)s",
      EMAIL_HOST_PASSWORD="%(ENV_EMAIL_HOST_PASSWORD)s",
      SECRET_KEY="%(ENV_SECRET_KEY)s"
      command=/home/app/bin/gunicorn_start
      user=username
      autostart=true
      autorestart=true
      redirect_stderr=true
      stdout_logfile=/home/app/logs/gunicorn-error.log


      I have the environment variables defined in /etc/bashrc. These variables contain sensitive data (per recommendation of the "Two Scoops of Django" book to store them in the environment) I have verified with the env command that my variables are present in the environment.



      Supervisor is throwing an error that it can not access my environment variables:




      ERROR: CANT_REREAD: Format string
      'nSETTINGS="%(ENV_SETTINGS)s"...'
      for 'environment' contains names ('ENV_SETTINGS') which
      cannot be expanded. Available names: ENV_HOME, ENV_LANG, ENV_LOGNAME,
      ENV_PATH, ENV_SHELL, ENV_USER, group_name, here, host_node_name,
      process_num, program_name in section 'program:app' (file:
      '/etc/supervisord/supervisord.conf')




      This problem has been described before (link). When launched as a service, supervisor can not access variables defined in shell configuration files by a particular user. Indeed those variables that it lists as available are just a small subset of what is available to me if I run the env command.



      Where should I define my secrets as env variables? Should I take them out of /etc/bashrc and define them in the supervisor config file? Or in the gunicorn_start script even (/home/app/bin/gunicorn_start)?










      share|improve this question














      I'm using supervisor to monitor a gunicorn process for a Django application.
      My config:



      [program:app]
      environment=
      SETTINGS="%(ENV_SETTINGS)s",
      DB_NAME="%(ENV_DB_NAME)s",
      DB_PASS="%(ENV_DB_PASS)s",
      DB_USER="%(ENV_DB_USER)s",
      EMAIL_HOST_PASSWORD="%(ENV_EMAIL_HOST_PASSWORD)s",
      SECRET_KEY="%(ENV_SECRET_KEY)s"
      command=/home/app/bin/gunicorn_start
      user=username
      autostart=true
      autorestart=true
      redirect_stderr=true
      stdout_logfile=/home/app/logs/gunicorn-error.log


      I have the environment variables defined in /etc/bashrc. These variables contain sensitive data (per recommendation of the "Two Scoops of Django" book to store them in the environment) I have verified with the env command that my variables are present in the environment.



      Supervisor is throwing an error that it can not access my environment variables:




      ERROR: CANT_REREAD: Format string
      'nSETTINGS="%(ENV_SETTINGS)s"...'
      for 'environment' contains names ('ENV_SETTINGS') which
      cannot be expanded. Available names: ENV_HOME, ENV_LANG, ENV_LOGNAME,
      ENV_PATH, ENV_SHELL, ENV_USER, group_name, here, host_node_name,
      process_num, program_name in section 'program:app' (file:
      '/etc/supervisord/supervisord.conf')




      This problem has been described before (link). When launched as a service, supervisor can not access variables defined in shell configuration files by a particular user. Indeed those variables that it lists as available are just a small subset of what is available to me if I run the env command.



      Where should I define my secrets as env variables? Should I take them out of /etc/bashrc and define them in the supervisor config file? Or in the gunicorn_start script even (/home/app/bin/gunicorn_start)?







      django environment-variables gunicorn supervisord supervisor






      share|improve this question













      share|improve this question











      share|improve this question




      share|improve this question










      asked Nov 15 '18 at 15:41









      jonas87jonas87

      1591110




      1591110
























          0






          active

          oldest

          votes











          Your Answer






          StackExchange.ifUsing("editor", function () {
          StackExchange.using("externalEditor", function () {
          StackExchange.using("snippets", function () {
          StackExchange.snippets.init();
          });
          });
          }, "code-snippets");

          StackExchange.ready(function() {
          var channelOptions = {
          tags: "".split(" "),
          id: "1"
          };
          initTagRenderer("".split(" "), "".split(" "), channelOptions);

          StackExchange.using("externalEditor", function() {
          // Have to fire editor after snippets, if snippets enabled
          if (StackExchange.settings.snippets.snippetsEnabled) {
          StackExchange.using("snippets", function() {
          createEditor();
          });
          }
          else {
          createEditor();
          }
          });

          function createEditor() {
          StackExchange.prepareEditor({
          heartbeatType: 'answer',
          autoActivateHeartbeat: false,
          convertImagesToLinks: true,
          noModals: true,
          showLowRepImageUploadWarning: true,
          reputationToPostImages: 10,
          bindNavPrevention: true,
          postfix: "",
          imageUploader: {
          brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
          contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
          allowUrls: true
          },
          onDemand: true,
          discardSelector: ".discard-answer"
          ,immediatelyShowMarkdownHelp:true
          });


          }
          });














          draft saved

          draft discarded


















          StackExchange.ready(
          function () {
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53322968%2fsupervisord-as-service-and-sensitive-environment-variables%23new-answer', 'question_page');
          }
          );

          Post as a guest















          Required, but never shown

























          0






          active

          oldest

          votes








          0






          active

          oldest

          votes









          active

          oldest

          votes






          active

          oldest

          votes
















          draft saved

          draft discarded




















































          Thanks for contributing an answer to Stack Overflow!


          • Please be sure to answer the question. Provide details and share your research!

          But avoid



          • Asking for help, clarification, or responding to other answers.

          • Making statements based on opinion; back them up with references or personal experience.


          To learn more, see our tips on writing great answers.




          draft saved


          draft discarded














          StackExchange.ready(
          function () {
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53322968%2fsupervisord-as-service-and-sensitive-environment-variables%23new-answer', 'question_page');
          }
          );

          Post as a guest















          Required, but never shown





















































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown

































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown







          Popular posts from this blog

          Xamarin.iOS Cant Deploy on Iphone

          Glorious Revolution

          Dulmage-Mendelsohn matrix decomposition in Python