首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在使用Ansible部署应用程序时确保正确的权限

如何在使用Ansible部署应用程序时确保正确的权限
EN

Stack Overflow用户
提问于 2022-02-16 12:06:30
回答 1查看 252关注 0票数 0

在使用Ansible部署python应用程序时,我很难理解如何实现权限提升。

在我当前的设置中:

  • VM是由系统管理员提供的。
  • 我的用户(让我们称之为"John")不是根用户,但是可以通过调用sudo来实现它。

不管我通过Ansible做了什么,它的结局要么是通过John,要么是root (用become: true)。

我想:

  1. 安装系统软件包,如python3、pip或supervisord
  2. 设置独立的系统用户
  3. 使用git存储库下载代码
  4. 创建虚拟环境
  5. 在虚拟环境中安装需求
  6. 设置监督d

当我手动登录到VM中时,上面的列表非常简单--我使用sudo su -成为超级用户来处理点1-2,然后是su new-system-user,完成点3-5等等。

在使用become: true或使用我的SSH用户时,有些任务在Ansible中也很容易完成,但是在使用新创建的系统用户时我得到了许多权限问题,任务3-5中的become_user: "{{ system_user }}"似乎不像预期的那样工作。

我想问你,解决这个问题的最佳方法是什么?我唯一的解决办法是在我的SSH用户的上下文中完成所有事情,然后将&chown复制到新的系统-用户,但这似乎是一个黑客,而且我非常肯定,当涉及到正确的权限提升时,我遗漏了一些东西。

EN

回答 1

Stack Overflow用户

发布于 2022-02-16 19:33:24

即使我不能回答

解决这个问题的最佳方法是什么?

完全地说,步骤1-3和步骤6可能只是在某种程度上是可能的。

代码语言:javascript
运行
复制
---
- hosts: pyapp
  become: true

  tasks:

  - name: Make sure packages are installed 
    yum:
      name: supervisor
      state: latest

  - name: Create group in local system
    group:
      name: pyapp
      gid: '1234'

  - name: Configure local account in system
    user:
      name: "pyapp"
      system: yes
      createhome: yes
      uid: '1234'
      group: '1234'
      shell: /sbin/nologin
      comment: "My Python App"
      state: present

  - name: Download and unpack
    unarchive:
      src: "https://{{ DOWNLOAD_URL }}/myPythonApp.tar.gz"
      dest: "/home/pyapp/"
      remote_src: yes
      owner: "pyapp"
      group: "pyapp"

  - name: Make sure log directory exists
    file:
      path: "/var/log/pyapp"
      state: directory
      owner: 'pyapp'
      group: 'pyapp'
    
  - name: Make sure supervisord config file is provided
    copy:
      src: "pyapp.ini"
      dest: "/etc/supervisord.d/pyapp.ini"
    
  - name: Make sure service becomes started and enabled
    systemd:
      name: supervisord
      state: started
      enabled: true
      daemon_reload: true

  - name: Make sure application is in started state
    supervisorctl:
      name: pyapp
      state: started

配置文件 (pyapp.ini)类似

代码语言:javascript
运行
复制
[program:pyapp]
directory=/home/pyapp
command=/usr/bin/python /home/pyapp/myPythonApp.py
user=pyapp
process_name=%(program_name)s
autorestart=true
stderr_logfile=/var/log/pyapp/stderr.log
stdout_logfile=/var/log/pyapp/stdout.log

将其他值保留在默认值中。

我正在使用这样的方法,它只是起作用。第三步,也可以通过使用git模块下载。

模块文档--按发生顺序排列的

进一步阅读

您可以先看看管理Python库依赖项示例。还有安装分发包运行主管

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71141568

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档