TO:DOs
- Test xwiki.cfg - xwiki.store.versioning=0 to prevent page versions for tagging etc
- Set created date/time on Blogposts (not only publised date) - SQL Seems to be the way
- Set created date/time on pages (less important) - SQL Seems to be the way
- Improve logging from convert.py a bit
Install XWiki as a Docker solution
Officiel: https://xwiki.com/en/Blog/HowtoinstallXWikiusingDocker/
I Use: https://github.com/xwiki/xwiki-docker - And a hidden .evn file:
# Default environment values XWIKI_VERSION=16.10.11 DB_USER=xwiki DB_PASSWORD=******** DB_DATABASE=xwiki POSTGRES_ROOT_PASSWORD=*********'
The Docker Compose file:
networks:
bridge:
driver: bridge
services:
# The container that runs XWiki in Tomcat, with the appropriate JDBC driver (for postgres).
web:
image: "xwiki:${XWIKI_VERSION}-postgres-tomcat"
container_name: xwiki-postgres-tomcat-web
restart: unless-stopped
depends_on:
- db
ports:
- "8080:8080"
# Default values defined in .env file.
# The DB_USER/DB_PASSWORD/DB_DATABASE/DB_HOST variables are used in the hibernate.cfg.xml file.
environment:
- XWIKI_VERSION=${XWIKI_VERSION}
- DB_USER=${DB_USER}
- DB_PASSWORD=${DB_PASSWORD}
- DB_DATABASE=${DB_DATABASE}
- DB_HOST=xwiki-postgres-db
- JAVA_OPTS="-Xmx2048m"
- TZ=Europe/Copenhagen
# Provide a name instead of an auto-generated id for xwiki data (the permanent directory in included in it)
# configured in the Dockerfile, to make it simpler to identify in 'docker volume ls'.
volumes:
- /data/xwiki/xwiki-data:/usr/local/xwiki
networks:
- bridge
# The container that runs the database (postgres)
db:
image: "postgres:17"
container_name: xwiki-postgres-db
restart: unless-stopped
volumes:
- /data/xwiki/postgres-data:/var/lib/postgresql/data
environment:
- POSTGRES_ROOT_PASSWORD=${POSTGRES_ROOT_PASSWORD}
- POSTGRES_PASSWORD=${DB_PASSWORD}
- POSTGRES_USER=${DB_USER}
- POSTGRES_DB=${DB_DATABASE}
- POSTGRES_INITDB_ARGS=--encoding=UTF8 --locale-provider=builtin --locale=C.UTF-8
networks:
- bridge
Go to the Web-interface and do the installation to end after startup.
Install Extensions
This can vary a bit - but for my migration scripts, these may be needed as they do substitute several Confluence Macro's:
- Blog Application
- Attachments Macro
- Video Macro
- Diagram Application
- PDF Viewer Macro
Migrate
If You use Gliffy in Confluence, install Draw.io on Confluence as trial and migrate all Gliffy drawings to Draw.io - As the Gliffy macro etc is not supported at all in XWiki.
Clone migration from bitbucket.org, create a python env in the cloned dir and install requirements:
You may neeed to: apt install python3.12-venv
Start installing and prepare for migration:
git clone https://moseiseydk@bitbucket.org/moseiseydk/confluence-migrate.git python3 -m venv confluence-migrate cd confluence-migrate source bin/activate pip install requests pip install atlassian-python-api pip install python-slugify
Create the config.py file:
username = '' password = '' conflunce_url = 'https://www.server.dk' xwiki_url = 'https://xwiki.server.dk'
Edit the confluence.py file and add all space keys You wish to migrate to XWiki:
space_keys = ["test","familieblog","anmeldelser","andrebilleder","khvg145","familiebilleder","it","ATLASSIAN"]
Take a backup / snapshot of the server her - its a baseline
Execute the migration script:
Limitations:
- All Blogs will end in the "Blog" in Xwiki
- A max of 50 attachments are supported from a Confluence page (a problem with the atlassian-python-api)
- The migration can be re-run at any time, XWiki will just update the Page / Blog, but 1-2 history versions will be added per run, so its not optimal for the final run, but for tests it can be fine.
- max_count = 2000 is set for "blogpost" as there are no way to tell when we are done (a problem with the atlassian-python-api). Make sure this is higher that the total number of blogposts in Your Confluence
- The page layout of a Confluence page is converted to a Xwiki "container" macro in the migration, that is not to good, some macros will report: The [video] macro is a standalone macro and it cannot be used inline. (This macro generates standalone content. As a consequence you need to make sure to use a syntax that separates your macro from the content before and after it so that it's on a line by itself. For example in XWiki Syntax 2.0+ this means having 2 newline characters (a.k.a line breaks) separating your macro from the content before and after it.)
Start the migration script:
python3 confluence.py > log.txt
Post migration
Run SQLs
sudo apt-get install -y postgresql-client-16 psql
Do a visual compare.
Examine log.txt for:
- Errors
- Pages with restrictions - these are unrestricted in the XWiki, do set restrictions if needed. Use grep:
cat log.txt | grep restrictons Read restrictons for user: bnp@mos-eisley.dk on Page: Kamerarer (61112322) Read restrictons for user: noreply@mos-eisley.dk on Page: Kamerarer (61112322) Read restrictons for group: familie on Page: 2 x 40 års fødselsdag (38600797) Read restrictons for user: bnp@mos-eisley.dk on Page: Christophers Nonfirmation 28-04-2018 (82182177) Read restrictons for user: noreply@mos-eisley.dk on Page: Christophers Nonfirmation 28-04-2018 (82182177) Update restrictons for user: bnp@mos-eisley.dk on Page: Christophers Nonfirmation 28-04-2018 (82182177) Read restrictons for user: bnp@mos-eisley.dk on Page: Sommerferie 2015 (59408386) Read restrictons for user: bnp@mos-eisley.dk on Page: Road Trip Sommerferie 2025 (272629841)
In things went wrong, roll back to the backup.
Style
You may want to style Xwiki, I do a different Theme and a little CSS:
#xwikimaincontainer { width: 1400px !important;}