HEX
Server: LiteSpeed
System: Linux php-prod-3.spaceapp.ru 5.15.0-151-generic #161-Ubuntu SMP Tue Jul 22 14:25:40 UTC 2025 x86_64
User: xnsbl7462 (1008)
PHP: 7.4.33
Disabled: pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
Upload Files
File: /home/marketing.cfbon.ru/public_html/.gitlab-ci.yml
before_script:
  - apk add --no-cache openssh-client rsync
  - mkdir -p ~/.ssh
  - echo "$SSH_PRIVATE_KEY" | tr -d '\r' > ~/.ssh/id_rsa
  - chmod 600 ~/.ssh/id_rsa
  - ssh-keyscan $DEV_IP >> ~/.ssh/known_hosts

stages:
    - deploy
    - dependencies
    - migration
    - post_deploy
    - launching

variables:
  DEV_PHP_PATH: /usr/local/lsws/lsphp83/bin/php
  COMPOSER_PHP_PATH: /usr/bin/composer
  PROD_DOCKER_DIR: /www/admin

deploy:
    stage: deploy
    script:
      - echo "Deploying to Staging..."
      - rsync -avz --delete --exclude='.git' --exclude='storage' --exclude='vendor' --exclude='node_modules' -e "ssh -o StrictHostKeyChecking=no" ./ $DEV_USER@$DEV_IP:$DEV_DEPLOY_PATH
      - echo "Deployed successfully"
    rules:
    # Запустить, если это MR в ветку dev
    - if: '$CI_MERGE_REQUEST_TARGET_BRANCH_NAME == "dev"'
      when: always
    # Запустить, если это пуш в ветку dev
    - if: '$CI_COMMIT_BRANCH == "dev"'
      when: always
    # Во всех остальных случаях не запускать
    - when: never

setup_environment:
  stage: dependencies
  needs: ["deploy"]
  script:
    - echo "Configuring .env..."
    - ssh $DEV_USER@$DEV_IP "cd $DEV_DEPLOY_PATH && [ -f .env.dev ] && [ ! -f .env ] && cp .env.dev .env || true"
    - echo ".env ready"
  rules:
    # Запустить, если это MR в ветку dev
    - if: '$CI_MERGE_REQUEST_TARGET_BRANCH_NAME == "dev"'
      when: always
    # Запустить, если это пуш в ветку dev
    - if: '$CI_COMMIT_BRANCH == "dev"'
      when: always
    # Во всех остальных случаях не запускать
    - when: never

create_storage_dirs:
  stage: dependencies
  needs: ["setup_environment" ]
  script:
    - echo "Creating storage directories..."
    - ssh $DEV_USER@$DEV_IP "mkdir -p $DEV_DEPLOY_PATH/storage/framework/cache/data"
    - ssh $DEV_USER@$DEV_IP "mkdir -p $DEV_DEPLOY_PATH/storage/framework/sessions"
    - ssh $DEV_USER@$DEV_IP "mkdir -p $DEV_DEPLOY_PATH/storage/framework/views"
    - echo "Storage directories created"
  rules:
    # Запустить, если это MR в ветку dev
    - if: '$CI_MERGE_REQUEST_TARGET_BRANCH_NAME == "dev"'
      when: always
    # Запустить, если это пуш в ветку dev
    - if: '$CI_COMMIT_BRANCH == "dev"'
      when: always
    # Во всех остальных случаях не запускать
    - when: never

install_dependencies:
  stage: dependencies
  needs: ["create_storage_dirs"]
  script:
    - echo "Installing dependencies..."
    - ssh $DEV_USER@$DEV_IP "cd $DEV_DEPLOY_PATH && $DEV_PHP_PATH $COMPOSER_PHP_PATH install --no-dev --optimize-autoloader"
    - echo "Dependencies installed"
  rules:
    # Запустить, если это MR в ветку dev
    - if: '$CI_MERGE_REQUEST_TARGET_BRANCH_NAME == "dev"'
      when: always
    # Запустить, если это пуш в ветку dev
    - if: '$CI_COMMIT_BRANCH == "dev"'
      when: always
    # Во всех остальных случаях не запускать
    - when: never

