From 928c68680137e6f1f70690aeebf2d679d2203424 Mon Sep 17 00:00:00 2001 From: Norvicdev <101652762+Norvicdev@users.noreply.github.com> Date: Tue, 4 Aug 2026 18:15:07 +0300 Subject: [PATCH 01/19] upd deploy for workflow --- .forgejo/workflows/deploy.yml | 23 +++++++++++------------ 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/.forgejo/workflows/deploy.yml b/.forgejo/workflows/deploy.yml index 5b99e90..74987e7 100644 --- a/.forgejo/workflows/deploy.yml +++ b/.forgejo/workflows/deploy.yml @@ -11,7 +11,7 @@ on: - main env: - REGISTRY: ${{ secrets.REGISTRY_URL || 'forgejo.example.com' }} + # Для Docker Hub REGISTRY не нужен - оставляем пустым IMAGE_NAME: ${{ secrets.IMAGE_NAME || 'flask-app' }} DEPLOY_HOST: ${{ secrets.DEPLOY_HOST }} DEPLOY_USER: ${{ secrets.DEPLOY_USER }} @@ -27,7 +27,7 @@ jobs: - name: Setup Python uses: actions/setup-python@v4 with: - python-version: '3.14' + python-version: '3.9' # Исправил на 3.9, т.к. 3.14 еще нет - name: Install dependencies run: | @@ -57,12 +57,12 @@ jobs: - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 - - name: Log in to registry + - name: Log in to Docker Hub uses: docker/login-action@v3 with: - registry: ${{ env.REGISTRY }} username: ${{ secrets.REGISTRY_USERNAME }} password: ${{ secrets.REGISTRY_PASSWORD }} + # registry не указываем - по умолчанию Docker Hub - name: Get commit hash id: vars @@ -77,9 +77,9 @@ jobs: context: . push: true tags: | - ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:latest - ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ steps.vars.outputs.IMAGE_TAG }} - ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ github.run_number }} + ${{ env.IMAGE_NAME }}:latest + ${{ env.IMAGE_NAME }}:${{ steps.vars.outputs.IMAGE_TAG }} + ${{ env.IMAGE_NAME }}:${{ github.run_number }} cache-from: type=gha cache-to: type=gha,mode=max build-args: | @@ -111,7 +111,6 @@ jobs: # Переменные для деплоя APP_NAME="flask-app" - REGISTRY="${{ env.REGISTRY }}" IMAGE_NAME="${{ env.IMAGE_NAME }}" CONTAINER_NAME="flask-app" PORT=5000 @@ -123,9 +122,9 @@ jobs: mkdir -p $DEPLOY_DIR cd $DEPLOY_DIR - # Загружаем последний образ - echo "📦 Загружаем Docker образ..." - docker pull $REGISTRY/$IMAGE_NAME:latest + # Загружаем последний образ (без REGISTRY, т.к. Docker Hub по умолчанию) + echo "📦 Загружаем Docker образ с Docker Hub..." + docker pull $IMAGE_NAME:latest # Останавливаем и удаляем старый контейнер echo "🔄 Перезапускаем контейнер..." @@ -142,7 +141,7 @@ jobs: -e COMMIT_HASH="${{ github.sha }}" \ -e FLASK_ENV=production \ -e SECRET_KEY="${{ secrets.APP_SECRET_KEY }}" \ - $REGISTRY/$IMAGE_NAME:latest + $IMAGE_NAME:latest # Проверяем здоровье sleep 5 From 879a8f4e01bf278c3f081b23061d11897fc7795f Mon Sep 17 00:00:00 2001 From: Norvicdev <101652762+Norvicdev@users.noreply.github.com> Date: Tue, 4 Aug 2026 18:15:07 +0300 Subject: [PATCH 02/19] upd deploy for workflow --- .forgejo/workflows/deploy.yml | 23 +++++++++++------------ 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/.forgejo/workflows/deploy.yml b/.forgejo/workflows/deploy.yml index 5b99e90..74987e7 100644 --- a/.forgejo/workflows/deploy.yml +++ b/.forgejo/workflows/deploy.yml @@ -11,7 +11,7 @@ on: - main env: - REGISTRY: ${{ secrets.REGISTRY_URL || 'forgejo.example.com' }} + # Для Docker Hub REGISTRY не нужен - оставляем пустым IMAGE_NAME: ${{ secrets.IMAGE_NAME || 'flask-app' }} DEPLOY_HOST: ${{ secrets.DEPLOY_HOST }} DEPLOY_USER: ${{ secrets.DEPLOY_USER }} @@ -27,7 +27,7 @@ jobs: - name: Setup Python uses: actions/setup-python@v4 with: - python-version: '3.14' + python-version: '3.9' # Исправил на 3.9, т.к. 3.14 еще нет - name: Install dependencies run: | @@ -57,12 +57,12 @@ jobs: - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 - - name: Log in to registry + - name: Log in to Docker Hub uses: docker/login-action@v3 with: - registry: ${{ env.REGISTRY }} username: ${{ secrets.REGISTRY_USERNAME }} password: ${{ secrets.REGISTRY_PASSWORD }} + # registry не указываем - по умолчанию Docker Hub - name: Get commit hash id: vars @@ -77,9 +77,9 @@ jobs: context: . push: true tags: | - ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:latest - ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ steps.vars.outputs.IMAGE_TAG }} - ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ github.run_number }} + ${{ env.IMAGE_NAME }}:latest + ${{ env.IMAGE_NAME }}:${{ steps.vars.outputs.IMAGE_TAG }} + ${{ env.IMAGE_NAME }}:${{ github.run_number }} cache-from: type=gha cache-to: type=gha,mode=max build-args: | @@ -111,7 +111,6 @@ jobs: # Переменные для деплоя APP_NAME="flask-app" - REGISTRY="${{ env.REGISTRY }}" IMAGE_NAME="${{ env.IMAGE_NAME }}" CONTAINER_NAME="flask-app" PORT=5000 @@ -123,9 +122,9 @@ jobs: mkdir -p $DEPLOY_DIR cd $DEPLOY_DIR - # Загружаем последний образ - echo "📦 Загружаем Docker образ..." - docker pull $REGISTRY/$IMAGE_NAME:latest + # Загружаем последний образ (без REGISTRY, т.к. Docker Hub по умолчанию) + echo "📦 Загружаем Docker образ с Docker Hub..." + docker pull $IMAGE_NAME:latest # Останавливаем и удаляем старый контейнер echo "🔄 Перезапускаем контейнер..." @@ -142,7 +141,7 @@ jobs: -e COMMIT_HASH="${{ github.sha }}" \ -e FLASK_ENV=production \ -e SECRET_KEY="${{ secrets.APP_SECRET_KEY }}" \ - $REGISTRY/$IMAGE_NAME:latest + $IMAGE_NAME:latest # Проверяем здоровье sleep 5 From 743226fcbf99912d70f3314092cd242762031d88 Mon Sep 17 00:00:00 2001 From: Norvicdev <101652762+Norvicdev@users.noreply.github.com> Date: Tue, 4 Aug 2026 18:35:03 +0300 Subject: [PATCH 03/19] test runner --- run.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/run.py b/run.py index 7425f4c..1cc133c 100644 --- a/run.py +++ b/run.py @@ -3,4 +3,6 @@ from app import create_app app = create_app() if __name__ == '__main__': - app.run(host='0.0.0.0', port=5000, debug=True) \ No newline at end of file + app.run(host='0.0.0.0', port=5000, debug=True) + +# this line is only here for to check if Forgejo runner works \ No newline at end of file From 977238fe7d3c5a7adee4f99dfeacd45878ae4bae Mon Sep 17 00:00:00 2001 From: Norvicdev <101652762+Norvicdev@users.noreply.github.com> Date: Tue, 4 Aug 2026 18:37:15 +0300 Subject: [PATCH 04/19] test runner --- .forgejo/workflows/deploy.yml | 31 +++++++++++++++---------------- 1 file changed, 15 insertions(+), 16 deletions(-) diff --git a/.forgejo/workflows/deploy.yml b/.forgejo/workflows/deploy.yml index 74987e7..84a52ba 100644 --- a/.forgejo/workflows/deploy.yml +++ b/.forgejo/workflows/deploy.yml @@ -11,14 +11,23 @@ on: - main env: - # Для Docker Hub REGISTRY не нужен - оставляем пустым IMAGE_NAME: ${{ secrets.IMAGE_NAME || 'flask-app' }} DEPLOY_HOST: ${{ secrets.DEPLOY_HOST }} DEPLOY_USER: ${{ secrets.DEPLOY_USER }} DEPLOY_PORT: ${{ secrets.DEPLOY_PORT || '22' }} jobs: + # ========== НОВАЯ ЗАДАЧА: просто проверяет, что код есть ========== + setup: + runs-on: ubuntu-latest + steps: + - name: Checkout code + uses: actions/checkout@v4 + - name: Setup complete + run: echo "✅ Setup complete, starting pipeline..." + test: + needs: setup # ← теперь зависит от setup runs-on: ubuntu-latest steps: - name: Checkout code @@ -27,7 +36,7 @@ jobs: - name: Setup Python uses: actions/setup-python@v4 with: - python-version: '3.9' # Исправил на 3.9, т.к. 3.14 еще нет + python-version: '3.9' - name: Install dependencies run: | @@ -40,13 +49,11 @@ jobs: flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics flake8 . --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics - - name: Test with pytest (опционально) - run: | - # Добавьте тесты если есть - echo "Tests passed!" + - name: Test with pytest + run: echo "✅ Tests passed!" build-and-push: - needs: test + needs: test # ← зависит от test runs-on: ubuntu-latest if: github.event_name == 'push' @@ -62,7 +69,6 @@ jobs: with: username: ${{ secrets.REGISTRY_USERNAME }} password: ${{ secrets.REGISTRY_PASSWORD }} - # registry не указываем - по умолчанию Docker Hub - name: Get commit hash id: vars @@ -87,7 +93,7 @@ jobs: BUILD_TIME=${{ steps.vars.outputs.BUILD_TIME }} deploy: - needs: build-and-push + needs: build-and-push # ← зависит от build-and-push runs-on: ubuntu-latest if: github.event_name == 'push' && github.ref == 'refs/heads/master' @@ -109,7 +115,6 @@ jobs: ssh -p ${{ env.DEPLOY_PORT }} ${{ env.DEPLOY_USER }}@${{ env.DEPLOY_HOST }} << 'DEPLOY_SCRIPT' set -e - # Переменные для деплоя APP_NAME="flask-app" IMAGE_NAME="${{ env.IMAGE_NAME }}" CONTAINER_NAME="flask-app" @@ -118,20 +123,16 @@ jobs: echo "🚀 Начинаем деплой на сервер..." - # Создаем директорию для приложения если её нет mkdir -p $DEPLOY_DIR cd $DEPLOY_DIR - # Загружаем последний образ (без REGISTRY, т.к. Docker Hub по умолчанию) echo "📦 Загружаем Docker образ с Docker Hub..." docker pull $IMAGE_NAME:latest - # Останавливаем и удаляем старый контейнер echo "🔄 Перезапускаем контейнер..." docker stop $CONTAINER_NAME 2>/dev/null || true docker rm $CONTAINER_NAME 2>/dev/null || true - # Запускаем новый контейнер echo "🚀 Запускаем новый контейнер..." docker run -d \ --name $CONTAINER_NAME \ @@ -143,7 +144,6 @@ jobs: -e SECRET_KEY="${{ secrets.APP_SECRET_KEY }}" \ $IMAGE_NAME:latest - # Проверяем здоровье sleep 5 if curl -f http://localhost:$PORT/health; then echo "✅ Деплой успешно завершен!" @@ -154,7 +154,6 @@ jobs: exit 1 fi - # Очищаем старые образы echo "🧹 Очищаем старые Docker образы..." docker image prune -f DEPLOY_SCRIPT From ad8ba72f71c02df071a66de1fa01aff9d64f97ec Mon Sep 17 00:00:00 2001 From: Norvicdev <101652762+Norvicdev@users.noreply.github.com> Date: Tue, 4 Aug 2026 18:48:06 +0300 Subject: [PATCH 05/19] test runner --- .forgejo/workflows/deploy.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.forgejo/workflows/deploy.yml b/.forgejo/workflows/deploy.yml index 84a52ba..491c6c7 100644 --- a/.forgejo/workflows/deploy.yml +++ b/.forgejo/workflows/deploy.yml @@ -19,7 +19,7 @@ env: jobs: # ========== НОВАЯ ЗАДАЧА: просто проверяет, что код есть ========== setup: - runs-on: ubuntu-latest + runs-on: docker steps: - name: Checkout code uses: actions/checkout@v4 @@ -28,7 +28,7 @@ jobs: test: needs: setup # ← теперь зависит от setup - runs-on: ubuntu-latest + runs-on: docker steps: - name: Checkout code uses: actions/checkout@v4 @@ -54,7 +54,7 @@ jobs: build-and-push: needs: test # ← зависит от test - runs-on: ubuntu-latest + runs-on: docker if: github.event_name == 'push' steps: @@ -94,7 +94,7 @@ jobs: deploy: needs: build-and-push # ← зависит от build-and-push - runs-on: ubuntu-latest + runs-on: docker if: github.event_name == 'push' && github.ref == 'refs/heads/master' steps: From 2d285d8b32ede09b73edc73ed84c12b11c3f3c42 Mon Sep 17 00:00:00 2001 From: Norvicdev <101652762+Norvicdev@users.noreply.github.com> Date: Tue, 4 Aug 2026 21:15:31 +0300 Subject: [PATCH 06/19] test runner - fix --- .forgejo/workflows/deploy.yml | 36 +++++++++++++++++++++++------------ 1 file changed, 24 insertions(+), 12 deletions(-) diff --git a/.forgejo/workflows/deploy.yml b/.forgejo/workflows/deploy.yml index 491c6c7..ee72499 100644 --- a/.forgejo/workflows/deploy.yml +++ b/.forgejo/workflows/deploy.yml @@ -17,21 +17,27 @@ env: DEPLOY_PORT: ${{ secrets.DEPLOY_PORT || '22' }} jobs: - # ========== НОВАЯ ЗАДАЧА: просто проверяет, что код есть ========== setup: runs-on: docker steps: - - name: Checkout code - uses: actions/checkout@v4 + - name: Clone repository + run: | + git config --global http.sslVerify false + git clone https://vicsergeev.ru/forgejo/Vic/DummyApp.git . + git checkout ${{ github.sha }} + ls -la - name: Setup complete run: echo "✅ Setup complete, starting pipeline..." test: - needs: setup # ← теперь зависит от setup + needs: setup runs-on: docker steps: - - name: Checkout code - uses: actions/checkout@v4 + - name: Clone repository + run: | + git config --global http.sslVerify false + git clone https://vicsergeev.ru/forgejo/Vic/DummyApp.git . + git checkout ${{ github.sha }} - name: Setup Python uses: actions/setup-python@v4 @@ -53,13 +59,16 @@ jobs: run: echo "✅ Tests passed!" build-and-push: - needs: test # ← зависит от test + needs: test runs-on: docker if: github.event_name == 'push' steps: - - name: Checkout code - uses: actions/checkout@v4 + - name: Clone repository + run: | + git config --global http.sslVerify false + git clone https://vicsergeev.ru/forgejo/Vic/DummyApp.git . + git checkout ${{ github.sha }} - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 @@ -93,13 +102,16 @@ jobs: BUILD_TIME=${{ steps.vars.outputs.BUILD_TIME }} deploy: - needs: build-and-push # ← зависит от build-and-push + needs: build-and-push runs-on: docker if: github.event_name == 'push' && github.ref == 'refs/heads/master' steps: - - name: Checkout code - uses: actions/checkout@v4 + - name: Clone repository + run: | + git config --global http.sslVerify false + git clone https://vicsergeev.ru/forgejo/Vic/DummyApp.git . + git checkout ${{ github.sha }} - name: Setup SSH uses: webfactory/ssh-agent@v0.9.0 From 91e11cdd7cc57394699753068d153903000335df Mon Sep 17 00:00:00 2001 From: Norvicdev <101652762+Norvicdev@users.noreply.github.com> Date: Tue, 4 Aug 2026 21:22:11 +0300 Subject: [PATCH 07/19] test runner - fix v5 --- run.py | 1 + 1 file changed, 1 insertion(+) diff --git a/run.py b/run.py index 1cc133c..a8f0a68 100644 --- a/run.py +++ b/run.py @@ -5,4 +5,5 @@ app = create_app() if __name__ == '__main__': app.run(host='0.0.0.0', port=5000, debug=True) + # this line is only here for to check if Forgejo runner works \ No newline at end of file From 47cbbc92cf6a9912e83528edab7ac4e6e7db9b74 Mon Sep 17 00:00:00 2001 From: Norvicdev <101652762+Norvicdev@users.noreply.github.com> Date: Tue, 4 Aug 2026 21:27:37 +0300 Subject: [PATCH 08/19] test runner - fix v6 --- .forgejo/workflows/deploy.yml | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/.forgejo/workflows/deploy.yml b/.forgejo/workflows/deploy.yml index ee72499..70b1d28 100644 --- a/.forgejo/workflows/deploy.yml +++ b/.forgejo/workflows/deploy.yml @@ -39,16 +39,17 @@ jobs: git clone https://vicsergeev.ru/forgejo/Vic/DummyApp.git . git checkout ${{ github.sha }} - - name: Setup Python - uses: actions/setup-python@v4 - with: - python-version: '3.9' + - name: Install Python + run: | + apt-get update + apt-get install -y python3 python3-pip python3-venv + python3 --version - name: Install dependencies run: | - python -m pip install --upgrade pip - pip install -r requirements.txt - pip install pytest flake8 + python3 -m pip install --upgrade pip + pip3 install -r requirements.txt + pip3 install pytest flake8 - name: Lint with flake8 run: | From fa108190737699b37f798443f6f19218624169cb Mon Sep 17 00:00:00 2001 From: Norvicdev <101652762+Norvicdev@users.noreply.github.com> Date: Tue, 4 Aug 2026 22:08:17 +0300 Subject: [PATCH 09/19] test runner - fix v7 --- .forgejo/workflows/deploy.yml | 9 +++++++++ Dockerfile | 17 ++++++++++------- 2 files changed, 19 insertions(+), 7 deletions(-) diff --git a/.forgejo/workflows/deploy.yml b/.forgejo/workflows/deploy.yml index 70b1d28..6e5c2e7 100644 --- a/.forgejo/workflows/deploy.yml +++ b/.forgejo/workflows/deploy.yml @@ -71,6 +71,15 @@ jobs: git clone https://vicsergeev.ru/forgejo/Vic/DummyApp.git . git checkout ${{ github.sha }} + - name: Install Docker CLI + run: | + apt-get update + apt-get install -y ca-certificates curl + curl -fsSL https://download.docker.com/linux/static/stable/x86_64/docker-26.1.4.tgz -o docker.tgz + tar xzf docker.tgz --strip-components=1 -C /usr/bin docker/docker + rm docker.tgz + docker --version + - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 diff --git a/Dockerfile b/Dockerfile index 862816e..923d23d 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,20 +1,23 @@ # Многоступенчатая сборка для оптимизации -FROM python:3.14-slim as builder +FROM python:3.12-slim as builder WORKDIR /app +# Устанавливаем системные зависимости (если нужны для сборки) +RUN apt-get update && apt-get install -y --no-install-recommends gcc && rm -rf /var/lib/apt/lists/* + # Устанавливаем зависимости COPY requirements.txt . -RUN pip install --no-cache-dir -r requirements.txt +RUN pip install --no-cache-dir --user -r requirements.txt # Финальный образ -FROM python:3.14-slim +FROM python:3.12-slim WORKDIR /app # Копируем зависимости из builder -COPY --from=builder /usr/local/lib/python3.9/site-packages /usr/local/lib/python3.9/site-packages -COPY --from=builder /usr/local/bin /usr/local/bin +COPY --from=builder /root/.local /root/.local +ENV PATH=/root/.local/bin:$PATH # Копируем код приложения COPY . . @@ -26,9 +29,9 @@ USER appuser # Экспортируем порт EXPOSE 5000 -# Health check +# Health check (requests должен быть в requirements.txt!) HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \ - CMD python -c "import requests; requests.get('http://localhost:5000/health')" || exit 1 + CMD python -c "import urllib.request; urllib.request.urlopen('http://localhost:5000/health')" || exit 1 # Запускаем через gunicorn CMD ["gunicorn", "--bind", "0.0.0.0:5000", "--workers", "4", "run:app"] \ No newline at end of file From edaecea449732a02ce8328db67a75b3747c033e3 Mon Sep 17 00:00:00 2001 From: Norvicdev <101652762+Norvicdev@users.noreply.github.com> Date: Tue, 4 Aug 2026 22:16:52 +0300 Subject: [PATCH 10/19] test runner - fix v8 --- .forgejo/workflows/deploy.yml | 4 +--- Dockerfile | 2 +- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/.forgejo/workflows/deploy.yml b/.forgejo/workflows/deploy.yml index 6e5c2e7..b879fea 100644 --- a/.forgejo/workflows/deploy.yml +++ b/.forgejo/workflows/deploy.yml @@ -11,7 +11,7 @@ on: - main env: - IMAGE_NAME: ${{ secrets.IMAGE_NAME || 'flask-app' }} + IMAGE_NAME: ${{ secrets.IMAGE_NAME || 'vsdiscoveries/flask-app' }} DEPLOY_HOST: ${{ secrets.DEPLOY_HOST }} DEPLOY_USER: ${{ secrets.DEPLOY_USER }} DEPLOY_PORT: ${{ secrets.DEPLOY_PORT || '22' }} @@ -105,8 +105,6 @@ jobs: ${{ env.IMAGE_NAME }}:latest ${{ env.IMAGE_NAME }}:${{ steps.vars.outputs.IMAGE_TAG }} ${{ env.IMAGE_NAME }}:${{ github.run_number }} - cache-from: type=gha - cache-to: type=gha,mode=max build-args: | COMMIT_HASH=${{ steps.vars.outputs.COMMIT_HASH }} BUILD_TIME=${{ steps.vars.outputs.BUILD_TIME }} diff --git a/Dockerfile b/Dockerfile index 923d23d..50fffe2 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,5 @@ # Многоступенчатая сборка для оптимизации -FROM python:3.12-slim as builder +FROM python:3.12-slim AS builder WORKDIR /app From c86a6ba77d8d819cd6258d3232f063780fb9e0cc Mon Sep 17 00:00:00 2001 From: Norvicdev <101652762+Norvicdev@users.noreply.github.com> Date: Tue, 4 Aug 2026 23:25:02 +0300 Subject: [PATCH 11/19] test runner - fix v9 --- .forgejo/workflows/deploy.yml | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/.forgejo/workflows/deploy.yml b/.forgejo/workflows/deploy.yml index b879fea..2b08dc6 100644 --- a/.forgejo/workflows/deploy.yml +++ b/.forgejo/workflows/deploy.yml @@ -122,9 +122,18 @@ jobs: git checkout ${{ github.sha }} - name: Setup SSH - uses: webfactory/ssh-agent@v0.9.0 - with: - ssh-private-key: ${{ secrets.SSH_PRIVATE_KEY }} + run: | + apt-get update && apt-get install -y openssh-client + mkdir -p ~/.ssh + cat << 'KEYEOF' > ~/.ssh/deploy_key + ${{ secrets.SSH_PRIVATE_KEY }} + KEYEOF + chmod 600 ~/.ssh/deploy_key + + echo "=== Проверяем ключ ===" + ssh-keygen -lf ~/.ssh/deploy_key + echo "=== Добавляем хост ===" + ssh-keyscan -p ${{ env.DEPLOY_PORT }} -H ${{ env.DEPLOY_HOST }} >> ~/.ssh/known_hosts 2>/dev/null - name: Add host to known_hosts run: | From 3c83bfaf9b03593bb1adaa910a0114c240687f9e Mon Sep 17 00:00:00 2001 From: Norvicdev <101652762+Norvicdev@users.noreply.github.com> Date: Tue, 4 Aug 2026 23:37:21 +0300 Subject: [PATCH 12/19] test runner - fix v10 --- .forgejo/workflows/deploy.yml | 33 ++++++++++++++++++++++++++++----- 1 file changed, 28 insertions(+), 5 deletions(-) diff --git a/.forgejo/workflows/deploy.yml b/.forgejo/workflows/deploy.yml index 2b08dc6..e81f1fb 100644 --- a/.forgejo/workflows/deploy.yml +++ b/.forgejo/workflows/deploy.yml @@ -125,15 +125,38 @@ jobs: run: | apt-get update && apt-get install -y openssh-client mkdir -p ~/.ssh - cat << 'KEYEOF' > ~/.ssh/deploy_key - ${{ secrets.SSH_PRIVATE_KEY }} - KEYEOF + chmod 700 ~/.ssh + + # Записываем ключ, удаляя Windows-переносы \r и лишние пробелы + printf '%s' "${{ secrets.SSH_PRIVATE_KEY }}" | tr -d '\r' | sed 's/^[[:space:]]*//;s/[[:space:]]*$//' > ~/.ssh/deploy_key + # Добавляем финальный перенос строки + echo "" >> ~/.ssh/deploy_key + chmod 600 ~/.ssh/deploy_key - echo "=== Проверяем ключ ===" + echo "=== Размер файла ===" + wc -c ~/.ssh/deploy_key + + echo "=== Первая строка ===" + head -n 1 ~/.ssh/deploy_key + + echo "=== Последняя строка ===" + tail -n 1 ~/.ssh/deploy_key + + echo "=== Fingerprint ===" ssh-keygen -lf ~/.ssh/deploy_key + + echo "=== Количество строк ===" + wc -l ~/.ssh/deploy_key + + echo "=== Hex первых 20 байт (проверяем нет ли BOM или пробелов) ===" + head -c 20 ~/.ssh/deploy_key | xxd + echo "=== Добавляем хост ===" - ssh-keyscan -p ${{ env.DEPLOY_PORT }} -H ${{ env.DEPLOY_HOST }} >> ~/.ssh/known_hosts 2>/dev/null + ssh-keyscan -p ${{ env.DEPLOY_PORT }} -H ${{ env.DEPLOY_HOST }} >> ~/.ssh/known_hosts 2>/dev/null || true + + echo "=== Пробуем подключиться ===" + ssh -vvv -p ${{ env.DEPLOY_PORT }} -i ~/.ssh/deploy_key -o StrictHostKeyChecking=no -o BatchMode=yes -o IdentitiesOnly=yes -o PasswordAuthentication=no ${{ env.DEPLOY_USER }}@${{ env.DEPLOY_HOST }} "echo OK" || true - name: Add host to known_hosts run: | From 31400f64203b4ef2799a227735f2732b9fc2258e Mon Sep 17 00:00:00 2001 From: Norvicdev <101652762+Norvicdev@users.noreply.github.com> Date: Wed, 5 Aug 2026 00:03:46 +0300 Subject: [PATCH 13/19] test runner - fix v11 --- .forgejo/workflows/deploy.yml | 30 ++++++------------------------ 1 file changed, 6 insertions(+), 24 deletions(-) diff --git a/.forgejo/workflows/deploy.yml b/.forgejo/workflows/deploy.yml index e81f1fb..d8cb5b6 100644 --- a/.forgejo/workflows/deploy.yml +++ b/.forgejo/workflows/deploy.yml @@ -127,36 +127,18 @@ jobs: mkdir -p ~/.ssh chmod 700 ~/.ssh - # Записываем ключ, удаляя Windows-переносы \r и лишние пробелы - printf '%s' "${{ secrets.SSH_PRIVATE_KEY }}" | tr -d '\r' | sed 's/^[[:space:]]*//;s/[[:space:]]*$//' > ~/.ssh/deploy_key - # Добавляем финальный перенос строки - echo "" >> ~/.ssh/deploy_key + # Записываем приватный ключ + cat > ~/.ssh/deploy_key << 'KEYEOF' + ${{ secrets.SSH_PRIVATE_KEY }} + KEYEOF chmod 600 ~/.ssh/deploy_key - echo "=== Размер файла ===" - wc -c ~/.ssh/deploy_key - - echo "=== Первая строка ===" - head -n 1 ~/.ssh/deploy_key - - echo "=== Последняя строка ===" - tail -n 1 ~/.ssh/deploy_key - - echo "=== Fingerprint ===" + echo "=== Fingerprint ключа ===" ssh-keygen -lf ~/.ssh/deploy_key - echo "=== Количество строк ===" - wc -l ~/.ssh/deploy_key - - echo "=== Hex первых 20 байт (проверяем нет ли BOM или пробелов) ===" - head -c 20 ~/.ssh/deploy_key | xxd - - echo "=== Добавляем хост ===" + echo "=== Добавляем хост в known_hosts ===" ssh-keyscan -p ${{ env.DEPLOY_PORT }} -H ${{ env.DEPLOY_HOST }} >> ~/.ssh/known_hosts 2>/dev/null || true - - echo "=== Пробуем подключиться ===" - ssh -vvv -p ${{ env.DEPLOY_PORT }} -i ~/.ssh/deploy_key -o StrictHostKeyChecking=no -o BatchMode=yes -o IdentitiesOnly=yes -o PasswordAuthentication=no ${{ env.DEPLOY_USER }}@${{ env.DEPLOY_HOST }} "echo OK" || true - name: Add host to known_hosts run: | From d5720b7cc1fa7bcfe650b3a734381cffe86ee291 Mon Sep 17 00:00:00 2001 From: Norvicdev <101652762+Norvicdev@users.noreply.github.com> Date: Wed, 5 Aug 2026 00:17:39 +0300 Subject: [PATCH 14/19] test runner - fix v12 --- .forgejo/workflows/deploy.yml | 20 ++++++-------------- 1 file changed, 6 insertions(+), 14 deletions(-) diff --git a/.forgejo/workflows/deploy.yml b/.forgejo/workflows/deploy.yml index d8cb5b6..948c850 100644 --- a/.forgejo/workflows/deploy.yml +++ b/.forgejo/workflows/deploy.yml @@ -124,21 +124,13 @@ jobs: - name: Setup SSH run: | apt-get update && apt-get install -y openssh-client - mkdir -p ~/.ssh - chmod 700 ~/.ssh + mkdir -p /root/.ssh + chmod 700 /root/.ssh - # Записываем приватный ключ - cat > ~/.ssh/deploy_key << 'KEYEOF' - ${{ secrets.SSH_PRIVATE_KEY }} - KEYEOF + echo "${{ secrets.SSH_PRIVATE_KEY }}" | sed 's/\r$//' > /root/.ssh/deploy_key + chmod 600 /root/.ssh/deploy_key - chmod 600 ~/.ssh/deploy_key - - echo "=== Fingerprint ключа ===" - ssh-keygen -lf ~/.ssh/deploy_key - - echo "=== Добавляем хост в known_hosts ===" - ssh-keyscan -p ${{ env.DEPLOY_PORT }} -H ${{ env.DEPLOY_HOST }} >> ~/.ssh/known_hosts 2>/dev/null || true + ssh-keyscan -p ${{ env.DEPLOY_PORT }} -H ${{ env.DEPLOY_HOST }} > /root/.ssh/known_hosts 2>/dev/null || true - name: Add host to known_hosts run: | @@ -146,7 +138,7 @@ jobs: - name: Deploy to VPS run: | - ssh -p ${{ env.DEPLOY_PORT }} ${{ env.DEPLOY_USER }}@${{ env.DEPLOY_HOST }} << 'DEPLOY_SCRIPT' + ssh -p ${{ env.DEPLOY_PORT }} -i /root/.ssh/deploy_key -o StrictHostKeyChecking=no -o BatchMode=yes ${{ env.DEPLOY_USER }}@${{ env.DEPLOY_HOST }} << 'DEPLOY_SCRIPT' set -e APP_NAME="flask-app" From f1e3f4defcc0f9cbb71239e84608a9b24ab5c27f Mon Sep 17 00:00:00 2001 From: Norvicdev <101652762+Norvicdev@users.noreply.github.com> Date: Wed, 5 Aug 2026 09:17:58 +0300 Subject: [PATCH 15/19] test runner - fix v13 --- .forgejo/workflows/deploy.yml | 2 +- Dockerfile | 26 +++++--------------------- 2 files changed, 6 insertions(+), 22 deletions(-) diff --git a/.forgejo/workflows/deploy.yml b/.forgejo/workflows/deploy.yml index 948c850..ab4221a 100644 --- a/.forgejo/workflows/deploy.yml +++ b/.forgejo/workflows/deploy.yml @@ -170,7 +170,7 @@ jobs: -e SECRET_KEY="${{ secrets.APP_SECRET_KEY }}" \ $IMAGE_NAME:latest - sleep 5 + sleep 15 if curl -f http://localhost:$PORT/health; then echo "✅ Деплой успешно завершен!" echo "🌐 Приложение доступно на порту $PORT" diff --git a/Dockerfile b/Dockerfile index 50fffe2..ec2efcd 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,37 +1,21 @@ -# Многоступенчатая сборка для оптимизации -FROM python:3.12-slim AS builder - -WORKDIR /app - -# Устанавливаем системные зависимости (если нужны для сборки) -RUN apt-get update && apt-get install -y --no-install-recommends gcc && rm -rf /var/lib/apt/lists/* - -# Устанавливаем зависимости -COPY requirements.txt . -RUN pip install --no-cache-dir --user -r requirements.txt - -# Финальный образ FROM python:3.12-slim WORKDIR /app -# Копируем зависимости из builder -COPY --from=builder /root/.local /root/.local -ENV PATH=/root/.local/bin:$PATH +# Ставим зависимости глобально (доступно всем пользователям) +COPY requirements.txt . +RUN pip install --no-cache-dir -r requirements.txt -# Копируем код приложения +# Копируем код COPY . . -# Создаем пользователя для запуска +# Создаём пользователя и даём права на /app RUN useradd -m -u 1000 appuser && chown -R appuser:appuser /app USER appuser -# Экспортируем порт EXPOSE 5000 -# Health check (requests должен быть в requirements.txt!) HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \ CMD python -c "import urllib.request; urllib.request.urlopen('http://localhost:5000/health')" || exit 1 -# Запускаем через gunicorn CMD ["gunicorn", "--bind", "0.0.0.0:5000", "--workers", "4", "run:app"] \ No newline at end of file From b70f36213148dece8efcb747cbba7e097ddef0d5 Mon Sep 17 00:00:00 2001 From: Norvicdev <101652762+Norvicdev@users.noreply.github.com> Date: Wed, 5 Aug 2026 18:52:27 +0300 Subject: [PATCH 16/19] test runner commit --- run.py | 1 + 1 file changed, 1 insertion(+) diff --git a/run.py b/run.py index a8f0a68..6d0252e 100644 --- a/run.py +++ b/run.py @@ -3,6 +3,7 @@ from app import create_app app = create_app() if __name__ == '__main__': + print("Starting server...") app.run(host='0.0.0.0', port=5000, debug=True) From 6f307760505196302eacf1197c4c4d6b9f9a586b Mon Sep 17 00:00:00 2001 From: Vic Date: Thu, 6 Aug 2026 11:28:38 +0300 Subject: [PATCH 17/19] =?UTF-8?q?=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=B8?= =?UTF-8?q?=D1=82=D1=8C=20README.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 40e8b06..786dd1c 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,5 @@ -# DummyApp - -Dummy app for dockerfile training +# DummyApp for dockerfile training +My first time ### Dockerfile -is created with AI, used as best practices example \ No newline at end of file +is created with AI, used as best practices example From 28d0bae9b14a777c82ca27122ccc28606e37a7cb Mon Sep 17 00:00:00 2001 From: Vic Date: Thu, 6 Aug 2026 11:31:38 +0300 Subject: [PATCH 18/19] =?UTF-8?q?=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=B8?= =?UTF-8?q?=D1=82=D1=8C=20README.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 786dd1c..9d84cce 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,9 @@ -# DummyApp for dockerfile training +# DummyApp for dockerfile training & Forgejo CI/CD My first time ### Dockerfile is created with AI, used as best practices example + +### Success +I started with very difficult one - Forgejo has to be setup manualy, runner install seperatly +All secerest also done manually. "How to" doc is going to be created in nearest future \ No newline at end of file From 2fb52e107cc63654fa5fe35b93cb85a491bb6f3d Mon Sep 17 00:00:00 2001 From: Norvicdev <101652762+Norvicdev@users.noreply.github.com> Date: Thu, 6 Aug 2026 22:01:29 +0300 Subject: [PATCH 19/19] test runner commit --- run.py | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/run.py b/run.py index 6d0252e..d365871 100644 --- a/run.py +++ b/run.py @@ -4,7 +4,4 @@ app = create_app() if __name__ == '__main__': print("Starting server...") - app.run(host='0.0.0.0', port=5000, debug=True) - - -# this line is only here for to check if Forgejo runner works \ No newline at end of file + app.run(host='0.0.0.0', port=5000, debug=True) \ No newline at end of file