webapp-deployment-status-api/README.md

142 lines
4.6 KiB
Markdown
Raw Normal View History

2024-08-30 16:52:39 +00:00
# webapp-deployment-status-api
2024-01-19 02:17:30 +00:00
2024-08-30 16:52:39 +00:00
This API provides status information about webapp deployment requests and a mechanism for upload encrypted configuration
files used by those requests.
2024-01-19 02:17:30 +00:00
2024-08-30 16:52:39 +00:00
## Build and Run
2024-01-19 02:17:30 +00:00
```bash
yarn
yarn build
yarn start
2024-08-30 16:52:39 +00:00
```
2024-01-19 02:17:30 +00:00
2024-08-30 16:52:39 +00:00
## Configuration
2024-01-19 02:17:30 +00:00
2024-08-30 16:52:39 +00:00
### Keys
2024-01-19 02:17:30 +00:00
2024-08-30 16:52:39 +00:00
Configuration files are encrypted prior to being uploaded using an RSA `publicKey` specified in the `WebappDeployer` record.
On upload, the configuration is temporarily decrypted for validation, but stored in its encrypted format.
2024-01-19 02:17:30 +00:00
2024-08-30 16:52:39 +00:00
To create and export a key in the necessary format use:
2024-01-19 02:17:30 +00:00
```bash
2024-08-30 16:52:39 +00:00
# Create a key
gpg --batch --passphrase "SECRET" --quick-generate-key webapp-deployer-api.my.domain.com default default never
2024-01-19 02:17:30 +00:00
2024-08-30 16:52:39 +00:00
# Export the public key
gpg --export webapp-deployer-api.my.domain.com > webapp-deployer-api.my.domain.com.pgp.pub
2024-01-19 02:17:30 +00:00
2024-08-30 16:52:39 +00:00
# Export the private key
gpg --export-secret-keys webapp-deployer-api.my.domain.com > webapp-deployer-api.my.domain.com.pgp.key
2024-01-19 02:17:30 +00:00
```
2024-08-30 16:52:39 +00:00
### Create the Deployer Record
2024-01-19 02:17:30 +00:00
2024-08-30 16:52:39 +00:00
Every webapp deployer should have `WebappDeployer` record in the registry which looks something like:
2024-01-19 02:17:30 +00:00
```yml
2024-08-30 16:52:39 +00:00
record:
type: WebappDeployer
version: 1.0.0
name: webapp-deployer-api.my.domain.com
apiUrl: https://webapp-deployer-api.my.domain.com
minimumPayment: 100alnt
paymentAddress: laconic1clpc8smrhx5k25zmk3vwna8kddxrsem7a1jlry
publicKey: mQGNBGbJUk0BDAC3j3CiaVtoEf1jrgtsjJnTA5u1a3BExP72mv0eE8y84TgY5rVcf ...
```
2024-01-19 02:17:30 +00:00
2024-08-30 16:52:39 +00:00
This record can most easily be created using `laconic-so publish-deployer-to-registry`.
2024-01-19 02:17:30 +00:00
```bash
laconic-so publish-deployer-to-registry \
2024-08-30 16:52:39 +00:00
--laconic-config ~/.laconic/registry.yml \
--api-url https://webapp-deployer-api.my.domain.com
2024-08-30 16:52:39 +00:00
--public-key-file webapp-deployer-api.my.domain.com.pgp.pub \
--lrn lrn://laconic/deployers/webapp-deployer-api.my.domain.com \
--min-required-payment 100
```
2024-01-19 02:17:30 +00:00
This will create the record in the proper format and assign its LRN.
### Publish Deployment Auction
Users can optionally create an auction for app deployment with desired number of providers and max price they are willing to pay for a deployment:
```bash
laconic-so publish-deployment-auction \
--laconic-config ./config.yml \
--app lrn://cerc-io/applications/webapp-hello-world@0.1.3 \
--commits-duration 3600 \
--reveals-duration 3600 \
--commit-fee 10000 \
--reveal-fee 10000 \
--max-price 5000000 \
--num-providers 3
```
This will create a `provider` auction with given params and publish a deployment auction record.
2024-01-19 02:17:30 +00:00
2024-08-30 16:52:39 +00:00
### Request Deployment
2024-01-19 02:17:30 +00:00
2024-08-30 16:52:39 +00:00
Users can now request deployment using the LRN of the deployer. This will allow them to:
2024-01-19 02:17:30 +00:00
2024-08-30 16:52:39 +00:00
1. Discover the API URL for config uploads.
1. Obtain the public key for encrypting config.
1. See the minimum required payment.
2024-01-19 02:17:30 +00:00
The request can be made using `laconic-so request-webapp-deployment`. This will handle encrypting and uploading the
2024-08-30 16:52:39 +00:00
config automatically, as well as making a payment (if necessary).
2024-01-19 02:17:30 +00:00
```bash
laconic-so request-webapp-deployment \
2024-08-30 16:52:39 +00:00
--laconic-config ~/.laconic/registry.yml \
--deployer lrn://laconic/deployers/webapp-deployer-api.my.domain.com \
--app lrn://cerc-io/applications/webapp-hello-world@0.1.3 \
--env-file hello.env \
--make-payment auto
```
2024-01-19 02:17:30 +00:00
Alternatively, users can also use a deployment auction they created instead of making the payment to any specific deployer directly:
```bash
laconic-so request-webapp-deployment \
--laconic-config ~/.laconic/registry.yml \
--app lrn://cerc-io/applications/webapp-hello-world@0.1.3 \
--env-file hello.env \
--auction-id 4c9701c22651e143202e991056b6e7649853acc5bc0e97e3a98e09c9f3355909
```
This creates deployment requests targeted towards all the deployers who have won the auction. Similar to requests with payments, the config is automatically encrypted and uploaded to all the deployers.
### Request Undeployment
Users can also request removal of an existing deployment using the deployment record id:
2024-01-19 02:17:30 +00:00
```bash
laconic-so request-webapp-undeployment \
--laconic-config ~/.laconic/registry.yml \
--deployer lrn://laconic/deployers/webapp-deployer-api.my.domain.com \
--deployment bafyreigeopr72dmp6rhvnomgdz3cljbqzhh75epcrigit7ue6i6vjullme \
--make-payment auto
2024-08-30 16:52:39 +00:00
```
### Example Config
```bash
2024-08-30 16:52:39 +00:00
UPLOAD_DIRECTORY="/srv/uploads/config"
UPLOAD_MAX_SIZE="1MB"
DEPLOYER_STATE="/srv/deployments/autodeploy.state"
UNDEPLOYER_STATE="/srv/deployments/autoundeploy.state"
BUILD_LOGS="/srv/logs"
OPENPGP_PASSPHRASE="SECRET"
OPENPGP_PRIVATE_KEY_FILE="/etc/config/webapp-deployer-api.my.domain.com.pgp.key"
LACONIC_CONFIG="/etc/config/registry.yml"
LRN=lrn://laconic/deployers/webapp-deployer-api.my.domain.com
CHECK_INTERVAL=15
AUCTION_CHECK_INTERVAL=10
HANDLE_AUCTION_REQUESTS=true
AUCTION_BID_AMOUNT=50000
2024-08-30 16:52:39 +00:00
```