You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GitHub Actions部署Django应用报错:用户www-datas不存在

问题:GitHub Actions部署Django到Apache2 WSGI时chown用户错误

错误场景

通过GitHub Actions配置脚本,在Ubuntu服务器的Apache2 WSGI环境下自动部署Python Django应用(支持全新安装或更新),但在「Set Project - Env path」步骤执行chown命令时失败,错误信息如下:

USER_RUN: www-datas
chown: invalid user: ‘www-datas:www-datas’
Error: Process completed with exit code 1.

相关GitHub Workflow配置

name: Django-wsgi

env:
  PROJECT_NAME: 'myproject'
  PROJECT_DOMAIN: 'myproject.tld'
  PROJECT_ENV: 'venv_myproject'
  PROJECT_PATH: '/var/www/vhosts'
  PROJECT_GIT_REPO: 'github.com/xxxx/plop.git'
  PYTHON_VERSION: '3.10'
  USER_RUN: 'www-datas'

on:
  push:
    branches: [ "main" ]
  pull_request:
    branches: [ "main" ]

permissions:
  contents: read

jobs:
  build:
    runs-on: ubuntu-latest

    strategy:
      max-parallel: 4

    steps:
      - uses: actions/checkout@v3

      - name: 'Set Project - Env path'
        run: |
          sudo mkdir -p '${{ env.PROJECT_PATH }}/${{ env.PROJECT_ENV }}/${{ env.PROJECT_DOMAIN }}/httpdocs'
          chown -R ${{ env.USER_RUN }}:${{ env.USER_RUN }} '${{ env.PROJECT_PATH }}/${{ env.PROJECT_ENV }}/${{ env.PROJECT_DOMAIN }}/httpdocs'
          cd '${{ env.PROJECT_PATH }}/${{ env.PROJECT_ENV }}/${{ env.PROJECT_DOMAIN }}/httpdocs'

      - name: 'Set Project - Prerequisites'
        run: |
          sudo apt-get update
          sudo apt-get install python3-pip -y
          sudo apt-get install apache2 libapache2-mod-wsgi-py3 -y
          sudo apt-get install libpq-dev python-is-python3 python3-dev -y

      - name: Configure Apache2 WSGI
        run: |
          if [ -f ${{ env.PROJECT_ENV }}.conf ]; then cp ${{ env.PROJECT_ENV }}.conf /etc/apache2/sites-available/${{ env.PROJECT_ENV }}.conf; fi

      - name: 'Set up Python version'
        uses: actions/setup-python@v4
        with:
          python-version: ${{ env.PYTHON_VERSION }}
          check-latest: true
          cache : 'pip'

      - name: 'Create and start virtual environment'
        run: |
          cd '${{ env.PROJECT_PATH }}/${{ env.PROJECT_ENV }}/${{ env.PROJECT_DOMAIN }}/httpdocs'
          python -m venv ${{ env.PROJECT_ENV }}
          source ${{ env.PROJECT_ENV }}/bin/activate

      - name: 'Install Dependencies'
        run: |
          cd '${{ env.PROJECT_PATH }}/${{ env.PROJECT_ENV }}/${{ env.PROJECT_DOMAIN }}/httpdocs'
          python -m pip install --upgrade --force pip
          if [ -f requirements.txt ]; then pip install -r requirements.txt; fi

      - name: Run migrations
        run: |
          python '${{ env.PROJECT_PATH }}/${{ env.PROJECT_ENV }}/${{ env.PROJECT_DOMAIN }}/httpdocs/manage.py' makemigrations
          python '${{ env.PROJECT_PATH }}/${{ env.PROJECT_ENV }}/${{ env.PROJECT_DOMAIN }}/httpdocs/manage.py' migrate
          python '${{ env.PROJECT_PATH }}/${{ env.PROJECT_ENV }}/${{ env.PROJECT_DOMAIN }}/httpdocs/manage.py' migrate --run-syncdb
          python '${{ env.PROJECT_PATH }}/${{ env.PROJECT_ENV }}/${{ env.PROJECT_DOMAIN }}/httpdocs/manage.py' check

  deploy:
      permissions:
        contents: none

      runs-on: ubuntu-latest

      needs: build

      environment:
        name: 'Development'
        url: ${{ env.PROJECT_DOMAIN }}

      steps:
        - name: 'Deploy Web App'
          id: deploy-to-webapp
          run: if [ -d .git ]; then git pull; else; git clone 'https://${{secrets.GIT_USR}}:${{secrets.GIT_PWD}}@${{ env.PROJECT_GIT_REPO }}' ; fi

        - name: Run migrations
          run: |
            python '${{ env.PROJECT_PATH }}/${{ env.PROJECT_ENV }}/${{ env.PROJECT_DOMAIN }}/httpdocs/manage.py' makemigrations
            python '${{ env.PROJECT_PATH }}/${{ env.PROJECT_ENV }}/${{ env.PROJECT_DOMAIN }}/httpdocs/manage.py' migrate
            python '${{ env.PROJECT_PATH }}/${{ env.PROJECT_ENV }}/${{ env.PROJECT_DOMAIN }}/httpdocs/manage.py' migrate --run-syncdb
            python '${{ env.PROJECT_PATH }}/${{ env.PROJECT_ENV }}/${{ env.PROJECT_DOMAIN }}/httpdocs/manage.py' check