migrations:
  stage: migration
  needs: ["install_dependencies"]
  script:
    - echo "Running migrations..."
    - ssh $DEV_USER@$DEV_IP "cd $DEV_DEPLOY_PATH && $DEV_PHP_PATH artisan migrate --force"
    - echo "Success migrate"
  rules:
    # Запустить, если это MR в ветку dev
    - if: '$CI_MERGE_REQUEST_TARGET_BRANCH_NAME == "dev"'
      when: always
    # Запустить, если это пуш в ветку dev
    - if: '$CI_COMMIT_BRANCH == "dev"'
      when: always
    # Во всех остальных случаях не запускать
    - when: never

seeders:
  stage: migration
  needs: ["migrations"]
  script:
    - echo "Running seeders..."
    - ssh $DEV_USER@$DEV_IP "cd $DEV_DEPLOY_PATH && $DEV_PHP_PATH artisan db:seed"
    - echo "Success seeder"
  rules:
    # Запустить, если это MR в ветку dev
    - if: '$CI_MERGE_REQUEST_TARGET_BRANCH_NAME == "dev"'
      when: always
    # Запустить, если это пуш в ветку dev
    - if: '$CI_COMMIT_BRANCH == "dev"'
      when: always
    # Во всех остальных случаях не запускать
    - when: never

permissions:
  stage: post_deploy
  needs: ["seeders"]
  script:
    - echo "Fixing permissions..."
    - ssh $DEV_USER@$DEV_IP "chmod -R 755 $DEV_DEPLOY_PATH/storage"
    - ssh $DEV_USER@$DEV_IP "chmod -R 755 $DEV_DEPLOY_PATH/bootstrap/cache"
    # - ssh $DEV_USER@$DEV_IP "chown -R www-data:www-data $DEV_DEPLOY_PATH/storage"
    # - ssh $DEV_USER@$DEV_IP "chown -R www-data:www-data $DEV_DEPLOY_PATH/bootstrap/cache"
    - echo "Permissions fixed"
  rules:
    # Запустить, если это MR в ветку dev
    - if: '$CI_MERGE_REQUEST_TARGET_BRANCH_NAME == "dev"'
      when: always
    # Запустить, если это пуш в ветку dev
    - if: '$CI_COMMIT_BRANCH == "dev"'
      when: always
    # Во всех остальных случаях не запускать
    - when: never

post_deploy:
  stage: post_deploy
  needs: ["permissions"]
  script:
    - echo "Running post-deploy tasks..."
    - ssh $DEV_USER@$DEV_IP "cd $DEV_DEPLOY_PATH && $DEV_PHP_PATH artisan optimize:clear"
    - ssh $DEV_USER@$DEV_IP "cd $DEV_DEPLOY_PATH && $DEV_PHP_PATH artisan config:clear"
    - ssh $DEV_USER@$DEV_IP "cd $DEV_DEPLOY_PATH && $DEV_PHP_PATH artisan view:clear"
    - ssh $DEV_USER@$DEV_IP "cd $DEV_DEPLOY_PATH && $DEV_PHP_PATH artisan optimize"
    - ssh $DEV_USER@$DEV_IP "cd $DEV_DEPLOY_PATH && $DEV_PHP_PATH artisan storage:link"
    - echo "Post-deploy tasks completed"
  rules:
    # Запустить, если это MR в ветку dev
    - if: '$CI_MERGE_REQUEST_TARGET_BRANCH_NAME == "dev"'
      when: always
    # Запустить, если это пуш в ветку dev
    - if: '$CI_COMMIT_BRANCH == "dev"'
      when: always
    # Во всех остальных случаях не запускать
    - when: never

safe_deploy_prod:
  stage: deploy
  script:
    - echo "Deploying to Staging..."
    - rsync -avz --dry-run --delete --exclude='.git' --exclude='storage' --exclude='vendor' --exclude='node_modules' -e "ssh -p $PROD_PORT -o StrictHostKeyChecking=no" ./ $PROD_USER@$PROD_IP:$PROD_DEPLOY_PATH
    - echo "Deployed successfully"
  rules:
    # Запустить, если это MR в ветку main
    - if: '$CI_MERGE_REQUEST_TARGET_BRANCH_NAME == "main" && $CI_PIPELINE_SOURCE == "merge_request_event"'
      when: always
    - when: never

