使用 Workflow GitHub Actions,我想设置一个脚本来自动触发从 github 部署一个 python django 应用程序到一个带有 apache2 wsgi 的 ubuntu 服务器上,该脚本必须允许能够启动一个新的安装或者如果安装已经存在更新应用程序。
STEP 错误:Set Project - Env path
USER_RUN: www-datas
chown: invalid user: ‘www-datas:www-datas’
Error: Process completed with exit code 1.
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
你在 ubuntu-latest GitHub Hosted runner 上运行。该代码不在 your ubuntu Django 服务器上运行,但它在 Azure 某处由 Github 托管的虚拟机上运行。您尝试为其分配权限的用户在 GitHub Hosted Runners 上不存在。
如果您在目标服务器上安装了自托管运行器,则将
runs-on
更改为:
runs-on: [self-hosted, djangoserver]
注意:确切的标签是在安装时分配给自托管运行器的标签。
参见: