← Back to Blog

Leaving Microsoft 365 and Google Workspace: An EU-Hosted Office Stack on Your Own Server

Published · by RS Computers

Nextcloud Euro-Office Digital sovereignty

To leave Microsoft 365 or Google Workspace for an EU-hosted office stack, you replace each service with an open-source program on a server in Europe. Nextcloud handles files, calendars and contacts, Collabora Online or Euro-Office edits documents in the browser, mailcow or Stalwart runs email, Matrix with Element runs chat, Jitsi Meet runs video calls, Vaultwarden keeps passwords, and authentik or Keycloak gives everyone one login. The hard parts are moving mailboxes, changing Outlook habits and the admin time you take over from Microsoft or Google. The hardware is easy: in our lab, Nextcloud 35 with either office engine used about 1 GB of RAM with four documents open.

Key facts, checked on 12 October 2026:

Why European offices are moving in 2026

The pressure is mostly legal. Under the CLOUD Act, a US company can be ordered to hand over data held in its Dublin data centre, while Article 48 of the GDPR only recognises such foreign orders when they rest on an international agreement, such as a mutual legal assistance treaty. The provider is caught between two laws, and its customers with it. The EU-US Data Privacy Framework, upheld by the EU General Court on 3 September 2025, still covers certified US companies, but an appeal has been pending since 31 October 2025 at the Court of Justice, which struck down the two earlier frameworks in 2015 and 2020 (WilmerHale).

The open-source route already works at scale. ZenDiS, the German public sector's centre for digital sovereignty, ships openDesk, whose parts include Nextcloud 33, Collabora 26.04, OX App Suite, Element, Jitsi, OpenProject and XWiki (openDesk docs). The building blocks below are largely the same, sized for a company.

Microsoft 365 and Google Workspace, service by service

Read it as a shopping list; the first four rows carry most of the daily work.

Microsoft 365 / Google WorkspaceSelf-hosted EU alternativeMoves easilyHarder
OneDrive, SharePoint / Google DriveNextcloud FilesFolders, share links, desktop and phone syncSharePoint sites, lists and Power Automate flows have no twin; permissions are rebuilt by group
Word, Excel, PowerPoint online / Docs, Sheets, SlidesCollabora Online or Euro-Office, inside Nextcloud.docx, .xlsx and .pptx files, co-editing, comments, tracked changesVBA macros, Power Query, complex pivot tables; Google files must be exported to Office formats first
Office desktop appsLibreOffice, or the new Euro-Office desktop editorsLetters, everyday spreadsheets, PDFsMacro-heavy workbooks; keep a few Microsoft licences or a Windows VPS with Remote Desktop for those users
Exchange Online, Outlook / Gmailmailcow (with SOGo webmail) or StalwartIMAP mail, webmail, phonesCopying mailboxes, deliverability, Outlook calendars
Calendar and contactsNextcloud Calendar and Contacts, or SOGo in mailcow.ics and vCard imports; phones sync over CalDAV and CardDAVRoom booking, delegated calendars, free/busy lookups
Teams chat / Google ChatMatrix with ElementRooms, direct messages, files, end-to-end encryptionOld chat history stays behind; export it for your records
Teams meetings / Google MeetJitsi Meet, or Talk in NextcloudBrowser meetings that guests join with a linkPhone dial-in, large webinars, recording
Entra ID / Google accountsauthentik or KeycloakOne login (OpenID Connect or SAML) for every appNo equivalent of Intune device management; everyone sets up two-factor login again
Saved passwords in Edge or ChromeVaultwarden with the Bitwarden appsCSV import, shared team foldersGetting everyone to install the extension
Scans in SharePoint or DrivePaperless-ngxPDF import, OCR text search, tagsAgreeing on tags before the import

Three things that take longer than you plan

Mailboxes are the slowest part. The Office 365 FAQ of imapsync, the usual copying tool, says business tenants need OAuth2 tokens, refreshed about every half hour, and that Microsoft allows roughly 300 MB per user per hour. A 30 GB mailbox therefore needs about 100 hours. Start the big ones days before the switch.

Outlook comes second. mailcow's Outlook guide explains that from Outlook 2019, ActiveSync needs OAuth2, which mailcow does not support. The new Outlook for Windows gets mail over IMAP but no calendars or contacts. Classic Outlook needs the CalDav Synchronizer plug-in, and Outlook for Mac cannot sync calendars or contacts with mailcow at all. Moving people to Thunderbird, webmail or phone apps is the real project.

The third is admin time, because someone on your side now does the patching. Euro-Office shipped five stable versions between June and October 2026, and Nextcloud and Collabora publish updates every few weeks too. Budget a few hours a month for updates and monitoring, and keep copies off the server with a tool like restic.

