This is a quick demo that ReactOS can run the latest NGINX version (which is nginx-1.25.3 at the time of writing).
The screenshot shown above gets regenerated every 30 seconds using a batch file that calls NirCmd in a loop:
mkdir C:\htdocs :loop nircmd savescreenshot "C:\htdocs\screenshot.png" timeout /t 30 /nobreak goto loop
ReactOS is virtualized using QEMU/KVM and was started on an Ubuntu host using the following service definition:
[Unit] Description=QEMU ReactOS VM (node-1) [Service] Restart=always RestartSec=3 ExecStart=/usr/bin/qemu-system-x86_64 -enable-kvm \ -snapshot \ -drive file=/root/reactos/drive_c.img,index=0,media=disk \ -drive file=/root/reactos-general.iso,index=1,media=cdrom \ -drive file=/root/reactos-node-1.iso,index=2,media=cdrom \ -drive file=/root/reactos-certs.iso,index=3,media=cdrom \ -boot c \ -rtc base=localtime \ -m 128 \ -vnc :1 \ -monitor unix:/tmp/qemu-monitor-socket-1,server,nowait \ -net nic,model=virtio -net user,hostfwd=tcp::8444-:443 \ -serial stdio \ -usbdevice tablet [Install] WantedBy=default.target
The Ubuntu host is running 2 virtual ReactOS servers and uses HAProxy to load-balance between them. This is a preparation for doing zero-downtime deployments in the future (i.e. when updating ReactOS to the latest version, or whenever making configuration changes that require a restart of the VM).
The ReactOS servers occassionally run into a “Running low on page” error.
qemu-system-x86_64[24730]: (ntoskrnl/mm/ARM3/pfnlist.c:113) Running low on pages: 3 remaining qemu-system-x86_64[24730]: (ntoskrnl/mm/ARM3/pfnlist.c:113) Running low on pages: 2 remaining qemu-system-x86_64[24730]: (ntoskrnl/mm/ARM3/pfnlist.c:113) Running low on pages: 1 remaining qemu-system-x86_64[24730]: (ntoskrnl/mm/ARM3/pfnlist.c:113) Running low on pages: 0 remaining qemu-system-x86_64[24730]: qemu-system-x86_64[24730]: *** Assertion failed: PsGetCurrentProcess()->AddressCreationLock.Owner != KeGetCurrentThread() qemu-system-x86_64[24730]: *** Source File: ../ntoskrnl/mm/balance.c, line 302 qemu-system-x86_64[24730]: qemu-system-x86_64[24730]: Break repeatedly, break Once, Ignore, terminate Process or terminate Thread (boipt)?
This also happens when I give them more RAM (I tried up to 512 MB and still ran into the issue after a while). As a workaround, I’ve set up a script to automatically restart the ReactOS server when the message appears in the log.
ReactOS doesn’t have IPv6 support yet (source 1, source 2). However, this page can anyway be accessed via IPv6 thanks to HAProxy on the host machine that accepts IPv6 connections and redirects them to the corresponding IPv4 port on one of the ReactOS instances.
This project is running on a small cloud instance at DigitalOcean. DigitalOcean is actually one of the few cloud providers that support nested virtualization which is required for this server to run with reasonable performance.
If you plan to do a similar project, consider giving DigitalOcean a try using my referal link:
Apart from the referal link above, I’m not interested in donations. If you enjoyed this project and would like to make a donation, please consider donating directly to the ReactOS project.