You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
Trent Larson 6cd4a5a988 add Dockerfile and tweak deployment instructions 10 months ago
sql store mime_type for each file 10 months ago
.env.sample add Dockerfile and tweak deployment instructions 10 months ago
.gitignore add DB to record each image upload 11 months ago
CONTRIBUTING.md check image upload against user limits 11 months ago
Dockerfile add Dockerfile and tweak deployment instructions 10 months ago
README.md add Dockerfile and tweak deployment instructions 10 months ago
package.json add Dockerfile and tweak deployment instructions 10 months ago
pnpm-lock.yaml check image upload against user limits 11 months ago
server.js add Dockerfile and tweak deployment instructions 10 months ago

README.md

Image Server

Remaining:

  • dockerize

setup

sh <(curl https://pkgx.sh) +pnpm sh
pnpm install
# create the directory for files that are being uploaded; should stay empty afterward
mkdir uploads
pnpm run migrate

Now set up an S3 bucket & Infura project, and create a .env file from .env.sample with these important settings:

AWS_ACCESS_KEY=
AWS_SECRET_KEY=
AWS_REGION=

INFURA_PROJECT_ID=

dev

node server.js

test

# run this first command in a directory where `npm install did-jwt` has been run
CODE='OWNER_DID="did:ethr:0x0000694B58C2cC69658993A90D3840C560f2F51F"; OWNER_PRIVATE_KEY_HEX="2b6472c026ec2aa2c4235c994a63868fc9212d18b58f6cbfe861b52e71330f5b"; didJwt = require("did-jwt"); didJwt.createJWT({ exp: Math.floor(Date.now() / 1000) + 60, iat: Math.floor(Date.now() / 1000), iss: OWNER_DID }, { issuer: OWNER_DID, signer: didJwt.SimpleSigner(OWNER_PRIVATE_KEY_HEX) }).then(console.log)'
JWT=`node -e "$CODE"`; curl -X POST -H "Authorization: Bearer $JWT" -F "image=@./test.png" http://localhost:3001/image
JWT=`node -e "$CODE"`; curl -X DELETE -H "Authorization: Bearer $JWT" http://localhost:3001/image/https%3A%2F%2Fgifts-image-test.s3.amazonaws.com%2F4599145c3a8792a678f458747f2d8512c680e8680bf5563c35b06cd770051ed2.png

deploy to prod first time

  • Do the necessary steps from "setup" above, or docker build it.

  • In object storage, set up bucket (and erase any test data).

  • Create a cert for the image delivery & image API servers.

  • In haproxy, set a permanent web forward to the correct storage location.

    • eg. http-request redirect code 301 location https://a2-west.americancloud.com/images6618:giftsimagetest%[capture.req.uri] if { hdr_dom(host) -i test-image.timesafari.app }

deploy to prod subsequent times

  • Update version in server.js file. Add CHANGELOG.md entry.