Euro-Office in October 2026: status, desktop app and Docker

Euro-Office is a fork of the open-source OnlyOffice code under the AGPLv3 licence, led by Nextcloud and IONOS with partners such as XWiki, OpenProject and Open-Xchange. OnlyOffice objected to the fork in spring 2026; Nextcloud's CEO told heise on 9 June that added source and brand notices settled it. Euro-Office is not a standalone app: its documentation says it needs a platform such as Nextcloud for the interface and the files.

Test both editors on one server before you migrate

This pilot runs Nextcloud with Collabora, then switches it to Euro-Office, on the server's IP address over plain HTTP. Use test files only, then delete it. For real use, add a domain and HTTPS with our reverse proxy guide, or use Nextcloud All-in-One as in our Nextcloud guide. We ran every command below in a Debian 13 container with 2 vCPUs and 4 GB of RAM on one of our Amsterdam servers, with Docker 26.1.5 and Compose 2.26.1 from Debian's packages.

1. Install Docker and create a user

# as root
apt-get update
apt-get install -y docker.io docker-compose curl openssl nano
useradd -m -s /bin/bash -G docker office
su - office

The last line logs you in as office, a normal user in the docker group.

2. Write the secrets and the compose file

In the first block, change 203.0.113.10 to your server's IPv4 address before you run it.

# as the office user
mkdir ~/office-pilot && cd ~/office-pilot
cat > .env <<EOF
SERVER_IP=203.0.113.10
DB_PASSWORD=$(openssl rand -hex 16)
NC_ADMIN_PASSWORD=$(openssl rand -hex 12)
JWT_SECRET=$(openssl rand -hex 32)
EOF
chmod 600 .env
nano compose.yaml

JWT_SECRET is the shared password between Nextcloud and Euro-Office. The example in the Euro-Office README calls for at least 32 characters, and this one has 64. Do not shorten it: in our test, 9.3.5 also started with an 11-character secret, so nothing warns you. Paste this into compose.yaml and save with Ctrl+O, Enter, Ctrl+X:

# compose.yaml in ~/office-pilot, written by the office user
services:
  db:
    image: mariadb:11.8
    restart: unless-stopped
    command: --transaction-isolation=READ-COMMITTED
    environment:
      MARIADB_RANDOM_ROOT_PASSWORD: "yes"
      MARIADB_DATABASE: nextcloud
      MARIADB_USER: nextcloud
      MARIADB_PASSWORD: ${DB_PASSWORD}
    volumes:
      - db:/var/lib/mysql

  redis:
    image: redis:8-alpine
    restart: unless-stopped

  app:
    image: nextcloud:35-apache
    restart: unless-stopped
    ports:
      - "8080:80"
    depends_on:
      - db
      - redis
    environment:
      MYSQL_HOST: db
      MYSQL_DATABASE: nextcloud
      MYSQL_USER: nextcloud
      MYSQL_PASSWORD: ${DB_PASSWORD}
      NEXTCLOUD_ADMIN_USER: admin
      NEXTCLOUD_ADMIN_PASSWORD: ${NC_ADMIN_PASSWORD}
      NEXTCLOUD_TRUSTED_DOMAINS: ${SERVER_IP}
      REDIS_HOST: redis
    volumes:
      - nextcloud:/var/www/html

  collabora:
    image: collabora/code:26.04.5.1.1
    profiles: ["collabora"]
    restart: unless-stopped
    ports:
      - "9980:9980"
    environment:
      aliasgroup1: http://${SERVER_IP}:8080
      extra_params: --o:ssl.enable=false

  eurooffice:
    image: ghcr.io/euro-office/documentserver:v9.3.5
    profiles: ["eurooffice"]
    restart: unless-stopped
    ports:
      - "8081:80"
    environment:
      JWT_ENABLED: "true"
      JWT_SECRET: ${JWT_SECRET}
      ALLOW_PRIVATE_IP_ADDRESS: "true"
    volumes:
      - eo_data:/var/lib/euro-office/documentserver

volumes:
  db:
  nextcloud:
  eo_data:

The two office servers sit in Compose "profiles", so they only start when you name them. ALLOW_PRIVATE_IP_ADDRESS lets Euro-Office fetch files from a private address, which our lab needed; with a public IP you can drop that line.

3. Start Nextcloud

# as the office user, in ~/office-pilot
docker compose up -d
sleep 60
docker compose logs app | grep -i "successfully installed"
. ./.env
occ() { docker compose exec -T -u www-data app php occ "$@"; }
occ status

