File manager - Edit - /var/www/html/portalHomolog/deploy.sh
Back
#!/bin/bash # Script de deploy unificado - detecta automaticamente o ambiente # Windows (local) ou Linux (production) # Detecta o sistema operacional detect_os() { case "$(uname -s)" in MINGW*|MSYS*|CYGWIN*|Windows_NT) echo "windows" ;; Linux*) echo "linux" ;; Darwin*) echo "mac" ;; *) echo "unknown" ;; esac } OS=$(detect_os) echo "Sistema detectado: $OS" echo "==========================================" # Diretórios de upload em storage/app/public (migração e link simbólico) # legislacoes-pdf: symlink em public/downloads/legislacoes-pdf (config/filesystems.php) STORAGE_PUBLIC_DIRS=( arquivos arte_sacra atas banners boletins centros chamados comprovantes conselhos contas escolas noticias parques repositorios secretarias unidades documentos projetos-programas themes editais-ptmar-imagens editais-ptmar-documentos decretos-leis-ptmar parque-tecnologico-areas startups-ptmar-logos startups-ptmar-backgrounds contratos legislacoes-pdf observatorio cronogramas ) # Migra PDFs de legislação do diretório físico legado (public/downloads/legislacoes-pdf) # para storage/app/public/legislacoes-pdf, removendo a pasta real antes do storage:link. migrate_legislacao_pdf_legacy_directory() { local legacy_dir="public/downloads/legislacoes-pdf" local storage_dir="storage/app/public/legislacoes-pdf" mkdir -p public/downloads || exit 1 if [ ! -d "$storage_dir" ]; then mkdir -p "$storage_dir" || exit 1 fi if [ -d "$legacy_dir" ] && [ ! -L "$legacy_dir" ]; then echo "Migrando PDFs legados de legislação para storage..." shopt -s nullglob local file for file in "$legacy_dir"/*; do [ -f "$file" ] || continue local base base=$(basename "$file") if [ ! -f "$storage_dir/$base" ]; then mv "$file" "$storage_dir/" || exit 1 else rm -f "$file" || exit 1 fi done shopt -u nullglob rm -rf "$legacy_dir" fi } # Cria pastas do storage ausentes (evita falha no link simbólico e em uploads) ensure_storage_directories() { echo "Garantindo estrutura de diretórios do storage..." local laravel_dirs=( storage/app storage/app/public storage/framework/cache storage/framework/cache/data storage/framework/sessions storage/framework/testing storage/framework/views storage/logs bootstrap/cache ) local dir for dir in "${laravel_dirs[@]}"; do if [ ! -d "$dir" ]; then echo " Criando $dir" mkdir -p "$dir" || exit 1 fi done for dir in "${STORAGE_PUBLIC_DIRS[@]}"; do if [ ! -d "storage/app/public/$dir" ]; then echo " Criando storage/app/public/$dir" mkdir -p "storage/app/public/$dir" || exit 1 fi done } # Remove links do config/filesystems.php (storage:unlink falha no Windows: PHP is_link() = false) remove_configured_storage_links() { echo "Removendo links simbólicos existentes..." local link while IFS= read -r link; do link="${link%$'\r'}" [ -z "$link" ] && continue if [ -L "$link" ]; then rm -f "$link" elif [ "$OS" = "windows" ] && [ -e "$link" ]; then rm -rf "$link" fi done < <(php -r ' require "vendor/autoload.php"; $app = require "bootstrap/app.php"; $app->make(Illuminate\Contracts\Console\Kernel::class)->bootstrap(); $base = rtrim(str_replace("\\", "/", base_path()), "/"); foreach (array_keys(config("filesystems.links")) as $link) { $normalized = str_replace("\\", "/", $link); if (str_starts_with($normalized, $base)) { echo ltrim(substr($normalized, strlen($base)), "/"), PHP_EOL; } } ') } # Limpa caches do Laravel echo "Limpando caches do Laravel..." php artisan cache:clear php artisan config:clear php artisan view:clear php artisan view:cache ensure_storage_directories remove_configured_storage_links # Move diretórios para fora do public (ordem personalizada) echo "Movendo diretórios do storage..." cd storage/app/public || exit # Move cada diretório se existir for dir in "${STORAGE_PUBLIC_DIRS[@]}"; do if [ -d "$dir" ]; then mv "$dir" .. fi done cd - || exit # Remove arquivos antigos da pasta public (ordem correspondente) echo "Removendo arquivos antigos da pasta public..." rm -rf public/pmar/assets/img/arquivos rm -rf public/pmar/assets/img/arte_sacra rm -rf public/pmar/assets/img/banners rm -rf public/pmar/assets/files/atas rm -rf public/pmar/assets/files/boletins rm -rf public/pmar/assets/img/documentos rm -rf public/pmar/assets/img/centros rm -rf public/pmar/assets/img/chamados rm -rf public/pmar/assets/img/comprovantes rm -rf public/pmar/assets/img/conselhos rm -rf public/pmar/assets/img/contas rm -rf public/pmar/assets/img/escolas rm -rf public/pmar/assets/img/noticias rm -rf public/pmar/assets/img/parques rm -rf public/pmar/assets/files/repositorios rm -rf public/pmar/assets/img/secretarias rm -rf public/pmar/assets/img/unidades rm -rf public/pmar/assets/files/projetos-programas rm -rf public/pmar/assets/img/themes rm -rf public/pmar/assets/img/editais-ptmar-imagens rm -rf public/pmar/assets/img/licitacoes_procedimentos rm -rf public/pmar/assets/files/editais-ptmar-documentos rm -rf public/pmar/assets/files/decretos-leis-ptmar rm -rf public/pmar/assets/img/parque-tecnologico-areas rm -rf public/pmar/assets/img/startups-ptmar-logos rm -rf public/pmar/assets/img/startups-ptmar-backgrounds rm -rf public/pmar/assets/files/contratos # Move diretórios de volta para o storage público (na mesma ordem) echo "Movendo diretórios de volta para storage/app/public..." cd storage/app || exit for dir in "${STORAGE_PUBLIC_DIRS[@]}"; do if [ -d "$dir" ]; then mv "$dir" public fi done cd ../../ || exit # Volta para a raiz do portal # Corrige estrutura de diretórios (case-sensitive em Linux) echo "Corrigindo estrutura de diretórios..." if [ -d "app/Http/Requests/Saude/Fibromialgia/chamados" ]; then echo "Renomeando diretório chamados para Chamados..." mv "app/Http/Requests/Saude/Fibromialgia/chamados" "app/Http/Requests/Saude/Fibromialgia/Chamados" fi # Otimiza o Laravel echo "Otimizando Laravel..." php artisan optimize:clear # Garante execução das migrations em produção echo "Executando migrations..." php artisan migrate --force # Recria os links simbólicos do storage echo "Recriando links simbólicos do storage..." migrate_legislacao_pdf_legacy_directory remove_configured_storage_links php artisan storage:link if [ -L public/downloads/legislacoes-pdf ]; then echo "Link de legislação OK: public/downloads/legislacoes-pdf -> $(readlink public/downloads/legislacoes-pdf)" else echo "AVISO: public/downloads/legislacoes-pdf não é um symlink. Verifique php artisan storage:link." fi # Ajusta permissões apenas no Linux/Production if [ "$OS" = "linux" ]; then echo "Padronizando proprietários..." chown -R angra-admin:www-data . echo "Padronizando diretórios graváveis do Laravel..." chmod -R 775 storage chmod -R 775 bootstrap if [ -L public/storage ] || [ -d public/storage ]; then chmod -R 775 public/storage 2>/dev/null || true fi if [ -L public/downloads/legislacoes-pdf ] || [ -d public/downloads/legislacoes-pdf ]; then chmod -R 775 public/downloads/legislacoes-pdf 2>/dev/null || true fi echo "Padronizando diretório público..." chmod -R 755 public echo "Garantindo executáveis..." chmod 755 artisan if [ -f deploy.sh ]; then chmod 755 deploy.sh fi echo "" echo "================ AUDITORIA =================" echo "" echo "ROOT:" find . -user root echo "" echo "DIRS 777:" find . -type d -perm 0777 echo "" echo "FILES 777:" find . -type f -perm 0777 echo "" echo "PERMISSÕES:" ls -ld .git public storage bootstrap bootstrap/cache public/downloads/legislacoes-pdf 2>/dev/null echo "" echo "EXECUTÁVEIS:" ls -l artisan deploy.sh 2>/dev/null echo "" echo "================ FIM DA AUDITORIA =================" else echo "Pulando ajuste de permissões e auditoria (ambiente Windows/local)" fi echo "==========================================" echo "Rotina pós-deploy realizada com sucesso!"
| ver. 1.4 |
Github
|
.
| PHP 8.3.28 | Generation time: 0.02 |
proxy
|
phpinfo
|
Settings