# webapp-deployment-status-api This API provides status information about webapp deployment requests and a mechanism for upload encrypted configuration files used by those requests. ## Build and Run ```bash yarn yarn build yarn start ``` ## Configuration ### Keys 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. To create and export a key in the necessary format use: ```bash # Create a key gpg --batch --passphrase "SECRET" --quick-generate-key webapp-deployer-api.my.domain.com default default never # Export the public key gpg --export webapp-deployer-api.my.domain.com > webapp-deployer-api.my.domain.com.pgp.pub # Export the private key gpg --export-secret-keys webapp-deployer-api.my.domain.com > webapp-deployer-api.my.domain.com.pgp.key ``` ### Create the Deployer Record Every webapp deployer should have `WebappDeployer` record in the registry which looks something like: ```yml 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 ... ``` This record can most easily be created using `laconic-so publish-deployer-to-registry`. ```bash laconic-so publish-deployer-to-registry \ --laconic-config ~/.laconic/registry.yml \ --api-url https://webapp-deployer-api.my.domain.com --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 ``` 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. ### Request Deployment Users can now request deployment using the LRN of the deployer. This will allow them to: 1. Discover the API URL for config uploads. 1. Obtain the public key for encrypting config. 1. See the minimum required payment. The request can be made using `laconic-so request-webapp-deployment`. This will handle encrypting and uploading the config automatically, as well as making a payment (if necessary). ```bash laconic-so request-webapp-deployment \ --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 ``` 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: ```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 ``` ### Example Config ```bash 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 ```