-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMakefile
More file actions
299 lines (224 loc) · 8.5 KB
/
Copy pathMakefile
File metadata and controls
299 lines (224 loc) · 8.5 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
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
# Include file with .env variables if existsMake
-include .env
# Define default values for variables
COMPOSE_FILE ?= compose.local.yml
COMPOSE_PROFILES ?=
DUMP_NAME ?= dump
PEST_ARGS ?= --bail
DUSK_ARGS ?=
#-----------------------------------------------------------
# Docker
#-----------------------------------------------------------
# Init variables for development environment
env.dev:
cp .env.dev .env
# Init variables for production environment
env.prod:
cp .env.prod .env
# Build and start containers
bup: build.all up
# Start containers
up:
docker compose -f ${COMPOSE_FILE} up
# Start container daemonized
up.d:
docker compose -f ${COMPOSE_FILE} up -d
# Force recreate containers and start
up.recreate:
docker compose -f ${COMPOSE_FILE} up --force-recreate
# Stop containers
down:
docker compose -f ${COMPOSE_FILE} down --remove-orphans
# Build containers
build:
docker compose -f ${COMPOSE_FILE} build
# Build containers without cache
build.fresh:
docker compose -f ${COMPOSE_FILE} build --no-cache
# Show list of running containers
ps:
docker compose -f ${COMPOSE_FILE} ps
# Restart containers
restart:
docker compose -f ${COMPOSE_FILE} restart
# Reboot containers
reboot: down up
# View output logs from containers
logs:
docker compose -f ${COMPOSE_FILE} logs --tail 500
# Follow output logs from containers
logs.f:
docker compose -f ${COMPOSE_FILE} logs --tail 500 -f
#-----------------------------------------------------------
# Client Application
#-----------------------------------------------------------
# Enter the app container
bash.client:
docker compose -f ${COMPOSE_FILE} exec client /bin/bash
# Restart the app container
restart.client:
docker compose -f ${COMPOSE_FILE} restart client
# Alias to restart the app container
rc: restart.client
# Install client package(s)
ni:
docker compose -f ${COMPOSE_FILE} exec client ni ${PACKAGE}
# Upgrade client packages
nu:
docker compose -f ${COMPOSE_FILE} exec client nu
# Install client package(s) with dev dependencies
ni.d:
docker compose -f ${COMPOSE_FILE} exec client ni ${PACKAGE} -D
# Uninstall client package(s)
nun:
docker compose -f ${COMPOSE_FILE} exec client nun ${PACKAGE}
#-----------------------------------------------------------
# API Application
#-----------------------------------------------------------
# Enter the app container
bash:
docker compose -f ${COMPOSE_FILE} exec api /bin/bash
# Restart the app container
restart.api:
docker compose -f ${COMPOSE_FILE} restart api
# Alias to restart the app container
ra: restart.api
# Run the tinker service
a.tinker:
docker compose -f ${COMPOSE_FILE} exec api php artisan tinker
# Clear the app cache
a.cache.clear:
docker compose -f ${COMPOSE_FILE} exec api php artisan cache:clear
# Migrate the database
a.migrate:
docker compose -f ${COMPOSE_FILE} exec api php artisan migrate
# Rollback the database
a.rollback:
docker compose -f ${COMPOSE_FILE} exec api php artisan migrate:rollback
# Seed the database
a.seed:
docker compose -f ${COMPOSE_FILE} exec api php artisan db:seed
# Fresh the database state
a.fresh:
docker compose -f ${COMPOSE_FILE} exec api php artisan migrate:fresh
# Refresh the database
a.refresh: a.fresh a.seed
# List available database dumps
db.dump.list:
cd .data/mariadb/dumps && ls -A1
# Dump database into an encrypted and gzipped file
db.dump:
docker compose -f ${COMPOSE_FILE} exec mariadb mysqldump -uroot -p${DB_ROOT_PASSWORD} --all-databases | gzip | openssl enc -aes-256-cbc -k ${DB_ROOT_PASSWORD} > .data/mariadb/dumps/${DUMP_NAME}.sql.gz.enc
# Restore database from a dump (default dump name is dump)
# Restore specific dump by setting DUMP_NAME variable (db.restore DUMP_NAME=local)
db.restore:
docker compose -f ${COMPOSE_FILE} exec mariadb openssl enc -d -aes-256-cbc -k ${DB_ROOT_PASSWORD} -in /var/mariadb/dumps/${DUMP_NAME}.sql.gz.enc | gzip -d > .data/mariadb/dumps/${DUMP_NAME}.sql
docker compose -f ${COMPOSE_FILE} exec -T mariadb mysql -uroot -p${DB_ROOT_PASSWORD} < .data/mariadb/dumps/${DUMP_NAME}.sql
# Restart the queue process
queue.restart:
docker compose -f ${COMPOSE_FILE} exec queue php artisan queue:restart
# Install composer dependencies
composer.install:
docker compose -f ${COMPOSE_FILE} exec api composer install
# Install composer dependencies from stopped containers
r.composer.install:
docker compose -f ${COMPOSE_FILE} run --rm --no-deps api composer install
# Alias to install composer dependencies
ci: composer.install
# Update composer dependencies
composer.update:
docker compose -f ${COMPOSE_FILE} exec api composer update
# Update composer dependencies from stopped containers
r.composer.update:
docker compose -f ${COMPOSE_FILE} run --rm --no-deps api composer update
# Alias to update composer dependencies
cu: composer.update
# Show outdated composer dependencies
composer.outdated:
docker compose -f ${COMPOSE_FILE} exec api composer outdated
# PHP composer autoload command
composer.autoload:
docker compose -f ${COMPOSE_FILE} exec api composer dump-autoload
# Generate a symlink to the storage directory
storage.link:
docker compose -f ${COMPOSE_FILE} exec api php artisan storage:link --relative
# Give permissions of the storage folder to the www-data
storage.perm:
sudo chmod -R 755 storage
sudo chown -R www-data:www-data storage
# Give permissions of the storage folder to the current user
storage.perm.me:
sudo chmod -R 755 storage
sudo chown -R "$(shell id -u):$(shell id -g)" storage
# Give files ownership to the current user
own.me:
sudo chown -R "$(shell id -u):$(shell id -g)" .
# Reload the Octane workers
octane.reload:
docker compose -f ${COMPOSE_FILE} exec api php artisan octane:reload
# Alias to reload the Octane workers
or: octane.reload
#-----------------------------------------------------------
# Testing (only for development environment)
#-----------------------------------------------------------
# Run phpunit tests (requires 'phpunit/phpunit' composer package)
test:
docker compose -f ${COMPOSE_FILE} exec api ./vendor/bin/pest ${PEST_ARGS}
# Alias to run pest tests
t: test
# Run phpunit tests with the coverage mode (TODO: install PCOV or other lib)
coverage:
docker compose -f ${COMPOSE_FILE} exec api ./vendor/bin/pest --coverage-html ./api/.coverage
# Run dusk tests (requires 'laravel/dusk' composer package)
dusk:
docker compose -f ${COMPOSE_FILE} exec api php artisan dusk
# Generate code metrics (requires 'phpmetrics/phpmetrics' composer package)
metrics:
docker compose -f ${COMPOSE_FILE} exec api ./vendor/bin/phpmetrics --report-html=./api/.metrics api
#-----------------------------------------------------------
# Redis
#-----------------------------------------------------------
# Enter the redis container
redis:
docker compose -f ${COMPOSE_FILE} exec redis redis-cli
# Flush the redis state
redis.flush:
docker compose -f ${COMPOSE_FILE} exec redis redis-cli FLUSHALL
#-----------------------------------------------------------
# Swarm
#-----------------------------------------------------------
# Deploy the stack
swarm.deploy:
docker stack deploy --compose-file ${COMPOSE_FILE} api
# Remove/stop the stack
swarm.rm:
docker stack rm api
# List of stack services
swarm.services:
docker stack services api
# List the tasks in the stack
swarm.ps:
docker stack ps api
# Init the Docker Swarm Leader node
swarm.init:
docker swarm init
#-----------------------------------------------------------
# Danger zone
#-----------------------------------------------------------
# Prune stopped docker containers and dangling images
danger.prune:
docker system prune
# Backup database
# db.backup:
# docker compose -f ${COMPOSE_FILE} exec mariadb sh -c 'rm -rf /var/mariadb/backup/*'
# docker compose -f ${COMPOSE_FILE} exec mariadb mariabackup \
# --target-dir=/var/mariadb/backup/ \
# --user root --password ${DB_ROOT_PASSWORD} \
# --backup --stream=xbstream | gzip | openssl enc -aes-256-cbc -k ${DB_ROOT_PASSWORD} > .data/mariadb/backup/backup.xb.gz.enc
# Restore database
# db.restore:
# docker compose -f ${COMPOSE_FILE} run --rm --no-deps mariadb sh -c 'openssl enc -d -aes-256-cbc -k secret -in /var/mariadb/backup/backup.xb.gz.enc |gzip -d| mbstream -x'
# docker compose -f ${COMPOSE_FILE} run --rm --no-deps mariadb mariabackup --prepare --target-dir /var/mariadb/backup
# docker compose -f ${COMPOSE_FILE} run --rm --no-deps mariadb sh -c 'rm -rf /var/lib/mysql/*'
# docker compose -f ${COMPOSE_FILE} run --rm --no-deps mariadb mariabackup --copy-back --target-dir /var/mariadb/backup
# docker compose -f ${COMPOSE_FILE} run --rm --no-deps mariadb chown -R mysql:mysql /var/lib/mysql/