mirror of
https://github.com/transloadit/uppy.git
synced 2026-07-26 03:35:19 +00:00
Update uppy-server docs to point to Kubernetes (#706)
* Change docs to point to kubernetes * We using secret not configmap
This commit is contained in:
parent
bc0fa8f8b3
commit
eead2d7dc5
1 changed files with 123 additions and 67 deletions
|
|
@ -77,113 +77,180 @@ uppy.socket(server, options)
|
|||
```
|
||||
This takes your `server` instance and your uppy [options](#Options) as parameters.
|
||||
|
||||
### Run as standalone server
|
||||
### Run uppy-server on kuberenetes
|
||||
|
||||
> Please ensure that the required environment variables are set before running/using uppy-server as a standalone server. See [Configure Standalone](#Configure-Standalone) for the variables required.
|
||||
|
||||
Set environment variables first:
|
||||
You can use our docker container to run uppy-server on kubernetes with the following configuration.
|
||||
```bash
|
||||
kubectl create ns uppy
|
||||
```
|
||||
We will need a Redis container that we can get through [helm](https://github.com/kubernetes/helm)
|
||||
|
||||
```bash
|
||||
export UPPYSERVER_SECRET="shh!Issa Secret!"
|
||||
export UPPYSERVER_DOMAIN="YOUR SERVER DOMAIN"
|
||||
export UPPYSERVER_DATADIR="PATH/TO/DOWNLOAD/DIRECTORY"
|
||||
helm install --name uppy \
|
||||
--namespace uppy \
|
||||
--set redisPassword=superSecretPassword \
|
||||
stable/redis
|
||||
```
|
||||
|
||||
And then run:
|
||||
|
||||
```bash
|
||||
uppy-server
|
||||
> uppy-server-env.yml
|
||||
```yaml
|
||||
apiVersion: v1
|
||||
data:
|
||||
UPPY_ENDPOINTS: "localhost:3452,uppy.io"
|
||||
UPPYSERVER_DATADIR: "PATH/TO/DOWNLOAD/DIRECTORY"
|
||||
UPPYSERVER_DOMAIN: "YOUR SERVER DOMAIN"
|
||||
UPPYSERVER_DOMAINS: "sub1.domain.com,sub2.domain.com,sub3.domain.com"
|
||||
UPPYSERVER_PROTOCOL: "YOUR SERVER PROTOCOL"
|
||||
UPPYSERVER_REDIS_URL: redis://:superSecretPassword@uppy-redis.uppy.svc.cluster.local:6379
|
||||
UPPYSERVER_SECRET: "shh!Issa Secret!"
|
||||
UPPYSERVER_DROPBOX_KEY: "YOUR DROPBOX KEY"
|
||||
UPPYSERVER_DROPBOX_SECRET: "YOUR DROPBOX SECRET"
|
||||
UPPYSERVER_GOOGLE_KEY: "YOUR GOOGLE KEY"
|
||||
UPPYSERVER_GOOGLE_SECRET: "YOUR GOOGLE SECRET"
|
||||
UPPYSERVER_INSTAGRAM_KEY: "YOUR INSTAGRAM KEY"
|
||||
UPPYSERVER_INSTAGRAM_SECRET: "YOUR INSTAGRAM SECRET"
|
||||
UPPYSERVER_AWS_KEY: "YOUR AWS KEY"
|
||||
UPPYSERVER_AWS_SECRET: "YOUR AWS SECRET"
|
||||
UPPYSERVER_AWS_BUCKET: "YOUR AWS S3 BUCKET"
|
||||
UPPYSERVER_AWS_REGION: "AWS REGION"
|
||||
UPPYSERVER_OAUTH_DOMAIN: "sub.domain.com"
|
||||
UPPYSERVER_UPLOAD_URLS: "http://master.tus.io/files/,https://master.tus.io/files/"
|
||||
kind: Secret
|
||||
metadata:
|
||||
name: uppy-server-env
|
||||
namespace: uppy
|
||||
type: Opaque
|
||||
```
|
||||
|
||||
If you cloned the repo from GitHub and want to run it as a standalone server, you may also run the following command from within its directory:
|
||||
|
||||
```bash
|
||||
npm start
|
||||
> uppy-server-deployment.yml
|
||||
```yaml
|
||||
apiVersion: extensions/v1beta1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: uppy-server
|
||||
namespace: uppy
|
||||
spec:
|
||||
replicas: 2
|
||||
minReadySeconds: 5
|
||||
strategy:
|
||||
type: RollingUpdate
|
||||
rollingUpdate:
|
||||
maxSurge: 2
|
||||
maxUnavailable: 1
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: uppy-server
|
||||
spec:
|
||||
containers:
|
||||
- image: docker.io/transloadit/uppy-server:latest
|
||||
imagePullPolicy: ifNotPresent
|
||||
name: uppy-server
|
||||
resources:
|
||||
limits:
|
||||
memory: 150Mi
|
||||
requests:
|
||||
memory: 100Mi
|
||||
envFrom:
|
||||
- secretRef:
|
||||
name: uppy-server-env
|
||||
ports:
|
||||
- containerPort: 3020
|
||||
volumeMounts:
|
||||
- name: uppy-server-data
|
||||
mountPath: /mnt/uppy-server-data
|
||||
volumes:
|
||||
- name: uppy-server-data
|
||||
emptyDir: {}
|
||||
```
|
||||
|
||||
You can also pass in the path to your json config file like so:
|
||||
`kubectl apply -f uppy-server-deployment.yml`
|
||||
|
||||
```bash
|
||||
uppy-server --config /path/to/uppyconf.json
|
||||
> uppy-server-service.yml
|
||||
|
||||
```yaml
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: uppy-server
|
||||
namespace: uppy
|
||||
spec:
|
||||
ports:
|
||||
- port: 80
|
||||
targetPort: 3020
|
||||
protocol: TCP
|
||||
selector:
|
||||
app: uppy-server
|
||||
```
|
||||
|
||||
or
|
||||
`kubectl apply -f uppy-server-service.yml`
|
||||
|
||||
```bash
|
||||
npm start -- --config /path/to/uppyconf.json
|
||||
```
|
||||
|
||||
Please see [options](#Options) for possible options.
|
||||
|
||||
#### Configure Standalone
|
||||
|
||||
To run uppy-server as a standalone server, you are required to set your uppy [options](#Options) via environment variables:
|
||||
You can check the full list of possible environment variables here:
|
||||
|
||||
```bash
|
||||
####### Mandatory variables ###########
|
||||
|
||||
# any long set of random characters for the server session
|
||||
export UPPYSERVER_SECRET="shh!Issa Secret!"
|
||||
UPPYSERVER_SECRET="shh!Issa Secret!"
|
||||
# corresponds to the server.host option
|
||||
export UPPYSERVER_DOMAIN="YOUR SERVER DOMAIN"
|
||||
UPPYSERVER_DOMAIN="YOUR SERVER DOMAIN"
|
||||
# corresponds to the filePath option
|
||||
export UPPYSERVER_DATADIR="PATH/TO/DOWNLOAD/DIRECTORY"
|
||||
UPPYSERVER_DATADIR="PATH/TO/DOWNLOAD/DIRECTORY"
|
||||
|
||||
###### Optional variables ##########
|
||||
|
||||
# corresponds to the server.protocol option. defaults to http
|
||||
export UPPYSERVER_PROTOCOL="YOUR SERVER PROTOCOL"
|
||||
UPPYSERVER_PROTOCOL="YOUR SERVER PROTOCOL"
|
||||
# the port to start the server on. defaults to 3020
|
||||
export UPPYSERVER_PORT="YOUR SERVER PORT"
|
||||
UPPYSERVER_PORT="YOUR SERVER PORT"
|
||||
# corresponds to the server.port option. defaults to ''
|
||||
export UPPYSERVER_PATH="/SERVER/PATH/TO/WHERE/UPPY-SERVER/LIVES"
|
||||
UPPYSERVER_PATH="/SERVER/PATH/TO/WHERE/UPPY-SERVER/LIVES"
|
||||
|
||||
# use this in place of UPPYSERVER_PATH if the server path should not be
|
||||
# handled by the express.js app but maybe by an external server configuration
|
||||
# instead (e.g Nginx).
|
||||
export UPPYSERVER_IMPLICIT_PATH="/SERVER/PATH/TO/WHERE/UPPY/SERVER/LIVES"
|
||||
UPPYSERVER_IMPLICIT_PATH="/SERVER/PATH/TO/WHERE/UPPY/SERVER/LIVES"
|
||||
|
||||
# comma separated client hosts to whitlelist by the server
|
||||
# if not specified, the server would allow any host
|
||||
export UPPY_ENDPOINTS="localhost:3452,uppy.io"
|
||||
UPPY_ENDPOINTS="localhost:3452,uppy.io"
|
||||
|
||||
# corresponds to the redisUrl option
|
||||
# This also enables redis session storage if set
|
||||
export UPPYSERVER_REDIS_URL="REDIS URL"
|
||||
UPPYSERVER_REDIS_URL="REDIS URL"
|
||||
|
||||
# to enable Dropbox
|
||||
export UPPYSERVER_DROPBOX_KEY="YOUR DROPBOX KEY"
|
||||
export UPPYSERVER_DROPBOX_SECRET="YOUR DROPBOX SECRET"
|
||||
UPPYSERVER_DROPBOX_KEY="YOUR DROPBOX KEY"
|
||||
UPPYSERVER_DROPBOX_SECRET="YOUR DROPBOX SECRET"
|
||||
|
||||
# to enable Google Drive
|
||||
export UPPYSERVER_GOOGLE_KEY="YOUR GOOGLE KEY"
|
||||
export UPPYSERVER_GOOGLE_SECRET="YOUR GOOGLE SECRET"
|
||||
UPPYSERVER_GOOGLE_KEY="YOUR GOOGLE KEY"
|
||||
UPPYSERVER_GOOGLE_SECRET="YOUR GOOGLE SECRET"
|
||||
|
||||
# to enable Instagram
|
||||
export UPPYSERVER_INSTAGRAM_KEY="YOUR INSTAGRAM KEY"
|
||||
export UPPYSERVER_INSTAGRAM_SECRET="YOUR INSTAGRAM SECRET"
|
||||
UPPYSERVER_INSTAGRAM_KEY="YOUR INSTAGRAM KEY"
|
||||
UPPYSERVER_INSTAGRAM_SECRET="YOUR INSTAGRAM SECRET"
|
||||
|
||||
# to enable s3
|
||||
export UPPYSERVER_AWS_KEY="YOUR AWS KEY"
|
||||
export UPPYSERVER_AWS_SECRET="YOUR AWS SECRET"
|
||||
export UPPYSERVER_AWS_BUCKET="YOUR AWS S3 BUCKET"
|
||||
export UPPYSERVER_AWS_REGION="AWS REGION"
|
||||
UPPYSERVER_AWS_KEY="YOUR AWS KEY"
|
||||
UPPYSERVER_AWS_SECRET="YOUR AWS SECRET"
|
||||
UPPYSERVER_AWS_BUCKET="YOUR AWS S3 BUCKET"
|
||||
UPPYSERVER_AWS_REGION="AWS REGION"
|
||||
|
||||
# corresponds to the server.oauthDomain option
|
||||
export UPPYSERVER_OAUTH_DOMAIN="sub.domain.com"
|
||||
UPPYSERVER_OAUTH_DOMAIN="sub.domain.com"
|
||||
# corresponds to the server.validHosts option
|
||||
export UPPYSERVER_DOMAINS="sub1.domain.com,sub2.domain.com,sub3.domain.com"
|
||||
UPPYSERVER_DOMAINS="sub1.domain.com,sub2.domain.com,sub3.domain.com"
|
||||
|
||||
# corresponds to the sendSelfEndpoint option
|
||||
export UPPYSERVER_SELF_ENDPOINT="THIS SHOULD BE SAME AS YOUR DOMAIN + PATH"
|
||||
UPPYSERVER_SELF_ENDPOINT="THIS SHOULD BE SAME AS YOUR DOMAIN + PATH"
|
||||
|
||||
# comma separated urls
|
||||
# corresponds to the uploadUrls option
|
||||
export UPPYSERVER_UPLOAD_URLS="http://master.tus.io/files/,https://master.tus.io/files/"
|
||||
UPPYSERVER_UPLOAD_URLS="http://master.tus.io/files/,https://master.tus.io/files/"
|
||||
```
|
||||
|
||||
See [env.example.sh](https://github.com/transloadit/uppy-server/blob/master/env.example.sh) for an example configuration script.
|
||||
|
||||
### Options
|
||||
|
||||
```javascript
|
||||
|
|
@ -333,23 +400,12 @@ It also expects the [uppy client](https://github.com/transloadit/uppy) to be run
|
|||
|
||||
## Running example
|
||||
|
||||
An example server is running at http://server.uppy.io, which is deployed via
|
||||
[Frey](https://github.com/kvz/frey), using the following [Freyfile](infra/Freyfile.toml).
|
||||
|
||||
All the secrets are stored in `env.infra.sh`, so using `env.infra.example.sh`, you could use the same Freyfile but target a different cloud vendor with different secrets, and run your own uppy-server.
|
||||
You can checkout uppy-server [repository](https://github.com/transloadit/uppy-server) to see how we run [server.uppy.io](https://server.uppy.io).
|
||||
|
||||
## Logging
|
||||
|
||||
Requires Frey, if you haven't set it up yet type
|
||||
You can check the production logs for the production pod using:
|
||||
|
||||
```bash
|
||||
npm run install:frey
|
||||
```
|
||||
|
||||
afterwards, production logs are available through:
|
||||
|
||||
```bash
|
||||
npm run logtail
|
||||
```
|
||||
|
||||
This requires at least the `FREY_ENCRYPTION_SECRET` key present in your `./env.sh`.
|
||||
kubectl logs my-pod-name
|
||||
```
|
||||
Loading…
Add table
Add a link
Reference in a new issue