Tools to clean up Mongodb database and delete archived cards / list / boards (after few months)
Using Python3.
Need to have below Python module : pymongo
pip install pymongo
You need to have authentification setup on Mongo database and port opened (if docker) and create user :
use admin
db.createUser({user: "admin",pwd: "admin123",roles: [ "readWrite"]})
WekanCleanUp will manage below actions :
- Set in lowecase email of users in database (alert if duplicated email)
- Delete archived boards older that day_to_keep_board_arch
- Delete live boards (with no cards into) older than day_to_keep_board_nocard
- Removing from boards deleting users (if user deleted from database...)
- Delete archived lists older that day_to_keep_list_arch
- Delete archived cards older that day_to_keep_card_arch
- Delete all the orphans objects at the end (lists,cards,checklists,cards_comments,attachements,files,chunks,activities)
You need to update parameters before executing it
# Parameters
day_to_keep_board_arch = 30
day_to_keep_list_arch = 30
day_to_keep_card_arch = 60
day_to_keep_board_nocard = 15
mongo_user = 'admin'
mongo_password = 'admin123'
mongo_server = 'localhost'
mongo_port = '27017'
- Build Docker Image
Run the following command in the source root directory to build the docker image:
docker build -t wekan-cleanup .
- Create MongoDB User
You still need a MongoDB user with access to the wekan database.
If MongoDB is running in a docker container you could enter the container via docker (e.g. docker exec -it wekan-db mongo
) and create the user:
use admin
db.createUser({user: "admin",pwd: "admin123",roles: [ "readWrite"]})
- Save the password as a file
Save the password as the content of a file on your computer, for example:
echo "admin123" > .MONGO_PASSWORD
- Run the docker container with your custom settings
Before you execute this command, please make sure that you have a backup of your MongoDB.
docker run \
--rm \
-v "$PWD/.MONGO_PASSWORD:/.MONGO_PASSWORD" \
--env "MONGO_PASSWORD_PATH=/.MONGO_PASSWORD" \
--env "MONGO_USER=admin" \
--env "MONGO_SERVER=wekandb" \
--env "MONGO_PORT=27017" \
--env "MONGO_DATABASE=wekan" \
--env "DAYS_TO_KEEP_BOARD_ARCHIVE=30" \
--env "DAYS_TO_KEEP_LIST_ARCHIVE=30" \
--env "DAYS_TO_KEEP_CARD_ARCHIVE=60" \
--env "DAYS_TO_KEEP_CARD_NOCARD=15" \
--network "wekan-mongodb_wekan-tier" \
wekan-cleanup
NOT recommended in production environments
- Run the docker container with your custom settings
Before you execute this command, please make sure that you have a backup of your MongoDB.
docker run \
--rm \
--env "MONGO_USER_AUTHENTICATION=false" \
--env "MONGO_SERVER=wekandb" \
--env "MONGO_PORT=27017" \
--env "MONGO_DATABASE=wekan" \
--env "DAYS_TO_KEEP_BOARD_ARCHIVE=30" \
--env "DAYS_TO_KEEP_LIST_ARCHIVE=30" \
--env "DAYS_TO_KEEP_CARD_ARCHIVE=60" \
--env "DAYS_TO_KEEP_CARD_NOCARD=15" \
--network "wekan-mongodb_wekan-tier" \
wekan-cleanup
Make sure the MongoDB is accessible If the MongoDB is running in a docker container, you could either use its network or expose the MongoDB port, the former is recommended. The example above uses the default network from the Wekan's docker-compose setup.
MONGO_DIRECT_CONNECTION
: Don't try to connect to all replica nodes. Useful when you enable MongoDB replicaset to take advantage from Oplog, but the replica has been configured with an unreachable address (for example,localhost:27017
). See pymongo docs