Pulling the images took 41 seconds on our Amsterdam server. After the one-minute sleep, the grep should print Nextcloud was successfully installed (if not, wait and run it again), and occ status shows versionstring: 35.0.1. . ./.env loads your settings into the shell and occ() is a shortcut to Nextcloud's command-line tool; run both again after each new login. Open http://YOUR_IP:8080 and sign in as admin with the password that grep NC_ADMIN .env shows. Idle, Nextcloud, MariaDB and Redis used 94, 125 and 5 MiB.

4. Connect Collabora

Nextcloud does not send requests to private addresses unless you allow it. Our lab had a 10.x address, so we ran this line; you need it only if your SERVER_IP starts with 10., 172.16 to 172.31 or 192.168.:

# as the office user, only for a private SERVER_IP
occ config:system:set allow_local_remote_servers --value=true --type=boolean

Then start Collabora, give it 20 seconds and connect it:

# as the office user, in ~/office-pilot
docker compose --profile collabora up -d
sleep 20
occ app:install richdocuments
occ config:app:set richdocuments wopi_url --value="http://$SERVER_IP:9980"
occ richdocuments:activate-config

The connector, richdocuments 12.0.1, comes from the Nextcloud app store, and the last command should end with Detected WOPI server: Collabora Online Development Edition 26.04.5.1. Upload a .docx file in Files and click it. CODE is Collabora's development edition: Collabora calls it "not recommended for production environments" and sells a supported version for businesses.

5. Switch the same Nextcloud to Euro-Office

# as the office user, in ~/office-pilot
docker compose --profile collabora rm -sf collabora
occ app:disable richdocuments
docker compose --profile eurooffice up -d
sleep 90
curl -s http://$SERVER_IP:8081/healthcheck; echo
occ config:system:set overwrite.cli.url --value="http://$SERVER_IP:8080"
occ app:install eurooffice
occ config:app:set eurooffice DocumentServerUrl --value="http://$SERVER_IP:8081/"
occ config:app:set eurooffice jwt_secret --value="$JWT_SECRET"
occ eurooffice:documentserver --check

The pull took 84 seconds, and the health check printed true 71 seconds after the start, hence the sleep 90. If it prints nothing, wait until the curl line prints true, then run the lines after it again. Keep the overwrite.cli.url line: the Nextcloud image leaves it at http://localhost, so our first check sent Euro-Office to localhost and failed with "Error while downloading the document file to be converted". With the real address, the last line prints Document server http://YOUR_IP:8081/ version 9.3.5.37 is successfully connected. To switch back, stop eurooffice, swap the two apps and start collabora; nothing needed reconfiguring.

6. What we measured

We opened the same 8-page report for one and then four test users in headless Chromium on the same server, one engine at a time. The first command shows memory, and the second deletes the pilot with all its data when you are done:

# as the office user, in ~/office-pilot
docker stats --no-stream --format "table {{.Name}}\t{{.MemUsage}}"
docker compose --profile collabora --profile eurooffice down -v

