Repository navigation
199 lines (165 loc) · 6.18 KB
/
Copy pathdeploy.yml
File metadata and controls
199 lines (165 loc) · 6.18 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
name: Deploy
on:
push:
tags:
- "v*.*.*"
env:
PHP_VERSION: "8.4"
NODE_VERSION: "24"
defaults:
run:
working-directory: site_novo
jobs:
deploy:
name: Build e Deploy pra Hostinger
runs-on: ubuntu-latest
steps:
- name: Checkout do código
uses: actions/checkout@v4
- name: Configurar PHP
uses: shivammathur/setup-php@v2
with:
php-version: ${{ env.PHP_VERSION }}
coverage: none
- name: Configurar Node.js
uses: actions/setup-node@v4
with:
node-version: ${{ env.NODE_VERSION }}
cache: npm
cache-dependency-path: site_novo/package-lock.json
- name: Cache de dependências do Composer
uses: actions/cache@v4
with:
path: site_novo/vendor
key: composer-${{ runner.os }}-${{ hashFiles('site_novo/composer.lock') }}
- name: Instalar dependências do Composer (produção)
run: composer install --no-dev --prefer-dist --optimize-autoloader --no-interaction
- name: Instalar dependências do npm
run: npm ci
- name: Buildar assets do frontend
run: npm run build
- name: Criar .env de produção
run: |
cat > .env << EOF
APP_NAME="PHP-PB"
APP_ENV=production
APP_KEY="${{ secrets.APP_KEY }}"
APP_DEBUG=false
APP_URL="${{ secrets.APP_URL }}"
APP_LOCALE=pt_BR
APP_FALLBACK_LOCALE=en
LOG_CHANNEL=stack
LOG_LEVEL=error
DB_CONNECTION=mysql
DB_HOST="${{ secrets.DB_HOST }}"
DB_PORT="${{ secrets.DB_PORT }}"
DB_DATABASE="${{ secrets.DB_DATABASE }}"
DB_USERNAME="${{ secrets.DB_USERNAME }}"
DB_PASSWORD="${{ secrets.DB_PASSWORD }}"
SESSION_DRIVER=database
SESSION_LIFETIME=120
SESSION_DOMAIN=null
BROADCAST_CONNECTION=log
FILESYSTEM_DISK=local
QUEUE_CONNECTION=database
CACHE_STORE=database
MAIL_MAILER="${{ secrets.MAIL_MAILER }}"
MAIL_HOST="${{ secrets.MAIL_HOST }}"
MAIL_PORT="${{ secrets.MAIL_PORT }}"
MAIL_USERNAME="${{ secrets.MAIL_USERNAME }}"
MAIL_PASSWORD="${{ secrets.MAIL_PASSWORD }}"
MAIL_ENCRYPTION="${{ secrets.MAIL_ENCRYPTION }}"
MAIL_FROM_ADDRESS="${{ secrets.MAIL_FROM_ADDRESS }}"
MAIL_FROM_NAME="PHP-PB"
EOF
- name: Preparar pacote de deploy
run: |
cat > .deployignore << EOF
.git/
.github/
.gitignore
.env.example
.husky/
.editorconfig
.gitattributes
.dockerignore
Dockerfile
docker/
.lando.yml
.mcp.json
.ai/
.claude/
tests/
node_modules/
package-lock.json
vite.config.js
.deployignore
EOF
rsync -av --exclude-from=.deployignore . ../deploy-package/
mkdir -p ../deploy-package/storage/{logs,app/public,framework/{cache/data,sessions,views}}
mkdir -p ../deploy-package/bootstrap/cache
touch ../deploy-package/storage/logs/.gitkeep
chmod -R 755 ../deploy-package/storage
chmod -R 755 ../deploy-package/bootstrap/cache
- name: Backup de storage/app no servidor
uses: appleboy/ssh-action@v1.0.3
with:
host: ${{ secrets.HOSTINGER_HOST }}
username: ${{ secrets.HOSTINGER_USERNAME }}
key: ${{ secrets.HOSTINGER_SSH_KEY }}
port: ${{ secrets.HOSTINGER_PORT }}
timeout: 30s
command_timeout: 10m
script: |
cd /home/u486878136/domains/php-pb.net/public_html
mkdir -p /home/u486878136/backups/php-pb/storage
if [ -d "storage/app" ] && [ "$(ls -A storage/app 2>/dev/null)" ]; then
cp -r storage/app/* /home/u486878136/backups/php-pb/storage/ 2>/dev/null || true
fi
- name: Deploy via SCP
uses: appleboy/scp-action@v0.1.7
with:
host: ${{ secrets.HOSTINGER_HOST }}
username: ${{ secrets.HOSTINGER_USERNAME }}
key: ${{ secrets.HOSTINGER_SSH_KEY }}
port: ${{ secrets.HOSTINGER_PORT }}
source: "deploy-package/*"
target: "/home/u486878136/domains/php-pb.net/public_html"
strip_components: 1
rm: true
timeout: 30s
command_timeout: 10m
- name: Comandos pós-deploy
uses: appleboy/ssh-action@v1.0.3
with:
host: ${{ secrets.HOSTINGER_HOST }}
username: ${{ secrets.HOSTINGER_USERNAME }}
key: ${{ secrets.HOSTINGER_SSH_KEY }}
port: ${{ secrets.HOSTINGER_PORT }}
timeout: 30s
command_timeout: 10m
script: |
cd /home/u486878136/domains/php-pb.net/public_html
PHP_BIN="php"
# Restaura os uploads que existiam antes do deploy (posts, avatares etc)
if [ -d "/home/u486878136/backups/php-pb/storage" ] && [ "$(ls -A /home/u486878136/backups/php-pb/storage 2>/dev/null)" ]; then
mkdir -p storage/app
cp -r /home/u486878136/backups/php-pb/storage/* storage/app/ 2>/dev/null || true
rm -rf /home/u486878136/backups/php-pb
fi
$PHP_BIN artisan migrate --force
$PHP_BIN artisan config:clear
$PHP_BIN artisan cache:clear
$PHP_BIN artisan route:clear
$PHP_BIN artisan view:clear
$PHP_BIN artisan config:cache
$PHP_BIN artisan route:cache
$PHP_BIN artisan view:cache
$PHP_BIN artisan event:cache
find storage -type d -exec chmod 755 {} \; 2>/dev/null || true
find storage -type f -exec chmod 644 {} \; 2>/dev/null || true
find bootstrap/cache -type d -exec chmod 755 {} \; 2>/dev/null || true
find bootstrap/cache -type f -exec chmod 644 {} \; 2>/dev/null || true
# Link de storage manual (exec() geralmente desabilitado em shared hosting)
[ -L "public/storage" ] && rm "public/storage"
ln -sf "../storage/app/public" "public/storage"