deploy_prod:
  stage: deploy
  script:
    - echo "Deploying to Staging..."
    - rsync -avz --delete --exclude='.git' --exclude='storage' --exclude='vendor' --exclude='node_modules' -e "ssh -p $PROD_PORT -o StrictHostKeyChecking=no" ./ $PROD_USER@$PROD_IP:$PROD_DEPLOY_PATH
    - echo "Deployed successfully"
  rules:
    - if: '$CI_PIPELINE_SOURCE == "merge_request_event" && $CI_COMMIT_BRANCH == "main"'
      when: always
    - if: '$CI_COMMIT_BRANCH == "main" && $CI_PIPELINE_SOURCE == "push"'
      when: always
    - when: never

setup_prod_environment:
  stage: dependencies
  needs: ["deploy_prod"]
  script:
    - echo "Configuring .env..."
    - ssh -p $PROD_PORT -o StrictHostKeyChecking=no $PROD_USER@$PROD_IP "cd $PROD_DEPLOY_PATH && [ -f .env.prod ] && [ ! -f .env ] && cp .env.prod .env || true"
    - echo ".env ready"
  rules:
    - if: '$CI_PIPELINE_SOURCE == "merge_request_event" && $CI_COMMIT_BRANCH == "main"'
      when: always
    - if: '$CI_COMMIT_BRANCH == "main" && $CI_PIPELINE_SOURCE == "push"'
      when: always
    - when: never

install_prod_dependencies:
  stage: dependencies
  needs: ["setup_prod_environment"]
  script:
    - echo "Installing dependencies..."
    - ssh -p $PROD_PORT -o StrictHostKeyChecking=no $PROD_USER@$PROD_IP "cd $PROD_DOCKER_DIR && docker-compose exec -T php composer install --no-dev --optimize-autoloader"
    - echo "Dependencies installed"
  rules:
    - if: '$CI_PIPELINE_SOURCE == "merge_request_event" && $CI_COMMIT_BRANCH == "main"'
      when: always
    - if: '$CI_COMMIT_BRANCH == "main" && $CI_PIPELINE_SOURCE == "push"'
      when: always
    - when: never

migrations_prod:
  stage: migration
  needs: ["install_prod_dependencies"]
  script:
    - echo "Running migrations..."
    - ssh -p $PROD_PORT -o StrictHostKeyChecking=no $PROD_USER@$PROD_IP "cd $PROD_DOCKER_DIR && docker-compose exec -T php php artisan migrate --force"
    - echo "Success migrate"
  rules:
    - if: '$CI_PIPELINE_SOURCE == "merge_request_event" && $CI_COMMIT_BRANCH == "main"'
      when: always
    - if: '$CI_COMMIT_BRANCH == "main" && $CI_PIPELINE_SOURCE == "push"'
      when: always
    - when: never

clear_cache:
  stage: post_deploy
  needs: ["migrations_prod"]
  script:
    - echo "Clearing.."
    - ssh -p $PROD_PORT -o StrictHostKeyChecking=no $PROD_USER@$PROD_IP "cd $PROD_DOCKER_DIR && docker-compose exec -T php php artisan optimize:clear"
    - echo "Success cleare cache"
  rules:
    - if: '$CI_PIPELINE_SOURCE == "merge_request_event" && $CI_COMMIT_BRANCH == "main"'
      when: always
    - if: '$CI_COMMIT_BRANCH == "main" && $CI_PIPELINE_SOURCE == "push"'
      when: always
    - when: never

restart_queue:
  stage: post_deploy
  needs: ["clear_cache"]
  script:
    - echo "Restarting.."
    - ssh -p $PROD_PORT -o StrictHostKeyChecking=no $PROD_USER@$PROD_IP "cd $PROD_DOCKER_DIR && docker-compose exec -T php supervisorctl restart admin-laravel-worker:*"
    - echo "Success restart admin-laravel-worker"
  rules:
    - if: '$CI_PIPELINE_SOURCE == "merge_request_event" && $CI_COMMIT_BRANCH == "main"'
      when: always
    - if: '$CI_COMMIT_BRANCH == "main" && $CI_PIPELINE_SOURCE == "push"'
      when: always
    - when: never