docker stats showed 0.5 to 1.05 GiB for either office server, depending on file cache the kernel can free. The table shows the memory that cannot be freed (the "anon" value in each container's memory statistics), which is steadier.

Our lab, 12 October 2026Collabora CODE 26.04.5.1Euro-Office 9.3.5
Image size1.32 GB4.38 GB
Pull time, Amsterdam21 s84 s
RAM, no document open496 MiB468 MiB
RAM, 1 document open609 MiB537 MiB
RAM, 4 documents open826 MiB629 MiB
Extra RAM per open documentabout 80 to 110 MiBabout 40 to 70 MiB
Where editing happensOn the server, one process per open documentIn the browser; the server stores and syncs changes

Collabora's architecture page explains its curve: one Kit process per open document. Nextcloud, MariaDB and Redis added about 300 MiB, and both editors drew our .docx and .xlsx files 3 to 7 seconds after opening. Choose by file type more than by RAM: the setup screen of Nextcloud All-in-One rates Euro-Office best for Microsoft compatibility and Collabora best for ODF and legacy files.

How big a server for 5, 25 and 100 users

Two numbers drive the size: the extra RAM per open document and how many documents are open at once. This estimate combines our measurements with the vendors' published figures, checked on 12 October 2026; it is not a load test.

CompanyNextcloud and editorMailChat, video, passwords, login
5 usersVPS Mini (4 vCPU, 4 GB). VDS Small (4 dedicated vCPU, 8 GB) also fits Stalwart, Matrix and VaultwardenStalwart, which its docs size at 1 GB for 5 to 10 users; mailcow asks for 6 GiB plus 1 GiB swap, so it gets its own VDS SmallIn our labs Matrix used 200 to 245 MB and Vaultwarden under 30 MiB; Jitsi needs power only during calls
25 usersVDS Medium (8 dedicated vCPU, 16 GB), with room for Matrix, Vaultwarden and authentik (2 cores and 2 GB minimum)mailcow on a VDS Medium; its docs plan 16 GiB for 15 ActiveSync phones and about 50 IMAP connectionsJitsi on its own VPS Mini or VDS Small; its handbook says 4 GB works for small meetings
100 usersVDS Large (16 dedicated vCPU, 32 GB); 30 documents open at once add about 3 GB with Collabora or up to 2 GB with Euro-Officemailcow on its own VDS Medium or LargeJitsi on a VDS Small or larger (the handbook suggests 8 GB in general); Matrix and SSO on a VPS Mini

VPS plans share their vCPUs, and VDS plans have dedicated ones, which matters when many documents are open at once. If a server runs short, upgrade to a bigger plan from the client area with a short reboot.

A migration order that keeps the phones quiet

  1. Spend two weeks on an inventory and the pilot: list mailbox sizes, shared drives, Teams channels and your ten hardest spreadsheets, and let a few volunteers work in the test server.
  2. Set up authentik or Keycloak, create the accounts and turn on two-factor login.
  3. Copy OneDrive or Drive into Nextcloud with rclone, as in our Nextcloud guide. Google Takeout exports Docs, Sheets and Slides as Office files.
  4. Export calendars and contacts as .ics and vCard files and import them into Nextcloud or SOGo.
  5. Open Matrix rooms that match your Teams channels and give everyone a Jitsi link.
  6. Move mail last. Lower the MX record's TTL a week ahead, copy the big mailboxes days early, run a final imapsync pass and switch the MX record. Outbound port 25 is blocked on our new servers; ask us on Telegram to open it.
  7. Cancel licences after a quiet month. Drop what nobody missed and keep the few Microsoft seats that still earn their price.

Where your data sits: Amsterdam, Dublin or Prishtina

RS Computers runs KVM servers with NVMe disks, unmetered traffic and their own IPv4 and IPv6 addresses in three cities. The Netherlands and Ireland are EU members, so a stack in Amsterdam or Dublin keeps EU personal data in the EU; servers there also get their own /48 of IPv6. Kosovo is outside the EU and has no adequacy decision, so EU personal data on a server in Prishtina counts as a transfer under Chapter V of the GDPR and needs a safeguard such as standard contractual clauses. For a Kosovo organisation, Prishtina is the home option: Law No. 06/L-082 follows the GDPR, and the data stays in the country. Our Nextcloud guide covers both laws. This is general information, not legal advice.

Frequently asked questions

Is there a European alternative to Microsoft 365?

Yes, as a set of open-source programs on an EU server: Nextcloud for files and calendars, Collabora Online or Euro-Office for documents, mailcow or Stalwart for email, Matrix for chat and Jitsi for video.

Is Euro-Office available as a desktop app?

Yes. Version 9.3.5-2 of the Euro-Office desktop editors appeared on GitHub on 9 October 2026 for Windows, macOS on Apple silicon and Linux, after Nextcloud announced it on 16 September 2026. The builds have no release notes yet.

How do I run Euro-Office with Docker?

Run ghcr.io/euro-office/documentserver with JWT_ENABLED=true and a long JWT_SECRET, then connect it to Nextcloud with the eurooffice app. Version tags need a leading "v", as in v9.3.5. The image is 4.38 GB and took about 70 seconds to become healthy in our lab.

Should I choose Collabora or Euro-Office?

Euro-Office suits offices that live in Word and Excel files; Collabora suits OpenDocument and old formats. Euro-Office used less server RAM per open document in our lab, 40 to 70 MiB against 80 to 110 MiB. Test your hardest files in both.

How long does a move from Microsoft 365 take?

Plan weeks, not a weekend. Files, calendars and chat move in days, but mail is slow: at Microsoft's limit of roughly 300 MB per user per hour, a 30 GB mailbox needs about 100 hours. Retraining Outlook users often takes longer still.

Can I keep EU data on a server in Kosovo?

Yes, with a safeguard such as standard contractual clauses, because Kosovo has no EU adequacy decision and the data leaves the EU. Amsterdam and Dublin avoid that step for EU data, and for Kosovo organisations Prishtina keeps data at home.

Start with five people and one server

Run the pilot, let five colleagues use it for two weeks and write down what breaks. Then move accounts, files, calendars and chat, and finish with mail. Pick a VPS or VDS on the plans page, where availability by city is listed, or message us on Telegram with your number of users and mailbox sizes; we can also quote the setup.

← All articles

Chat on Telegram