@kirschbaum-development/sst-laravel 0.0.22 → 0.0.28
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Dockerfile.web +2 -3
- package/Dockerfile.worker +2 -1
- package/README.md +47 -2
- package/dist/bin/cli.js +360 -3
- package/dist/bin/cli.js.map +1 -1
- package/images/deploy.png +0 -0
- package/laravel-sst.ts +81 -25
- package/package.json +8 -3
package/Dockerfile.web
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
ARG PHP_VERSION=8.
|
|
1
|
+
ARG PHP_VERSION=8.4
|
|
2
2
|
FROM serversideup/php:${PHP_VERSION}-unit as base
|
|
3
3
|
|
|
4
4
|
USER root
|
|
@@ -41,14 +41,13 @@ USER www-data
|
|
|
41
41
|
|
|
42
42
|
FROM base as deploy
|
|
43
43
|
|
|
44
|
-
ARG ENV_FILENAME
|
|
45
44
|
ENV CONTAINER_TYPE=web
|
|
46
45
|
|
|
47
46
|
# Enable OPCache
|
|
48
47
|
ENV PHP_OPCACHE_ENABLE=1
|
|
49
48
|
|
|
50
49
|
COPY --chown=www-data:www-data . /var/www/html
|
|
51
|
-
COPY --chown=www-data:www-data
|
|
50
|
+
COPY --chown=www-data:www-data .sst/laravel/deploy/.env /var/www/html/.env
|
|
52
51
|
|
|
53
52
|
# Copy deploy script generated into .sst/laravel by the build step
|
|
54
53
|
COPY --chmod=755 .sst/laravel/deploy/60-deploy.sh /etc/entrypoint.d/60-deploy.sh
|
package/Dockerfile.worker
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
ARG PHP_VERSION=8.
|
|
1
|
+
ARG PHP_VERSION=8.4
|
|
2
2
|
FROM serversideup/php:${PHP_VERSION}-cli AS phpcli
|
|
3
3
|
|
|
4
4
|
##########
|
|
@@ -68,6 +68,7 @@ FROM base AS deploy
|
|
|
68
68
|
ENV CONTAINER_TYPE=cli
|
|
69
69
|
|
|
70
70
|
COPY --chown=www-data:www-data . /var/www/html
|
|
71
|
+
COPY --chown=www-data:www-data .sst/laravel/deploy/.env /var/www/html/.env
|
|
71
72
|
|
|
72
73
|
# Fix S6 Overlay issues with Big Cloud PaaS (https://github.com/serversideup/docker-php/pull/376#issuecomment-2179262427)
|
|
73
74
|
RUN chown -R www-data:www-data /run
|
package/README.md
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
# SST Laravel
|
|
2
2
|
|
|
3
|
+

