Сборка Docker в GitHub Actions ведет себя иначе, чем локальная сборка

Я развертываю приложение Django с помощью Docker под управлением Apache2. Если я собираю образ локально и отправляю его на сервер, я могу запустить его просто отлично. Проблемы начинаются, когда я собираю и переношу образ на сервер с помощью GitHub Actions. Контейнер работает нормально, но если я пытаюсь получить доступ к сайту, то получаю внутреннюю ошибку сервера Apache. Журнал ошибок показывает:

ModuleNotFoundError: No module named 'django'

Когда я запускаю bash в работающем контейнере docker и выполняю pip freeze, я вижу все необходимые пакеты из моего requirement.txt (включая django).

Мой Dockerfile:

FROM python:3
ENV PYTHONUNBUFFERED 1

RUN apt-get update -y && apt-get dist-upgrade -y

WORKDIR /var/www/api

# add code
ADD . /var/www/api

# install python dependencies
RUN apt-get install default-mysql-client -y && apt-get install default-libmysqlclient-dev -y && apt-get install libssl-dev -y && pip install -r requirements.txt

# install apache2 and additional modules
RUN apt-get install apache2 -y && apt-get install libapache2-mod-wsgi-py3 -y
RUN a2enmod headers

# copy server configs
COPY 000-default.conf /etc/apache2/sites-available/
RUN sed -i 's/Listen 80/Listen 8000/g' /etc/apache2/ports.conf

RUN python manage.py collectstatic

CMD ["apache2ctl", "-D", "FOREGROUND"]

Действия GitHub:

name: CI

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

  workflow_dispatch:

jobs:
  
  build:
    runs-on: ubuntu-latest
    env:
      IMAGE_NAME: ${{ github.sha }}_images
      
    steps:
      - name: Install SSH Key
        uses: shimataro/ssh-key-action@v2
        with:
          key: ${{ secrets.SSH_PRIVATE_KEY }}
          known_hosts: ${{ secrets.SSH_HOST }}
          config: ${{ secrets.CONFIG }}

      - name: Checkout repository
        uses: actions/checkout@v2

      - name: Build api image
        run: docker build ./api/ --no-cache -t modulo-rest
        
      - name: Save docker image
        run: docker save modulo-rest -o $IMAGE_NAME
        
      - name: Push image to server
        run: scp $IMAGE_NAME modulo:/data/$IMAGE_NAME

Конфигурация сервера Apache:

<VirtualHost *:8000>
    WSGIDaemonProcess djangoproject python-path=/var/www/api
    WSGIProcessGroup djangoproject
    WSGIScriptAlias / /var/www/api/djangoproject/wsgi.py
    WSGIPassAuthorization On

    Alias /static/ /var/www/api/static/
    Header set Access-Control-Allow-Origin "*"
    <Directory /var/www/api/static>
        Require all granted
    </Directory>

    <Directory /var/www/api/djangoproject>
       <Files wsgi.py>
            Require all granted
        </Files>
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

Есть идеи, почему Apache не может найти установленные модули при сборке с помощью GitHub Actions?

Единственная странность, которую я обнаружил, заключается в том, что когда я собираю локально, в контейнере работает python 3.9 по сравнению с python 3.10 при сборке с помощью GitHub Actions.

Спасибо

Вернуться на верх