mirror of
https://github.com/wekan/wekan.git
synced 2026-01-08 10:38:50 +01:00
Reorganized docs.
This commit is contained in:
parent
7690d91771
commit
1cfaddff9c
28 changed files with 0 additions and 0 deletions
205
docs/Platforms/FOSS/Docker/Export-Docker-Mongo-Data.md
Normal file
205
docs/Platforms/FOSS/Docker/Export-Docker-Mongo-Data.md
Normal file
|
|
@ -0,0 +1,205 @@
|
|||
[Managing Docker containers with DockerBunker](https://github.com/chaosbunker/dockerbunker)
|
||||
|
||||
## Important info
|
||||
|
||||
You need to stop Wekan before importing MongoDB database with command:
|
||||
|
||||
`docker stop wekan-app`
|
||||
|
||||
And also check that in your start-wekan.sh or docker-compose.yml or similar that
|
||||
you have corrent MongoDB database name admin, wekan, etc.
|
||||
Otherwise it will be empty.
|
||||
|
||||
Docker containers are at `/var/lib/docker`, so it [may contain important data that could be hard to recover](https://github.com/wekan/wekan-mongodb/issues/8). Restoring mongodump files is much easier. [Related backup feature request](https://github.com/wekan/wekan/issues/1534). With backups it's important to [save file and directory permissions](https://askubuntu.com/questions/225865/copy-files-without-losing-file-folder-permissions).
|
||||
|
||||
***
|
||||
|
||||
|
||||
Check from your Dockerfile or docker-compose.yml what is name of MongoDB container.
|
||||
It can be wekan-db, mongodb or something else.
|
||||
|
||||
1) You can run Wekan on Docker locally like this on http://localhost:8080/
|
||||
(or other port it you change 8080 in script):
|
||||
```bash
|
||||
docker run -d --restart=always --name wekan-db mongo:3.2.18
|
||||
|
||||
docker run -d --restart=always --name wekan-app --link "wekan-db:db" -e "MONGO_URL=mongodb://db" -e "ROOT_URL=http://localhost:8080" -p 8080:80 wekanteam/wekan:latest
|
||||
```
|
||||
|
||||
2) List docker containers, your ID:s will be different:
|
||||
```bash
|
||||
docker ps
|
||||
```
|
||||
Result:
|
||||
```bash
|
||||
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
|
||||
1234wekanid wekanteam/wekan:latest "/bin/sh -c 'bash $ME" About an hour ago Up 46 minutes 0.0.0.0:8080->80/tcp wekan-app
|
||||
4321mongoid mongo "/entrypoint.sh mongo" About an hour ago Up 46 minutes 27017/tcp wekan-db
|
||||
```
|
||||
|
||||
3) Enter inside mongo container:
|
||||
```bash
|
||||
docker exec -it wekan-db bash
|
||||
```
|
||||
|
||||
4) OPTIONAL: If you want to browse data inside container, you can use CLI commands like listed at
|
||||
|
||||
https://docs.mongodb.com/manual/reference/mongo-shell/
|
||||
|
||||
like this:
|
||||
|
||||
```bash
|
||||
> mongo <==== START MONGO CLI
|
||||
MongoDB shell version: 3.2.18
|
||||
connecting to: test
|
||||
Server has startup warnings:
|
||||
2016-06-25T11:39:55.913+0000 I CONTROL [initandlisten]
|
||||
2016-06-25T11:39:55.913+0000 I CONTROL [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/enabled is 'always'.
|
||||
2016-06-25T11:39:55.913+0000 I CONTROL [initandlisten] ** We suggest setting it to 'never'
|
||||
2016-06-25T11:39:55.913+0000 I CONTROL [initandlisten]
|
||||
2016-06-25T11:39:55.913+0000 I CONTROL [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/defrag is 'always'.
|
||||
2016-06-25T11:39:55.913+0000 I CONTROL [initandlisten] ** We suggest setting it to 'never'
|
||||
2016-06-25T11:39:55.913+0000 I CONTROL [initandlisten]
|
||||
> show dbs <=== SHOW DATABASES
|
||||
admin 0.034GB
|
||||
local 0.000GB
|
||||
> use admin <=== CHANGE TO USE ADMIN DATABASE
|
||||
switched to db admin
|
||||
> show collections <=== SHOWS TABLES
|
||||
activities
|
||||
boards
|
||||
card_comments
|
||||
cards
|
||||
cfs._tempstore.chunks
|
||||
cfs.attachments.filerecord
|
||||
cfs_gridfs._tempstore.chunks
|
||||
cfs_gridfs._tempstore.files
|
||||
cfs_gridfs.attachments.chunks
|
||||
cfs_gridfs.attachments.files
|
||||
esCounts
|
||||
lists
|
||||
meteor-migrations
|
||||
meteor_accounts_loginServiceConfiguration
|
||||
presences
|
||||
users
|
||||
> db.users.find() <=== LISTS ALL USERS
|
||||
(list of all users here)
|
||||
> exit <=== EXIT MONGO CLI
|
||||
```
|
||||
|
||||
5) Go to / directory:
|
||||
```bash
|
||||
cd /
|
||||
```
|
||||
|
||||
6) Backup database to files inside container to directory /dump, only Wekan database with name "wekan" is included, not local:
|
||||
```bash
|
||||
mongodump -o /dump/
|
||||
```
|
||||
|
||||
7) Exit from inside of container:
|
||||
```bash
|
||||
exit
|
||||
```
|
||||
|
||||
8) Copy backup directory /dump from inside of container to current directory:
|
||||
```bash
|
||||
docker cp wekan-db:/dump .
|
||||
```
|
||||
|
||||
9a) Restore backup later (restore from /data/dump):
|
||||
```bash
|
||||
docker cp dump wekan-db:/data/
|
||||
docker exec -it wekan-db bash
|
||||
cd /data
|
||||
## Only if you get errors about existing indexes, use this instead:
|
||||
## mongorestore --drop --noIndexRestore --db wekan /data/dump/wekan/
|
||||
mongorestore --drop --db wekan /data/dump/wekan/
|
||||
exit
|
||||
```
|
||||
|
||||
That dbname can be for example wekan:
|
||||
```
|
||||
## Only if you get errors about existing indexes, use this instead:
|
||||
## mongorestore --drop --noIndexRestore --db wekan /data/dump/wekan/
|
||||
mongorestore --drop --db wekan /data/dump/wekan/
|
||||
```
|
||||
|
||||
9b) Or restore to another mongo database, in different port:
|
||||
```bash
|
||||
mongorestore --port 11235
|
||||
```
|
||||
|
||||
10) If you would like to browse mongo database that is outside of docker in GUI, you could try some admin interface:
|
||||
|
||||
https://docs.mongodb.com/ecosystem/tools/administration-interfaces/
|
||||
|
||||
11) If you sometime after backups want to remove wekan containers to reinstall them, do (CAREFUL):
|
||||
```bash
|
||||
docker stop wekan-app wekan-db
|
||||
docker rm wekan-app wekan-db
|
||||
```
|
||||
Then you can reinstall from step 1.
|
||||
|
||||
12) If latest version of Wekan Docker image is broken, here's how to run older version:
|
||||
|
||||
https://github.com/wekan/wekan/issues/659
|
||||
|
||||
## Backup and restore scripts
|
||||
|
||||
Edit these to suit your own requirements - they will delete backups older than 7 days.
|
||||
|
||||
Backup Script
|
||||
```bash
|
||||
#!/bin/bash
|
||||
DATE=$(date +%Y-%m-%d-%H-%M)
|
||||
SCRIPTPATH="$( cd "$(dirname "$0")" ; pwd -P )"
|
||||
cd $SCRIPTPATH
|
||||
mkdir -p backups/$DATE
|
||||
docker ps -a | grep 'wekan-db' &> /dev/null
|
||||
if [ $? = 0 ]; then
|
||||
docker exec -t wekan-db bash -c "rm -fr /dump ; mkdir /dump ; mongodump -o /dump/"
|
||||
docker cp wekan-db:/dump $SCRIPTPATH/backups/$DATE
|
||||
tar -zc -f backups/$DATE.tgz -C $SCRIPTPATH/backups/$DATE/dump wekan
|
||||
if [ -f backups/$DATE.tgz ]; then
|
||||
rm -fr backups/$DATE
|
||||
find $SCRIPTPATH/backups/ -name "*.tgz" -mtime +7 -delete
|
||||
fi
|
||||
else
|
||||
echo "wekan-db container is not running"
|
||||
exit 1
|
||||
fi
|
||||
```
|
||||
|
||||
Restore Script
|
||||
```bash
|
||||
#!/bin/bash
|
||||
if [ $# -eq 0 ]
|
||||
then
|
||||
echo "Supply a path to a tgz file!"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
SCRIPTPATH="$( cd "$(dirname "$0")" ; pwd -P )"
|
||||
DATE=$(basename $1 .tgz)
|
||||
|
||||
docker ps -a | grep 'wekan-db' &> /dev/null
|
||||
if [ $? = 0 ]; then
|
||||
|
||||
if [ -f $1 ]; then
|
||||
docker stop wekan-app
|
||||
mkdir -p $SCRIPTPATH/backups/$DATE-restore
|
||||
tar -zx -f $1 -C $SCRIPTPATH/backups/$DATE-restore
|
||||
docker exec -t wekan-db bash -c "rm -fr /restore ; mkdir /restore"
|
||||
docker cp $SCRIPTPATH/backups/$DATE-restore/wekan wekan-db:/restore
|
||||
## Only if you get errors about existing indexes, use this instead:
|
||||
## docker exec -t wekan-db bash -c "mongorestore --drop --noIndexRestore --db wekan /restore/wekan/"
|
||||
docker exec -t wekan-db bash -c "mongorestore --drop --db wekan /restore/wekan/"
|
||||
docker start wekan-app
|
||||
fi
|
||||
else
|
||||
echo "wekan-db container is not running"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
```
|
||||
Loading…
Add table
Add a link
Reference in a new issue