Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/dokku/dokku-couchdb
a couchdb plugin for dokku
https://github.com/dokku/dokku-couchdb
couchdb dokku dokku-plugin dokku-service paas
Last synced: about 1 month ago
JSON representation
a couchdb plugin for dokku
- Host: GitHub
- URL: https://github.com/dokku/dokku-couchdb
- Owner: dokku
- License: mit
- Created: 2015-10-12T14:03:36.000Z (about 9 years ago)
- Default Branch: master
- Last Pushed: 2024-10-23T10:32:36.000Z (about 2 months ago)
- Last Synced: 2024-10-30T00:56:05.653Z (about 1 month ago)
- Topics: couchdb, dokku, dokku-plugin, dokku-service, paas
- Language: Shell
- Homepage:
- Size: 489 KB
- Stars: 26
- Watchers: 4
- Forks: 15
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE.txt
Awesome Lists containing this project
- awesome-starred - dokku/dokku-couchdb - a couchdb plugin for dokku (others)
README
# dokku couchdb [![Build Status](https://img.shields.io/github/actions/workflow/status/dokku/dokku-couchdb/ci.yml?branch=master&style=flat-square "Build Status")](https://github.com/dokku/dokku-couchdb/actions/workflows/ci.yml?query=branch%3Amaster) [![IRC Network](https://img.shields.io/badge/irc-libera-blue.svg?style=flat-square "IRC Libera")](https://webchat.libera.chat/?channels=dokku)
Official couchdb plugin for dokku. Currently defaults to installing [couchdb 3.4.2](https://hub.docker.com/_/couchdb/).
## Requirements
- dokku 0.19.x+
- docker 1.8.x## Installation
```shell
# on 0.19.x+
sudo dokku plugin:install https://github.com/dokku/dokku-couchdb.git couchdb
```## Commands
```
couchdb:app-links # list all couchdb service links for a given app
couchdb:backup [--use-iam] # create a backup of the couchdb service to an existing s3 bucket
couchdb:backup-auth # set up authentication for backups on the couchdb service
couchdb:backup-deauth # remove backup authentication for the couchdb service
couchdb:backup-schedule [--use-iam] # schedule a backup of the couchdb service
couchdb:backup-schedule-cat # cat the contents of the configured backup cronfile for the service
couchdb:backup-set-encryption # set encryption for all future backups of couchdb service
couchdb:backup-unschedule # unschedule the backup of the couchdb service
couchdb:backup-unset-encryption # unset encryption for future backups of the couchdb service
couchdb:clone [--clone-flags...] # create container then copy data from into
couchdb:connect # connect to the service via the couchdb connection tool
couchdb:create [--create-flags...] # create a couchdb service
couchdb:destroy [-f|--force] # delete the couchdb service/data/container if there are no links left
couchdb:enter # enter or run a command in a running couchdb service container
couchdb:exists # check if the couchdb service exists
couchdb:export # export a dump of the couchdb service database
couchdb:expose # expose a couchdb service on custom host:port if provided (random port on the 0.0.0.0 interface if otherwise unspecified)
couchdb:import # import a dump into the couchdb service database
couchdb:info [--single-info-flag] # print the service information
couchdb:link [--link-flags...] # link the couchdb service to the app
couchdb:linked # check if the couchdb service is linked to an app
couchdb:links # list all apps linked to the couchdb service
couchdb:list # list all couchdb services
couchdb:logs [-t|--tail] # print the most recent log(s) for this service
couchdb:pause # pause a running couchdb service
couchdb:promote # promote service as COUCHDB_URL in
couchdb:restart # graceful shutdown and restart of the couchdb service container
couchdb:set # set or clear a property for a service
couchdb:start # start a previously stopped couchdb service
couchdb:stop # stop a running couchdb service
couchdb:unexpose # unexpose a previously exposed couchdb service
couchdb:unlink # unlink the couchdb service from the app
couchdb:upgrade [--upgrade-flags...] # upgrade service to the specified versions
```## Usage
Help for any commands can be displayed by specifying the command as an argument to couchdb:help. Plugin help output in conjunction with any files in the `docs/` folder is used to generate the plugin documentation. Please consult the `couchdb:help` command for any undocumented commands.
### Basic Usage
### create a couchdb service
```shell
# usage
dokku couchdb:create [--create-flags...]
```flags:
- `-c|--config-options "--args --go=here"`: extra arguments to pass to the container create command (default: `None`)
- `-C|--custom-env "USER=alpha;HOST=beta"`: semi-colon delimited environment variables to start the service with
- `-i|--image IMAGE`: the image name to start the service with
- `-I|--image-version IMAGE_VERSION`: the image version to start the service with
- `-m|--memory MEMORY`: container memory limit in megabytes (default: unlimited)
- `-N|--initial-network INITIAL_NETWORK`: the initial network to attach the service to
- `-p|--password PASSWORD`: override the user-level service password
- `-P|--post-create-network NETWORKS`: a comma-separated list of networks to attach the service container to after service creation
- `-r|--root-password PASSWORD`: override the root-level service password
- `-S|--post-start-network NETWORKS`: a comma-separated list of networks to attach the service container to after service start
- `-s|--shm-size SHM_SIZE`: override shared memory size for couchdb docker containerCreate a couchdb service named lollipop:
```shell
dokku couchdb:create lollipop
```You can also specify the image and image version to use for the service. It *must* be compatible with the couchdb image.
```shell
export COUCHDB_IMAGE="couchdb"
export COUCHDB_IMAGE_VERSION="${PLUGIN_IMAGE_VERSION}"
dokku couchdb:create lollipop
```You can also specify custom environment variables to start the couchdb service in semicolon-separated form.
```shell
export COUCHDB_CUSTOM_ENV="USER=alpha;HOST=beta"
dokku couchdb:create lollipop
```### print the service information
```shell
# usage
dokku couchdb:info [--single-info-flag]
```flags:
- `--config-dir`: show the service configuration directory
- `--data-dir`: show the service data directory
- `--dsn`: show the service DSN
- `--exposed-ports`: show service exposed ports
- `--id`: show the service container id
- `--internal-ip`: show the service internal ip
- `--initial-network`: show the initial network being connected to
- `--links`: show the service app links
- `--post-create-network`: show the networks to attach to after service container creation
- `--post-start-network`: show the networks to attach to after service container start
- `--service-root`: show the service root directory
- `--status`: show the service running status
- `--version`: show the service image versionGet connection information as follows:
```shell
dokku couchdb:info lollipop
```You can also retrieve a specific piece of service info via flags:
```shell
dokku couchdb:info lollipop --config-dir
dokku couchdb:info lollipop --data-dir
dokku couchdb:info lollipop --dsn
dokku couchdb:info lollipop --exposed-ports
dokku couchdb:info lollipop --id
dokku couchdb:info lollipop --internal-ip
dokku couchdb:info lollipop --initial-network
dokku couchdb:info lollipop --links
dokku couchdb:info lollipop --post-create-network
dokku couchdb:info lollipop --post-start-network
dokku couchdb:info lollipop --service-root
dokku couchdb:info lollipop --status
dokku couchdb:info lollipop --version
```### list all couchdb services
```shell
# usage
dokku couchdb:list
```List all services:
```shell
dokku couchdb:list
```### print the most recent log(s) for this service
```shell
# usage
dokku couchdb:logs [-t|--tail]
```flags:
- `-t|--tail []`: do not stop when end of the logs are reached and wait for additional output
You can tail logs for a particular service:
```shell
dokku couchdb:logs lollipop
```By default, logs will not be tailed, but you can do this with the --tail flag:
```shell
dokku couchdb:logs lollipop --tail
```The default tail setting is to show all logs, but an initial count can also be specified:
```shell
dokku couchdb:logs lollipop --tail 5
```### link the couchdb service to the app
```shell
# usage
dokku couchdb:link [--link-flags...]
```flags:
- `-a|--alias "BLUE_DATABASE"`: an alternative alias to use for linking to an app via environment variable
- `-q|--querystring "pool=5"`: ampersand delimited querystring arguments to append to the service link
- `-n|--no-restart "false"`: whether or not to restart the app on link (default: true)A couchdb service can be linked to a container. This will use native docker links via the docker-options plugin. Here we link it to our `playground` app.
> NOTE: this will restart your app
```shell
dokku couchdb:link lollipop playground
```The following environment variables will be set automatically by docker (not on the app itself, so they won’t be listed when calling dokku config):
```
DOKKU_COUCHDB_LOLLIPOP_NAME=/lollipop/DATABASE
DOKKU_COUCHDB_LOLLIPOP_PORT=tcp://172.17.0.1:5984
DOKKU_COUCHDB_LOLLIPOP_PORT_5984_TCP=tcp://172.17.0.1:5984
DOKKU_COUCHDB_LOLLIPOP_PORT_5984_TCP_PROTO=tcp
DOKKU_COUCHDB_LOLLIPOP_PORT_5984_TCP_PORT=5984
DOKKU_COUCHDB_LOLLIPOP_PORT_5984_TCP_ADDR=172.17.0.1
```The following will be set on the linked application by default:
```
COUCHDB_URL=http://lollipop:SOME_PASSWORD@dokku-couchdb-lollipop:5984/lollipop
```The host exposed here only works internally in docker containers. If you want your container to be reachable from outside, you should use the `expose` subcommand. Another service can be linked to your app:
```shell
dokku couchdb:link other_service playground
```It is possible to change the protocol for `COUCHDB_URL` by setting the environment variable `COUCHDB_DATABASE_SCHEME` on the app. Doing so will after linking will cause the plugin to think the service is not linked, and we advise you to unlink before proceeding.
```shell
dokku config:set playground COUCHDB_DATABASE_SCHEME=http2
dokku couchdb:link lollipop playground
```This will cause `COUCHDB_URL` to be set as:
```
http2://lollipop:SOME_PASSWORD@dokku-couchdb-lollipop:5984/lollipop
```### unlink the couchdb service from the app
```shell
# usage
dokku couchdb:unlink
```flags:
- `-n|--no-restart "false"`: whether or not to restart the app on unlink (default: true)
You can unlink a couchdb service:
> NOTE: this will restart your app and unset related environment variables
```shell
dokku couchdb:unlink lollipop playground
```### set or clear a property for a service
```shell
# usage
dokku couchdb:set
```Set the network to attach after the service container is started:
```shell
dokku couchdb:set lollipop post-create-network custom-network
```Set multiple networks:
```shell
dokku couchdb:set lollipop post-create-network custom-network,other-network
```Unset the post-create-network value:
```shell
dokku couchdb:set lollipop post-create-network
```### Service Lifecycle
The lifecycle of each service can be managed through the following commands:
### connect to the service via the couchdb connection tool
```shell
# usage
dokku couchdb:connect
```Connect to the service via the couchdb connection tool:
> NOTE: disconnecting from ssh while running this command may leave zombie processes due to moby/moby#9098
```shell
dokku couchdb:connect lollipop
```### enter or run a command in a running couchdb service container
```shell
# usage
dokku couchdb:enter
```A bash prompt can be opened against a running service. Filesystem changes will not be saved to disk.
> NOTE: disconnecting from ssh while running this command may leave zombie processes due to moby/moby#9098
```shell
dokku couchdb:enter lollipop
```You may also run a command directly against the service. Filesystem changes will not be saved to disk.
```shell
dokku couchdb:enter lollipop touch /tmp/test
```### expose a couchdb service on custom host:port if provided (random port on the 0.0.0.0 interface if otherwise unspecified)
```shell
# usage
dokku couchdb:expose
```Expose the service on the service's normal ports, allowing access to it from the public interface (`0.0.0.0`):
```shell
dokku couchdb:expose lollipop 5984
```Expose the service on the service's normal ports, with the first on a specified ip adddress (127.0.0.1):
```shell
dokku couchdb:expose lollipop 127.0.0.1:5984
```### unexpose a previously exposed couchdb service
```shell
# usage
dokku couchdb:unexpose
```Unexpose the service, removing access to it from the public interface (`0.0.0.0`):
```shell
dokku couchdb:unexpose lollipop
```### promote service as COUCHDB_URL in
```shell
# usage
dokku couchdb:promote
```If you have a couchdb service linked to an app and try to link another couchdb service another link environment variable will be generated automatically:
```
DOKKU_COUCHDB_BLUE_URL=http://other_service:ANOTHER_PASSWORD@dokku-couchdb-other-service:5984/other_service
```You can promote the new service to be the primary one:
> NOTE: this will restart your app
```shell
dokku couchdb:promote other_service playground
```This will replace `COUCHDB_URL` with the url from other_service and generate another environment variable to hold the previous value if necessary. You could end up with the following for example:
```
COUCHDB_URL=http://other_service:ANOTHER_PASSWORD@dokku-couchdb-other-service:5984/other_service
DOKKU_COUCHDB_BLUE_URL=http://other_service:ANOTHER_PASSWORD@dokku-couchdb-other-service:5984/other_service
DOKKU_COUCHDB_SILVER_URL=http://lollipop:SOME_PASSWORD@dokku-couchdb-lollipop:5984/lollipop
```### start a previously stopped couchdb service
```shell
# usage
dokku couchdb:start
```Start the service:
```shell
dokku couchdb:start lollipop
```### stop a running couchdb service
```shell
# usage
dokku couchdb:stop
```Stop the service and removes the running container:
```shell
dokku couchdb:stop lollipop
```### pause a running couchdb service
```shell
# usage
dokku couchdb:pause
```Pause the running container for the service:
```shell
dokku couchdb:pause lollipop
```### graceful shutdown and restart of the couchdb service container
```shell
# usage
dokku couchdb:restart
```Restart the service:
```shell
dokku couchdb:restart lollipop
```### upgrade service to the specified versions
```shell
# usage
dokku couchdb:upgrade [--upgrade-flags...]
```flags:
- `-c|--config-options "--args --go=here"`: extra arguments to pass to the container create command (default: `None`)
- `-C|--custom-env "USER=alpha;HOST=beta"`: semi-colon delimited environment variables to start the service with
- `-i|--image IMAGE`: the image name to start the service with
- `-I|--image-version IMAGE_VERSION`: the image version to start the service with
- `-N|--initial-network INITIAL_NETWORK`: the initial network to attach the service to
- `-P|--post-create-network NETWORKS`: a comma-separated list of networks to attach the service container to after service creation
- `-R|--restart-apps "true"`: whether or not to force an app restart (default: false)
- `-S|--post-start-network NETWORKS`: a comma-separated list of networks to attach the service container to after service start
- `-s|--shm-size SHM_SIZE`: override shared memory size for couchdb docker containerYou can upgrade an existing service to a new image or image-version:
```shell
dokku couchdb:upgrade lollipop
```### Service Automation
Service scripting can be executed using the following commands:
### list all couchdb service links for a given app
```shell
# usage
dokku couchdb:app-links
```List all couchdb services that are linked to the `playground` app.
```shell
dokku couchdb:app-links playground
```### create container then copy data from into
```shell
# usage
dokku couchdb:clone [--clone-flags...]
```flags:
- `-c|--config-options "--args --go=here"`: extra arguments to pass to the container create command (default: `None`)
- `-C|--custom-env "USER=alpha;HOST=beta"`: semi-colon delimited environment variables to start the service with
- `-i|--image IMAGE`: the image name to start the service with
- `-I|--image-version IMAGE_VERSION`: the image version to start the service with
- `-m|--memory MEMORY`: container memory limit in megabytes (default: unlimited)
- `-N|--initial-network INITIAL_NETWORK`: the initial network to attach the service to
- `-p|--password PASSWORD`: override the user-level service password
- `-P|--post-create-network NETWORKS`: a comma-separated list of networks to attach the service container to after service creation
- `-r|--root-password PASSWORD`: override the root-level service password
- `-S|--post-start-network NETWORKS`: a comma-separated list of networks to attach the service container to after service start
- `-s|--shm-size SHM_SIZE`: override shared memory size for couchdb docker containerYou can clone an existing service to a new one:
```shell
dokku couchdb:clone lollipop lollipop-2
```### check if the couchdb service exists
```shell
# usage
dokku couchdb:exists
```Here we check if the lollipop couchdb service exists.
```shell
dokku couchdb:exists lollipop
```### check if the couchdb service is linked to an app
```shell
# usage
dokku couchdb:linked
```Here we check if the lollipop couchdb service is linked to the `playground` app.
```shell
dokku couchdb:linked lollipop playground
```### list all apps linked to the couchdb service
```shell
# usage
dokku couchdb:links
```List all apps linked to the `lollipop` couchdb service.
```shell
dokku couchdb:links lollipop
```### Data Management
The underlying service data can be imported and exported with the following commands:
### import a dump into the couchdb service database
```shell
# usage
dokku couchdb:import
```Import a datastore dump:
```shell
dokku couchdb:import lollipop < data.dump
```### export a dump of the couchdb service database
```shell
# usage
dokku couchdb:export
```By default, datastore output is exported to stdout:
```shell
dokku couchdb:export lollipop
```You can redirect this output to a file:
```shell
dokku couchdb:export lollipop > data.dump
```### Backups
Datastore backups are supported via AWS S3 and S3 compatible services like [minio](https://github.com/minio/minio).
You may skip the `backup-auth` step if your dokku install is running within EC2 and has access to the bucket via an IAM profile. In that case, use the `--use-iam` option with the `backup` command.
Backups can be performed using the backup commands:
### set up authentication for backups on the couchdb service
```shell
# usage
dokku couchdb:backup-auth
```Setup s3 backup authentication:
```shell
dokku couchdb:backup-auth lollipop AWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY
```Setup s3 backup authentication with different region:
```shell
dokku couchdb:backup-auth lollipop AWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY AWS_REGION
```Setup s3 backup authentication with different signature version and endpoint:
```shell
dokku couchdb:backup-auth lollipop AWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY AWS_REGION AWS_SIGNATURE_VERSION ENDPOINT_URL
```More specific example for minio auth:
```shell
dokku couchdb:backup-auth lollipop MINIO_ACCESS_KEY_ID MINIO_SECRET_ACCESS_KEY us-east-1 s3v4 https://YOURMINIOSERVICE
```### remove backup authentication for the couchdb service
```shell
# usage
dokku couchdb:backup-deauth
```Remove s3 authentication:
```shell
dokku couchdb:backup-deauth lollipop
```### create a backup of the couchdb service to an existing s3 bucket
```shell
# usage
dokku couchdb:backup [--use-iam]
```flags:
- `-u|--use-iam`: use the IAM profile associated with the current server
Backup the `lollipop` service to the `my-s3-bucket` bucket on `AWS`:`
```shell
dokku couchdb:backup lollipop my-s3-bucket --use-iam
```Restore a backup file (assuming it was extracted via `tar -xf backup.tgz`):
```shell
dokku couchdb:import lollipop < backup-folder/export
```### set encryption for all future backups of couchdb service
```shell
# usage
dokku couchdb:backup-set-encryption
```Set the GPG-compatible passphrase for encrypting backups for backups:
```shell
dokku couchdb:backup-set-encryption lollipop
```### unset encryption for future backups of the couchdb service
```shell
# usage
dokku couchdb:backup-unset-encryption
```Unset the `GPG` encryption passphrase for backups:
```shell
dokku couchdb:backup-unset-encryption lollipop
```### schedule a backup of the couchdb service
```shell
# usage
dokku couchdb:backup-schedule [--use-iam]
```flags:
- `-u|--use-iam`: use the IAM profile associated with the current server
Schedule a backup:
> 'schedule' is a crontab expression, eg. "0 3 * * *" for each day at 3am
```shell
dokku couchdb:backup-schedule lollipop "0 3 * * *" my-s3-bucket
```Schedule a backup and authenticate via iam:
```shell
dokku couchdb:backup-schedule lollipop "0 3 * * *" my-s3-bucket --use-iam
```### cat the contents of the configured backup cronfile for the service
```shell
# usage
dokku couchdb:backup-schedule-cat
```Cat the contents of the configured backup cronfile for the service:
```shell
dokku couchdb:backup-schedule-cat lollipop
```### unschedule the backup of the couchdb service
```shell
# usage
dokku couchdb:backup-unschedule
```Remove the scheduled backup from cron:
```shell
dokku couchdb:backup-unschedule lollipop
```### Disabling `docker image pull` calls
If you wish to disable the `docker image pull` calls that the plugin triggers, you may set the `COUCHDB_DISABLE_PULL` environment variable to `true`. Once disabled, you will need to pull the service image you wish to deploy as shown in the `stderr` output.
Please ensure the proper images are in place when `docker image pull` is disabled.