Add site redirects (#552)

* feat(redirects): add redirects to sites

* chore(style): fixed coding style issues

* style: fix php-stan docblocks

* style: pint cleanup

* tests: fixed redirect test suite

* feat: vhosts include additional configs

* fix: use exact location matching

* - add enums
- use queues
- use vhost rather than separate conf files
- vhost formatter
- cleanup

* generate docs

---------

Co-authored-by: Saeed Vaziry <mr.saeedvaziry@gmail.com>
This commit is contained in:
Jamie Wood
2025-03-31 16:30:57 +01:00
committed by GitHub
parent 7882d2022c
commit f483f7fdca
53 changed files with 6944 additions and 4495 deletions

View File

@ -1,19 +1,19 @@
## Autogenerated by Scribe. DO NOT MODIFY.
name: sites
name: services
description: ''
endpoints:
-
httpMethods:
- GET
uri: 'api/projects/{project_id}/servers/{server_id}/sites'
uri: 'api/projects/{project_id}/servers/{server_id}/services'
metadata:
groupName: sites
groupName: services
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: list
description: 'Get all sites.'
description: 'Get all services.'
authenticated: true
custom: []
headers:
@ -52,7 +52,7 @@ endpoints:
responses:
-
status: 200
content: '{"data":[{"id":null,"server_id":null,"source_control_id":null,"type":"laravel","type_data":null,"domain":"test.com","aliases":null,"web_directory":"\/","path":"\/home","php_version":"8.2","repository":null,"branch":"main","status":"ready","port":null,"user":"vito","progress":100,"created_at":null,"updated_at":null},{"id":null,"server_id":null,"source_control_id":null,"type":"laravel","type_data":null,"domain":"test.com","aliases":null,"web_directory":"\/","path":"\/home","php_version":"8.2","repository":null,"branch":"main","status":"ready","port":null,"user":"vito","progress":100,"created_at":null,"updated_at":null}],"links":{"first":"\/?page=1","last":"\/?page=1","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"links":[{"url":null,"label":"&laquo; Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next &raquo;","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}'
content: '{"data":[{"id":null,"server_id":null,"type":null,"type_data":null,"name":null,"version":null,"unit":null,"status":null,"is_default":null,"created_at":null,"updated_at":null},{"id":null,"server_id":null,"type":null,"type_data":null,"name":null,"version":null,"unit":null,"status":null,"is_default":null,"created_at":null,"updated_at":null}],"links":{"first":"\/?page=1","last":"\/?page=1","prev":null,"next":null},"meta":{"current_page":1,"from":1,"last_page":1,"links":[{"url":null,"label":"&laquo; Previous","active":false},{"url":"\/?page=1","label":"1","active":true},{"url":null,"label":"Next &raquo;","active":false}],"path":"\/","per_page":25,"to":2,"total":2}}'
headers: []
description: ''
custom: []
@ -60,212 +60,7 @@ endpoints:
auth:
- headers
- Authorization
- 'Bearer 3V64fhkdgEvD5Z1cP6aea8b'
controller: null
method: null
route: null
custom: []
-
httpMethods:
- POST
uri: 'api/projects/{project_id}/servers/{server_id}/sites'
metadata:
groupName: sites
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: create
description: 'Create a new site.'
authenticated: true
custom: []
headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json
Accept: application/json
urlParameters:
project_id:
name: project_id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
server_id:
name: server_id
description: 'The ID of the server.'
required: true
example: 29
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 29
queryParameters: []
cleanQueryParameters: []
bodyParameters:
type:
name: type
description: ''
required: true
example: php-blank
type: string
enumValues:
- php
- php-blank
- phpmyadmin
- laravel
- wordpress
- load-balancer
exampleWasSpecified: false
nullable: false
custom: []
domain:
name: domain
description: ''
required: true
example: harum
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
aliases:
name: aliases
description: ''
required: true
example:
- voluptatem
type: 'string[]'
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
php_version:
name: php_version
description: 'One of the installed PHP Versions'
required: true
example: '7.4'
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
web_directory:
name: web_directory
description: 'Required for PHP and Laravel sites'
required: true
example: public
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
source_control:
name: source_control
description: 'Source control ID, Required for Sites which support source control'
required: true
example: amet
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
repository:
name: repository
description: 'Repository, Required for Sites which support source control'
required: true
example: organization/repository
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
branch:
name: branch
description: 'Branch, Required for Sites which support source control'
required: true
example: main
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
composer:
name: composer
description: 'Run composer if site supports composer'
required: true
example: true
type: boolean
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
version:
name: version
description: 'Version, if the site type requires a version like PHPMyAdmin'
required: true
example: 5.2.1
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
user:
name: user
description: 'user, to isolate the website under a new user'
required: true
example: et
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
method:
name: method
description: 'Load balancer method, Required if the site type is Load balancer'
required: true
example: least-connections
type: string
enumValues:
- round-robin
- least-connections
- ip-hash
exampleWasSpecified: false
nullable: false
custom: []
cleanBodyParameters:
type: php-blank
domain: harum
aliases:
- voluptatem
php_version: '7.4'
web_directory: public
source_control: amet
repository: organization/repository
branch: main
composer: true
version: 5.2.1
user: et
method: least-connections
fileParameters: []
responses:
-
status: 200
content: '{"id":null,"server_id":null,"source_control_id":null,"type":"laravel","type_data":null,"domain":"test.com","aliases":null,"web_directory":"\/","path":"\/home","php_version":"8.2","repository":null,"branch":"main","status":"ready","port":null,"user":"vito","progress":100,"created_at":null,"updated_at":null}'
headers: []
description: ''
custom: []
responseFields: []
auth:
- headers
- Authorization
- 'Bearer EVDP3fa1vga8Zk5cd466ebh'
- 'Bearer c4d6561av3ehkVagPfZb8DE'
controller: null
method: null
route: null
@ -273,14 +68,14 @@ endpoints:
-
httpMethods:
- GET
uri: 'api/projects/{project_id}/servers/{server_id}/sites/{id}'
uri: 'api/projects/{project_id}/servers/{server_id}/services/{id}'
metadata:
groupName: sites
groupName: services
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: show
description: 'Get a site by ID.'
description: 'Get a service by ID.'
authenticated: true
custom: []
headers:
@ -310,9 +105,9 @@ endpoints:
custom: []
id:
name: id
description: 'The ID of the site.'
description: 'The ID of the service.'
required: true
example: 43
example: 169
type: integer
enumValues: []
exampleWasSpecified: false
@ -321,7 +116,7 @@ endpoints:
cleanUrlParameters:
project_id: 1
server_id: 29
id: 43
id: 169
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
@ -330,7 +125,7 @@ endpoints:
responses:
-
status: 200
content: '{"id":null,"server_id":null,"source_control_id":null,"type":"laravel","type_data":null,"domain":"test.com","aliases":null,"web_directory":"\/","path":"\/home","php_version":"8.2","repository":null,"branch":"main","status":"ready","port":null,"user":"vito","progress":100,"created_at":null,"updated_at":null}'
content: '{"id":null,"server_id":null,"type":null,"type_data":null,"name":null,"version":null,"unit":null,"status":null,"is_default":null,"created_at":null,"updated_at":null}'
headers: []
description: ''
custom: []
@ -338,80 +133,7 @@ endpoints:
auth:
- headers
- Authorization
- 'Bearer b3h4Zegva1kEcdVfD8P5a66'
controller: null
method: null
route: null
custom: []
-
httpMethods:
- DELETE
uri: 'api/projects/{project_id}/servers/{server_id}/sites/{site_id}'
metadata:
groupName: sites
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: delete
description: 'Delete site.'
authenticated: true
custom: []
headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json
Accept: application/json
urlParameters:
project_id:
name: project_id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
server_id:
name: server_id
description: 'The ID of the server.'
required: true
example: 29
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
site_id:
name: site_id
description: 'The ID of the site.'
required: true
example: 43
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 29
site_id: 43
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
cleanBodyParameters: []
fileParameters: []
responses:
-
status: 204
content: null
headers: []
description: ''
custom: []
responseFields: []
auth:
- headers
- Authorization
- 'Bearer cDe1b4f6a63EagP5vkdZ8Vh'
- 'Bearer 8ab6dPD5gh1EZfk36vaVe4c'
controller: null
method: null
route: null
@ -419,14 +141,14 @@ endpoints:
-
httpMethods:
- POST
uri: 'api/projects/{project_id}/servers/{server_id}/sites/{site_id}/load-balancer'
uri: 'api/projects/{project_id}/servers/{server_id}/services/{service_id}/start'
metadata:
groupName: sites
groupName: services
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: load-balancer
description: 'Update load balancer.'
title: start
description: 'Start service.'
authenticated: true
custom: []
headers:
@ -454,11 +176,11 @@ endpoints:
exampleWasSpecified: false
nullable: false
custom: []
site_id:
name: site_id
description: 'The ID of the site.'
service_id:
name: service_id
description: 'The ID of the service.'
required: true
example: 43
example: 169
type: integer
enumValues: []
exampleWasSpecified: false
@ -467,208 +189,11 @@ endpoints:
cleanUrlParameters:
project_id: 1
server_id: 29
site_id: 43
service_id: 169
queryParameters: []
cleanQueryParameters: []
bodyParameters:
method:
name: method
description: 'Load balancer method, Required if the site type is Load balancer'
required: true
example: ip-hash
type: string
enumValues:
- round-robin
- least-connections
- ip-hash
exampleWasSpecified: false
nullable: false
custom: []
servers:
name: servers
description: 'Array of servers including server, port, weight, backup. (server is the local IP of the server)'
required: true
example:
- accusantium
type: 'string[]'
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanBodyParameters:
method: ip-hash
servers:
- accusantium
fileParameters: []
responses:
-
status: 200
content: null
headers: []
description: ''
custom: []
responseFields: []
auth:
- headers
- Authorization
- 'Bearer e65dDaaP6V4E3Zcf8hgvkb1'
controller: null
method: null
route: null
custom: []
-
httpMethods:
- PUT
uri: 'api/projects/{project_id}/servers/{server_id}/sites/{site_id}/aliases'
metadata:
groupName: sites
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: aliases
description: 'Update aliases.'
authenticated: true
custom: []
headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json
Accept: application/json
urlParameters:
project_id:
name: project_id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
server_id:
name: server_id
description: 'The ID of the server.'
required: true
example: 29
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
site_id:
name: site_id
description: 'The ID of the site.'
required: true
example: 43
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 29
site_id: 43
queryParameters: []
cleanQueryParameters: []
bodyParameters:
aliases:
name: aliases
description: 'Array of aliases'
required: true
example:
- ut
type: 'string[]'
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanBodyParameters:
aliases:
- ut
fileParameters: []
responses:
-
status: 200
content: null
headers: []
description: ''
custom: []
responseFields: []
auth:
- headers
- Authorization
- 'Bearer aedPZ4ah68c3Ef1kDVbvg65'
controller: null
method: null
route: null
custom: []
-
httpMethods:
- PUT
uri: 'api/projects/{project_id}/servers/{server_id}/sites/{site_id}/deployment-script'
metadata:
groupName: sites
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: deployment-script
description: 'Update site deployment script'
authenticated: true
custom: []
headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json
Accept: application/json
urlParameters:
project_id:
name: project_id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
server_id:
name: server_id
description: 'The ID of the server.'
required: true
example: 29
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
site_id:
name: site_id
description: 'The ID of the site.'
required: true
example: 43
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 29
site_id: 43
queryParameters: []
cleanQueryParameters: []
bodyParameters:
script:
name: script
description: 'Content of the deployment script'
required: true
example: culpa
type: string
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanBodyParameters:
script: culpa
bodyParameters: []
cleanBodyParameters: []
fileParameters: []
responses:
-
@ -681,22 +206,22 @@ endpoints:
auth:
- headers
- Authorization
- 'Bearer fhVea1a3cPdk6g5Ev468DZb'
- 'Bearer 1VDa6ckv35hgZ8d6Eb4Pafe'
controller: null
method: null
route: null
custom: []
-
httpMethods:
- GET
uri: 'api/projects/{project_id}/servers/{server_id}/sites/{site_id}/deployment-script'
- POST
uri: 'api/projects/{project_id}/servers/{server_id}/services/{service_id}/stop'
metadata:
groupName: sites
groupName: services
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: deployment-script
description: 'Get site deployment script content'
title: stop
description: 'Stop service.'
authenticated: true
custom: []
headers:
@ -724,11 +249,11 @@ endpoints:
exampleWasSpecified: false
nullable: false
custom: []
site_id:
name: site_id
description: 'The ID of the site.'
service_id:
name: service_id
description: 'The ID of the service.'
required: true
example: 43
example: 169
type: integer
enumValues: []
exampleWasSpecified: false
@ -737,7 +262,7 @@ endpoints:
cleanUrlParameters:
project_id: 1
server_id: 29
site_id: 43
service_id: 169
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
@ -745,7 +270,7 @@ endpoints:
fileParameters: []
responses:
-
status: 200
status: 204
content: null
headers: []
description: ''
@ -754,7 +279,299 @@ endpoints:
auth:
- headers
- Authorization
- 'Bearer 1g3bfhd6c8aPV6aZD45eEvk'
- 'Bearer V4d1k6b5hae3fcZDa6g8PvE'
controller: null
method: null
route: null
custom: []
-
httpMethods:
- POST
uri: 'api/projects/{project_id}/servers/{server_id}/services/{service_id}/restart'
metadata:
groupName: services
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: restart
description: 'Restart service.'
authenticated: true
custom: []
headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json
Accept: application/json
urlParameters:
project_id:
name: project_id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
server_id:
name: server_id
description: 'The ID of the server.'
required: true
example: 29
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
service_id:
name: service_id
description: 'The ID of the service.'
required: true
example: 169
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 29
service_id: 169
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
cleanBodyParameters: []
fileParameters: []
responses:
-
status: 204
content: null
headers: []
description: ''
custom: []
responseFields: []
auth:
- headers
- Authorization
- 'Bearer g84c6eEZP3k5fvV6baD1had'
controller: null
method: null
route: null
custom: []
-
httpMethods:
- POST
uri: 'api/projects/{project_id}/servers/{server_id}/services/{service_id}/enable'
metadata:
groupName: services
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: enable
description: 'Enable service.'
authenticated: true
custom: []
headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json
Accept: application/json
urlParameters:
project_id:
name: project_id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
server_id:
name: server_id
description: 'The ID of the server.'
required: true
example: 29
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
service_id:
name: service_id
description: 'The ID of the service.'
required: true
example: 169
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 29
service_id: 169
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
cleanBodyParameters: []
fileParameters: []
responses:
-
status: 204
content: null
headers: []
description: ''
custom: []
responseFields: []
auth:
- headers
- Authorization
- 'Bearer fE4V65h18acdkgbv3Za6PDe'
controller: null
method: null
route: null
custom: []
-
httpMethods:
- POST
uri: 'api/projects/{project_id}/servers/{server_id}/services/{service_id}/disable'
metadata:
groupName: services
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: disable
description: 'Disable service.'
authenticated: true
custom: []
headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json
Accept: application/json
urlParameters:
project_id:
name: project_id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
server_id:
name: server_id
description: 'The ID of the server.'
required: true
example: 29
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
service_id:
name: service_id
description: 'The ID of the service.'
required: true
example: 169
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 29
service_id: 169
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
cleanBodyParameters: []
fileParameters: []
responses:
-
status: 204
content: null
headers: []
description: ''
custom: []
responseFields: []
auth:
- headers
- Authorization
- 'Bearer gaEcPZ83ka1v65bVfh4d6eD'
controller: null
method: null
route: null
custom: []
-
httpMethods:
- DELETE
uri: 'api/projects/{project_id}/servers/{server_id}/services/{service_id}'
metadata:
groupName: services
groupDescription: ''
subgroup: ''
subgroupDescription: ''
title: delete
description: 'Delete service.'
authenticated: true
custom: []
headers:
Authorization: 'Bearer YOUR-API-KEY'
Content-Type: application/json
Accept: application/json
urlParameters:
project_id:
name: project_id
description: 'The ID of the project.'
required: true
example: 1
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
server_id:
name: server_id
description: 'The ID of the server.'
required: true
example: 29
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
service_id:
name: service_id
description: 'The ID of the service.'
required: true
example: 169
type: integer
enumValues: []
exampleWasSpecified: false
nullable: false
custom: []
cleanUrlParameters:
project_id: 1
server_id: 29
service_id: 169
queryParameters: []
cleanQueryParameters: []
bodyParameters: []
cleanBodyParameters: []
fileParameters: []
responses:
-
status: 204
content: null
headers: []
description: ''
custom: []
responseFields: []
auth:
- headers
- Authorization
- 'Bearer 8Va1aEehb5kg3P64ZdvDcf6'
controller: null
method: null
route: null