解决方案

1. 修正用户名拼写错误

Ubuntu系统中Apache的默认运行用户是www-data(单数形式),而非配置中的www-datas。修改env中的USER_RUN值:

USER_RUN: 'www-data'

2. 调整步骤执行顺序

当前chown步骤在安装Apache2之前执行,此时www-data用户尚未创建(Apache安装过程中才会生成该用户)。将「Set Project - Env path」步骤移到「Set Project - Prerequisites」步骤之后:

jobs:
  build:
    runs-on: ubuntu-latest
    strategy:
      max-parallel: 4
    steps:
      - uses: actions/checkout@v3

      - name: 'Set Project - Prerequisites'
        run: |
          sudo apt-get update
          sudo apt-get install python3-pip -y
          sudo apt-get install apache2 libapache2-mod-wsgi-py3 -y
          sudo apt-get install libpq-dev python-is-python3 python3-dev -y

      - name: 'Set Project - Env path'
        run: |
          sudo mkdir -p '${{ env.PROJECT_PATH }}/${{ env.PROJECT_ENV }}/${{ env.PROJECT_DOMAIN }}/httpdocs'
          sudo chown -R ${{ env.USER_RUN }}:${{ env.USER_RUN }} '${{ env.PROJECT_PATH }}/${{ env.PROJECT_ENV }}/${{ env.PROJECT_DOMAIN }}/httpdocs'
          cd '${{ env.PROJECT_PATH }}/${{ env.PROJECT_ENV }}/${{ env.PROJECT_DOMAIN }}/httpdocs'

3. 给chown命令添加sudo权限

创建目录时使用了sudo,但chown命令未加sudo,普通用户无法修改系统目录权限,需补充sudo:

sudo chown -R ${{ env.USER_RUN }}:${{ env.USER_RUN }} '${{ env.PROJECT_PATH }}/${{ env.PROJECT_ENV }}/${{ env.PROJECT_DOMAIN }}/httpdocs'

额外优化点

  • deploy阶段的git pull/clone未指定目标目录,会在当前工作目录执行,建议明确路径:
if [ -d '${{ env.PROJECT_PATH }}/${{ env.PROJECT_ENV }}/${{ env.PROJECT_DOMAIN }}/httpdocs/.git' ]; then 
  cd '${{ env.PROJECT_PATH }}/${{ env.PROJECT_ENV }}/${{ env.PROJECT_DOMAIN }}/httpdocs' && git pull; 
else 
  git clone 'https://${{secrets.GIT_USR}}:${{secrets.GIT_PWD}}@${{ env.PROJECT_GIT_REPO }}' '${{ env.PROJECT_PATH }}/${{ env.PROJECT_ENV }}/${{ env.PROJECT_DOMAIN }}/httpdocs'; 
fi
  • 迁移命令需在虚拟环境中执行,先激活虚拟环境再运行:
cd '${{ env.PROJECT_PATH }}/${{ env.PROJECT_ENV }}/${{ env.PROJECT_DOMAIN }}/httpdocs'
source ${{ env.PROJECT_ENV }}/bin/activate
python manage.py makemigrations
python manage.py migrate
python manage.py migrate --run-syncdb
python manage.py check

内容的提问来源于stack exchange,提问作者MiKDO

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 18:05:09