Skip to content

Commit aa17d26

Browse files
committed
feat(persistent): data
1 parent d313bea commit aa17d26

File tree

3 files changed

+45
-12
lines changed

3 files changed

+45
-12
lines changed

Dockerfile

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -73,8 +73,6 @@ WORKDIR /home/couchdb/couchdb
7373

7474
EXPOSE 5984 6984 4369 9100-9200
7575

76-
VOLUME ["/home/couchdb/couchdb/data"]
77-
7876
COPY couchdb-process.sh /couchdb-process.sh
7977
COPY discover-process.sh /discover-process.sh
8078
COPY set-up-process.sh /set-up-process.sh

README.md

Lines changed: 23 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,11 +20,30 @@ TODO
2020
-e COUCHDB_PASSWORD="admin" \
2121
-e COUCHDB_HASHED_PASSWORD="-pbkdf2-b1eb7a68b0778a529c68d30749954e9e430417fb,4da0f8f1d98ce649a9c5a3845241ae24,10" \
2222
-e COUCHDB_SECRET="mysecret" \
23-
-e NODENAME="{{.Service.Name}}{{.Task.Slot}}" \
23+
-e NODENAME="couchdb{{.Task.Slot}}" \
2424
-e SERVICE_NAME="{{.Service.Name}}" \
2525
-e TASK_SLOT="{{.Task.Slot}}" \
26-
-e COUCHDB_CERT_FILE="/common/mydomain.crt" \
27-
-e COUCHDB_KEY_FILE="/common/mydomain.key" \
28-
-e COUCHDB_CACERT_FILE="/common/mydomain.crt" \
26+
-e COUCHDB_CERT_FILE="/common/ssl/mydomain.crt" \
27+
-e COUCHDB_KEY_FILE="/common/ssl/mydomain.key" \
28+
-e COUCHDB_CACERT_FILE="/common/ssl/mydomain.crt" \
29+
-p 6984:6984 \
30+
redgeoff/couchdb-service
31+
32+
docker service create --replicas 2 --name couchdb --network couchdb-network \
33+
--hostname="couchdb{{.Task.Slot}}" \
34+
--mount type=bind,source=/home/ubuntu/common,destination=/common \
35+
-e COUCHDB_COOKIE="mycookie" \
36+
-e COUCHDB_USER="admin" \
37+
-e COUCHDB_PASSWORD="admin" \
38+
-e COUCHDB_HASHED_PASSWORD="-pbkdf2-b1eb7a68b0778a529c68d30749954e9e430417fb,4da0f8f1d98ce649a9c5a3845241ae24,10" \
39+
-e COUCHDB_SECRET="mysecret" \
40+
-e NODENAME="couchdb{{.Task.Slot}}" \
41+
-e SERVICE_NAME="{{.Service.Name}}" \
42+
-e TASK_SLOT="{{.Task.Slot}}" \
43+
-e COUCHDB_CERT_FILE="/common/ssl/mydomain.co.crt" \
44+
-e COUCHDB_KEY_FILE="/common/ssl/mydomain.co.key" \
45+
-e COUCHDB_CACERT_FILE="/common/ssl/mydomain.co.crt" \
46+
-e COUCHDB_DATA_DIR="/common/data/{{.Service.Name}}{{.Task.Slot}}" \
47+
-e COUCHDB_LOCAL_INI="/common/etc/local.ini" \
2948
-p 6984:6984 \
3049
redgeoff/couchdb-service

couchdb-process.sh

Lines changed: 22 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,17 @@
22

33
set -e
44