|
|
4
|
+
|
|
3
5
|
SST Laravel is an unofficial extension of [SST](https://sst.dev) created by [Kirschbaum Development](https://kirschbaumdevelopment.com) to deploy your Laravel application to AWS behind a robust, reliable and scalable infrastructure, with all the power of SST.
|
|
4
6
|
|
|
5
7
|
SST is a framework that makes it easy to build modern full-stack applications on your own infrastructure.
|
|
@@ -55,8 +57,12 @@ Below is an example of setting up your application to receive HTTP requests, on
|
|
|
55
57
|
```js
|
|
56
58
|
const app = new LaravelService('MyLaravelApp', {
|
|
57
59
|
web: {
|
|
58
|
-
|
|
59
|
-
|
|
60
|
+
cpu: 1024,
|
|
61
|
+
memory: 2048,
|
|
62
|
+
domain: {
|
|
63
|
+
dns: sst.cloudflare.dns(),
|
|
64
|
+
name: 'laravel-sst-demo.example.com',
|
|
65
|
+
},
|
|
60
66
|
scaling: {
|
|
61
67
|
min: 1,
|
|
62
68
|
max: 3,
|
|
@@ -292,11 +298,50 @@ npx sst-laravel ssh {worker-name} --stage production
|
|
|
292
298
|
npx sst-laravel ssh worker --stage production
|
|
293
299
|
```
|
|
294
300
|
|
|
301
|
+
## Logs
|
|
302
|
+
|
|
303
|
+
You can view the logs for your application using the `sst-laravel logs` command.
|
|
304
|
+
|
|
305
|
+
```bash
|
|
306
|
+
npx sst-laravel logs {service} --stage production
|
|
307
|
+
npx sst-laravel logs web --stage production
|
|
308
|
+
npx sst-laravel logs worker --stage production
|
|
309
|
+
```
|
|
310
|
+
|
|
311
|
+
This will show the logs for your application in real-time.
|
|
312
|
+
|
|
313
|
+
**LOG_CHANNEL**
|
|
314
|
+
|
|
315
|
+
To send logs to AWS CloudWatch, you need to set the `LOG_CHANNEL` environment variable to `stderr`. In case this variable is not set in your specified environment file, SST Laravel will automatically add it to the environment file with the value of `stderr`.
|
|
316
|
+
|
|
317
|
+
## Troublshooting
|
|
318
|
+
|
|
319
|
+
**APP_URL**
|
|
320
|
+
|
|
321
|
+
In case your specified environment file does not contain the `APP_URL` variable, SST Laravel will automatically add it to the environment file with the value of the `web.domain` property.
|
|
322
|
+
|
|
323
|
+
**Load Balancer and trusted proxies**
|
|
324
|
+
|
|
325
|
+
SST Laravel puts the container behind a load balancer, so you must configure your Laravel application to trust the load balancer's IP addresses. You can do this by configuring the trusted proxies in `bootstrap/app.php`. If you deployed your app and it's trying to load assets using HTTP instead of HTTPS, this is likely the issue.
|
|
326
|
+
|
|
327
|
+
```php
|
|
328
|
+
->withMiddleware(function (Middleware $middleware) {
|
|
329
|
+
$middleware->trustProxies(at: '*');
|
|
330
|
+
$middleware->trustProxies(headers: Request::HEADER_X_FORWARDED_FOR |
|
|
331
|
+
Request::HEADER_X_FORWARDED_HOST |
|
|
332
|
+
Request::HEADER_X_FORWARDED_PORT |
|
|
333
|
+
Request::HEADER_X_FORWARDED_PROTO |
|
|
334
|
+
Request::HEADER_X_FORWARDED_AWS_ELB
|
|
335
|
+
);
|
|
336
|
+
})
|
|
337
|
+
```
|
|
338
|
+
|
|
295
339
|
***
|
|
296
340
|
|
|
297
341
|
### Roadmap
|
|
298
342
|
|
|
299
343
|
* Support for [SST Secrets](https://sst.dev/docs/component/secret/);
|
|
344
|
+
* Extend base Docker images;
|
|
300
345
|
* Add support for Inertia SSR;
|
|
301
346
|
* Add support for Octane with FrankedPHP;
|
|
302
347
|
* Add support for Laravel Reverb;
|
package/dist/bin/cli.js
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { Command } from 'commander';
|
|
3
|
-
import { ECSClient, ListTasksCommand, DescribeTasksCommand, ListClustersCommand } from '@aws-sdk/client-ecs';
|
|
3
|
+
import { ECSClient, ListTasksCommand, DescribeTasksCommand, ListClustersCommand, DescribeTaskDefinitionCommand } from '@aws-sdk/client-ecs';
|
|
4
|
+
import { IAMClient, CreateOpenIDConnectProviderCommand, ListOpenIDConnectProvidersCommand, CreateRoleCommand, AttachRolePolicyCommand, GetRoleCommand } from '@aws-sdk/client-iam';
|
|
4
5
|
import { select } from '@inquirer/prompts';
|
|
5
|
-
import { spawn } from 'child_process';
|
|
6
|
+
import { spawn, execSync } from 'child_process';
|
|
6
7
|
import * as fs from 'fs';
|
|
7
8
|
import * as path from 'path';
|
|
8
9
|
import { fileURLToPath } from 'url';
|
|
@@ -26,7 +27,7 @@ function findSstConfig() {
|
|
|
26
27
|
}
|
|
27
28
|
function extractLaravelComponents(configPath) {
|
|
28
29
|
const content = fs.readFileSync(configPath, 'utf-8');
|
|
29
|
-
const regex = /new\s+
|
|
30
|
+
const regex = /new\s+LaravelService\s*\(\s*['"`]([^'"`]+)['"`]/g;
|
|
30
31
|
const components = [];
|
|
31
32
|
let match;
|
|
32
33
|
while ((match = regex.exec(content)) !== null) {
|
|
@@ -34,6 +35,66 @@ function extractLaravelComponents(configPath) {
|
|
|
34
35
|
}
|
|
35
36
|
return components;
|
|
36
37
|
}
|
|
38
|
+
function extractEnvironmentFile(configPath, stage) {
|
|
39
|
+
const content = fs.readFileSync(configPath, 'utf-8');
|
|
40
|
+
// Find the start of environment block
|
|
41
|
+
const envMatch = content.match(/\benvironment\s*:\s*\{/);
|
|
42
|
+
if (!envMatch || envMatch.index === undefined) {
|
|
43
|
+
return null;
|
|
44
|
+
}
|
|
45
|
+
// Extract the environment block by counting braces
|
|
46
|
+
const startIndex = envMatch.index + envMatch[0].length;
|
|
47
|
+
let braceCount = 1;
|
|
48
|
+
let endIndex = startIndex;
|
|
49
|
+
for (let i = startIndex; i < content.length && braceCount > 0; i++) {
|
|
50
|
+
if (content[i] === '{')
|
|
51
|
+
braceCount++;
|
|
52
|
+
if (content[i] === '}')
|
|
53
|
+
braceCount--;
|
|
54
|
+
endIndex = i;
|
|
55
|
+
}
|
|
56
|
+
const envBlock = content.substring(startIndex, endIndex);
|
|
57
|
+
// Now find the file property within the environment block
|
|
58
|
+
const fileMatch = envBlock.match(/\bfile\s*:\s*[`'"]([^`'"]+)[`'"]/);
|
|
59
|
+
if (!fileMatch) {
|
|
60
|
+
return null;
|
|
61
|
+
}
|
|
62
|
+
let envFile = fileMatch[1];
|
|
63
|
+
// Replace ${$app.stage} with actual stage value
|
|
64
|
+
envFile = envFile.replace(/\$\{?\$app\.stage\}?/g, stage);
|
|
65
|
+
return envFile;
|
|
66
|
+
}
|
|
67
|
+
function detectGitHubRepo() {
|
|
68
|
+
try {
|
|
69
|
+
const remoteUrl = execSync('git remote get-url origin', { encoding: 'utf-8' }).trim();
|
|
70
|
+
const sshMatch = remoteUrl.match(/git@github\.com:([^/]+)\/(.+?)(?:\.git)?$/);
|
|
71
|
+
if (sshMatch) {
|
|
72
|
+
return `${sshMatch[1]}/${sshMatch[2].replace(/\.git$/, '')}`;
|
|
73
|
+
}
|
|
74
|
+
const httpsMatch = remoteUrl.match(/https:\/\/github\.com\/([^/]+)\/(.+?)(?:\.git)?$/);
|
|
75
|
+
if (httpsMatch) {
|
|
76
|
+
return `${httpsMatch[1]}/${httpsMatch[2].replace(/\.git$/, '')}`;
|
|
77
|
+
}
|
|
78
|
+
return null;
|
|
79
|
+
}
|
|
80
|
+
catch {
|
|
81
|
+
return null;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
function validateDeployment(stage) {
|
|
85
|
+
const configPath = findSstConfig();
|
|
86
|
+
if (!configPath) {
|
|
87
|
+
throw new Error('Could not find sst.config.ts or sst.config.js in current directory.');
|
|
88
|
+
}
|
|
89
|
+
const envFile = extractEnvironmentFile(configPath, stage);
|
|
90
|
+
if (envFile) {
|
|
91
|
+
const cwd = process.cwd();
|
|
92
|
+
const envFilePath = path.join(cwd, envFile);
|
|
93
|
+
if (!fs.existsSync(envFilePath)) {
|
|
94
|
+
throw new Error(`Environment file "${envFile}" not found. Please create the file or update your sst.config.ts configuration.`);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
}
|
|
37
98
|
const program = new Command();
|
|
38
99
|
program
|
|
39
100
|
.name('sst-laravel')
|
|
@@ -163,6 +224,7 @@ program
|
|
|
163
224
|
.requiredOption('-s, --stage <stage>', 'SST stage name')
|
|
164
225
|
.action(async (options) => {
|
|
165
226
|
try {
|
|
227
|
+
validateDeployment(options.stage);
|
|
166
228
|
const deployProcess = spawn('npx', ['sst', 'deploy', '--stage', options.stage], {
|
|
167
229
|
cwd: process.cwd(),
|
|
168
230
|
stdio: 'inherit',
|
|
@@ -324,5 +386,300 @@ program
|
|
|
324
386
|
process.exit(1);
|
|
325
387
|
}
|
|
326
388
|
});
|
|
389
|
+
program
|
|
390
|
+
.command('logs')
|
|
391
|
+
.description('Stream CloudWatch logs from a running ECS task')
|
|
392
|
+
.argument('[service]', 'Service to stream logs from (web, worker, or worker name) - optional')
|
|
393
|
+
.option('-s, --stage <stage>', 'SST stage name (required)')
|
|
394
|
+
.option('-c, --cluster <cluster>', 'ECS cluster name (optional, auto-detected from SST config)')
|
|
395
|
+
.option('-r, --region <region>', 'AWS region', process.env.AWS_REGION || 'us-east-1')
|
|
396
|
+
.option('-f, --follow', 'Follow log output (like tail -f)', true)
|
|
397
|
+
.option('--since <time>', 'Start time for logs (e.g., 5m, 1h, 2d)', '10m')
|
|
398
|
+
.action(async (service, options) => {
|
|
399
|
+
try {
|
|
400
|
+
const region = options.region;
|
|
401
|
+
const stage = options.stage;
|
|
402
|
+
if (!stage) {
|
|
403
|
+
console.error('Error: Stage is required. Use --stage flag to specify the SST stage.');
|
|
404
|
+
process.exit(1);
|
|
405
|
+
}
|
|
406
|
+
const ecsClient = new ECSClient({ region });
|
|
407
|
+
let clusterArn = options.cluster;
|
|
408
|
+
if (!clusterArn) {
|
|
409
|
+
const configPath = findSstConfig();
|
|
410
|
+
if (!configPath) {
|
|
411
|
+
console.error('Error: Could not find sst.config.ts or sst.config.js in current directory.');
|
|
412
|
+
console.error('Please use --cluster flag to specify cluster ARN manually.');
|
|
413
|
+
process.exit(1);
|
|
414
|
+
}
|
|
415
|
+
const components = extractLaravelComponents(configPath);
|
|
416
|
+
if (components.length === 0) {
|
|
417
|
+
console.error('Error: No Laravel components found in SST config.');
|
|
418
|
+
console.error('Please use --cluster flag to specify cluster ARN manually.');
|
|
419
|
+
process.exit(1);
|
|
420
|
+
}
|
|
421
|
+
if (components.length > 1) {
|
|
422
|
+
console.error('Error: Multiple Laravel components found in SST config.');
|
|
423
|
+
console.error(`Found: ${components.join(', ')}`);
|
|
424
|
+
console.error('Please use --cluster flag to specify which cluster to connect to.');
|
|
425
|
+
process.exit(1);
|
|
426
|
+
}
|
|
427
|
+
const componentName = components[0].replace(/-/g, '');
|
|
428
|
+
const clusterPattern = `${stage}-${componentName}Cluster`;
|
|
429
|
+
console.log(`Looking for cluster matching pattern: *${clusterPattern}`);
|
|
430
|
+
const listClustersCommand = new ListClustersCommand({});
|
|
431
|
+
const listClustersResponse = await ecsClient.send(listClustersCommand);
|
|
432
|
+
if (!listClustersResponse.clusterArns || listClustersResponse.clusterArns.length === 0) {
|
|
433
|
+
console.error('Error: No ECS clusters found in this region.');
|
|
434
|
+
process.exit(1);
|
|
435
|
+
}
|
|
436
|
+
const matchingCluster = listClustersResponse.clusterArns.find(arn => {
|
|
437
|
+
const clusterName = arn.split('/').pop();
|
|
438
|
+
return clusterName?.includes(stage) && clusterName?.includes(componentName);
|
|
439
|
+
});
|
|
440
|
+
if (!matchingCluster) {
|
|
441
|
+
console.error(`Error: No cluster found matching stage "${stage}" and component "${components[0]}".`);
|
|
442
|
+
console.error('Available clusters:');
|
|
443
|
+
listClustersResponse.clusterArns.forEach(arn => {
|
|
444
|
+
console.error(` - ${arn.split('/').pop()}`);
|
|
445
|
+
});
|
|
446
|
+
process.exit(1);
|
|
447
|
+
}
|
|
448
|
+
clusterArn = matchingCluster;
|
|
449
|
+
console.log(`Auto-detected cluster: ${clusterArn.split('/').pop()}`);
|
|
450
|
+
}
|
|
451
|
+
const listTasksCommand = new ListTasksCommand({
|
|
452
|
+
cluster: clusterArn,
|
|
453
|
+
desiredStatus: 'RUNNING'
|
|
454
|
+
});
|
|
455
|
+
const listTasksResponse = await ecsClient.send(listTasksCommand);
|
|
456
|
+
if (!listTasksResponse.taskArns || listTasksResponse.taskArns.length === 0) {
|
|
457
|
+
console.error('No running tasks found in cluster');
|
|
458
|
+
process.exit(1);
|
|
459
|
+
}
|
|
460
|
+
const describeTasksCommand = new DescribeTasksCommand({
|
|
461
|
+
cluster: clusterArn,
|
|
462
|
+
tasks: listTasksResponse.taskArns
|
|
463
|
+
});
|
|
464
|
+
const describeTasksResponse = await ecsClient.send(describeTasksCommand);
|
|
465
|
+
let matchingTask;
|
|
466
|
+
if (service) {
|
|
467
|
+
let servicePrefix;
|
|
468
|
+
if (service === 'web') {
|
|
469
|
+
servicePrefix = '-web';
|
|
470
|
+
}
|
|
471
|
+
else if (service === 'worker') {
|
|
472
|
+
servicePrefix = '-worker';
|
|
473
|
+
}
|
|
474
|
+
else {
|
|
475
|
+
servicePrefix = `-${service}`;
|
|
476
|
+
}
|
|
477
|
+
matchingTask = describeTasksResponse.tasks?.find(task => {
|
|
478
|
+
const containerName = task.containers?.[0]?.name || '';
|
|
479
|
+
return containerName.toLowerCase().includes(servicePrefix.toLowerCase());
|
|
480
|
+
});
|
|
481
|
+
}
|
|
482
|
+
if (!matchingTask) {
|
|
483
|
+
if (service) {
|
|
484
|
+
console.log(`\nNo running task found matching service: ${service}`);
|
|
485
|
+
}
|
|
486
|
+
console.log('Available tasks in cluster:\n');
|
|
487
|
+
const choices = describeTasksResponse.tasks?.map(task => {
|
|
488
|
+
const taskId = task.taskArn?.split('/').pop() || '';
|
|
489
|
+
const containerName = task.containers?.[0]?.name || 'unknown';
|
|
490
|
+
const status = task.lastStatus || 'unknown';
|
|
491
|
+
return {
|
|
492
|
+
name: `${containerName} (${taskId.substring(0, 8)}...) - ${status}`,
|
|
493
|
+
value: task,
|
|
494
|
+
description: `Task: ${taskId}`
|
|
495
|
+
};
|
|
496
|
+
}) || [];
|
|
497
|
+
if (choices.length === 0) {
|
|
498
|
+
console.error('No tasks available to select from.');
|
|
499
|
+
process.exit(1);
|
|
500
|
+
}
|
|
501
|
+
matchingTask = await select({
|
|
502
|
+
message: 'Select a task to stream logs from:',
|
|
503
|
+
choices
|
|
504
|
+
});
|
|
505
|
+
}
|
|
506
|
+
const taskDefinitionArn = matchingTask.taskDefinitionArn;
|
|
507
|
+
if (!taskDefinitionArn) {
|
|
508
|
+
console.error('Error: Could not find task definition ARN');
|
|
509
|
+
process.exit(1);
|
|
510
|
+
}
|
|
511
|
+
const describeTaskDefCommand = new DescribeTaskDefinitionCommand({
|
|
512
|
+
taskDefinition: taskDefinitionArn
|
|
513
|
+
});
|
|
514
|
+
const taskDefResponse = await ecsClient.send(describeTaskDefCommand);
|
|
515
|
+
const containerDef = taskDefResponse.taskDefinition?.containerDefinitions?.[0];
|
|
516
|
+
const logConfig = containerDef?.logConfiguration;
|
|
517
|
+
if (!logConfig || logConfig.logDriver !== 'awslogs') {
|
|
518
|
+
console.error('Error: Task does not use CloudWatch Logs (awslogs driver)');
|
|
519
|
+
process.exit(1);
|
|
520
|
+
}
|
|
521
|
+
const logGroup = logConfig.options?.['awslogs-group'];
|
|
522
|
+
if (!logGroup) {
|
|
523
|
+
console.error('Error: Could not determine CloudWatch log group');
|
|
524
|
+
process.exit(1);
|
|
525
|
+
}
|
|
526
|
+
const containerName = matchingTask.containers?.[0]?.name || 'unknown';
|
|
527
|
+
console.log(`Streaming logs from: ${containerName}`);
|
|
528
|
+
console.log(`Log group: ${logGroup}`);
|
|
529
|
+
console.log('');
|
|
530
|
+
const awsArgs = [
|
|
531
|
+
'logs',
|
|
532
|
+
'tail',
|
|
533
|
+
logGroup,
|
|
534
|
+
'--since', options.since || '10m'
|
|
535
|
+
];
|
|
536
|
+
if (options.follow) {
|
|
537
|
+
awsArgs.push('--follow');
|
|
538
|
+
}
|
|
539
|
+
const awsCommand = spawn('aws', awsArgs, {
|
|
540
|
+
stdio: 'inherit',
|
|
541
|
+
env: { ...process.env, AWS_REGION: region }
|
|
542
|
+
});
|
|
543
|
+
awsCommand.on('exit', (code) => {
|
|
544
|
+
process.exit(code || 0);
|
|
545
|
+
});
|
|
546
|
+
}
|
|
547
|
+
catch (error) {
|
|
548
|
+
console.error('Error:', error.message);
|
|
549
|
+
process.exit(1);
|
|
550
|
+
}
|
|
551
|
+
});
|
|
552
|
+
program
|
|
553
|
+
.command('github-iam')
|
|
554
|
+
.description('Create an IAM Role on AWS for GitHub Actions OIDC authentication for deployments')
|
|
555
|
+
.option('-r, --repo <repo>', 'GitHub repository in format owner/repo (auto-detected from git remote)')
|
|
556
|
+
.option('-b, --branch <branch>', 'Branch to allow deployments from (use * for all branches)', '*')
|
|
557
|
+
.option('--region <region>', 'AWS region', process.env.AWS_REGION || 'us-east-1')
|
|
558
|
+
.option('--role-name <name>', 'Name for the IAM role', 'github-actions-sst-deploy')
|
|
559
|
+
.action(async (options) => {
|
|
560
|
+
try {
|
|
561
|
+
const { branch, region, roleName } = options;
|
|
562
|
+
let repo = options.repo;
|
|
563
|
+
if (!repo) {
|
|
564
|
+
const detectedRepo = detectGitHubRepo();
|
|
565
|
+
if (detectedRepo) {
|
|
566
|
+
repo = detectedRepo;
|
|
567
|
+
console.log(`📦 Auto-detected repository: ${repo}`);
|
|
568
|
+
}
|
|
569
|
+
else {
|
|
570
|
+
console.error('Error: Could not auto-detect GitHub repository.');
|
|
571
|
+
console.error('Please use --repo flag to specify the repository in format owner/repo');
|
|
572
|
+
process.exit(1);
|
|
573
|
+
}
|
|
574
|
+
}
|
|
575
|
+
if (!repo.includes('/')) {
|
|
576
|
+
console.error('Error: Repository must be in format owner/repo');
|
|
577
|
+
process.exit(1);
|
|
578
|
+
}
|
|
579
|
+
const [owner, repoName] = repo.split('/');
|
|
580
|
+
const iamClient = new IAMClient({ region });
|
|
581
|
+
const githubOidcUrl = 'https://token.actions.githubusercontent.com';
|
|
582
|
+
const githubOidcArn = `arn:aws:iam::${await getAwsAccountId(iamClient)}:oidc-provider/token.actions.githubusercontent.com`;
|
|
583
|
+
console.log(`\n🔧 Setting up GitHub Actions OIDC for ${owner}/${repoName}...\n`);
|
|
584
|
+
const oidcProviderArn = await ensureGithubOidcProvider(iamClient, githubOidcUrl);
|
|
585
|
+
console.log(`✅ GitHub OIDC Provider: ${oidcProviderArn}`);
|
|
586
|
+
const trustPolicy = buildTrustPolicy(oidcProviderArn, owner, repoName, branch);
|
|
587
|
+
try {
|
|
588
|
+
const existingRole = await iamClient.send(new GetRoleCommand({ RoleName: roleName }));
|
|
589
|
+
console.log(`⚠️ Role "${roleName}" already exists with ARN: ${existingRole.Role?.Arn}`);
|
|
590
|
+
console.log(' If you need to update the trust policy, delete the role first and re-run this command.');
|
|
591
|
+
}
|
|
592
|
+
catch (error) {
|
|
593
|
+
if (error.name === 'NoSuchEntityException') {
|
|
594
|
+
const createRoleResponse = await iamClient.send(new CreateRoleCommand({
|
|
595
|
+
RoleName: roleName,
|
|
596
|
+
AssumeRolePolicyDocument: JSON.stringify(trustPolicy),
|
|
597
|
+
Description: `GitHub Actions deployment role for ${owner}/${repoName}`
|
|
598
|
+
}));
|
|
599
|
+
console.log(`✅ Created IAM Role: ${createRoleResponse.Role?.Arn}`);
|
|
600
|
+
await iamClient.send(new AttachRolePolicyCommand({
|
|
601
|
+
RoleName: roleName,
|
|
602
|
+
PolicyArn: 'arn:aws:iam::aws:policy/AdministratorAccess'
|
|
603
|
+
}));
|
|
604
|
+
console.log('✅ Attached AdministratorAccess policy');
|
|
605
|
+
}
|
|
606
|
+
else {
|
|
607
|
+
throw error;
|
|
608
|
+
}
|
|
609
|
+
}
|
|
610
|
+
console.log('\n📋 Add the following to your GitHub Actions workflow:\n');
|
|
611
|
+
console.log('```yaml');
|
|
612
|
+
console.log('permissions:');
|
|
613
|
+
console.log(' id-token: write');
|
|
614
|
+
console.log(' contents: read');
|
|
615
|
+
console.log('');
|
|
616
|
+
console.log('jobs:');
|
|
617
|
+
console.log(' deploy:');
|
|
618
|
+
console.log(' runs-on: ubuntu-latest');
|
|
619
|
+
console.log(' steps:');
|
|
620
|
+
console.log(' - uses: actions/checkout@v4');
|
|
621
|
+
console.log('');
|
|
622
|
+
console.log(' - name: Configure AWS Credentials');
|
|
623
|
+
console.log(' uses: aws-actions/configure-aws-credentials@v4');
|
|
624
|
+
console.log(' with:');
|
|
625
|
+
console.log(` role-to-assume: arn:aws:iam::ACCOUNT_ID:role/${roleName}`);
|
|
626
|
+
console.log(` aws-region: ${region}`);
|
|
627
|
+
console.log('');
|
|
628
|
+
console.log(' - name: Deploy with SST');
|
|
629
|
+
console.log(' run: npx sst deploy --stage production');
|
|
630
|
+
console.log('```\n');
|
|
631
|
+
console.log('💡 Replace ACCOUNT_ID with your AWS account ID in the workflow file.');
|
|
632
|
+
console.log(`💡 The role allows deployments from: ${branch === '*' ? 'all branches' : `branch "${branch}"`}`);
|
|
633
|
+
}
|
|
634
|
+
catch (error) {
|
|
635
|
+
console.error('Error:', error.message);
|
|
636
|
+
process.exit(1);
|
|
637
|
+
}
|
|
638
|
+
});
|
|
639
|
+
async function getAwsAccountId(iamClient) {
|
|
640
|
+
const { STSClient, GetCallerIdentityCommand } = await import('@aws-sdk/client-sts');
|
|
641
|
+
const stsClient = new STSClient({ region: iamClient.config.region });
|
|
642
|
+
const response = await stsClient.send(new GetCallerIdentityCommand({}));
|
|
643
|
+
return response.Account;
|
|
644
|
+
}
|
|
645
|
+
async function ensureGithubOidcProvider(iamClient, githubOidcUrl) {
|
|
646
|
+
const listResponse = await iamClient.send(new ListOpenIDConnectProvidersCommand({}));
|
|
647
|
+
const existingProvider = listResponse.OpenIDConnectProviderList?.find(provider => provider.Arn?.includes('token.actions.githubusercontent.com'));
|
|
648
|
+
if (existingProvider) {
|
|
649
|
+
return existingProvider.Arn;
|
|
650
|
+
}
|
|
651
|
+
const thumbprint = '6938fd4d98bab03faadb97b34396831e3780aea1';
|
|
652
|
+
const createResponse = await iamClient.send(new CreateOpenIDConnectProviderCommand({
|
|
653
|
+
Url: githubOidcUrl,
|
|
654
|
+
ClientIDList: ['sts.amazonaws.com'],
|
|
655
|
+
ThumbprintList: [thumbprint]
|
|
656
|
+
}));
|
|
657
|
+
return createResponse.OpenIDConnectProviderArn;
|
|
658
|
+
}
|
|
659
|
+
function buildTrustPolicy(oidcProviderArn, owner, repo, branch) {
|
|
660
|
+
const condition = branch === '*'
|
|
661
|
+
? `repo:${owner}/${repo}:*`
|
|
662
|
+
: `repo:${owner}/${repo}:ref:refs/heads/${branch}`;
|
|
663
|
+
return {
|
|
664
|
+
Version: '2012-10-17',
|
|
665
|
+
Statement: [
|
|
666
|
+
{
|
|
667
|
+
Effect: 'Allow',
|
|
668
|
+
Principal: {
|
|
669
|
+
Federated: oidcProviderArn
|
|
670
|
+
},
|
|
671
|
+
Action: 'sts:AssumeRoleWithWebIdentity',
|
|
672
|
+
Condition: {
|
|
673
|
+
StringEquals: {
|
|
674
|
+
'token.actions.githubusercontent.com:aud': 'sts.amazonaws.com'
|
|
675
|
+
},
|
|
676
|
+
StringLike: {
|
|
677
|
+
'token.actions.githubusercontent.com:sub': condition
|
|
678
|
+
}
|
|
679
|
+
}
|
|
680
|
+
}
|
|
681
|
+
]
|
|
682
|
+
};
|
|
683
|
+
}
|
|
327
684
|
program.parse();
|
|
328
685
|
//# sourceMappingURL=cli.js.map
|
package/dist/bin/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../bin/cli.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../bin/cli.ts"],"names":[],"mappings":"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"}
|
package/images/deploy.png
CHANGED
|
Binary file
|
package/laravel-sst.ts
CHANGED
|
@@ -25,7 +25,20 @@ enum ImageType {
|
|
|
25
25
|
Cli = 'cli',
|
|
26
26
|
}
|
|
27
27
|
|
|
28
|
-
export interface
|
|
28
|
+
export interface LaravelServiceArgs {
|
|
29
|
+
architecture?: ServiceArgs["architecture"];
|
|
30
|
+
cpu?: ServiceArgs["cpu"];
|
|
31
|
+
memory?: ServiceArgs["memory"];
|
|
32
|
+
storage?: ServiceArgs["storage"];
|
|
33
|
+
loadBalancer?: ServiceArgs["loadBalancer"];
|
|
34
|
+
scaling?: ServiceArgs["scaling"];
|
|
35
|
+
logging?: ServiceArgs["logging"];
|
|
36
|
+
health?: ServiceArgs["health"];
|
|
37
|
+
executionRole?: ServiceArgs["executionRole"];
|
|
38
|
+
permissions?: ServiceArgs["permissions"];
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
export interface LaravelWebArgs extends LaravelServiceArgs {
|
|
29
42
|
/**
|
|
30
43
|
* Custom domain for the web layer. (if you don't provide a domain name, you will be able to use the load balancer domain for testing (http only))
|
|
31
44
|
*/
|
|
@@ -72,18 +85,10 @@ export interface LaravelWebArgs {
|
|
|
72
85
|
dns?: Input<false | (Dns & {})>;
|
|
73
86
|
}
|
|
74
87
|
>;
|
|
75
|
-
|
|
76
|
-
loadBalancer?: ServiceArgs["loadBalancer"];
|
|
77
|
-
scaling?: ServiceArgs["scaling"];
|
|
78
|
-
|
|
79
|
-
// image?: ServiceArgs["image"];
|
|
80
88
|
}
|
|
81
89
|
|
|
82
|
-
export interface LaravelWorkerConfig {
|
|
90
|
+
export interface LaravelWorkerConfig extends LaravelServiceArgs {
|
|
83
91
|
name?: Input<string>;
|
|
84
|
-
link?: ServiceArgs["link"];
|
|
85
|
-
scaling?: ServiceArgs["scaling"];
|
|
86
|
-
|
|
87
92
|
/**
|
|
88
93
|
* Running horizon?
|
|
89
94
|
*/
|
|
@@ -204,6 +209,7 @@ export interface LaravelArgs extends ClusterArgs {
|
|
|
204
209
|
|
|
205
210
|
export class LaravelService extends Component {
|
|
206
211
|
private readonly services: Record<string, sst.aws.Service>;
|
|
212
|
+
private readonly _messages: string[] = [];
|
|
207
213
|
|
|
208
214
|
constructor(
|
|
209
215
|
name: string,
|
|
@@ -231,6 +237,26 @@ export class LaravelService extends Component {
|
|
|
231
237
|
fs.mkdirSync(pluginBuildPath + '/deploy', { recursive: true });
|
|
232
238
|
}
|
|
233
239
|
|
|
240
|
+
const envFilePath = path.resolve(pluginBuildPath, 'deploy', '.env');
|
|
241
|
+
|
|
242
|
+
const envFileHasVariable = (variableName: string): boolean => {
|
|
243
|
+
const content = fs.readFileSync(envFilePath, 'utf-8');
|
|
244
|
+
return content.split('\n').some(line => line.trim().startsWith(`${variableName}=`));
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
const envFileSetVariable = (variableName: string, value: string) => {
|
|
248
|
+
fs.appendFileSync(envFilePath, `\n${variableName}=${value}\n`);
|
|
249
|
+
this._messages.push(`Added ${variableName} to environment file: ${value}`);
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
const envFileSetVariableIfMissing = (variableName: string, value: string) => {
|
|
253
|
+
if (envFileHasVariable(variableName)) {
|
|
254
|
+
return;
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
envFileSetVariable(variableName, value);
|
|
258
|
+
}
|
|
259
|
+
|
|
234
260
|
prepareEnvironmentFile();
|
|
235
261
|
prepareDeploymentScript();
|
|
236
262
|
|
|
@@ -429,7 +455,6 @@ export class LaravelService extends Component {
|
|
|
429
455
|
'PHP_OPCACHE_ENABLE': args.config?.opcache? '1' : '0',
|
|
430
456
|
'AUTORUN_LARAVEL_MIGRATION': imageType === ImageType.Web ? 'true' : 'false',
|
|
431
457
|
'CONTAINER_TYPE': imageType,
|
|
432
|
-
'ENV_FILENAME': args.config?.environment?.file ?? '.env',
|
|
433
458
|
stage: "deploy",
|
|
434
459
|
platform: "linux/amd64",
|
|
435
460
|
...extraArgs
|
|
@@ -444,12 +469,6 @@ export class LaravelService extends Component {
|
|
|
444
469
|
function getEnvironmentVariables() {
|
|
445
470
|
const env = args.config?.environment?.vars || {};
|
|
446
471
|
|
|
447
|
-
if (args.web?.domain) {
|
|
448
|
-
if (typeof args.web.domain === 'string') {
|
|
449
|
-
(env as any)['APP_URL'] = args.web.domain;
|
|
450
|
-
}
|
|
451
|
-
}
|
|
452
|
-
|
|
453
472
|
return env;
|
|
454
473
|
}
|
|
455
474
|
|
|
@@ -483,7 +502,10 @@ export class LaravelService extends Component {
|
|
|
483
502
|
...customEnv,
|
|
484
503
|
};
|
|
485
504
|
|
|
486
|
-
|
|
505
|
+
fs.appendFileSync(envFilePath, '\n' + "# --- SST-LARAVEL AUTO-INJECTED VARIABLES ---" + '\n');
|
|
506
|
+
|
|
507
|
+
addAppUrlIfMissing();
|
|
508
|
+
envFileSetVariableIfMissing('LOG_CHANNEL', 'stderr');
|
|
487
509
|
|
|
488
510
|
all(Object.entries(resourcesEnvVars)).apply(entries => {
|
|
489
511
|
const envContent = entries
|
|
@@ -491,7 +513,7 @@ export class LaravelService extends Component {
|
|
|
491
513
|
.join('\n');
|
|
492
514
|
|
|
493
515
|
if (envContent) {
|
|
494
|
-
fs.appendFileSync(
|
|
516
|
+
fs.appendFileSync(envFilePath, '\n' + envContent);
|
|
495
517
|
}
|
|
496
518
|
});
|
|
497
519
|
};
|
|
@@ -516,22 +538,45 @@ export class LaravelService extends Component {
|
|
|
516
538
|
return;
|
|
517
539
|
}
|
|
518
540
|
|
|
519
|
-
const envDir = path.resolve(pluginBuildPath, 'deploy');
|
|
520
|
-
const dst = path.resolve(envDir, '.env');
|
|
521
541
|
const src = path.resolve(absSitePath, envFile);
|
|
522
542
|
|
|
523
543
|
if (fs.existsSync(src)) {
|
|
524
|
-
fs.copyFileSync(src,
|
|
525
|
-
fs.chmodSync(
|
|
544
|
+
fs.copyFileSync(src, envFilePath);
|
|
545
|
+
fs.chmodSync(envFilePath, 0o755);
|
|
526
546
|
} else {
|
|
527
|
-
fs.writeFileSync(
|
|
547
|
+
fs.writeFileSync(envFilePath, '');
|
|
528
548
|
}
|
|
529
549
|
|
|
530
|
-
if (
|
|
550
|
+
if (args.config?.environment?.autoInject !== false) {
|
|
531
551
|
applyLinkedResourcesToEnvironment();
|
|
532
552
|
}
|
|
533
553
|
}
|
|
534
554
|
|
|
555
|
+
function addAppUrlIfMissing() {
|
|
556
|
+
if (!args.web?.domain) {
|
|
557
|
+
return;
|
|
558
|
+
}
|
|
559
|
+
|
|
560
|
+
if (envFileHasVariable('APP_URL')) {
|
|
561
|
+
return;
|
|
562
|
+
}
|
|
563
|
+
|
|
564
|
+
let domainName: string | undefined;
|
|
565
|
+
|
|
566
|
+
if (typeof args.web.domain === 'string') {
|
|
567
|
+
domainName = args.web.domain;
|
|
568
|
+
} else if (typeof args.web.domain === 'object' && 'name' in args.web.domain) {
|
|
569
|
+
const name = (args.web.domain as { name: Input<string> }).name;
|
|
570
|
+
if (typeof name === 'string') {
|
|
571
|
+
domainName = name;
|
|
572
|
+
}
|
|
573
|
+
}
|
|
574
|
+
|
|
575
|
+
if (domainName) {
|
|
576
|
+
envFileSetVariable('APP_URL', `https://${domainName}`);
|
|
577
|
+
}
|
|
578
|
+
}
|
|
579
|
+
|
|
535
580
|
function prepareDeploymentScript() {
|
|
536
581
|
const deployDir = path.resolve(pluginBuildPath, 'deploy');
|
|
537
582
|
const dst = path.resolve(deployDir, '60-deploy.sh');
|
|
@@ -551,6 +596,8 @@ export class LaravelService extends Component {
|
|
|
551
596
|
fs.writeFileSync(dst, "#!/bin/sh\nexit 0\n");
|
|
552
597
|
fs.chmodSync(dst, 0o755);
|
|
553
598
|
}
|
|
599
|
+
|
|
600
|
+
this.registerOutputs({ _hint: this.messages });
|
|
554
601
|
};
|
|
555
602
|
|
|
556
603
|
/**
|
|
@@ -562,6 +609,15 @@ export class LaravelService extends Component {
|
|
|
562
609
|
public get url() {
|
|
563
610
|
return this.services['web'].url;
|
|
564
611
|
}
|
|
612
|
+
|
|
613
|
+
/**
|
|
614
|
+
* The messages from the service.
|
|
615
|
+
*
|
|
616
|
+
* This is useful for debugging and troubleshooting.
|
|
617
|
+
*/
|
|
618
|
+
public get messages() {
|
|
619
|
+
return this._messages;
|
|
620
|
+
}
|
|
565
621
|
}
|
|
566
622
|
|
|
567
623
|
const __pulumiType = "sst:aws:LaravelService";
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kirschbaum-development/sst-laravel",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.28",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "An unofficial extension of SST to deploy containerized Laravel applications to AWS Fargate.",
|
|
6
6
|
"main": "laravel-sst.ts",
|
|
@@ -24,8 +24,7 @@
|
|
|
24
24
|
".dockerignore"
|
|
25
25
|
],
|
|
26
26
|
"scripts": {
|
|
27
|
-
"build": "tsc"
|
|
28
|
-
"publish": "npm publish --access public"
|
|
27
|
+
"build": "tsc"
|
|
29
28
|
},
|
|
30
29
|
"repository": {
|
|
31
30
|
"type": "git",
|
|
@@ -51,6 +50,8 @@
|
|
|
51
50
|
},
|
|
52
51
|
"dependencies": {
|
|
53
52
|
"@aws-sdk/client-ecs": "^3.0.0",
|
|
53
|
+
"@aws-sdk/client-iam": "^3.0.0",
|
|
54
|
+
"@aws-sdk/client-sts": "^3.0.0",
|
|
54
55
|
"@inquirer/prompts": "^7.0.0",
|
|
55
56
|
"@pulumi/aws": "^7.8.0",
|
|
56
57
|
"@pulumi/pulumi": "^3.203.0",
|
|
@@ -59,5 +60,9 @@
|
|
|
59
60
|
"devDependencies": {
|
|
60
61
|
"@types/node": "^20.0.0",
|
|
61
62
|
"typescript": "^5.0.0"
|
|
63
|
+
},
|
|
64
|
+
"publishConfig": {
|
|
65
|
+
"access": "public",
|
|
66
|
+
"provenance": true
|
|
62
67
|
}
|
|
63
68
|
}
|