5+
if [ "$COUCHDB_DATA_DIR" ]; then
6+
# Create a symbolic link to the CouchDB data so that we can prefix it with the service name and
7+
# task slot
8+
rm -rf /home/couchdb/couchdb/data
9+
10+
# Make sure directory exists
11+
mkdir -p $COUCHDB_DATA_DIR
12+
13+
ln -s $COUCHDB_DATA_DIR /home/couchdb/couchdb/data
14+
fi
15+
516
# Use sname so that we can specify a short name, like those used by docker, instead of a host
617
if [ ! -z "$NODENAME" ] && ! grep "couchdb@" /home/couchdb/couchdb/etc/vm.args; then
718
# A cookie is needed so that the nodes can connect to each other using Erlang clustering
@@ -14,21 +25,18 @@ fi
1425

1526
if [ "$COUCHDB_USER" ] && [ "$COUCHDB_PASSWORD" ] && [ -z "$COUCHDB_HASHED_PASSWORD" ]; then
1627
# Create admin
17-
printf "[admins]\n%s = %s\n" "$COUCHDB_USER" "$COUCHDB_PASSWORD" > /home/couchdb/couchdb/etc/local.d/docker.ini
18-
chown couchdb:couchdb /home/couchdb/couchdb/etc/local.d/docker.ini
28+
printf "[admins]\n%s = %s\n" "$COUCHDB_USER" "$COUCHDB_PASSWORD" >> /home/couchdb/couchdb/etc/local.d/docker.ini
1929
fi
2030

2131
if [ "$COUCHDB_USER" ] && [ "$COUCHDB_HASHED_PASSWORD" ]; then
2232
# Create the admin using the hashed password. As per https://stackoverflow.com/q/43958527/2831606
2333
# we need all nodes to have the exact same password hash.
2434
printf "[admins]\n%s = %s\n" "$COUCHDB_USER" "$COUCHDB_HASHED_PASSWORD" > /home/couchdb/couchdb/etc/local.d/docker.ini
25-
chown couchdb:couchdb /home/couchdb/couchdb/etc/local.d/docker.ini
2635
fi
2736

2837
if [ "$COUCHDB_SECRET" ]; then
2938
# Set secret
30-
printf "[couch_httpd_auth]\nsecret = %s\n" "$COUCHDB_SECRET" > /home/couchdb/couchdb/etc/local.d/secret.ini
31-
chown couchdb:couchdb /home/couchdb/couchdb/etc/local.d/secret.ini
39+
printf "[couch_httpd_auth]\nsecret = %s\n" "$COUCHDB_SECRET" >> /home/couchdb/couchdb/etc/local.d/docker.ini
3240
fi
3341

3442
if [ "$COUCHDB_CERT_FILE" ] && [ "$COUCHDB_KEY_FILE" ] && [ "$COUCHDB_CACERT_FILE" ]; then
@@ -40,8 +48,16 @@ if [ "$COUCHDB_CERT_FILE" ] && [ "$COUCHDB_KEY_FILE" ] && [ "$COUCHDB_CACERT_FIL
4048
# https://issues.apache.org/jira/browse/COUCHDB-3162, we need the following lines. TODO: remove
4149
# this in a later version of CouchDB 2.
4250
printf "ciphers = undefined\ntls_versions = undefined\nsecure_renegotiate = undefined\n" >> /home/couchdb/couchdb/etc/local.d/ssl.ini
51+
fi
52+
53+
# Set the permissions. This is not needed as we are running couchdb as root
54+
# if [ -f /home/couchdb/couchdb/etc/local.d/docker.ini ];
55+
# chown couchdb:couchdb /home/couchdb/couchdb/etc/local.d/docker.ini
56+
# fi
4357

44-
chown couchdb:couchdb /home/couchdb/couchdb/etc/local.d/ssl.ini
58+
if [ "$COUCHDB_LOCAL_INI" ]; then
59+
# If a custom local.ini file is specified, e.g. through a volume, then copy it to CouchDB
60+
cp $COUCHDB_LOCAL_INI /home/couchdb/couchdb/etc/local.d/local.ini
4561
fi
4662

4763
/home/couchdb/couchdb/bin/couchdb

0 commit comments

Comments
 (0)