# Kulik Labs Development > Technology & Security Consulting for you Business in the Greater Milwaukee Area. Call (414) 775-3807 to get the best pricing in the city! Public Ghost content for AI and LLM tooling. This file includes a bounded export of public pages first, then recent public posts. Append `.md` to any post or page URL to get the content in Markdown (for example, `/example-post.md`). ## Pages ### About: Max Kulik URL: https://klabsdev.com/about/ Last updated: 2026-05-20T06:29:57.000Z ![](https://klabsdev.com/content/images/2025/10/Max-Linked-the-Fuck-In-2.jpg) Max H. Kulik (Owner) ```shell echo "HELLO WORLD" ``` My name is Max Kulik. I currently serve as an IT Leader and Business Technology Consultant, but my foundation in this field was built long before my professional career began. ### Building my Curiosity Driven Foundation I grew up with a drive to get my hands on any piece of technology I could find, driven by a desire to understand the "why" behind the "how." This curiosity led me to my first major project: a 32-bit rack server running CentOS. While it provided my first introduction to Linux, it also provided my first real technical challenge. As that architecture became obsolete, I found myself at a crossroads: I could either move on, or I could learn why it was failing. I chose the latter. This sparked a deep dive into computer science and hardware architecture, leading me to spend years deconstructing and rebuilding systems to understand exactly how components interact to create performance. I wasn't just building servers; I was teaching myself the first principles of computing. With a growing collection of hardware and a foundational understanding of how it worked, I eventually faced the quintessential home-lab question: "Now that I have the infrastructure, what do I actually run on it?" Being mindful of a tight budget, expensive proprietary operating systems weren't an option. This led me back to my early experiences with CentOS and a deeper dive into the open-source world. I began deploying servers with a level of intensity that can only be described as a total obsession. I started small, hosting basic web pages, but quickly scaled up to running multiple game servers for my friends and contributing my compute power to the early Folding@home community. As the number of applications grew and my environment became more complex, I hit a new ceiling. I was no longer just wondering what to run, I was beginning to realize that I needed a more sophisticated way to manage it all. ### Building a Lab and Exploring Virtualization My search for a better management solution led me to the world of hypervisors and virtual environments. The first one I encountered was VMware’s ESXi, and at the time, it felt like magic. The ability to run dozens of isolated applications on the same piece of hardware simultaneously was the exact solution I had been looking for. By the time I was in high school, I was spending my nights immersed in experimentation. I remember going through Distro Watch like a checklist. I downloaded every Linux ISO I could find, uploading them to my server, and spinning up VMs just to see how they differed. It was during one of these deep dives that I accidentally downloaded Proxmox. I had expected another Linux distribution, but instead, I found an open-source, Debian-based hypervisor platform. I was immediately blown away. Without hesitation, I flashed the ISO to a drive and overwrote my ESXi installation, eager to master a new platform that aligned with my preference for open-source flexibility. While my server continued to serve as a personal lab, the trajectory of my career shifted during a chance encounter in a high school classroom. While I was working in a Linux terminal, a teacher noticed my work and asked for an explanation of what I was building. ### Pivoting From Hobbyist to Professional In that moment, I unknowingly began developing one of the most critical skills of my professional life: the ability to bridge the gap between deep technical execution and non-technical understanding. This ability to communicate complex systems clearly caught the attention of the school district's Technology Director. This connection led to an invitation to participate in a technology conference hosted by Paragon Development Systems (PDS), a leader in custom server architecture for companies like HP. This experience served as my bridge from the world of home-labbing to the professional technology sector, introducing me to the scale and complexity of enterprise-level infrastructure. Unknowingly, I was beginning to build a network that would define my early career. Through a series of serendipitous introductions, including a connection to a Technology Director at HP, I found myself in rooms with some of the industry's most influential figures, from Malcolm Gladwell to the Chief Solutions Architect at PDS. The architects and engineers at PDS were impressed by the complexity of the projects I was managing at such a young age. This led to an extraordinary invitation: the opportunity to work one-on-one in their Development Lab in Madison, Wisconsin. For two summers, I had unprecedented access to enterprise-grade virtual environments, where I shifted my focus from home-labbing to the realities of large-scale computing. This experience was a catalyst for my growth, providing me with a professional foundation that most don't encounter until well into their careers. Upon graduating high school, as my time in the lab came to a close, I found myself at a crossroads, ready to decide which professional path to pursue. ### It's not What you Know ... After high school, I was offered a role at PDS, but due to the distance and my current commitments, I had to respectfully decline. For a few years, I focused on the independence of early adulthood. Navigating the milestones of first cars and moving out, while keeping my home lab alive in the background. I also began taking on freelance web development projects, hosting sites and learning the business side of technology. Then, the pandemic hit. While many found the era unsettling, it provided me with a unique opportunity. At the time, I had been exploring the world of streaming, which provided a stable income stream and, more importantly, a vast amount of free time. I decided to double down on my education. I shifted my focus toward Windows network management and corporate IT infrastructure, treating my home lab as a full-time classroom to ensure I could provide enterprise-level value. I began documenting my journey on social media and launched a website offering IT services to small businesses. The response was immediate; within a month, I was managing a steady stream of gigs, solving technical hurdles for individuals and local companies. Despite lacking a formal IT degree, I spent a year aggressively networking and showcasing my portfolio of home-lab projects and freelance successes. That persistence paid off when I landed a part-time technology consultation role with a public accounting firm with 11 locations. My impact there was felt quickly; within a year, the firm brought me on full-time as their Lead System Administrator, trusting me to manage their entire infrastructure and spearhead a massive cloud migration project. ### Building Skills, Navigating Enterprise IT, Becoming a Leader My time with the accounting firm was more than just a job; it was a catalyst for my professional growth and a massive expansion of my network. Although my role was internal, the trust I built with my colleagues created an unexpected referral engine. As they interacted with clients who were struggling with their own technology, they began recommending me as a trusted expert for on-demand IT support. Before I knew it, I had built a substantial roster of independent clients. I recognized a significant opportunity here: there was a demand for high-quality, managed IT services that were accessible and efficient. I began researching the Managed Service Provider (MSP) model, looking for ways to provide enterprise-level stability and security without the bloated costs of traditional providers. I spent my free time architecting a "lean" MSP stack. By combining a professional website with open-source ticketing, RMM, and AV/XDR threat management—paired with high-performance hardware and cost-effective backup solutions—I built a system that was both powerful and scalable. With my technical foundation in place, I shifted my focus toward business development, reaching out to my network to offer these managed solutions. To date, that venture has grown into a successful practice with multiple managed clients and my first employee. As the major technology initiatives at the accounting firm reached completion, I began seeking a new challenge that would allow me to apply my skills on an even larger scale. This led me to Bell Ambulance, the largest private EMS company in Wisconsin, where I managed the technical needs of a workforce of 800 employees. Operating in a high-stakes, mission-critical environment like EMS further refined my ability to maintain stability and performance under pressure. Today, I serve as the IT Manager for Bartolotta Restaurants, a Milwaukee staple known for culinary excellence. In this role, I combine my lifelong passion for technical architecture with strategic leadership to ensure the technology powering one of the city's most prestigious brands is as seamless and refined as the guest experience. > Whether I am managing a corporate network, scaling an MSP, or diving back into a home-lab project, I remain driven by the same curiosity that started it all. I believe that the best technical leaders never stop being students, and I bring that mindset to every project and partnership I undertake. ![](https://klabsdev.com/content/images/2026/04/IMG_1191.jpg) My current server rack. Housed in a retro Compaq 7000 Series rack. ### Websites URL: https://klabsdev.com/websites/ Last updated: 2026-05-20T06:29:48.000Z A collection of websites that I have built or worked on in some way. Each section is a showcase of the website and the technologies used to build it. --- ### Slinger Super Speedway [![](https://klabsdev.com/content/images/2025/06/chrome_C98Lgv7gYe.jpg)](https://slingersuperspeedway.com/?ref=klabsdev.com) This project was a comprehensive overhaul of an existing website, breathing new life into over 700 pages of archived content from a legacy WordPress installation from 2008 and a poorly exported Drupal site archive with content dating back to 1998\. The goal was to create a modern, performant, and easily maintainable platform. I rebuilt the site using Ghost, a powerful and flexible CMS. The site is deployed and managed using Docker on Kulik Labs Development's cloud servers, ensuring scalability and excellent performance! A key feature is the dynamic news slider on the homepage, implemented using the Ghost Content API to automatically display featured news posts. In addition, all legacy back links have been preserved using a combination of custom rules on the DNS level with Cloudflare and custom regex routing with Ghost's built in tooling. This was critical as we maintained SEO credibility with search engines. This is a great demonstration of utilizing modern APIs for dynamic content delivery and a capacity to handle large content migrations. I also understand the key importance of preserving the online presence of a 25+ year old website. --- ### The Kiel Company [![](https://klabsdev.com/content/images/2025/03/chrome_XqqKqUf8hH.png)](https://thekielcompany.com/?ref=klabsdev.com) This website is built on Ghost, a popular open-source platform for creating blogs and other online publications. It also utilizes Cloudflare to manage DNS routing and custom email routing, ensuring fast and secure access to the site. Additionally, Docker is used to facilitate quick updates and deployments of new content. As a result, the website boasts high performance, security, and flexibility, making it an ideal platform. With its robust feature set and scalable architecture, this website can handle a large volume of traffic while maintaining fast page loads and seamless user experiences. --- ### MH Home Services, LLC [![](https://klabsdev.com/content/images/2025/03/Screen-Shot-2025-03-17-16-59-17.17.png)](https://mhhomeservicesllc.com/?ref=klabsdev.com) This website is built on **Ghost**, an open-source headless CMS focused on content creation and publishing. It leverages a combination of technologies to deliver its modern aesthetic and functionality. Extensive custom code has been implemented to achieve the unique visual design and interactive elements of the website. This likely includes styling for typography, layout, animations, and user interface interactions. **Ghost CMS** Powers the content management system, allowing easy creation, editing, and publication of blog posts and static pages. **Cloudflare is** Used as a CDN (Content Delivery Network) to improve website loading speed and performance by caching static assets and distributing content across multiple servers globally. mhhomeservicesllc.com demonstrates a well-developed technical implementation combining the strengths of Ghost CMS, Cloudflare, and custom code to create a visually appealing and functional website optimized for user experience and performance. --- ### Pole Factory MKE [![](https://klabsdev.com/content/images/2023/12/ScreenPoleFactoryMKE-1-.PNG)](https://polefactorymke.com/?ref=klabsdev.com) Pole Factory MKE is a dance studio located in Downtown Milwaukee. This site hosts a suite of features to allow customers to buy into classes on a set schedule by the studio owner. Much of the initial design work and framework were assembled by myself. This site is hosted by KLabsDev servers currently. Pole Factory MKE’s site also utilizes Twilio’s SMS API to send text alerts to its customers. In addition to SMS alerts, e-mails to update customers on their class schedule are also utilized with SMTP under Seninblue’s API proxied through Cloudflare. Then payments are accepted under the Stripe API. The website framework is based on WordPress. ### Resume URL: https://klabsdev.com/resume/ Last updated: 2026-05-20T06:29:40.000Z [Max Kulik Resume Download Download and save my ResumeMaxResumev12.pdf86 KBdownload-circle](https://klabsdev.com/content/files/2025/09/MaxResumev12-1.pdf "Download") [Max Kulik Resume DownloadDownload an AI friendly version of my professional resume.MaxResumev12.docx61 KBdownload-circle](https://klabsdev.com/content/files/2025/09/MaxResumev12.docx "Download") ### Solutions URL: https://klabsdev.com/solutions/ Last updated: 2026-05-20T06:29:27.000Z ![](https://klabsdev.com/content/images/2026/02/RMM-1.png) ## Technical Support Get the support your business needs, without the cost of an intenral IT team! [Learn More](https://klabsdev.com/rmm-service/) **Remote Monitoring & Management (RMM)** Our RMM service provides 24/7 proactive monitoring, automated security updates, and instant remote support to keep your systems secure, stable, and up-to-date. We deliver integrated help desk ticketing, real-time asset tracking, and customized reporting for compliance and operational insight. The result is reduced downtime, stronger cybersecurity, and predictable IT support, without the need for constant on-site visits. ![](https://klabsdev.com/content/images/2026/02/Security.png) ## Endpoint Protection Protect your servers, computers, laptops from attackers with our 24/7, 365 Security Operations Center. [Learn More](https://klabsdev.com/endpoint-protection/) **Huntress Partner | Providing Managed Endpoint Security** As a partner of Huntress, Kulik Labs Development delivers fully managed endpoint protection and 24/7 security monitoring that safeguards business devices from ransomware, malware, and advanced cyber threats. This service combines intelligent threat detection, continuous Security Operations Center (SOC) oversight, and rapid incident response to stop attacks before they cause downtime or data loss. Instead of relying on basic antivirus alone, systems are monitored for suspicious behavior, unauthorized changes, and emerging threats around the clock. Businesses benefit from real-time protection, reduced false alarms, expert-guided remediation, and centralized visibility across all devices, providing enterprise-level cybersecurity without the need for an in-house security team. ![](https://klabsdev.com/content/images/2026/02/DataBackup-1.png) ## Live Data Backup Protect your company data at an industry leading cost! [Learn More](https://klabsdev.com/data-backup/) **Data Protection & 3-2-1 Backup Solutions** As a partner of Backblaze, Kulik Labs Development delivers cost-effective, fully managed data backup and protection services built around the proven **3-2-1 backup strategy,** three copies of data, on two different media types, with one secure off-site copy. Server and endpoint data are continuously backed up to encrypted cloud storage, ensuring protection from hardware failure, accidental deletion, ransomware, and natural disasters. Solutions are scalable for both small businesses and larger environments, with flexible recovery options ranging from single-file restores to full-system recovery. The result is reliable, enterprise-grade data protection with predictable pricing, centralized visibility, and peace of mind that critical business data is always secure and recoverable. ![](https://klabsdev.com/content/images/2026/02/vCIO-1.png) ## Technology Consulting Lead with confidence knowing you are making the best technical choices for your company with our vCIO services! [Learn More](https://klabsdev.com/technology-consulting/) **vCIO & Technical Advisory Services** Our vCIO-style services provide businesses with professional technology leadership and strategic planning without the cost of a full-time executive. We help organizations document their technical environments, track software and systems, and build internal knowledge bases that make onboarding staff and maintaining continuity much easier. In addition, we develop forward-looking technology roadmaps that assist with budgeting, infrastructure upgrades, network improvements, and large-scale projects. The result is clearer decision-making, predictable technology costs, and a long-term IT strategy that supports business growth instead of reacting to problems after they occur. ![](https://klabsdev.com/content/images/2026/02/Websites.png) ## Website Services Build your online presence today! Get the word out there! [Learn More](https://klabsdev.com/website-services/) **Website Hosting, Management & SEO Services** Kulik Labs Development provides end-to-end website solutions including hosting, updates, performance optimization, and search engine visibility, all managed on our in-house global cloud infrastructure for faster speeds, higher reliability, and lower ongoing costs. Services cover everything from routine content edits and security maintenance to full platform management for WordPress, affordable Ghost CMS sites, and fully custom bespoke websites. We also offer competitively priced domain registration and DNS management at bulk-level rates, helping businesses maintain a professional online presence without inflated fees. The result is a modern, secure, and scalable website that stays up to date and cost-effective while you focus on running your business. ### Endpoint Protection URL: https://klabsdev.com/endpoint-protection/ Last updated: 2026-05-20T06:28:40.000Z As a certified partner of Huntress, I provide advanced, fully managed endpoint protection and 24/7 security monitoring designed to keep businesses safe from modern cyber threats, without the cost or complexity of building an in-house security team. --- ## 24/7 / 365 Endpoint Protection Every workstation, laptop, and server is continuously monitored for suspicious activity, malicious behavior, and unauthorized changes. Protection goes beyond traditional antivirus by analyzing **how software behaves**, not just what it is called. This allows early detection of ransomware, fileless malware, and zero-day threats that signature-based tools often miss. **What this means for you:** Your devices are actively guarded at all hours, even when your office is closed. --- ## Managed Detection & Response (MDR) Security isn’t just about alerts, it’s about action. Managed Detection & Response combines automated threat detection with expert investigation and guided remediation. When a real threat is identified, immediate steps can be taken to stop the attack before it spreads or causes downtime. **Key benefits include:** - Rapid containment of compromised devices - Removal of malicious software and persistence mechanisms - Clear, human-readable incident reports - Reduced business disruption and recovery time --- ## 24/7 Security Operations Center (SOC) Monitoring Behind the scenes, security analysts continuously review threat data and system behavior. This human-backed monitoring dramatically reduces false positives and ensures that genuine risks are escalated quickly with clear guidance. **Why it matters:** Instead of being flooded with confusing alerts, you receive validated security insights and recommended next steps. --- ## Ransomware & Advanced Threat Defense Modern attacks are designed to bypass basic defenses. Advanced protection mechanisms help identify encryption behavior, credential theft, lateral movement, and other attack techniques before damage occurs. Early detection tools act as tripwires, alerting security teams before files are locked or data is exfiltrated. --- ## Centralized Visibility & Reporting All protected endpoints and incidents are visible through a unified management interface. This allows for: - Clear executive-level summaries - Compliance and audit support - Transparent incident tracking - Ongoing risk awareness --- ## Scalable for Any Business Size Whether protecting a small office or a growing multi-location organization, the platform scales seamlessly. Security grows with your business without requiring additional infrastructure or internal staffing. ### Data Backup URL: https://klabsdev.com/data-backup/ Last updated: 2026-05-20T06:28:48.000Z ## Reliable Data Protection & Backup Powered by Backblaze As a trusted partner of Backblaze, Kulik Labs Development delivers comprehensive data protection and backup solutions based on industry-standard *3-2-1 backup principles,* helping you safeguard critical data while keeping costs predictable and low. ### What Is the 3-2-1 Backup Strategy? The *3-2-1 backup rule* is a proven best practice for data protection: - **Three copies of your data** — the original plus two backups - **Two different storage media** — for example, local and cloud - **One copy stored off-site** — protecting against local disasters and hardware failure Implementing this strategy greatly reduces the risk of data loss due to device failure, accidental deletion, ransomware, or natural disasters. Our solution leverages Backblaze to cover the “off-site” component of this strategy, ensuring your data is securely backed up in the cloud and always available for recovery. --- ### Backblaze On-Demand Cloud Backup Backblaze provides automated cloud backup designed to keep your data protected and accessible, with these key benefits: **Continuous Protection & Versioning** Once installed, data changes are automatically backed up to Backblaze’s secure cloud environment, creating a third copy off-site that continuously updates as you modify or add files. Your backed-up files are versioned, allowing you to restore prior versions when needed. **Unlimited Backup & Broad Support** Backblaze’s backup service supports virtually all file types and unlimited data volume for traditional device backups, making it simple to protect desktops and laptops without worrying about caps or quotas. **Secure, Worldwide Cloud Storage** Backblaze uses industry-standard encryption to protect your data both in transit and at rest, ensuring files are securely stored in hardened data centers. Optional private encryption keys offer additional control and privacy. **Flexible Recovery Options** You can restore files directly online, or for large datasets, request a physical drive to be delivered for faster recovery, so you get your data back in a way that fits your needs and timeline. --- ### Scalable Backup for Servers & Business Data For servers, NAS, and business-critical systems, we integrate Backblaze’s **B2 Cloud Storage,** a scalable object storage platform that works seamlessly with industry backup tools (like Veeam, Synology Hyper Backup, and more) to create robust, cost-effective backup repositories. Backblaze B2 is designed for: - **Enterprise-grade durability** with redundancy across multiple physical drives - **Predictable pricing** with simple storage and bandwidth costs - **Cloud tiering support** with major backup ecosystems for reliable restore capabilities - **Ransomware-ready protection** with features like object immutability These features make Backblaze B2 a powerful cloud destination for your server backups and long-term retention needs. --- ### Why This Matters for Your Business ✔ **Peace of Mind:** Your critical business data is backed up off-site and protected against data loss. ✔ **Cost-Effective:** Backblaze’s transparent pricing keeps long-term backup costs predictable. ✔ **Fast Recovery:** Whether it’s a single file or an entire system, recovery options are flexible and reliable. ✔ **Fully Managed:** We handle backup setup, monitoring, and restoration guidance so your team stays productive. ### Technology Consulting URL: https://klabsdev.com/technology-consulting/ Last updated: 2026-05-20T06:29:00.000Z ## Virtual CIO (vCIO) & Technical Business Advisory Services Technology decisions directly impact growth, efficiency, and long-term stability. Our vCIO-style services provide businesses with professional technical leadership and strategic guidance, without the expense of hiring a full-time executive. This service is designed to help organizations make smarter technology investments, reduce operational risk, and maintain clear direction as they grow. --- ### Technical Business Support & Process Documentation As day-to-day technical assistance is provided, we actively build and maintain structured documentation about your environment. This includes common issues, recurring service requests, software licensing details, system configurations, and other critical institutional knowledge. **Benefits to your organization:** - Faster onboarding and training of new employees - Reduced dependency on any single individual - Clear internal reference materials for leadership and staff - Improved continuity during staffing or operational changes This documentation becomes a living knowledge base that strengthens internal operations and reduces long-term friction. --- ### Technology Roadmapping & Strategic Planning Planning future technology investments can be challenging without clear cost projections or technical insight. Our roadmap services help organizations forecast, budget, and prioritize upcoming initiatives so there are fewer surprises and more informed decisions. We assist with planning for: - Server upgrades and new infrastructure deployments - Network redesigns and capacity expansion - Large-scale hardware or equipment rollouts - Software platform changes and licensing strategy - Multi-year technology budgeting and lifecycle planning **The result:** You gain a forward-looking technology strategy that aligns with business goals, spreads costs predictably over time, and ensures that major projects are approached with preparation rather than urgency. --- ### In Simple Terms This service acts as an on-demand technology executive and advisor, providing structured documentation, strategic foresight, and professional guidance so your business can grow with confidence and clarity instead of reacting to technical challenges as they arise. ### Website Services URL: https://klabsdev.com/website-services/ Last updated: 2026-05-20T06:29:09.000Z ## Website Hosting, Management & SEO Services Your website is often the first impression customers have of your business — and keeping it fast, modern, and accurate is just as important as building it in the first place. Kulik Labs Development provides full-service website hosting, management, and optimization so you can focus on running your business while we handle the technical details behind the scenes. --- ### Website Hosting on Private Global Infrastructure All sites are hosted on Kulik Labs Development’s in-house global cloud infrastructure, allowing for faster performance, higher reliability, and significantly lower recurring costs compared to typical third-party hosting providers. Because the infrastructure is owned and managed internally, pricing remains predictable and support is direct, not outsourced. **Benefits include:** - High uptime and performance - Direct technical support - Scalable resources as your business grows - Lower long-term hosting costs --- ### Website Management & Ongoing Updates Already have a website? Keeping content accurate and current can be difficult once a site goes live. We provide ongoing management services to ensure your site remains updated, secure, and aligned with modern web standards. Services can include: - Content edits and page updates - Plugin and platform maintenance - Security patching and monitoring - Performance optimization - Mobile and browser compatibility checks You simply tell us what needs to change, we handle the implementation. --- ### Platform Options to Fit Any Budget or Need Whether you need a simple, affordable presence or a fully custom digital experience, multiple development paths are available: - **WordPress Management:** Ideal for businesses needing flexibility, plugins, and strong SEO capabilities. - **Ghost CMS Websites:** Lightweight, fast, and cost-effective solutions perfect for blogs, landing pages, and content-focused sites. - **Custom / Bespoke Websites:** Fully tailored designs and functionality built from the ground up for unique business requirements. --- ### Domain, DNS & Cost Savings In addition to hosting and development, domain registration and DNS management are available at highly competitive rates. Domains are resold at bulk pricing levels, helping businesses secure and maintain their web presence without inflated registrar fees. --- ### Search Engine Optimization (SEO) Support A website only works if people can find it. Basic SEO management ensures your site follows modern indexing practices, loads quickly, and maintains clean structure for better visibility in search engines. --- ### In Simple Terms This service provides **end-to-end website care,** from hosting and development to updates and optimization. Delivering professional web presence, strong performance, and long-term affordability without the usual technical headaches. ### RMM Service URL: https://klabsdev.com/rmm-service/ Last updated: 2026-05-20T06:29:20.000Z ## Remote Monitoring & Management (RMM) ### Proactive 24/7 Monitoring & Alerts Your business doesn’t stop after hours **and neither do we**. Our RMM platform continuously monitors your systems around the clock, identifying potential risks, performance issues, and suspicious activity before they become real problems. You gain peace of mind knowing your data and infrastructure are being actively protected at all times. ### Integrated Help Desk & Ticketing When issues arise, fast response matters. Our built-in ticketing system gives your team a direct line to expert support, ensuring requests are tracked, prioritized, and resolved quickly. We handle the technical heavy lifting so your staff can stay focused on their work. ### Asset & Device Management Stay organized with real-time visibility into your technology environment. We maintain a detailed inventory of your hardware and endpoints, making it easy to track devices, manage lifecycle planning, and reduce the time spent on manual record-keeping. ### Custom Reporting & Compliance Support From executive overviews to cybersecurity insurance documentation, we generate clear, tailored reports that meet your organization’s operational and compliance needs. You’ll always have access to the insights required to make informed decisions. ### Instant Remote Support Most technical issues can be resolved without an on-site visit. Our secure remote support tools allow us to connect directly to authorized systems and resolve problems quickly, minimizing downtime and disruption for your team. ### Automated Patch Management (Windows) Security updates and patches are critical but often overlooked. We automatically deploy and manage Windows updates across your endpoints, ensuring every system stays protected with the latest security fixes and performance improvements. --- **Result:** A fully managed, proactive IT environment that reduces downtime, strengthens security, and gives your organization predictable, affordable technology support. ### Home Page | Kulik Labs Development URL: https://klabsdev.com/home/ Last updated: 2026-05-20T06:19:51.000Z At **Kulik Labs Development**, we specialize in **bridging the gap between complex business challenges and streamlined technological solutions**. Based in the greater Milwaukee area, we provide professional Managed IT Services. Whether you are looking to automate manual processes, integrate fragmented data, or build a custom system from the ground up, our focus is on creating robust, scalable architecture that grows with your company. We don't just write code; we build the digital infrastructure that allows Milwaukee businesses to compete and thrive in a modern economy! [Learn More!](tel:1-414-775-3807) ## Business Inquiries Ready to build something future-proof? Reach out to us today. Full Name Email Address Phone Number Company Name Company Website Message Send Message ### Why Partner With Kulik Labs Development? 📍 Local Expertise Deeply committed to supporting the business ecosystem of the greater Milwaukee region. 🎯 Client-Centric Design We build systems that work for you, ensuring intuitive usability and high ROI. 🚀 Future-Proof Technology Our development practices ensure your systems are compatible with the evolving landscape of AI and cloud computing. 🛡️ Security & Reliability We implement industry-standard security protocols to ensure your critical data is protected and your systems remain resilient. ### Our Partners & Tech Stack We strategically leverage a high-efficiency, modern tech stack that minimizes operational overhead. By reducing our own infrastructure costs, we are able to pass those direct savings down to our clients, providing enterprise-grade systems without the enterprise price tag. [ ![Huntress EDR](https://cdn.klabsdev.com/klabsdev/images/partners/HuntressLogo.png) ](https://www.huntress.com/?ref=klabsdev.com) [ ![Proxmox VE](https://cdn.klabsdev.com/klabsdev/images/partners/Proxmox-logo.png) ](https://www.proxmox.com/?ref=klabsdev.com) [ ![Tactical RMM](https://cdn.klabsdev.com/klabsdev/images/partners/TactialRMMLogo.png) ](https://tacticalrmm.com/?ref=klabsdev.com) [ ![Ubiquiti](https://cdn.klabsdev.com/klabsdev/images/partners/Ubiquiti%20Light.png) ](https://ui.com/?ref=klabsdev.com) [ ![Huntress EDR](https://cdn.klabsdev.com/klabsdev/images/partners/HuntressLogo.png) ](https://www.huntress.com/?ref=klabsdev.com) [ ![Proxmox VE](https://cdn.klabsdev.com/klabsdev/images/partners/Proxmox-logo.png) ](https://www.proxmox.com/?ref=klabsdev.com) [ ![Tactical RMM](https://cdn.klabsdev.com/klabsdev/images/partners/TactialRMMLogo.png) ](https://tacticalrmm.com/?ref=klabsdev.com) [ ![Ubiquiti](https://cdn.klabsdev.com/klabsdev/images/partners/Ubiquiti%20Dark.png) ](https://ui.com/?ref=klabsdev.com) ## Check out What We've Been up to: ### Oops! You found a "Security Tripwire." URL: https://klabsdev.com/canary-found/ Last updated: 2026-05-20T06:28:26.000Z You’ve just stumbled upon a Ransomware Canary. Think of it like a digital "silent alarm." We place these files in strategic locations; if a hacker tries to lock them, it triggers an immediate alert to our Security Operations Center or SoC. Because you’re a human and not a piece of malware, you’re totally fine! However, to keep our alarms working perfectly, we ask that you please leave these files alone. Confused? Curious? Or think something is actually wrong? **Let us know:** (414) 775-3807 or [Support](https://tickets.klabsdev.com/?ref=klabsdev.com) ### SMS Communication Policy URL: https://klabsdev.com/sms-communication-policy/ Last updated: 2026-06-24T00:36:17.000Z Effective date: 6/23/2026 Kulik Labs Development uses SMS messaging to communicate with existing clients regarding IT support, service requests, appointment scheduling, project updates, service notifications, and other business-related communications. ### Opt-In Consent Clients may opt in to receive SMS communications from Kulik Labs Development through one or more of the following methods: - By requesting SMS communication during a support interaction via ticket submission. - By providing their mobile phone number and requesting communication via text message - By providing written consent for SMS communication via ticket submission. Prior to receiving SMS messages, the client's consent and mobile phone number are documented within our client management systems. ### Message Purpose SMS messages may include: - Support ticket updates - Appointment confirmations - Service scheduling - Project coordination - Follow-up communications - Technical support conversations - Business-related notifications Kulik Labs Development does not use SMS messaging for unsolicited marketing or promotional campaigns. ### How We Obtain SMS Consent Kulik Labs Development only sends SMS messages to individuals who have provided prior consent. Consent is obtained during client onboarding, support requests, service engagements, or through direct client requests for SMS communication. Consent records are maintained within our internal client management systems before any SMS communication is initiated. ### Message and Data Rates Message and data rates may apply based on your wireless carrier plan. Clients are responsible for any charges imposed by their mobile carrier. ### Opt-Out Instructions Clients may opt out of SMS communications at any time by replying: ***STOP*** Upon receipt of a STOP request, SMS communications will cease except where necessary to confirm the opt-out request. ### Help Instructions For assistance, clients may reply: ***HELP*** or contact us directly through our website or support channels. ### Supported Carriers Message delivery is subject to mobile carrier availability and network conditions. Kulik Labs Development cannot guarantee delivery of SMS messages. ### Privacy Information obtained through SMS communications will be handled in accordance with our [Privacy Policy](https://klabsdev.com/privacy-policy/). Mobile phone numbers and SMS consent information will not be sold, rented, or shared with third parties for marketing purposes. ### Terms of Service URL: https://klabsdev.com/terms-of-service/ Last updated: 2026-06-22T00:33:43.000Z **Effective Date:** June 2026 ## Terms of Service Welcome to Kulik Labs Development ("Kulik Labs Development," "we," "our," or "us"). By accessing our website, requesting services, or engaging with us for technology-related services, you agree to these Terms of Service. If you do not agree to these terms, please do not use our services. ## Services Kulik Labs Development provides technology-related services including but not limited to: - Managed IT Services - Technical Support - Network Administration - Cybersecurity Services - Cloud Services - Backup and Disaster Recovery Solutions - Website Design and Development - Website Hosting and Maintenance - Technology Consulting - Hardware and Software Procurement Assistance Specific services, pricing, and deliverables may be governed by separate agreements, proposals, statements of work, or service contracts. ## Client Responsibilities Clients agree to: - Provide accurate information necessary to perform services. - Maintain valid licenses for software used within their environment unless otherwise agreed. - Cooperate with reasonable requests for access and information. - Maintain appropriate backups where backup services are not specifically included in an agreement. Clients remain responsible for decisions regarding their technology environment and business operations. ## Website Development Services For website development projects: - Project scope will be defined through written proposals or agreements. - Clients are responsible for providing content, images, branding assets, and approvals in a timely manner. - Delays in providing requested materials may affect project timelines. - Unless otherwise agreed in writing, ownership of completed website content transfers to the client upon full payment. Third-party services, plugins, themes, hosting providers, and software remain subject to their own licensing agreements. ## Managed IT Services While Kulik Labs Development strives to maintain secure and reliable systems, no technology system can be guaranteed to be free from outages, security incidents, hardware failures, software defects, or cyberattacks. Clients acknowledge that technology-related risks remain inherent in all computing environments. ## Payment Terms Invoices are due according to the terms specified on the invoice or service agreement. Failure to make timely payment may result in suspension of services. Late fees may be assessed where permitted by law. ## Limitation of Liability To the fullest extent permitted by law, Kulik Labs Development shall not be liable for: - Lost profits - Loss of business - Loss of data - Business interruption - Indirect damages - Consequential damages - Special damages Our total liability arising from any claim shall not exceed the amount paid to Kulik Labs Development for the services giving rise to the claim during the twelve (12) months preceding the claim. ## Data Backup and Recovery Unless expressly included in a service agreement, clients are responsible for maintaining their own backups. Where backup services are provided, Kulik Labs Development makes reasonable efforts to maintain backup systems but does not guarantee recovery of all data under all circumstances. ## Intellectual Property All proprietary methodologies, documentation, software scripts, templates, and materials developed by Kulik Labs Development remain our property unless otherwise agreed in writing. Clients retain ownership of their data, business records, logos, trademarks, and provided content. ## SMS Communications By providing your mobile phone number and consenting to SMS communications, you agree to receive text messages regarding: - Support requests - Service updates - Scheduling - Appointment reminders - Project communications - Business-related notifications Message frequency may vary. Message and data rates may apply. Reply STOP to opt out. Reply HELP for assistance. Consent to receive SMS communications is not a condition of purchasing services. ## Termination Either party may terminate services according to the terms of any applicable service agreement. Upon termination, clients remain responsible for outstanding balances owed. ## Governing Law These Terms shall be governed by the laws of the State of Wisconsin without regard to conflict of law provisions. ### Privacy Policy URL: https://klabsdev.com/privacy-policy/ Last updated: 2026-06-22T00:34:50.000Z **Effective Date: June 2026** ## Privacy Policy Kulik Labs Development respects your privacy and is committed to protecting your personal information. This Privacy Policy explains how we collect, use, disclose, and protect information obtained through our website and services. ## Information We Collect We may collect: ### Information You Provide - Name - Company name - Email address - Phone number - Mailing address - Support requests - Service inquiries - Website project information ### Information Automatically Collected When you visit our website, we may collect: - IP address - Browser type - Device information - Pages visited - Referral information - Website usage statistics ## How We Use Information We use collected information to: - Provide services - Respond to inquiries - Deliver technical support - Manage client accounts - Improve website functionality - Communicate regarding projects and services - Meet legal and regulatory obligations ## SMS Communications If you provide consent to receive SMS communications, we may send text messages regarding: - Support requests - Service updates - Scheduling - Appointments - Project communications - Other business-related communications SMS consent is not shared with third parties or affiliates for marketing purposes. Mobile phone information will not be sold, rented, or shared for promotional use. You may opt out of SMS communications at any time by replying STOP. ## Information Sharing We do not sell personal information. We may share information with trusted service providers when necessary to provide services, including: - Hosting providers - Cloud service providers - Payment processors - Security vendors - Technology partners Such providers may only use information as necessary to perform services on our behalf. ## Data Security We implement reasonable administrative, technical, and physical safeguards designed to protect information from unauthorized access, disclosure, or misuse. However, no method of transmission or storage is completely secure. ## Data Retention We retain information only as long as necessary to: - Provide services - Fulfill contractual obligations - Meet legal requirements - Resolve disputes ## Cookies and Analytics Our website may use cookies and analytics tools to improve performance and user experience. Users may configure their browser settings to manage cookie preferences. ## Third-Party Links Our website may contain links to third-party websites. We are not responsible for the privacy practices or content of those websites. ## Your Rights Depending on your jurisdiction, you may have rights regarding access to, correction of, or deletion of your personal information. Requests may be submitted using the contact information below. ## Changes to This Policy We may update this Privacy Policy from time to time. Changes will be posted on this page with an updated effective date. ## Posts ### American Contractor Support & Maxwell Systems ERP Support URL: https://klabsdev.com/american-contractor-support-maxwell-systems-erp/ Last updated: 2026-05-20T06:27:37.000Z ### Reliable IT Support for Legacy Construction Software For decades, **American Contractor** has powered construction companies with critical tools for accounting, job costing, payroll, and project management. Originally developed and distributed by Maxwell Systems, the platform became a staple across the industry before being phased out following its acquisition by Viewpoint. Today, many companies still rely on **American Contractor** to run daily operations and need dependable, specialized **American Contractor support** to keep it running. --- ### Why Businesses Still Rely on American Contractor Even as newer platforms emerge, **American Contractor** remains deeply embedded in construction workflows: - Established accounting and job costing processes - Long-term historical data retention - Familiar interface for accounting and operations teams - High cost and risk of migrating away too quickly **For many companies, replacing the system outright isn’t practical which is why Maxwell Systems ERP support is still in demand.** --- ### The Risk of Running Legacy Construction Software While the software itself may still function, the surrounding infrastructure often introduces serious risks: - Unsupported Windows Server environments - Outdated SQL databases - Insecure remote access setups - Unverified or failing backups - Aging on-premise hardware - Increased cybersecurity exposure Without proper legacy construction software support, these risks can lead to downtime, data loss, or security incidents. --- ### American Contractor Support from Kulik Labs Development **At Kulik Labs Development, we provide specialized American Contractor support and Maxwell Systems ERP support tailored to real-world environments.** We stabilize, secure, and modernize your system at your pace. --- ### Stabilize Your System Keep your software running reliably: - American Contractor troubleshooting and performance tuning - SQL Server optimization and maintenance - Server health monitoring and issue resolution - Documentation of legacy environments ### Protect Your Business Reduce risk without disrupting operations: - Secure, tested backup solutions - Ransomware protection and network security hardening - Virtualization of legacy servers - Secure remote access configurations - Elimination of single points of failure ### Plan Your Next Step When you're ready to evolve: - Strategic guidance on upgrading or migrating systems - Support for transitions to modern construction ERP platforms - Data preservation and reporting continuity - Phased migration planning to avoid downtime ## A Smarter Approach to Legacy ERP Support We understand that construction businesses depend on stability. Our approach to **American Contractor support** is straightforward: - Maintain what works - Secure what’s vulnerable - Modernize where necessary - Plan for the future — without disruption --- ## Get Expert American Contractor Support If your company is still running American Contractor, you need IT support that understands both the software *and* the infrastructure behind it. **Kulik Labs Development** delivers trusted **Maxwell Systems ERP support** to help you: - Stay operational - Stay secure - Stay in control of your transition timeline [Get American Contractor Support Today!](https://klabsdev.com/) ### Recovering from a Lightning Strike: A Race Against Time URL: https://klabsdev.com/recovering-from-a-lightning-strike-a-race-against-time/ Last updated: 2026-05-20T06:27:24.000Z ### The Emergency Call It started with a cold call and a crisis. A client reached out in a panic: their building had been struck by lightning, and their entire operation had gone dark. When I arrived on-site, I found a *perfect storm* of technical challenges. Because the network equipment lacked UPS (Uninterruptible Power Supply) or surge protection, the lightning strike had surged through the lines, frying the entire network stack. The situation was complicated by the client’s infrastructure. They were running a variety of legacy systems. Ranging from Windows 98 and XP to Windows 7 and 10, all communicating to a central Windows XP based "server". The surge hadn't just killed the switch; it had traveled through the Ethernet cables and blown out the network controllers on nearly every hardwired desktop and appliance in the office. The ISP provided modem, the switch, and the desktop NICs were all inoperable. ![](https://klabsdev.com/content/images/2026/04/IMG_1416.jpg) The desktop network switch that was connected to the main power and sending electrical shock to the entire network. ### The Solution I visited with the client on a Thursday afternoon right after the call came in. With the client needing to be back online by Monday, I moved into high gear: - **Infrastructure Overhaul:** We immediately began sourcing and installing a new networking stack to replace the fried hardware. - **Vendor Coordination:** We coordinated with the ISP to get a technician on-site quickly to replace the damaged modem and equipment. - **Digital Archaeology:** The biggest hurdle was the legacy machines. Since modern hardware doesn't support Windows 98 or XP, I had to hunt down specific legacy Ethernet adapters that were compatible with these older operating systems to bring them back to life. - **Security Hardening:** Recognizing the immense security risks associated with running outdated operating systems, I configured these machines to operate on an internal-only network, shielding them from the open internet while maintaining their functionality. ### The Win In almost exactly 48 hours, by the end of Saturday, the impossible was achieved. Every system, from the 25-year-old legacy machines to the modern desktops was back online and communicating. The client was able to resume operations on Monday morning as if the strike had never happened! ### The Key Takeaway This project served as a stark reminder: **Surge protection and UPS systems are not optional.** A small investment in power protection can be the difference between a five-minute flicker and a total network collapse. --- Thanks for reading! If you feel your business tech assets are not protected from power disruptions, please call Kulik Labs Development. We create custom, turn-key power protection systems for an unbeatable rate within the Greater Milwaukee Area. ## Call Now: (414) 775-3807 ### Persistent IP Tables Rules URL: https://klabsdev.com/persistent-ip-tables-rules-in-oci/ Last updated: 2026-05-20T06:27:15.000Z IP Tables inside of Ubuntu when running on OCI usually will reset after every reboot. This can troublesome when running services or applications that require open ports. In order for your ports to stay open there is a way to do this in IP tables with two simple commands. In this example, the shape I am using is an Ampere based A1 Flex instance running Ubuntu in the Oracle Cloud Infrastructure (OCI). This is also in the Free Tier. I will also assume we are running a web server that needs to have port 80 and 443 open to serve websites. 💡 This solution can work on any system that is using IP Tables - not JUST OCI. ⚠️ This solution will NOT work on any OCI shape running any version of Oracle Linux as they do not use IP Tables. If you are running Oracle Linux, you can open ports with [this method](https://gist.github.com/recursivecodes/5b0ee31692f504a95b1f6dac69947557?ref=klabsdev.com#file-firewall-sh). Thanks to [Todd Sharp](https://blogs.oracle.com/authors/todd-sharp?ref=klabsdev.com) from Oracle. Simply run: ```Console sudo iptables -I INPUT 1 -p tcp --dport 80 -j ACCEPT ``` Allow incoming connections via TCP on port 80 ```Console sudo iptables -I INPUT 1 -p tcp --dport 443 -j ACCEPT ``` Allow incoming connections via TCP on port 443 ```Console sudo iptables-save | sudo tee /etc/iptables/rules.v4 > /dev/null ``` Saves the above rules to `/etc/iptables/rules.v4` without switching to root user In addition to the rules above, you may also want to accept ipv6 connections. To enable this, it's the same steps as above but using `ip6tables`. ```Console sudo ip6tables -I INPUT 1 -p tcp --dport 80 -j ACCEPT ``` Allow incoming ipv6 connections via TCP on port 80 ```Console sudo ip6tables -I INPUT 1 -p tcp --dport 443 -j ACCEPT ``` Allow incoming ipv6 connections via TCP on port 443 ```Console sudo ip6tables-save | sudo tee /etc/iptables/rules.v6 > /dev/null ``` Saves the above rules to `/etc/iptables/rules.v6` without switching to root user --- Thanks for Reading! Written by Max Kulik --- Sources: - This solution was created by working with some of the support team from the Tactical RMM community on their [Discord server](https://discord.com/channels/736478043522072608/1220088896503808010?ref=klabsdev.com). ### Clear Print Queue in Windows 11 & 10 URL: https://klabsdev.com/clear-windows-print-queue/ Last updated: 2026-05-20T06:27:07.000Z These are two methods to manually clear the print queue in both Windows 10 and Windows 11\. Below will be a method for clearing in both the CMD and using the GUI. ### Method 1: (Command Line) 1. Click the Start Button (⊞). 2. Type `Command Prompt`. 3. Right-click on Command Prompt and select `Run as administrator`. 4. Type `net stop spooler` and then press `Enter`. 5. Type `del %systemroot%\System32\spool\printers\* /Q` then press `Enter`. 6. Type `net start spooler` then press `Enter`. 7. The print queue on your PC should now be cleared. Type `exit` and press `Enter` to exit the command window. ### Method 2: (GUI) 1. Hold down the `Windows Key (⊞)` and press `R` to open the **Run** **Dialog**. 2. Type `services.msc`, and press `Enter`. 3. Find the **Print Spooler** service in the list. Right-click on it, then select **Stop**. 4. Leave the Services window open. Hold down the `Windows Key (⊞)` and press `R` to open the **Run Dialog** again. 5. Type `%systemroot%\System32\spool\printers\`, then press `Enter`. 6. Select all of the files by holding `CTRL` and pressing `A`. 7. Press the `Delete` key to remove all the files in the opened window. 8. Go back to the **Services** window, right-click **Print Spooler**, and click **Start** to re-start the print spool service. Thanks for Reading, Max Kulik --- ### Source: This topic was re-written and sourced entirely from [nexto.ch](https://nexto.ch/node/17?ref=klabsdev.com). It was clear and well-written, so I wanted a version for myself. --- ### Midwest Gaming Classic - Halo CE LAN Party URL: https://klabsdev.com/midwest-gaming-classic-halo-ce-lan-party/ Last updated: 2026-05-20T06:27:00.000Z Thanks for checking out the Halo CE Lan party, provided by [Kulik Labs Development](https://klabsdev.com/)! Below are some of the Rules and information regarding the Halo CE. This post is for the [Midwest Gaming Classic](https://www.midwestgamingclassic.com/?ref=klabsdev.com) in Milwaukee WI during April 4th - April 7th. This one of many LAN party events that will be hosted at the Wisconsin Center over the weekend. ### The Setup Each laptop is running the latest version of Ubuntu Linux w/Nvidia drivers installed if applicable. In addition to this they are running the [Lutris Launcher](https://lutris.net/?ref=klabsdev.com) and are using this version of [Halo CE](https://lutris.net/games/install/38130/view?ref=klabsdev.com). The Lutris site allows for a very easy one-click install to play. The version I am using still requires a CD key. ⚠️ In order to have multiple users to connect to a server (LAN or Online) you will need to make sure that each person playing has their own CD key. The installed Mods/Fixes are the following: - [Halo CE 1.0 Base Game](https://archive.org/details/HaloCEPC) - [Halo CE Offical Patch 1.0.10](https://archive.org/download/halopc-patch-1.0.10) - [Chimera 1.0](https://chimera.opencarnage.net/?ref=klabsdev.com) - Halo Refined Custom Edition v3 - [CEnshine](https://github.com/Sledmine/censhine?ref=klabsdev.com) - DSOAL - [dgVoodoo 2.8.2](https://dege.freeweb.hu/dgVoodoo2/?ref=klabsdev.com) ### LAN Rules - Do NOT change the default key bindings. If you do, please let someone know to re-set your profile when you are done. - Please try to keep your play sessions less than 30 mins to allow for everyone to have a chance to play. - Have fun! ### Q & A **Q:** Can I change the key binds? **A:** Yes but do not **Q:** My laptop is frozen! **A:** Press the "start" button on the laptop and click back into the game. It should fire back up. **Q:** The server has stopped working or I got removed from the game. **A:** Call or Text xxx-xxx-xxxx for game support. ### The Definitive Guide to Running MacOS in Proxmox [26.0 Beta] URL: https://klabsdev.com/definitive-guide-to-running-macos-in-proxmox/ Last updated: 2026-05-20T07:10:53.000Z 💡 UPDATED: September 2024 | Added New Mac Images August 2025 💾 Scroll down for Pre-Built Mac Images ### Introduction There are a few different ways to install macOS on Proxmox, but most of them require you to own a Mac already. In this guide, we will go over both how to install MacOS inside Proxmox with and without owning a Mac already. Most guides would require you to download and create an for your installation. I will provide steps for both installing with and without a Mac. Huge thanks for i12bretro tutorials as most of this come from their tutorials. I wanted to re-create them with screenshots for others to follow and offer the ISO images for anyone without a Mac to build them! The tutorials this one is based off of are listed below in the sources list. ### Requirements If you would like to create your own MacOS images you will need to do this on a pre-existing Mac that you may own or have created. If you would like to simply download an image, then you can proceed to the Installation steps. ## Download & Prepare a MacOS Image **Step 1)** On a Mac, we will begin by downloading [gibMacOS](https://github.com/corpnewt/gibMacOS?ref=klabsdev.com) from Github. Double-click on the downloaded .zip file to extract it. Then enter the extracted folder. ![Download gibMacOS from Github](https://klabsdev.com/content/images/2024/01/MacOS-01.png) ![](https://klabsdev.com/content/images/2024/01/MacOS-02.png) Extract the file to a new folder **Step 2)** Now we need to enter the extracted folder and double-click on the `gibMacOS.command` file. ⚠️ There is a good chance the file will not open. You will need to do this with the security settings window open and allow the file after you open it for the first time. ![Open the gibMacOS.command file and allow the security exception](https://klabsdev.com/content/images/2024/01/MacOS-03.png) 💡 When the file opens, if prompted, make sure to choose yes (Y) to install Python. **Step 3)** Once the script has finished installing Python, you will now be at a screen in the terminal asking what version of MacOS you would like to download. In this example, we will be using MacOS Sonoma 14.1.1\. So I will be choosing option 9. 💡 Make sure to take note of the size of the file you are downloading. Later we will create an image from this file and it will need to be larger than the downloaded file. ![Choose the version of MacOS you would like to download from the above list in terminal](https://klabsdev.com/content/images/2024/01/MacOS-04.png) ![The image you chose will begin downloading](https://klabsdev.com/content/images/2024/01/MacOS-05.png) **Step 4)** Once the download has completed, enter the newly created download folder. If you ran from your downloads folder it will look like `~/Downloads/gibMacOS-master/macOS Downloads/publicrelease/042-89627 - 14.1.1 macOS Sonoma (23B81)/` if following this directly. Your version numbers may differ if you are downloading a different version of MacOS. Inside this folder, you will need to double-click on the `InstallAssistant.pkg` application. Follow the prompts to install. This installs the application we will be using to build our Proxmox friendly ISO image. ![Run the InstallAssistant.pkg to install the required builder](https://klabsdev.com/content/images/2024/01/MacOS-06.png) **Step 5)** Next, we will begin building out Proxmox ISO image. In a new terminal window, you will need to create a temporary disk image. You will need to ensure it is larger than the downloaded images from before. For the MacOS Sonoma 14.1.1 image I had luck with a 16GB image. ```console hdiutil create -o /tmp/macOS -size 16000m -volname macOS -layout SPUD -fs HFS+J ``` **Step 6)** Next we are going to mount the temporary disk image we just created. ```console hdiutil attach /tmp/macOS.dmg -noverify -mountpoint /Volumes/macOSISO ``` **Step 7)** Now we are going to use the program that we previously installed to create an ISO image that can be used with Proxmox. This will take a few minutes to complete. ```console sudo /Applications/Install\ macOS\ Sonoma.app/Contents/Resources/createinstallmedia --volume /Volumes/macOSISO --nointeraction ``` ⚠️ Ensure the path to the program/version MacOS you are installing is correct. In this case my application that was installed for the version of MacOS I am downloading was called "Install macOS Sonoma.app" so my path is `/Applications/Install\ macOS\ Sonoma.app/` If you were installing a beta for example it might need to be changed to `/Applications/Install\ macOS\ Ventura\ beta.app/` It just depends on the version you are using. **Step 8)** Unmount the image using the following command: ```console hdiutil detach -force /Volumes/Install\ macOS\ Sonoma ``` ⚠️ If you are following along directly, you can copy and paste this command. If you are downloading a different version of MacOS, you will need to check finder to ensure you are going to unmount the correct volume. You can check the exact volume name by looking on the right hand side of a Finder window. **Step 9)** Now we are going to convert our unmounted image to an ISO file that can be uploaded directly to Proxmox using this command: ```console hdiutil convert /tmp/macOS.dmg -format UDTO -o ~/Desktop/macOS-Sonoma.cdr ``` **Step 10)** Finally, change the file extension from `.cdr` to `.iso`. ``` mv ~/Desktop/macOS-Sonoma.cdr ~/Desktop/macOS-Sonoma.iso ``` **Step 11)** The last thing we should do is a little housecleaning! We just need to remove the temp image. ```Console rm /tmp/macOS.dmg ``` ### Pre-Existing Images This table is a list of MacOS images that I have already created. You can you can use these directly with Proxmox if you do not have a Mac to make your own. 💡 In the table below, are pre-built macOS image downloads that I have created for use with this article. | MacOS | Version | Download | | -------- | ------- | --------------------------------------------------------------------------------------------------------------------------------------------- | | Tahoe | 26.0 | [https://cdn.klabsdev.com/MacImages/macOS-Tahoe-Beta-26.0.iso](https://cdn.klabsdev.com/MacImages/macOS-Tahoe-Beta-26.0.iso?ref=klabsdev.com) | | Sequoia | 15.4 | [https://cdn.klabsdev.com/MacImages/macOS-Sequoia-15.4.iso](https://cdn.klabsdev.com/MacImages/macOS-Sequoia-15.4.iso?ref=klabsdev.com) | | Sonoma | 14.1.1 | [https://cdn.klabsdev.com/MacImages/macOS-Sonoma-14.1.1.iso](https://cdn.klabsdev.com/MacImages/macOS-Sonoma-14.1.1.iso?ref=klabsdev.com) | | Ventura | 13.6.3 | [https://cdn.klabsdev.com/MacImages/macOS-Ventura-13.6.3.iso](https://cdn.klabsdev.com/MacImages/macOS-Ventura-13.6.3.iso?ref=klabsdev.com) | | Monterey | 12.7.1 | [https://cdn.klabsdev.com/MacImages/macOS-Monterey-12.7.1.iso](https://cdn.klabsdev.com/MacImages/macOS-Monterey-12.7.1.iso?ref=klabsdev.com) | ## Proxmox Installation **Step 1)** Now that our MacOS image is ready, we will can begin the Proxmox setup. First we will need to head over to Github again and download the [KVM OpenCore Bootloader](https://github.com/thenickdude/KVM-Opencore?ref=klabsdev.com). You'll want to navigate to the releases tab and download the `.iso.gz` file. Once downloaded, extract the ISO image from the GZ file. ![Extract OpenCore ISO file from .gz archive file](https://klabsdev.com/content/images/2024/01/OpenCore01.png) **Step 2)** Open and log into your Proxmox server's web UI. You will want to upload the `OpenCore-v20.iso` file to your server's ISO library. You will also want to upload the `MacOS.iso` image you have either downloaded or created! ![Upload OpenCore ISO file to your Proxmox server](https://klabsdev.com/content/images/2024/01/Step2-Fixed.png) **Step 3)** We are now going to create the VM that will run MacOS! In the top right corner of the Proxmox Web UI choose "Create VM". Match your settings to the following screenshots. Choose your VM's ID in this example we will choose `999`. Also, create your VM name. In this example I will choose `MacOS`. Then click Next. ![Choose Proxmox ID and VM Name](https://klabsdev.com/content/images/2024/01/pm02.png) On the next screen, you will choose the `OpenCorev20.iso` image that you uploaded. Then choose `Other` for OS Type. Then click Next. ![Choose your ISO image and Guest OS Type.](https://klabsdev.com/content/images/2024/01/pm03.png) On the next screen you will choose `VMWare compatible` for Graphics Card. Machine type will be `q35`. The BIOS should be `OVMF (UEFI)`. Next, check the box for Add EFI Disk. Choose the storage where you would like that saved. Then for SCSI Controller, choose `VirtIO SCSI`. Then click Next. 🛑 Make sure that you have the "Pre-Enroll keys" option un-checked. If you don't you will run into booting issues! ![](https://klabsdev.com/content/images/2024/01/pm04.png) On the Disks screen, set the Bus/Device to `VirtIO Block` and set the storage to 64GB or more depending on how much space you would like. Next set the Cache to `Write back (unsafe)`. Finally, if you are running this VM on ZFS make sure that the `Discard` box has been checked. If you are NOT using ZFS, then leaved the box unchecked. Then click Next. 💡 If you would like to read more about Discard and ZFS, check out [this thread](https://forum.proxmox.com/threads/turn-on-discard-option.89208/?ref=klabsdev.com) on the Proxmox forums. ![](https://klabsdev.com/content/images/2024/01/pm05.png) On the CPU screen, choose `4` on the Cores section. Then click Next. ![](https://klabsdev.com/content/images/2024/01/pm06.png) On the Memory screen, set the amount in Megabytes to `4096`. Then click Next. ![](https://klabsdev.com/content/images/2024/01/pm07.png) On the Network tab, choose `VMware vmxnet3` for the Model. Then click next. ![](https://klabsdev.com/content/images/2024/01/pm08.png) At this point you can choose to finish the VM setup. Make sure the option to start the VM is UNCHECKED as we do not want the VM to start yet. There are a few hardware changes we need to make first. **Step 4)** Next, we need to attach our MacOS image/ISO file we made to the VM. To do this simply navigate to the hardware tab and click the "Add" button at the top and choose "CD/DVD Drive". ![Add a DVD drive to VM](https://klabsdev.com/content/images/2024/01/DVD.png) Then choose the macOS image you have uploaded! Click "Add". ![mount the ISO image](https://klabsdev.com/content/images/2024/01/macos-image.png) **Step 5)** Next, click on you MacOS VM to select it. Then navigate to Options -> Boot Order. We need to make sure that `OpenCore.iso` is set to the first option in the boot order. ![Change the boot order to ensure OpenCore is booting first](https://klabsdev.com/content/images/2024/01/chrome_B2bId3tGpX.png) **Step 6)** Now we will need to manually add some arguments to the end of the VM .conf file. To do this you will need to enter the Proxmox Host console. Do this by clicking on your node and clicking Shell at the top right corner. ![Open the Proxmox node console](https://klabsdev.com/content/images/2024/01/OpenConsole.png) After the console has been opened, you can edit the VM config file with the following command: Change `VMIDHERE` with the ID number from you MacOS VM. In this example I am using 999. ```console nano /etc/pve/qemu-server/VMIDHERE.conf ``` Once, the file has been opened, go to the bottom of the file and add the following: FOR INTEL HOSTS: ```text args: -device isa-applesmc,osk="ourhardworkbythesewordsguardedpleasedontsteal(c)AppleComputerInc" -smbios type=2 -device usb-kbd,bus=ehci.0,port=2 -global nec-usb-xhci.msi=off -global ICH9-LPC.acpi-pci-hotplug-with-bridge-support=off -cpu host,vendor=GenuineIntel,+invtsc,+hypervisor,kvm=on,vmware-cpuid-freq=on ``` FOR AMD HOSTS: ```text args: -device isa-applesmc,osk="ourhardworkbythesewordsguardedpleasedontsteal(c)AppleComputerInc" -smbios type=2 -device usb-kbd,bus=ehci.0,port=2 -global nec-usb-xhci.msi=off -global ICH9-LPC.acpi-pci-hotplug-with-bridge-support=off -cpu Haswell-noTSX,vendor=GenuineIntel,+invtsc,+hypervisor,kvm=on,vmware-cpuid-freq=on ``` You will also need to edit the 2 lines with the config regarding the CDROM drives that are mounting the OpenCore and MacOS ISO images. You will need to remove `,media=cdrom` and add `cache=unsafe`. The lines should look like this: ```text ide0: local:iso/macOS-Sonoma.iso,size=14450M,cache=unsafe ide2: local:iso/OpenCore-v20.iso,size=150M,cache=unsafe ``` ⚠️ DO NOT COPY the lines above as your IDE device numbers may not be the same. Press `CTRL + X` then `Y` then `ENTER` to save the changes. **Step 7)** Finally, we can start up the VM! Right click on the VM and click Start. After this click on the console button on the top right of the screen. ![Start up the VM](https://klabsdev.com/content/images/2024/01/Step7-Fixed.png) Once the console window has been opened, press `ENTER` to open the `UEFI Shell`. ![Start the UEFI Shell pre pressing ENTER](https://klabsdev.com/content/images/2024/01/UEFIShellOpen.png) Mount the UEFI location by typing: ```console fs0: ``` Then we can run the UEFI boot file by typing: ```console System\Library\CoreServices\boot.efi ``` ![Boot the UEFI file](https://klabsdev.com/content/images/2024/01/UEFI-Boot.png) After a while, you will boot into MacOS Recovery. **Step 8)** Once booted into MacOS Recovery, choose "Disk Utility". From the Disk Utility window you will need to select VirtIO Block Media and Erase the disk. ![](https://klabsdev.com/content/images/2024/01/EraseDisk.png) A new window will open. Choose `MacOS` for Name, `APFS` for Format, and `GUID Partition Map` for Scheme. One set, click "Erase". Once this has finished, click "Done". Finally, you can close the Disk Utility window. ![Set the options for the installation drive ](https://klabsdev.com/content/images/2024/01/Scheme.png) **Step 9)** Once the Disk Utility window has been closed, choose the "Install macOS Sonoma" option. Follow the next few window prompts. When you get to a screen asking what disk to install MacOS to, choose the "MacOS Drive" we formatted before. Then click continue. ![Choose the "macOS" drive we erased previously](https://klabsdev.com/content/images/2024/01/Choose-Drive.png) After some time, the data will be written to the drive MacOS will be booting from. The system will reboot a few times. Choose "macOS Installer" if brought back to the UEFI screen. ![Continue to macOS Installer](https://klabsdev.com/content/images/2024/01/MacOS-Installer.png) **Step 10)** After doing this a few times, you will eventually end up at a Region selection screen. Choose your Region. Click Continue. ![Choose your region](https://klabsdev.com/content/images/2024/01/RegionSelection.png) Next, click continue if your Preferred languages, Input Sources, and Dictation is correct. Click Continue. ![Confirm Preferred Languages, Input Sources, and Dictation is correct.](https://klabsdev.com/content/images/2024/01/spokenLanguages.png) Choose "Not Now" on the Accessibility screen. ![Choose "Not Now" on the Accessibility screen](https://klabsdev.com/content/images/2024/01/Accessibility.png) Click Continue on the "Data & Privacy" screen. ![Choose "Continue" on the Data & Privacy screen](https://klabsdev.com/content/images/2024/01/Data-Privacy.png) Make sure to choose "Not Now" on the Migration Assistant screen. ![Choose "Not Now" on the Migration Assistant screen](https://klabsdev.com/content/images/2024/01/MigrationAssistant.png) Finally, choose **"Set Up Later"** when asked to Sign in with your Apple ID. 🛑 DO NOT SIGN IN WITH AN APPLE ID! MAKE SURE YOU ARE SKIPPING TO THE NEXT STEP! ![Choose "Set Up Later" when asked to sign in with your Apple ID](https://klabsdev.com/content/images/2024/01/SignIn.png) Lastly, you'll need to create your local account. Your VM will take a few moments to load into the desktop. ![Fill out your local account information](https://klabsdev.com/content/images/2024/01/CreateAccount.png) Welcome to your MacOS VM running in Proxmox ![You are now at your MacOS Desktop](https://klabsdev.com/content/images/2024/01/desktop.png) ## Boot MacOS W/out OpenCore With the current configuration you will still need manually select MacOS when booting the VM. We can fix this by fixing the EFI partition. **Step 1)** Log into your MacOS VM and open a web browser and download the [KVM OpenCore EFI folder](https://github.com/thenickdude/KVM-Opencore/releases?ref=klabsdev.com). ![Download the OpenCore EFI Folder from Github](https://klabsdev.com/content/images/2024/01/Download-OpenCore-Folder.png) **Step 2)** Next, we also need to download [MountEFI from Github](https://github.com/corpnewt/MountEFI?ref=klabsdev.com) as well. ![Download MountEFI from Github](https://klabsdev.com/content/images/2024/01/MountEFI.png) **Step 3)** Once both things are downloaded we'll start setting up the proper EFI. Open a terminal window and enter: ```console cd ~/Downloads/MountEFI-update ``` ```console chmod +x MountEFI.command ``` ```console ./MountEFI.command ``` **Step 4)** In the terminal screen that opens, choose the number that matches the drive you created when installing MacOS. In my case, it's #1\. ![Terminal screen showing the list of drives to mount an EFI partition from](https://klabsdev.com/content/images/2024/01/DriveNumber.png) After hitting enter on the drive, you will be asked to enter the password for your account. **Step 5)** Next open a Finder window. Open the EFI drive that has just been mounted from the left-hand panel. If there is a folder in there called `EFI`, rename it to `EFI.orig`. ![Copy the downloaded EFI folder to the EFI mounted drive](https://klabsdev.com/content/images/2024/01/EFICopy.png) **Step 6)** Once the EFI folder has been copied, **SHUTDOWN** the vm. **Step 7)** Back inside of the Proxmox web UI, Click back onto the MacOS VM and navigate to Hardware. We are going to remove the OpenCore CD/DVD Drive. ![Detach the EFI OpenCore disk in the Proxmox Web UI](https://klabsdev.com/content/images/2024/01/Detatch-EFI.png) Once the disk has been detached, you can remove it. You can now boot the VM and verify you can launch into MacOS without OpenCore mounted. ### Conclusion I have been playing around with the hardware allocation and I have noticed that the performance is not fantastic. It seems that macOS 14 Sonoma does not run very well in a Proxmox virtual environment. Increasing the amount of CPU cores and RAM can help improve performance, however there are dimensioning returns. This could very very useful for testing macOS IT deployments or building software for Mac regardless of the performance. Huge thanks for i12bretro tutorials as most of this come from their tutorials. I wanted to re-create them with screenshots for others to follow and offer the ISO images for anyone without a Mac to build them! The tutorials this one is based off of are listed below in the sources list. Thanks for reading! Written By: Max Kulik --- ### Sources - [KVM OpenCore](https://github.com/thenickdude/KVM-Opencore/releases?ref=klabsdev.com) by [thenickdude](https://www.nicksherlock.com/?ref=klabsdev.com). - [gibMacOS](https://github.com/corpnewt/gibMacOS?ref=klabsdev.com) from [Github](https://github.com/corpnewt?ref=klabsdev.com) by [CorpNewt](https://www.reddit.com/user/corpnewt?ref=klabsdev.com) - [KVM OpenCore Bootloader](https://github.com/thenickdude/KVM-Opencore?ref=klabsdev.com) from [Github](https://github.com/thenickdude?ref=klabsdev.com) by [thenickdude](https://twitter.com/thenickdude1?ref=klabsdev.com) - [i12bretro Tutorials](https://i12bretro.wordpress.com/?ref=klabsdev.com) - [Create Almost Any MacOS Installation Media](https://i12bretro.github.io/tutorials/0763.html?ref=klabsdev.com) - [Running a MacOS 14 Sonoma VM in Proxmox VE](https://i12bretro.github.io/tutorials/0566.html?ref=klabsdev.com) ### My Home-Lab | Updated Regularly URL: https://klabsdev.com/my-home-lab-update-2/ Last updated: 2026-08-24T15:54:04.000Z 🤖 NO AI WAS USED IN THE WRITING OF THIS POST! This Home Lab overview blog post will be continually updated over time. ⌚ Last updated August 24st 2026 ![](https://klabsdev.com/content/images/2026/08/IMG_2771.jpg) I'll go over what each part of my server does starting from the top of the rack. ### Power: A dedicated 20 Amp circuit has been ran to my server rack. This is less about power usage but is a consideration. The main reason for the dedicated circuit is for power clarity as not all devices in the rack are behind the APC and the cleaner the power, the better. ![](https://klabsdev.com/content/images/2026/03/IMG_1210.jpg) ![](https://klabsdev.com/content/images/2026/03/IMG_1209.jpg) Dedicated 20 Amp circuit for the Server Rack. ### The Rack: All my server hardware lives inside of an old [Compaq Rack 7000](https://www.hpe.com/psnow/doc/c04282345?ref=klabsdev.com). It's been great so far! I was able to find the keys for the latches as well. It's entirely enclosed with a plexiglass front door with vents to pull in fresh air. The rear panel is all metal mesh to allow the hot air to vent. I talk about the rack some more [here](https://www.reddit.com/r/homelab/comments/ymi19q/got%5Fmy%5Ffirst%5Frack%5Fcompaq%5F7122/?ref=klabsdev.com). ### PDU: Mounted in the rear of my server case is a [StarTech 1U PDU](https://www.startech.com/en-us/server-management/rkpw081915?ref=klabsdev.com). The placement in the rear allows for me to keep cables neat an organized within the inside of the rack. I try to keep power on one side and networking on the other. The PDU is the direct power source to the rack. ![](https://klabsdev.com/content/images/2026/03/IMG_1211.jpg) Rear of the server rack: PDU mounted at the top. ### Jump Boxes: At the very top of my rack lives 2 Intel NUCs, mounted with a [1U NUC Rack Mount](https://a.co/d/00MfTyvX?ref=klabsdev.com). These serve as jump boxes to allow me remote management access to my network should I need a backup. I also use this as collaboration PCs if I need to work on a PC at the same time as someone else. ### Patch Panel: The next item on the list is my [Cat6 ethernet Patch Panel](https://a.co/d/0gVcvDVH?ref=klabsdev.com). This is pretty self-explanatory but it's basically what distributes ethernet to the back of the server and connects everything to the network. ### Network Switch: (USW-24-PoE) While not the most exciting part of the build, this switch does help complete the Unifi buildout and provides in-depth network management within my Unifi system. vLAN management and network policy buildout has never been easer. ### 1U Brush: Next in the rack, and below my network switch is just an [organizational 1U brush panel](https://a.co/d/03QZJrHt?ref=klabsdev.com). It's simply there to allow me to route the fiber cables to the back of the server rack. ### Unifi Aggregation Switch As my network and server rack continue to grow, so have the number of devices I want utilizing my multi-gig network. To help I am leveraging the [Ubiquiti Unifi Aggregation Switch](https://store.ui.com/us/en/products/usw-aggregation?ref=klabsdev.com). ### Unifi Dream Machine Pro Max: (Router & Firewall) I decided to go with the [Ubiquiti Dream Machine Pro Max](https://store.ui.com/us/en/category/cloud-gateways-large-scale/products/udm-pro-max?ref=klabsdev.com). I choose to use this as it provides quite a few features I was looking for. The PoE is nice for connecting APs directly to it. I also enjoy the 2 HDD slots for RAID protected NVR recording as I do have a few cameras. The Dream Machine also serves a great firewall with many of the recent Network focused updates. - Network: - Management of all wireless access points, switches, and networks. Security devices, IoT devices, and server management all live on their own vLAN's. I also utilize the firewall features to secure my network. - Protect: - Installed Cameras G5 Bullet, G3 Reader Pro, and G4 Instant are all managed an recorded here. - Talk: - My MSP's main phone number is managed here. I also use this for testing in my lab environment before deploying custom Talk deployments to client networks. - Access: - I have a door latch installed on both egress points of my house and use Protect to manage my Doors and my G3 Reader Pro. This also integrates with Home Assistant to manage door locking remotely. This is also used as a showcase for clients looking for managed security. - InnerSpace: - I use the built in Unifi InnerSpace to make sure my device planning is sufficient. This can include camera coverage as well as AP planning and deployment. Much like Talk and Protect, this is also a great Client Showcase for MSP work. I also want to highlight my AT&T 2.5 Gigabit fiber to the home connection. I route this directly into my server rack, bypassing the AT&T provided ONT by utilizing a [WAS-110 ONT on a Stick](https://pon.wiki/category/att/?ref=klabsdev.com), running community firmware. ![](https://klabsdev.com/content/images/2026/03/IMG_0296.jpg) Pictured: A small Noctua fan cooling the WAS-110 ONT on a stick plugged in directly to a Unifi Dream Machine Pro Max as the WAN connection. From a high-level prospective, this works by masquerading as the BGW620-700 ONT provided by AT&T. More information on how this works can be found on the [PON dot WIKI](https://pon.wiki/?ref=klabsdev.com). They have guides for many different Fiber Providers, gateways, and ONTs. ### UNAS Pro 8: (NAS Server) The UNAS Pro 8 from Ubiquiti is an amazing appliance and I am looking forward to future software updates as they keep pushing to make these devices competitive in the commercial space. The UNAS services as my main storage appliance as I have it filled! - Cache Drives: \[RAID1\] - (2x) Crucial P310 Gen 4 1Tb NVMe Drives - Storage Drives : \[RAID5\] - (8x) WD Ultrastar 14TB 7200 RPM HDDs There are 3 features I'd like to highlight on the UNAS Pro 8: I cannot believe how easy it is to deploy users to this server with the user management. Forget ACLs, complex user management, and overly complex file permissions. Unifi went above and beyond to make sure this is as easy as possible and that any user can safely provision user access to files. One of the most important features to me is data backup. The UNAS devices support remote NAS replication AND remote storage options such as Wasabi and BackBlaze, pushing this appliance to compete within the commercial space. In the latest update they also provide local "Protected Cloud Backup" so you can secure your Azure environment as well! ![](https://klabsdev.com/content/images/2026/03/chrome_KAeZbs5k4S.png) Screenshot of the "Drive" Cloud Backup Options ### HL15 Server: (GPU & Compute) Next up is my main Proxmox server featuring the HL15 chassis from 45Drives. ![](https://klabsdev.com/content/images/2026/08/IMG_2766.jpg) An inside view of the HL15 Server Build. - **CPU:** AMD EPYC 7742 64-Core - **RAM \[256GB\]:** (4x) Micron/Supermicro 64GB DDR4 3200MHz RDIMM ECC - **Motherboard:** AsRock Rack ROMED8-2T - **HBA:** LSI 9305-16i SAS/SATA/NVMe - Flashed in IT mode with firmware version 16.00.12.00 for direct drive passthrough. This is required for ZFS or high performance LVM pools. - **GPU 1 & 2:** 2x Modified Nvidia RTX 4090 w/48GB VRAM - LLM & Inference Workloads - **GPU 2:** Nvidia Quadro P2200 - Encode/Decode workloads - **Storage:** - **Boot Storage:** (1x) 256GB Micron SATA SSDs - **Hot Storage:** (2x) 1TB Gen 4 Crucial P310 NVMe - **VM Storage:** (15x) 1TB Micron SATA SSDs There are a few things I'd like to highlight on this build. The first and most obvious is the 48GB Nvidia 4090 that's featured in this build. ![](https://klabsdev.com/content/images/2026/03/IMG_0853.jpg) ![](https://klabsdev.com/content/images/2026/03/IMG_0851.jpg) ![](https://klabsdev.com/content/images/2026/03/IMG_0852.jpg) Images of the Modified 48GB Nvidia 4090 from GPvLab This GPU is a custom, modified Nvidia 4090 modified and [built by GPvLab](https://gpvlab.com/index.html?ref=klabsdev.com). Cutting their teeth on repairing broken GPUs and other BGA electronics, Greg is one of very few supplies of these cards within the United States. While still using the Chinese created PCB boards, Greg ships the fully leaded 4090s, whereas the China direct cards are of the "D" variant - a dialed down version specially created [for the Chinese market due to US Government export regulations](https://www.reuters.com/technology/nvidia-launches-new-gaming-chip-china-comply-with-us-export-controls-2023-12-29/?ref=klabsdev.com). In depth performance measurement of these [cards can be found here](https://gpvlab.com/rtx-info.html?ref=klabsdev.com). While still expensive at $3,500 USD (03/16/2026), GPvLab's 4090's prove to be one of the most affordable, high-density vRAM GPUs obtainable to consumers at this time as these are true, 2 PCI slot width cards featuring their own blower fan and cooler. If you are interested in learning more about these cards and Greg Sky from GPvLab, he has a [Youtube Channel](https://www.youtube.com/@regsky/videos?ref=klabsdev.com) showcasing the process of building these cards. The second highlight is the modifications required to fit this level of hardware in the Version 1 HL15 from 45Drives. I have covered my thoughts of this server chassis in a [different post](https://klabsdev.com/45drvies-hl15-my-first-impression/). Since obtaining this HL15 Chassis, 45Drives has since released the [HL15 Beast](https://store.45homelab.com/configure/hl15beast?ref=klabsdev.com). At 1U taller and MUCH deeper this would circumvent many of the issues I ran into. However, the bigger chassis comes with a much bigger price at almost $1,600 USD w/out shipping or import fees. I sought to outfit my HL15 with high density GPU and CPU compute in the original footprint to maximize my density. In order to achieve this, I was required to modify my backplane to delete the Power Midplane (Sorry Mark Hooper). With the larger power requirements (4090 + EPYC) I will be running a 1,500 Watt PSU for now. This will be upgraded to a 2,000 Watt PSU as I plan on adding more than one 4090 to this build. I will also need to run 240v mains to the server rack as well. These are typically a lot deeper than was was originally intended to be in the HL15 Chassis, thus the Power Midplane was now in the way. ![](https://klabsdev.com/content/images/2026/03/IMG_0998.jpg) Pictured: Low clearance between the Corsair HX1500i PSU and the HL15 Power Midplane. The best solution I determined was following in [Techno Tim's idea of powering the backplane directly](https://forum.45homelab.com/t/powering-the-backplane-directly/3191?ref=klabsdev.com). I took a slightly different approach to this by re-using the 90° Molex connectors already on the backplane and simply cutting the wires at the 24-pin power connector and re-pinning from there. ![](https://klabsdev.com/content/images/2026/03/IMG_1156.jpg) Pictured: The Power Midplane with the 24-pin connector wires cut. Re-pinning was not that difficult with the right tools. For [$15.99 on Amazon](https://a.co/d/00RJKEMv?ref=klabsdev.com), I was able to obtain a Wire Crimping tool designed for terminal connectors, such as those used on Molex connectors. With some new Molex ends and pins, some pinout info from the HL15 Forms, I had re-wired the backplane for direct power and have eliminated the Power Midplane. ![](https://klabsdev.com/content/images/2026/03/IMG_1154.jpg) ![](https://klabsdev.com/content/images/2026/03/IMG_1153.jpg) Pictured: The backplane, re-using the 90° 4-Pin Molex connectors with custom male Molex adapters wired in. The final obvious issue with doing this is the fans on the HL15 no longer are powered. This was simply solved by removing the 3D printed fan header holders and connecting the Fans directly to the motherboard. The added benefit here is all the fans can also be controlled and ramped up when the added airflow is actually needed. Something I truly believe should be an option out of the box from 45Drives. ![](https://klabsdev.com/content/images/2026/03/IMG_1204-2.jpg) ![](https://klabsdev.com/content/images/2026/03/IMG_1203-2.jpg) ![](https://klabsdev.com/content/images/2026/03/IMG_1202-2.jpg) ![](https://klabsdev.com/content/images/2026/03/IMG_1201-2.jpg) ![](https://klabsdev.com/content/images/2026/03/IMG_1200-2.jpg) ![](https://klabsdev.com/content/images/2026/08/IMG_2768.jpg) ![](https://klabsdev.com/content/images/2026/08/IMG_2769.jpg) Glam shots of the HL15 build with some added white LEDs And of course these are the services I am running on my server. All containers and VMs are running on a non-clustered, non-ha, Proxmox Virtual Environment. - Torrent Container: \[LXC\] - Debian 12 - [Transmission Daemon Server](https://transmissionbt.com/?ref=klabsdev.com) & [OpenVPN.](https://openvpn.net/?ref=klabsdev.com) - This legacy system is a pre-docker, simple, LXC container that acts as a VPN'ed torrent server that is not tied to any automation services and is literally used for downloading ISOs and other large files I may need. Provided torrent downloads are typically MUCH faster than HTTP options. - Watch Chroma: \[LXC\] - Debian 13 - Docker + Portainer + GPU Accelerated - A steaming platform project that I host the backend for locally called [Chroma](https://watchchroma.com/?ref=klabsdev.com). A passion project [featuring the ex-Caffeine.tv community ](https://discord.com/invite/cAgv6XAzDA?ref=klabsdev.com)developed for fun. The encode/decode backend service runs here allowing for inexpensive GPU acceleration. - Media Container: \[LXC\] - Debian 13 - Docker + Portainer + GPU Accelerated - [Plex](https://plex.tv/?ref=klabsdev.com), [Jellyfin](https://jellyfin.org/?ref=klabsdev.com), [Fladder](https://github.com/DonutWare/Fladder?ref=klabsdev.com), [Tautulli](https://tautulli.com/?ref=klabsdev.com), and [Tauticord](https://github.com/nwithan8/tauticord?ref=klabsdev.com) are the services running on my media LXC. - My entire [Arr stack](https://letmegooglethat.com/?q=What+is+an+Arr+stack&ref=klabsdev.com). - Gluetun - A VPN client that supports OpenVPN. It connects to a PIA account to route this stack's internet traffic through. - qBittorrent 2x - This client handles the downloading of my Linux ISOs. I use 2 of them for different types of content. - Flaresolverr - A small server that uses chromium via CLI to bypass Cloudflare Turnstile robot verification. - Overseerr - A client that allows users of my Media servers to request Linux ISOs - Prowlarr - Indexes specified torrent sites and collects magnet links, saves that information, and allows for fast torrent fetching. - Unpackerr - Automatically extracts torrents that are downloaded that contain compressed files. - Radarr 2x - Used for media management. I use two instances for different content. - Sonarr 2x - Used for media management. I use two instances for different content. - AI Container: \[LXC\] - Debian 13 - Docker + Portainer + GPU Accelerated - [Ollama](https://ollama.com/?ref=klabsdev.com), [Open WebUI](https://openwebui.com/?ref=klabsdev.com), and [Comfy UI](https://www.comfy.org/?ref=klabsdev.com) provide a comprehensive local AI stack that can be used for testing, research, and other local services that can leverage AI such as Home Assistant. - Docker Container: \[LXC\] - Debian 13 - Docker + Portainer + GPU Accelerated - [Zoraxy Reverse Proxy](https://github.com/tobychui/zoraxy?ref=klabsdev.com) - A reverse proxy that connections all the following services to the web and more. I am testing this Reverse Proxy at this time. - [IMMICH](https://immich.app/?ref=klabsdev.com) - Phone images and video backups. Access to GPU in order to accelerate transcoding. - [Planka](https://planka.app/?ref=klabsdev.com) - The best self-hosted Trello clone I have found yet. I use this for project tracking. - [Discord Server Archive](https://github.com/slatinsky/DiscordChatExporter-frontend?ref=klabsdev.com) - I maintain a public backup of the streaming service Caffeine.tv since they have shut their doors. This archive can be viewed [here](https://caffeine.klabsdev.com/?ref=klabsdev.com). - [Floatplane Downloader](https://github.com/Inrixia/Floatplane-Downloader?ref=klabsdev.com) - This is a tool that can be used to automatically download and sort content from subscribed creators on Floatplane. This ties in with both my Plex and Jellyfin servers. - [IT Tools](https://github.com/CorentinTh/it-tools?ref=klabsdev.com) - IT Tools is a web based multi tool for IT related tasks. - [MeTube](https://github.com/alexta69/metube?ref=klabsdev.com) - Self-hosted YouTube video downloader web-based front end for [yt-dlp](https://github.com/yt-dlp/yt-dlp?ref=klabsdev.com). - [Bar Assistant ](https://barassistant.app/?ref=klabsdev.com) - I am a hobbyist bar tender, and this is the best way I have seen to keep cocktail recipes in order. Also offers an entire inventory system that will show you what drinks you can make with your giving ingredients. - [Tandoor](https://tandoor.dev/?ref=klabsdev.com) - A recipe management and organization system used by my wife. - Home Assistant: \[VM\] - Dedicated Home Assistant VM installed with [Proxmox Helper Scripts](https://community-scripts.org/scripts/haos-vm?from=scripts&fromQ=Home+Ass&ref=klabsdev.com). A VM was used rather than an LXC container as there are missing features in a containerized deployment. - AMP Server: \[VM\] - Dedicated Debian 12 VM running [AMP](https://cubecoders.com/AMP?ref=klabsdev.com). This is a platform that allows for VERY EASY game server deployment. It's so easy in fact that I have been able to create logins for my friends and offload building game servers for my friends directly to them. ### Battery Backup: ![](https://klabsdev.com/content/images/2026/08/IMG_2772.jpg) A stack of mismatch UPS Finally at the bottom of the server rack, I have: - [CyberPower CP700PFCRM1U](https://www.cyberpowersystems.com/product/ups/pfc-sinewave/cp700pfcrm1u/?ref=klabsdev.com) - A 400W/700VA UPS that is dedicated to the NAS providing \~45 mins of Runtime. - Vertiv (UPDATE SOON) - This backup is dedicated to the Unifi Network Stack. With all PoE devices, I get \~45 mins of runtime. - [APC Smart-UPS 1500](https://www.apc.com/us/en/product/SMT1500RM2UC/apc-smartups-line-interactive-1500va-rackmount-2u-120v-6x-nema-515r-outlets-smartconnect-port+smartslot-avr-lcd?ref=klabsdev.com) - This is is the workhorse backup for the main Compute/AI server. The Compute/AI server gets 10 mins of runtime under full load. (2xGPU+CPU) This is plenty of time to shutdown in the event of power loss. In the future, this will be replaced with consolidated 240v power and a single UPS as I'll be upgrading power infrastructure soon. ### Change SharePoint Migration Tool Temporary Storage Directory URL: https://klabsdev.com/change-sharepoint-working-folder/ Last updated: 2026-05-20T06:26:50.000Z ### Introduction When setting up an Azure network and migration your local data to a SharePoint site, often times you will use the SharePoint migration tool. The SharePoint migration tool compresses your data and saves it to a temporary directory on your `C:/` Drive. This can be problematic if you are moving a large volume of data to SharePoint but only have a limited amount of space available on your `C:\` Drive. A very simple way to fix this is to just create a symbolic folder link where the SharePoint Migration Tools stores the data to a drive that has more space. This can even be an external drive. ### Symbolic Link Setup 💡 This tutorial will assume we are going to have SharePoint migration tool save it's temp data to a Drive labeled as `D:\`. The location I will tell SharePoint Migration Tool to use will be `D:\000SharePointToolStorage\` **Step 1)** Before we make any of these changes, we need to stop the SharePoint Migration Tool service. This will allow us to make changes necessary to move the temp directory. Press the `WIN` \+ `R` keys to open the Run window. Type `services.msc` and press `ENTER`. ![](https://klabsdev.com/content/images/2023/12/SharePoint1.png) Once the Services window opens you will need to search for `SharePoint Migration Service`. **Step 2)** Right click on `SharePoint Migration Service` and click `Stop`. ![](https://klabsdev.com/content/images/2023/12/SharePoint2.png) Now that the service is no longer running we can now make our changes. Keep this window up as we will need to come back to this to start it back up! **Step 3)** Open CMD as an elevated user. "Run as Administrator". Once CMD has been opened let's make the folder on the larger drive for the temp data storage. ```CMD mkdir D:\000SharePointToolStorage ``` **Step 4)** Next we are going to CD into the SharePoint Migration Tool storage directory. ```CMD cd C:\Users\%username%\AppData\Roaming\Microsoft\SPMigration\Logs\Migration ``` **Step 5)** Let's rename the old directory so it does not get used any longer. ```CMD rename MigrationToolStorage MigrationToolStorageOld ``` 💡 After you are finished, you can delete `MigrationToolStorageOld` to free up the used space, but while setting this up, it's not a bad idea to keep it around. **Step 6)** We now can make our symbolic linked folder. ```CMD mklink /D MigrationToolStorage D:\000MigrationToolStorage ``` You can check that the symbolic linked folder was created by navigation to the directory in explorer and looking for the special folder icon. ![](https://klabsdev.com/content/images/2023/12/SharePoint3.png) ### Conclusion With a special Symbolic folder created like this, it will trick the SharePoint Migration Tool into saving it's temp data in a location that actually has enough storage for all the compressed data it is sending to SharePoint. I wish that the setup of an agent would allow you to manually set this. For now this works! Thanks for Reading! Max Kulik --- Sources - Post by [SPJeff](https://www.spjeff.com/2021/09/06/sharepoint-migration-tool-spmt-move-temp-drive/?ref=klabsdev.com) - [Microsoft docs](https://learn.microsoft.com/en-us/sharepointmigration/spmt-settings?ref=klabsdev.com#advanced) reports the working folder but no way to change it. - David on Sulli.blog (Link removed as website has been hijacked since writing) ### 45Drvies HL15 - My First Impression URL: https://klabsdev.com/45drvies-hl15-my-first-impression/ Last updated: 2026-05-20T06:26:43.000Z I got my HL15 today! I bought the case only with some rails. I took some images of it to share with everyone. Also, I’ll include some of my first impressions. First off - What a good looking chassis! From the front, this is going to look amazing once I get it racked up. I chose the white because I wanted it to stand out among the other hardware that lives in my rack. The white-on-blue graphics look really cool! ### Images This is an inside shot of exactly how everything on the inside looked - as I had gotten it. There are a few things that I noticed that I’ll talk about in some of the other pictures, but overall it came to me with no chassis damage and everything looks great! ![](https://klabsdev.com/content/images/2023/12/fec537491d529a0d73d51a2508086186068c9268.jpeg) The first thing I noticed was a slightly bent drive divider. It’s not the end of the world. I’ll try to slot a drive in before I attempt to bend it back as I don’t want to make it worse or break it. Somewhat minor issue but I feel it’s worth pointing out. ![](https://klabsdev.com/content/images/2023/12/c79aa3e38db369029ca7f7131984b635b877dcf9.png) I also had one screw on the side of the case almost fully walked out on the rear corner. I think a small dab of Loctite would prevent this. You don’t see this on cheap chassis as they are all normally riveted together. I’ll probably take all the screws out and Loctite them myself so fan and drive vibrations don’t walk these out in the future. This is a super minor issue. I would rather have screws over rivets any day. ![](https://klabsdev.com/content/images/2023/12/ea04c2d58b0f286ed2ace5295e6c1239a8a9486b.jpeg) It would not be a bad idea to send these out in the future with the cables zip-tied together to prevent them from slapping around inside the chassis during shipping. 2 out of the 4 of my cables had the caps fall off during shipping. Most people who ordered this aa a pre-built system will not have this issue. ![](https://klabsdev.com/content/images/2023/12/0124a2bf92df5584cd280fbc07a425cb405138ab.jpeg) A view of the “rear” fans on the case. I am unsure why only the left side of both the front a rear sets of fans have this 3D printed shroud. It looks like there could be a set on both sides but there is only the one here. Maybe someone at 45Drives can point out the design behind this? ![](https://klabsdev.com/content/images/2023/12/b8ef9896f1f278e67438570feb818f458e83a0b1.jpeg) Pictured here we can see the ends of my SFP cables that I had ordered. You can see that 2 of the caps had fallen off during shipping. The cables appear to be fine but I am confident that a zip tie to bundle all of these cables together could have prevent this. Also you can see the hand labeled A-D SFP cables. I am assuming this is for validation on pre-built servers. ![](https://klabsdev.com/content/images/2023/12/da31bdae189a456517a4fdb0bbd3e4a006c3fdb5.png) Another 3D printed part pre-screwed to the side of the case. I am actually unsure what this is for since I have the chassis only. Pictured next it is the PCB breakout for what appears to be both the fans and the HDD backplane. ![](https://klabsdev.com/content/images/2023/12/IMG_0045.JPG) Another example of the single 3D printed shroud between only 2 of the fans. You can also see the 3D printed HDD guide inside of the drive cage. ![](https://klabsdev.com/content/images/2023/12/IMG_0046.JPG) The entire drive cage and drive backplane. ![](https://klabsdev.com/content/images/2023/12/IMG_0047.JPG) Ahh, there is one of the missing caps. I’ll have to get my “extendo” pliers out to get that guy out of there, haha! ![](https://klabsdev.com/content/images/2023/12/IMG_0048.JPG) The rear of the chassis. It’s funny, from this angle you can hardly tell it’s even a server. It looks like a mid tower case. Also the rear is where the power button is located. ![](https://klabsdev.com/content/images/2023/12/IMG_0052.JPG) Super solid PCI bracket cutouts. Think twice before you pop one of these out, as you will not be putting them back in. You will either need to buy blanks to slot in yourself OR just leave them open. I normally see this PCI “punch-out” method on cheap cases. I have owned PC cases that are in the $175-$200 range that offer SOLID aluminum inserts. We are home-labbers. We are going to slot things in here and change out hardware all the time. ![](https://klabsdev.com/content/images/2023/12/IMG_0054.JPG) A full shot of the inside of the chassis. ![](https://klabsdev.com/content/images/2023/12/IMG_0055.JPG) Screen printed “45” logo is cool. ![](https://klabsdev.com/content/images/2023/12/IMG_0057.JPG) Another shot of the power breakout board. I am not a huge fan of the proprietary cable that is used to split out the power to the fans. If you want to use a stand-alone fan controller you’ll be leaving all the fan cables in the case or doing some serious modification to remove them as they appear to be attached to the 20-pin connector. ![](https://klabsdev.com/content/images/2023/12/IMG_0059.JPG) Another shot of the 3D printed bracket that i will not use in my chassis only config. Anyone want to take some pics of what this guy does and post them? ![](https://klabsdev.com/content/images/2023/12/IMG_0060.JPG) The rear fan bay. ![](https://klabsdev.com/content/images/2023/12/IMG_0061.JPG) ### First Impression Conclusion - The HL15 is built to last. It’s made from super thick metal and is incredibly rigid. This will be a chassis that will be in your home-lab environment for a LONG time! - The rear PCI punch outs should be inserts and should be able to be re-used. This is something that I normally only see in cheap PC chassis. As we move hardware around in our home labs we will be left with empty slots. This might come from the mentality of making servers that get deployed in a “set it and forget it” type of way and 45Drives may have over looked how often some home labers might be swapping hardware. - The power PCB would be cooler if it used more off-the-self parts vs the 2-pin 100% power custom cables. If you want to use a 3rd party fan controller, you’ll have some fun with modding this guy OR maybe you’ll just leave all the cables in place. - The single sided fan shroud appears to be used to hide the fan cables. If you are going to go through the effort and time to print a custom part, why not just include the 2 extra ones to make it look nice. - 3D printing is cool but I am not sure if it belongs in an $800USD server chassis. I feel for the price, there could have been more machined parts and less 3D printed parts. In the spirit of the “Home Lab” having that stuff is cool but I feel for the price there could have been less. I get a “prototype” feel from this rather than a chassis from a company producing the servers for companies like Backblaze. - At least the exterior pre-installed chassis screws should get a Loctite treatment before it’s shipped. Overall, I am very excited about this case and words cannot describe how excited I am to start slapping my hardware in here and get my new NAS up and running. This has become the new centerpiece of my home lab and will be amazing. There are just some quality concerns that I have for the price and that is my only negative remark. Anyone still waiting to get their server is going to love it! ### Self-Host The Ultimate Web Analytics Dashboard - Swetrix URL: https://klabsdev.com/self-host-the-ultimate-web-analytics-dashboard-swetrix/ Last updated: 2026-06-28T13:11:18.000Z ### Introduction One of the first things that you ever try self-hosting is a website. It’s one of the most fundamental beginning steps in starting your journey in a Home Lab and learning how hosting works. However, what is a website if you can’t learn from the traffic that hits it? In this quick walkthrough, I will explain the steps on how to self-host your own website metrics platform based on Swetrix! Swetrix is an amazing, great-looking analytics dashboard that has the open source and home-lab enthusiast in mind. ### Proxmox Setup **Step 1:** Open your Proxmox web panel and choose "Create CT" in the top right corner. ![Create New Proxmox LXC Container](https://cdn.klabsdev.com/klabsdev/images/SwetrixPost/Proxmox1.png) **Step 2:** A window will open asking you to input your container information. You will need to enter the Container ID, Hostname, Password, and finally make sure the Nesting option is checked. ![Create New Proxmox LXC Container - General](https://cdn.klabsdev.com/klabsdev/images/SwetrixPost/Proxmox2.png) **Step 3:** After clicking next, we are asked to choose our container template. For this option we are going to choose our local storage since by default that is where our container templates are downloaded to. 💡 If you do not know how to download a Proxmox LXC template, this is a very quick [Youtube video](https://www.youtube.com/watch?v=kd9cDvBTy74&ref=klabsdev.com) to show you. ⚠️ Make sure you are downloading and using the latest LXC template for Ubuntu if you are following this guide. It is possible you may run into issues if you are using something older. ![Create New Proxmox LXC Container - Template](https://cdn.klabsdev.com/klabsdev/images/SwetrixPost/Proxmox3.png) **Step 4:** On the Disks tab we are going to choose where the container volume exists. For my example I have a dedicated storage volume set for containers and VMs. I will be using that. However if you use local-lvm, there is nothing wrong with that. For this example I will leave the default 8GB of storage used but you can always add more storage later. ![Create New Proxmox LXC Container - Disks](https://cdn.klabsdev.com/klabsdev/images/SwetrixPost/Proxmox4.png) **Step 5:** Next, Proxmox is going to ask how many CPU cores we would like to use. While working on the VM and setting everything up I will allow it to use up to 4 cores. However, once it is set up and running I will change this to only a single core. ![Create New Proxmox LXC Container - CPU](https://cdn.klabsdev.com/klabsdev/images/SwetrixPost/Proxmox5.png) **Step 6:** Next, we need to set the amount of memory that this container can use. For setup I like to allow the container 4GB (4096mb) of memory and then scale that back once the container is up and running. From my testing, you can leave Swap at 512mb of memory. Again, you can always scale that back if you would like. ![Create New Proxmox LXC Container - Memory](https://cdn.klabsdev.com/klabsdev/images/SwetrixPost/Proxmox6.png) **Step 7:** We will now need to set up the networking for this container. In this example I am going to be using the standard eth0 interface and the vmbr0\. These are typically the defaults when making a new container. However you will need to set the container's local static IP address/CIDR and your network's gateway. The gateway is typically the IP address of your router. ![Create New Proxmox LXC Container - Network](https://cdn.klabsdev.com/klabsdev/images/SwetrixPost/Proxmox7.png) **Step 8:** The last step is going to ask if you want to set up custom DNS options. Unless you have an advanced network setup you can leave these options blank. Then, once you are on the Confirm tab, you can check the button on the lower left to "Start after created". **Step 9:** After a few moments the container will start up. Click on it and then click on the Console tab to begin setting up Swetrix. The default username is `root` ![Create New Proxmox LXC Container - Console](https://cdn.klabsdev.com/klabsdev/images/SwetrixPost/Proxmox8.png) Swetrix Setup **Step 1:** First we need to make sure the container is up to date and has the latest version of `git` and `docker-compose` installed. ```console apt update && apt upgrade ``` ```console apt install git docker-compose ``` **Step 2:** Next, clone the Github repo to your container. ```console git clone https://github.com/swetrix/selfhosting ``` Then, enter the directory that was created ```console cd selfhosting ``` **Step 3:** Once here, you will need to open the `docker-compose.yml` file and adjust a few lines. In this example we will use Nano. ```console nano docker-compose.yml ``` Once opened, you will need to edit these environment variables: | Variable | Note | | --------------------------- | ---------------------------------------------------------------------------------------------------------------------------- | | EMAIL | email address user will use to log in to the dashboard | | PASSWORD | password user will use to log in to the dashboard | | JWT\_ACCESS\_TOKEN\_SECRET | secret for JWT access tokens, basically a random string of 60 characters. | | JWT\_REFRESH\_TOKEN\_SECRET | secret for JWT refresh tokens, also a random 60 chars string, but this one should be different from the access token secret. | | API\_URL | URL (or an IP address) of the machine you're hosting Swetrix on. | Once everything has been configured to your liking, we can start the docker container. **Step 4:** Start the docker container: ```console docker-compose up -d ``` It will take a while to download all the requirements and get the container started but once you see this you are ready to move onto step 5: ```console Status: Downloaded newer image for swetrix/swetrix-fe:v2.1.0 Creating selfhosting_redis_1 ... done Creating clickhouse ... done Creating swetrix-api ... done Creating selfhosting_swetrix_1 ... done ``` **Step 5:** You can now, in a browser, navigate to the IP address we set earlier for the container and access your own Swetrix dashboard. This will be the IP address of the container we set up in Proxmox Setup - Step 7\. You will now see a sign-in page for Swetrix. In this example it was `10.0.0.220`. ![Swetrix Login Page](https://cdn.klabsdev.com/klabsdev/images/SwetrixPost/Swetrix1.png) 💡 You can also expose this service outside your network behind a reverse proxy. I recommend [Nginx Proxy Manager](https://nginxproxymanager.com/?ref=klabsdev.com). I also recommend running this behind a [Cloudflare proxy](https://developers.cloudflare.com/learning-paths/prevent-ddos-attacks/baseline/proxy-dns-records/?ref=klabsdev.com) as well. ### Conclusion Running your website analytics in a decentralized platform does have its pros and cons. One of the main benefits being you get to avoid other data collecting platforms from learning or using your collected data to profile you or the service you are tracking. However, I do see one of the downsides to this style of setup being that your data could suffer accuracy if you ever experience downtime. But as with most things in the self-hosting space, this is a very cool way to learn about using Docker and learning the ropes of useful website data collection. 💡 If you are already using the hosted version of Swetrix, there is a data export feature in the works that will allow you to transfer your project to a self-hosted version of Swetrix. This feature is not yet ready but if you need help exporting your project to a self-hosted version, you can reach out for support in the [Swetrix Discord Server](https://discord.gg/ZVK8Tw2E8j?ref=klabsdev.com). Thanks for reading! Written By: Max Kulik --- ### Sources - [Swetrix Selfhosted v2](https://swetrix.com/blog/selfhosted-v2?ref=klabsdev.com) is released! - Swetrix Self-Hosted [Github](https://github.com/swetrix/selfhosting?ref=klabsdev.com) - Swetrix Self-Hosting [setup documentation](https://docs.swetrix.com/selfhosting/how-to?ref=klabsdev.com) Looking for [analytics dashboard](https://tinyanalytics.io/google-analytics-glossary?ref=klabsdev.com)? This resource is a good starting point. ### Complete List of AdBlock Testing Tools URL: https://klabsdev.com/complete-list-of-adblock-testing-tools/ Last updated: 2026-05-20T06:26:21.000Z ### Introduction This is a list I have collected of tools to test if your adblock is working and give you the ability to find more ads to build your block lists. These tools will be great for anyone testing out their PiHole, PFBlockerNG, NextDNS, Technitium, Adguard Home, or any other DNS SinkHole based ad blocking. These websites and tools are also useful for anyone looking to build their own AdBlocker. ### AdBlock Testing Recourses - General AdBlock Testing - [AdBlock Tester](https://adblock-tester.com/?ref=klabsdev.com) - [Can You Block It](https://canyoublockit.com/?ref=klabsdev.com) - [Ads Malev](https://ads.malev.ru/?ref=klabsdev.com) by [Malev](https://malev.ru/?ref=klabsdev.com) - [AdBlock Tool](https://d3ward.github.io/toolz/adblock.html?ref=klabsdev.com) by [d3ward](https://malev.ru/?ref=klabsdev.com) - [AdTest](https://fuzzthepiguy.tech/adtest/?ref=klabsdev.com) by [Fuzz The Pi Guy](https://fuzzthepiguy.tech/?ref=klabsdev.com) - [Basic AdBlock Test](http://www.raymondhill.net/ublock/tests.html?ref=klabsdev.com) by [Raymond Hill](https://github.com/gorhill?ref=klabsdev.com) - These websites will prompt you if it detects AdBlocker - [Bild](https://www.bild.de/?ref=klabsdev.com) - [The World](https://theworld.org/stories/2016-01-04/after-six-years-prison-iranian-blogger-sees-very-different-internet?ref=klabsdev.com) - Websites Simply Covered in Ads - [Ookla’s Speed Test](https://www.speedtest.net/?ref=klabsdev.com) - [New York Family](https://www.newyorkfamily.com/?ref=klabsdev.com) - [Fortnite Cosmetics Directory](https://fnbr.co/?ref=klabsdev.com) - [TMZ](https://www.tmz.com/?ref=klabsdev.com) - [Forbes](https://www.forbes.com/?ref=klabsdev.com) - [One Green Planet](https://www.onegreenplanet.org/?ref=klabsdev.com) - [LAD Bible](https://www.ladbible.com/?ref=klabsdev.com) - [Cafe Mom](https://cafemom.com/?ref=klabsdev.com) - [The Star](https://www.thestar.co.uk/?ref=klabsdev.com) - [Daily Mail](https://www.dailymail.co.uk/ushome/index.html?ref=klabsdev.com) - [Fandom](https://www.fandom.com/?ref=klabsdev.com) - [Business Insider](https://www.businessinsider.com/?ref=klabsdev.com) - [Windows Central](https://www.windowscentral.com/?ref=klabsdev.com) - AdBlock Tools - [Pi-hole Blocklist Generator](https://sefinek.net/blocklist-generator/pihole?ref=klabsdev.com) by [Sefinek](https://sefinek.net/?ref=klabsdev.com) ### Conclusion I do not maintain or own anything linked on this page. There is a good chance I will continue to update this page as I find new tools. Thanks for reading! Written By: Max Kulik ### Transmission Killswitch Script URL: https://klabsdev.com/transmission-killswitch-script/ Last updated: 2026-05-20T06:26:12.000Z ### Introduction I collect most of my “linux ISO’s” using Transmission’s transmission-daemon. I will normally log into the web interface in order to manage my torrent files. However I do also run an OpenVPN instance on that machine connected to my PIA VPN in order to mask that traffic and keep my ISP off my back. The risk involved I wanted to manage is making sure that if something happens to the OpenVPN connection, Transmission doesn’t continue to download anything using the non VPN network. In order to do this I have made a very simple and configurable killswitch script. For fun, I have also set up a configuration option on this script to post messages to a Discord server in case the killswitch runs. This will allow alerts to be sent out if the VPN server has been disconnected for some reason and if the container needs to be rebooted. ### Requirements In order for this script to work there are a few things that will need to be set up first. I will not be going over this here but in the future I plan to. I will update this post when I get posts made for the requirements. - Requirement 1 - You will need to have a Ubuntu container set up on Proxmox. - Requirement 2 - You will need OpenVPN set up and configured to use a static IP from whatever VPN provider you are using. In my case I use PIA. - Requirement 3 - The container will need to have transmission-daemon already installed and configured. - Requirement 4 - Both OpenVPN and transmission-daemon need to be running when this script is run for the first time. If it is not running, there is a chance the script could fail to install. ### How to Use 1. Ensure that you have met the above requirements and that you are running this script inside of a Ubuntu LXC container. This has been untested to work inside of a VM. Their file structures are different and could cause issues. 2. Run the one-line installer command that I have created: `wget https://raw.githubusercontent.com/Glitch3dPenguin/Transmission-KillSwitch/main/installer.sh && chmod +x installer.sh && sudo ./installer.sh` 3. Then, once the script has finished you can edit transmission-killswitch/config in order to get the script ready. 4. Finally we can go ahead and start up the killswitch `sudo service killswitch start` ### Conclusion The killswitch is now ready to use and has been started. The script installer will also set itself up to start on boot. If you would like to contribute to this project or check for updates, feel free to view the [github repo](https://github.com/Glitch3dPenguin/Transmission-KillSwitch?ref=klabsdev.com). Thanks for reading! Written By: Max Kulik ### Themes for Apache Guacamole Terminal URL: https://klabsdev.com/themes-for-apache-guacamole-terminal/ Last updated: 2026-05-20T06:25:59.000Z ### Introduction This page is a collection of terminal themes that can be used by Apache Guacamole. I will add more here as I come across them. Not all these themes may be be created by myself. Credit will give given when possible. ### Themes Nord Style Theme - ![](https://klabsdev.com/content/images/2023/12/GuacamoleNordTheme-1.png) ```console background: rgb:2E/34/40; foreground: rgb:D8/DE/E9; color0: rgb:3B/42/52; color1: rgb:BF/61/6A; color2: rgb:A3/BE/8C; color3: rgb:EB/CB/8B; color4: rgb:81/A1/C1; color5: rgb:B4/8E/AD; color6: rgb:88/C0/D0; color7: rgb:E5/E9/F0; color8: rgb:4C/56/6A; color9: rgb:BF/61/6A; color10: rgb:A3/BE/8C; color11: rgb:EB/CB/8B; color12: rgb:81/A1/C1; color13: rgb:B4/8E/AD; color14: rgb:8F/BC/BB; color15: rgb:EC/EF/F4; ``` - Stuart [**Original Post**](https://stuartm.com/2021/11/nord-theme-for-apache-guacamole-terminal/?ref=klabsdev.com) Looking to add more themese later. I found this one and wanted to add it to my docs so I wont forget. Thanks for reading! Written By: Max Kulik ### Remove Twitter Blue Promotion Buttons 2023 URL: https://klabsdev.com/remove-twitter-blue-promotion-buttons-2023/ Last updated: 2026-05-20T06:25:47.000Z ❗ This post is currently obsolete. Up-to-date code can be found on the original GitHub gist link posted below. ### Introduction This is a super simple and easy way to remove the Twitter Blue promo buttons. This is designed to work with a Desktop Browser addon like Tamermonkey. ![Bucket Settings](https://cdn.klabsdev.com/klabsdev/images/RemoveTwitterBlue.png) ### Installation Step 1) Start off by installing the Tampermonkey addon for whatever browser you use. - Tampermonkey for [Google Chrome](https://chrome.google.com/webstore/detail/tampermonkey/dhdgffkkebhmkfjojejmpbldmpobfkfo?ref=klabsdev.com) - Tampermonkey for [Firefox](https://addons.mozilla.org/en-US/firefox/addon/tampermonkey/?ref=klabsdev.com) - Tampermonkey for [Edge](https://microsoftedge.microsoft.com/addons/detail/tampermonkey/iikmkjmpaadaobahmlepeloendndfphd?ref=klabsdev.com) - Tampermonkey for [Opera](https://addons.opera.com/en/extensions/details/tampermonkey-beta/?ref=klabsdev.com) Step 2) Once installed, enter the Tampermonkey dashboard by clicking on the extension's icon. ![Bucket Settings](https://cdn.klabsdev.com/klabsdev/images/RemoveTwitterBlue2.png) Step 3) Next, head over to [angeld23's Github post](https://gist.github.com/angeld23/b01dd2ef14cd53fc3735fa88f68b7aef?ref=klabsdev.com) with the script we need. Step 4) Copy the entire codeblock into a new Tampermoneky userscript. Save it. ![Bucket Settings](https://cdn.klabsdev.com/klabsdev/images/RemoveTwitterBlue3.png) ### Conclusion You can now browse Twitter free of any buttons asking you to upgrade to Twitter Blue. Thanks for reading! Written By: Max Kulik --- ### Sources - @angeld23 [**Twitter Post**](https://twitter.com/angeld23%5F/status/1667687228066217984?ref=klabsdev.com) - Angeld23 [**GitHub Gist script**](https://gist.github.com/angeld23/b01dd2ef14cd53fc3735fa88f68b7aef?ref=klabsdev.com) ### Install PNPM on Alpine Linux 3.17 URL: https://klabsdev.com/install-pnpm-on-alpine-linux-3-17/ Last updated: 2026-05-20T06:25:38.000Z ### Introduction PNPM is often times used alongside NPM when building a project. Then typical way to install PNPM would be to add it via apk. However it does not seem there is a working package that has been added for Alpine 3.17\. However, you can manually install it. These steps are assume you are using Alpine 3.17 on a Proxmox LXC container. Installation Step 1) First you will need to install Curl. ``` apk add curl ``` Step 2) After that you can run the provided PNPM installer script ``` curl -L https://unpkg.com/@pnpm/self-installer | node ``` Step 3) Check that it has been installed ``` pnpm --version ``` Thanks for reading! Written By: Max Kulik --- ### Sources - PNPM Github [**Issue #784**](https://github.com/pnpm/pnpm/issues/784?ref=klabsdev.com). ### Install Nginx Proxy Manager on Proxmox LXC & Alpine Linux URL: https://klabsdev.com/install-nginx-proxy-manager-on-proxmox-lxc-alpine-linux/ Last updated: 2026-05-20T06:25:27.000Z ### Introduction Currently the only supported way to install Nginx Proxy Manager is to run it inside of a Docker container. However, for someone like me, using Proxmox, I like to utilize LXC for my containerization. This guide will step anyone through the process of Installing Nginx Proxy Manager on a Proxmox LXC Container. ### Preparation & Prerequisites Step 1: Download the Alpine 3.16 container. ![Download Alpine Linux](https://cdn.klabsdev.com/klabsdev/images/NginxProxyManager/NginxProxyManager1.png) ⚠️ DO NOT USE Alpine 3.17 - Installer Will Fail Later Step 2: Create a new LXC container using the downloaded Alpine 3.16 template. Step 3: Log into the newly created container. Then update and upgrade the container. `apk update` `apk upgrade` Step 4: Next create an “npm” user on the container. It will be needed for the install script. `adduser npm` Step 5: Now run the install script. ```console wget --no-cache -qO - https://raw.githubusercontent.com/ej52/proxmox/main/lxc/nginx-proxy-manager/setup.sh | sh ``` Step 6: After the install script runs you will be prompted with the login URL: ![Download Alpine Linux](https://cdn.klabsdev.com/klabsdev/images/NginxProxyManager/NginxProxyManager2.png) Save this URL and port number for later as you will need it to access the web management panel. Step 7: Next, using your text editor of choice edit `/usr/local/openresty/nginx/conf/nginx.conf` ```console nano /usr/local/openresty/nginx/conf/nginx.conf ``` You will need to comment out this line `pid /run/nginx/nginx.pid;` to `# pid /run/nginx/nginx.pid;` Save and close the file. Step 8: Reboot the container `reboot` Step 9: Enter the provided IP address in a browser and use the default login: ```text E-Mail: admin@example.com Password: changeme ``` Step 10: Once logged in, you will be asked to change the default admin login. Use the previously provided default login as the last login option. Nginx Proxy Manager is now installed! Thanks for reading! Written By: Max Kulik 💡 This post has been updated on 6/19/2023. --- ### Sources: - Install script created by [**Elton Renda**](https://github.com/ej52?ref=klabsdev.com). Further documentation for other containers and other operating systems are listed [**here**](https://github.com/ej52/proxmox-scripts/blob/main/lxc/nginx-proxy-manager/README.md?ref=klabsdev.com). - Broken support for Alpine Linux 3.17 documented on [**Issue #118**](https://github.com/ej52/proxmox-scripts/issues/118?ref=klabsdev.com). - Script does not create the “npm” user by default and it is not documented outside of [**Issue #117**](https://github.com/ej52/proxmox-scripts/issues/117?ref=klabsdev.com). ### Run Proxmox on OCI - FOR FREE URL: https://klabsdev.com/run-proxmox-on-oci-for-free/ Last updated: 2026-05-20T06:25:17.000Z ### Introduction This article will walk you through the steps that I took to get Proxmox running inside of an OCI instance. Because you cannot VNC directly into an instance that is booting, this will be a great way to run services that may require some sort of connection other than RDP (Windows Server) or SSH. In my use case, I was looking to deploy a virtual PBX to a cloud environment so all of our locations did not need to rely on our on premises server. You can imagine the chaos when the phone system goes down. In this method, we are going to be using a custom Debian image to create a boot image on OCI and create a virtual instance. Then, once that is set up we will be manually installing Proxmox. ### Step 1: Download Required Files We need to download the Debian image required first. At the time of writing Proxmox is using Debian 11 (bullseye). Lucky for us Debian provides ready-to-deploy cloud images. The image that you will need can be download directly from them here: [https://cloud.debian.org/images/cloud/](https://cloud.debian.org/images/cloud/?ref=klabsdev.com) The version that I used was `debian-11-genericcloud-amd64-20221205-1220.qcow2`. That image can be downloaded directly here: [https://cloud.debian.org/images/cloud/bullseye/20221205-1220/debian-11-genericcloud-amd64-20221205-1220.qcow2](https://cloud.debian.org/images/cloud/bullseye/20221205-1220/debian-11-genericcloud-amd64-20221205-1220.qcow2?ref=klabsdev.com) Step 2: Create OCI Bucket Next we will need to start getting our image ready for OCI. Once logged into your OCI Dashboard you will need to navigate to Storage -> Buckets. If you don’t already have one, create a new bucket for your custom images by clicking “Create New”. These are the options I used: ![Bucket Settings](https://cdn.klabsdev.com/klabsdev/images/RunProxmoxOnOCI/1.png) ### Step 3: Upload Debian to Bucket Now that you have a bucket created, we need to click on it to open it up. Once you are in your bucket, scroll down and choose “Upload” under objects. ![Upload in Objects](https://cdn.klabsdev.com/klabsdev/images/RunProxmoxOnOCI/2.png) Upload the Debian image from Step 1\. You can name it whatever you like. ### Step 4: Make Custom Image With the Debian image uploaded, it is time to convert that to an Oracle Cloud Image. To do this Navigate to Compute -> Custom Images. Once there choose “Import Image”. This is an example of the import settings you should emulate: ![Custom Image settings](https://cdn.klabsdev.com/klabsdev/images/RunProxmoxOnOCI/3.png) This will take a few mins to provision. ### Step 5: Deploy Custom Image Now that our Custom Image has been provisioned, we can now create our custom image. Navigate to Compute -> Instances and choose “Create Instance”. On the “Create compute instance” page start off by creating a name for your Proxmox instance. I called mine “Proxmox”. ![Name Instance](https://cdn.klabsdev.com/klabsdev/images/RunProxmoxOnOCI/4.png) Then choose your Availability Domain ![Choose availability domain](https://cdn.klabsdev.com/klabsdev/images/RunProxmoxOnOCI/5.png) Then When it comes time to choose your Image make sure to choose “Custom Images” and pick the Debian one that we created. Next, choose your shape. You CAN run this on OCI’s “Always Free-eligible” Tier if you’d like. ![Choose image and shape](https://cdn.klabsdev.com/klabsdev/images/RunProxmoxOnOCI/6.png) (Important Note Here) If you would like to run this on Ampere, you can do this by using all the previous steps but using the Debian arm64 Image! Next, select all your networking settings. You can make a separate subnet for this Proxmox machine if you’d like but it’s not necessary. ![Choose image networking](https://cdn.klabsdev.com/klabsdev/images/RunProxmoxOnOCI/7.png) Finally, make sure to download your SSH Keys. This is what will allow you to SSH into your machine once it’s up and running! Go ahead and Choose “Create” to start up your new Debian image. Wait for OCI to finish provisioning your machine and move on to step 6. ### Step 6: Installing Proxmox Using your instance’s public IP address and the key that you downloaded, SSH into your instance. On Windows I use MobaXterm, regular SSH on macOS or Linux is perfectly fine. From here we will run the required commands in order to prep and install Proxmox. We Will start by making sure the OS is up-to-date `sudo apt update && sudo apt upgrade` Now we begin to install Proxmox manually. 💡 Most of this process can be found on Proxmox’s documentation site [here!](https://pve.proxmox.com/wiki/Install%5FProxmox%5FVE%5Fon%5FDebian%5F11%5FBullseye?ref=klabsdev.com) Make sure to visit that page if you have any issues. Because this image is set up for a cloud environment, we need to edit the cloud.cfg first. We **WILL NOT** be adjusting the hosts file directly. `sudo nano /etc/cloud/cloud.cfg` Make sure to set `preserve_hostname` to true. ```text preserve_hostname: true ``` Then below that line add: ```text hostname: proxmox ``` Now we need to edit the cloud master file found at `/etc/cloud/templates/hosts.debian.tmpl`. `sudo nano /etc/cloud/templates/hosts.debian.tmpl` By default, my hosts file looked like this: ```text 127.0.1.1 127.0.0.1 localhost ``` I changed it to look like this: ```text 129.xx.xxx.xxx proxmox.mydomainname.com proxmox ``` Then once that is finished you will need to reboot your instance from the OCI dashboard. ![Reboot instance](https://cdn.klabsdev.com/klabsdev/images/RunProxmoxOnOCI/8.png) Once the Reboot has finished, SSH back into your instance and verify the change has been made with this command: `hostname --ip-address` Your output should look like this: ```console 129.xx.xxx.xxx ``` Now we need to add the Proxmox VE repo: `sudo nano /etc/apt/sources.list.d/pve-install-repo.list` Then add this line: ```console deb [arch=amd64] http://download.proxmox.com/debian/pve bullseye pve-no-subscription ``` Add the Proxmox VE repository key as sudo: `sudo wget https://enterprise.proxmox.com/debian/proxmox-release-bullseye.gpg -O /etc/apt/trusted.gpg.d/proxmox-release-bullseye.gpg` Now update and upgrade your instance: `sudo apt update && sudo apt upgrade` Next we need to install the Proxmox VE kernel: `sudo apt install pve-kernel-5.15` > If apt asks if you would like to install the new version of grub, be sure to select “Keep the local version currently installed”. We will be manually updating grub later. > ![Keep local version](https://cdn.klabsdev.com/klabsdev/images/RunProxmoxOnOCI/9.png) Once the Kernel has finished installing make sure to reboot the system using OCI dashboard. ![Reboot instance](https://cdn.klabsdev.com/klabsdev/images/RunProxmoxOnOCI/10.png) Once the system has rebooted, SSH back into your instance and you can Install the Proxmox VE packages. `sudo apt install proxmox-ve postfix open-iscsi` > Choose “Local only” for postfix when prompted. > ![Choose Local only](https://cdn.klabsdev.com/klabsdev/images/RunProxmoxOnOCI/11.png) After all the packages have been installed, it is time to remove the previous Debian Kernel and update Grub: `apt remove linux-image-amd64 'linux-image-5.10*'` ❗ Apt will warn you that removing your kernel is bad. Normally this is true, but the Proxmox packages we installed ship with its own Kernel and we will update Grub to use that one in the next step. Update Grub manually to use the Kernal installed by Proxmox: `sudo update-grub` Verify that os-prober package is **NOT** installed: `sudo apt remove os-prober` ### Step 7: Configure Proxmox To enable us to log into the Proxmox Web UI, we will need to set the root user password. `sudo passwd root` With the root password set, you can now log into your Proxmox Web UI: `https://youriphere:8006` ⚠️ The next time that your Proxmox instance reboots, it will apply some network changes that will break your ability for the machine to connect to the internet. There is a chance that this can break any time there is a Kernel update but it is unlikely. Following are the steps to fix this. In the Proxmox Web UI, go to your machine’s network settings. You will notice it is asking you to create the VM Bridge network since it does not create that by default. We are going to create this network now! Fill in the sections below to match the Virtual Bridge to you OCI dashboard. Pictured below are my settings: ![Create Network bridge adapter](https://cdn.klabsdev.com/klabsdev/images/RunProxmoxOnOCI/12.png) Reboot the instance one more time using the OCI dashboard, **NOT THE PROXMOX WEB UI**, after these changes have been made. Once the reboot has finished, you will not be able to SSH to the instance OR access the WEB UI. In the OCI Dashboard, select your Instance and open **“Console connection”** **Compute → Instances → Instance details → Console connection** Then click on **“Launch Cloud Shell Connection”** ![Launch OCI Cloud Shell connection](https://cdn.klabsdev.com/klabsdev/images/RunProxmoxOnOCI/13.png) It will take a few mins for the console to open, but once it does log in using the “root” user and the password you had created in **Step 7**. Once logged in, get your interface names: `ip -br -c addr show` Make note of these. For me I had 3: `lo`, `ens3`, and `vmbr0`. You will notice that both `ens3` and `vmbr0` are reporting as down. ![Example of network interface list](https://cdn.klabsdev.com/klabsdev/images/RunProxmoxOnOCI/14.png) To fix this we will need to edit `/etc/network/interfaces`: `nano /etc/network/interfaces` And then adjust your file to match this using your network information: ```text auto lo iface lo inet loopback auto ens3 iface ens3 inet manual auto vmbr0 iface vmbr0 inet static address 10.0.0.143/24 gateway 10.0.0.1 bridge-ports ens3 bridge-stp off bridge-fd 0 # source-directory /etc/network/interfaces.d # source-directory /run/network/interfaces.d ``` Once you have saved your changes we can now up the interfaces. `ifup ens3` `ifup vmbr0` ### Conclusion After you have upped your interfaces, your Proxmox install is complete and can now be accessed from the Proxmox Web UI and SSH once again. From here you can make any adjustmets to Proxmox from the web UI. Thanks so much for reading! Thanks for reading! Written By: Max Kulik --- ### Sources: - Install Proxmox VE on Debian 11 Bullseye - [https://pve.proxmox.com/wiki/Install\_Proxmox\_VE\_on\_Debian\_11\_Bullseye](https://pve.proxmox.com/wiki/Install%5FProxmox%5FVE%5Fon%5FDebian%5F11%5FBullseye?ref=klabsdev.com) - Root Password Reset - [https://pve.proxmox.com/wiki/Root\_Password\_Reset](https://pve.proxmox.com/wiki/Root%5FPassword%5FReset?ref=klabsdev.com) - Debian Cloud images: [https://cloud.debian.org/images/cloud/bullseye/20221205-1220/](https://cloud.debian.org/images/cloud/bullseye/20221205-1220/?ref=klabsdev.com) - Web UI Unreachable After Adding NVME Drive - [https://forum.proxmox.com/threads/webui-unreachable-after-adding-nvme-drive.85500/](https://forum.proxmox.com/threads/webui-unreachable-after-adding-nvme-drive.85500/?ref=klabsdev.com) - Losing Network Connection after each Proxmox Reboot - [https://forum.proxmox.com/threads/losing-network-connection-after-each-proxmox-reboot.108528/](https://forum.proxmox.com/threads/losing-network-connection-after-each-proxmox-reboot.108528/?ref=klabsdev.com) ### Make Transmission WEB-UI Beautiful URL: https://klabsdev.com/make-transmission-web-ui-beautiful/ Last updated: 2026-05-20T06:24:48.000Z ### Introduction After years of building my collection of Linux ISOs I have used a solid collection of Torring software. Everything from uTorrent, Transmission, BitTorrent, qBittorrent, and more! Each software comes with its own suite of features - some better than others. After building out my home lab, I have been looking for the ultimate setup allowing me to quickly and conveniently use magnet links to add .torrents to my seed box. By far the best option that I found is Transmission’s Web Daemon. In my opinion the only downside is the dated and blinding web interface. I spend some time digging around in the server files and online to see if there are any 3rd party options for a better UI. Through trial and error, I feel I have found the best option for a Beautiful Transmission web interface! It’s called [Transmisionic](https://github.com/6c65726f79/Transmissionic?ref=klabsdev.com) by [Samuel Leroy](https://github.com/6c65726f79?ref=klabsdev.com)! ### Installation Getting this web overlay installed is very easy! So Let’s get started! **Step 1:** Start by downloading the latest release of Transmisionic from Github. The latest release can be found [here](https://github.com/6c65726f79/Transmissionic/releases/tag/v1.7.0?ref=klabsdev.com). **Step 2:** Unzip it and replace the `web` folder of Transmission. On Ubuntu server, you can find that folder in ```console /usr/share/transmission/web ``` ![Transmission UI Light Mode](https://cdn.klabsdev.com/klabsdev/images/trans-light.png) ![Transmission UI Dark Mode](https://cdn.klabsdev.com/klabsdev/images/trans-dark.png) ### Conclusion All that is left to do is refresh the page and enjoy your new Transmission User Interface! Thanks for reading! Written By: Max Kulik ### Allow Read/Write Permission to Wordpress URL: https://klabsdev.com/allow-read-write-permission-to-wordpress/ Last updated: 2026-05-20T06:24:22.000Z ### Introduction Apache 2 - when installed to a Ubuntu server using the apt repository reads and writes using the `www-data` user. When manually installing a Wordpress site, Apache will try to read and write files using that user and if the owner is not set properly you will not be able to make any meaningful changes to the Wordpress website. The following is how to set the proper folder permissions in Ubuntu for a manual Wordpress installation. ### Set Folder Owner First we are going to assume you have Apache 2 installed and have Virtual Hosts already pointing to the Wordpress folder. I have another article explaining this process from start to finish. For this example I will be using `/var/www/wordpress`. **Step 1:** We need to navigate to the www directory that Apache will be using. ```console cd /var/www/ ``` **Step 2:** Now we will recursively set the folder owner and group using chown. This command using the `-R` argument will make sure to make any file and folder inside of the wordpress folder owned by `www-data` as well. ```console sudo chown -R www-data:www-data wordpress ``` **Step 3:** The final step is checking to make sure the owner has been set properly. We can simply use the ls command with an argument to do this: ```console ls -l ``` ### Conclusion This process is not very hard nor time consuming but it’s a step I have to take every time I add a new Wordpress website to my web server. Thanks for reading! Written By: Max Kulik ### Proxmox Dark Mode URL: https://klabsdev.com/proxmox-dark-mode/ Last updated: 2026-05-20T06:24:10.000Z 💡 This article is now obsolete. First party dark mode has been included since [Proxmox 7.4](https://www.proxmox.com/en/about/press-releases/proxmox-virtual-environment-7-4?ref=klabsdev.com). ### Introduction Poxmox’s UI is informational, functional, and looks great! The only problem is that it’s also blinding. When I am up late working on a project for hours, the worst thing is going from my dark themed terminal, web browser, windows machine to a flashbang like Proxmox panel. Now with only a few lines in the terminal, we can solve that problem! ### Installation **Step 1:** Open your Proxmox web panel and connect to the node shell to start the Dark Mode install! **Step 2:** Start by heading over to [Weilbyte’s Github](https://github.com/Weilbyte/PVEDiscordDark?ref=klabsdev.com) and star the amazing project there! Then we need to download the CLI utility: ```console wget https://raw.githubusercontent.com/Weilbyte/PVEDiscordDark/master/PVEDiscordDark.sh ``` **Step 3:** Next we will need to mark the downloaded file as executable: ```console chmod u+x PVEDiscordDark.sh ``` **Step 4:** Now we run it! ```console bash PVEDiscordDark.sh install ``` ### Conclusion Welcome to the dark side! PVE Discord Dark is now installed and you can now enjoy working within your Proxmox panel without hurting your eyes! Thanks for reading! Written By: Max Kulik --- ### Sources: Welbyte Github - [https://github.com/Weilbyte/PVEDiscordDark](https://github.com/Weilbyte/PVEDiscordDark?ref=klabsdev.com) ### Install Dashy on Ubuntu LXC in Proxmox URL: https://klabsdev.com/install-dashy-on-ubuntu-lxc-in-proxmox/ Last updated: 2026-05-20T06:23:58.000Z Introduction I was doing some research on trying to find a good personal dashboard to use in a container on Proxmox. I ended up using Dashy over Heimdall. Dashy, however is mostly supported for running on Docker. So I set out to create a one-liner helper script that will install it start to finish. TLDR - This is a way standalone way to install Dashy on a Proxmox Ubuntu LXC container. Requirements: - Proxmox LXC Container (Script Does NOT support Proxmox VM yet) - 4096mb of memory allocated (deflate to 1024mb after script) - 2 virtual cores (deflate to 1 after script) Tested LXC Containers: | LXC Template | Support | | --------------------------------------------- | ------- | | ubuntu-18.04-standard\_18.04.1-1\_amd64 | Working | | ubuntu-22.04-standard\_22.04-1\_amd64 (Focal) | Working | | ubuntu-22.04-standard\_22.04-1\_amd64 (Jammy) | Working | | ubuntu-22.10-standard\_22.10-1\_amd64 | Broken | How to Use: **Step 1)** `nano install-dashy.sh` **Step 2)** ```bash #!/bin/bash #Let's stop the script if anything errors out. set -o errexit #~~~~~~~~~~~~~~~~~~~~~~~~~~~~ #READ ME FIRST: This script is intended to be directly run on a ubuntu 20.10 LXC privileged container. #I have only tested on that but I would imagine you could run this on any Ubuntu machine as long as you #edit the directories used to fit your needs. #~~~~~~~~~~~~~~~~~~~~~~~~~~~~ #Let's start by making sure we are up to date sudo apt update && sudo apt upgrade #Downloading and installing dependencies for getting packages dependent software - Git, Curl, and net-tools for printing local IP at the end. sudo apt-get install git curl net-tools #Now that we have Curl, lets add the corect version of NodeJS wget -qO- https://deb.nodesource.com/setup_16.x | bash - #We need to refresh the apt repositories now sudo apt-get update sudo apt-get install -y nodejs sudo apt-get update && sudo apt-get upgrade -y #This may look redundant but I promise it needs to be done this way! #"yarn" is used by a program called cmdtest. If this process is not done like this it will #always fail due to cmdtest being installed. If you know a better way please let me know! sudo apt-get remove cmdtest sudo apt-get autoremove curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add - echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list sudo apt-get update sudo apt-get install yarn echo echo #Print versions of Yarn and NodeJS echo Yarn Version: yarn --version echo Node Version: node -v echo echo If you did not get a version of both Yarn and NodeJS then something did not work. echo #Time to download Dashy git clone https://github.com/Lissy93/dashy.git cd /root/dashy/ yarn # Install dependencies #Yarn will run out of memory when trying to build. This next command will allow #NodeJS to build with a max size of 1000mb of memory. It will fail without it. export NODE_OPTIONS=--max-old-space-size=1000 #Build Yarn yarn build # Build the app #Let's make Dashy run on system startup #Create simple launch script for Dashy cat < /root/dashy/start.sh #!/bin/bash cd /root/dashy/ yarn start #start the app EOF #Allow the to run chmod +x /root/dashy/start.sh #Create the service ID file to launch dashy on container boot cat < /etc/systemd/system/dashy.service [Unit] Description=dashy Before=motd-news.service [Service] Type=oneshot ExecStart=/root/dashy/start.sh StandardOutput=journal+console [Install] WantedBy=multi-user.target EOF #Enabled the service for systemctl sudo systemctl enable dashy #Script is finished! Fingers crossed this works first try! echo If you see this message everything worked! echo Reboot container and launch ifconfig | grep -Eo 'inet (addr:)?([0-9]*\.){3}[0-9]*' | grep -Eo '([0-9]*\.){3}[0-9]*' | grep -v '127.0.0.1' echo on port 4000 ``` **Step 3)** Allow it to be executed `chmod +x install-dashy.sh` **Step 4)** Run the installer you just created! `sudo bash install-dashy.sh` **Step 5)** Now it's time to reboot your container `reboot` Conclustion You can now go to your container’s IP address in a browser and view your Dashy! xxx.xxx.xxx.xxx:4000 is default. The most up-to-date version of the script can be found over on my [GitHub](https://github.com/Glitch3dPenguin/DashyDashboardForLXC?ref=klabsdev.com). You can also join the conversation on [Reddit](https://www.reddit.com/r/selfhosted/comments/sz9nz9/run%5Fdashy%5Fon%5Fubuntu%5F2010%5Flxc%5Fin%5Fproxmox/?ref=klabsdev.com)! 💡 Post updated on 5/25/2023 Thanks for reading! Written By: Max Kulik ### My Home-Lab | Update 1 URL: https://klabsdev.com/my-home-lab-update-1/ Last updated: 2026-05-20T06:17:41.000Z ### Introduction I use my server to host some of my movies, game servers, and websites. I will be going over some of the current hardware that will be going into the machine and some of the future plans. I am looking for some feedback on my storage structure plans and the build overall. I have been using Proxmox for almost 10 years now and I started with used old hardware and I have finally retired all of my old nodes for this new server. The last 2 that I had built were based on bulldozer architecture. ### Specs **Mobo:** ASUS X99-A II **CPU:** XEON E5-2697AV4 16 cores/3.6GHz Boost **RAM:** 4x Kingston KVR24E17D8 16GB/ECC **GPU:** GTX 1060 (maybe video encode for plex?) **Boot Drive:** 1TB SK Hynix NVME drive (No RAID) **VM Storage:** 3x 1TB SK Hynix SSD (RAIDZ on Proxmox) **NIC:** TRENDnet 2.5 gigabit (Will be used by VM’s) **NIC:** Chelsio T420-BT Dural 10 Gigabit (Passthorugh for pfSence) **HBA:** Dell H200 SAS **NAS Storage:** HBA w/4x 4TB HDDs on a RAIDZ vdev - I plan on using this for NAS storage. The HBA will be forwarded to a TrueNAS VM. ![HomeLab Image 2](https://cdn.klabsdev.com/klabsdev/images/HomeLab2.png) ![HomeLab Image 3](https://cdn.klabsdev.com/klabsdev/images/HomeLab3.png) I will be looking into finding a new case soon. This case was used from one of my old servers and I need to find something that has more HDD bays. If I can’t find a decent tower case I may end up rack mounting my system. Join the conversation over on [Reddit](https://www.reddit.com/r/homelab/comments/sqa6fw/my%5Fnewest%5Fhome%5Flab%5Fwent%5Flive%5Ftoday/?ref=klabsdev.com)! Thanks for reading! Written By: Max Kulik ### Caffeine.tv VOD Downloader URL: https://klabsdev.com/caffeine-tv-vod-downloader/ Last updated: 2026-05-20T06:17:30.000Z ### Introduction I am a full-time streamer and partner with Caffeine TV. I spend a lot of time live and recording every broadcast to make clips or YouTube videos would consume loads of space on my NAS. Since Caffeine.tv records all broadcasts and saves them for viewing later, why not just download and save the VODs when needed. For the time being Caffeine does not have any features allowing any easy VOD downloading for their broadcasters. So I set out to build an easy, small script that will do this for me. ### How it Works - A very short script directly in batch that allows Caffeine.TV streamers to download their VODs to save and edit. - Uses ffmpeg to read HLS stream data from Caffeine.TV. - Coverts stream data and saves VOD file as .mp4 for easy editing and compatibility with most editors/devices. ### Where To Download The latest version can be downloaded from my GitHub page [here](https://github.com/Glitch3dPenguin/CaffVodDownloader?ref=klabsdev.com). ### How to Use - **Step 1)** On desktop, open your Caffeine profile. You want to be able to see all your VODs. The page should look like this: ![Screen shot of a list of Caffeine VODS](https://cdn.klabsdev.com/klabsdev/images/CaffeineVodDownloader01.png) - **Step 2)** Press F12 to open the browser console. ![Screen recording opening the console](https://cdn.klabsdev.com/klabsdev/images/CaffeineVodDownloader02.gif) - **Step 3)** Open the network tab ![Open the network tab](https://cdn.klabsdev.com/klabsdev/images/CaffeineVodDownloader03.gif) - **Step 4)** Now it's time to pick the VOD that you want to download. With the Network tab still open, scroll through your VODs and click on the video you want to download. Then look on the network tab and find the new row that appeared called main.m3u8. ![Ntworks tab](https://cdn.klabsdev.com/klabsdev/images/CaffeineVodDownloader04.gif) - **Step 5)** Right-click on main.m3u8\. Then hover over Copy. You will want to choose Copy link address. ![Right-clicking on the correct vod link](https://cdn.klabsdev.com/klabsdev/images/CaffeineVodDownloader05.gif) - **Step 6)** Paste the URL into the script once you run it and press ENTER. ![Adding the VOD link to the program](https://cdn.klabsdev.com/klabsdev/images/CaffeineVodDownloader06.png) - **Step 7)** Now choose a name for your VOD to be saved and press ENTER. ![Naming the vod in the program](https://cdn.klabsdev.com/klabsdev/images/CaffeineVodDownloader07.png) - **Step 8)** Now choose what format to save the VOD as and press ENTER. ![Choose file type in program](https://cdn.klabsdev.com/klabsdev/images/CaffeineVodDownloader08.png) DONE! Your VOD will now be downloaded and saved in the new "CaffeineVODs" folder located in Downloads. ### Conclusion This was a fun utility project that I worked on to help me save some space. The code for this project is posted on Github and free for anyone to use or make changes to. If this program helped you download any of your VODs please leave a star on my GitHub page! Thanks for reading! Written By: Max Kulik ❗ Caffene.tv has changed a lot over the years. They have closed their Discord community - but if you are looking for answers about Caffeine.tv or would like to know the history, the entire discord server has been archived [here](https://caffeine.klabsdev.com/?ref=klabsdev.com). ### Enable Remote SSH on Proxmox LXC URL: https://klabsdev.com/enable-remote-ssh-on-proxmox-lxc/ Last updated: 2026-05-20T06:17:19.000Z ### Introduction By default, Debian-based LXC containers on Proxmox do not have Remote Password Authentication enabled. They use Public Key-based Authentication. The best way to access the container is to load up the web interface and simply open the shell for the container you would like to make changes to. However, if you're like me, you'd rather just have that server added to your favorite SSH client and be able to access the shell from any computer on the same network that way. Here is a step by step walkthrough to enable Remote SSH on any LXC container: ⚠️ Enabling Password Authentication on your LXC container has the potential to open security vulnerabilities. Proceed at your own risk. Allow Remote SSH Login 1. First, log into your Promox web panel and select the Container that you would like to enable Remote SSH on. 2. Next you will need to edit the sshd config file. `nano /etc/ssh/sshd_config` 3. use `CTRL` \+ `W` to open the "Where Is" prompt and type `PermitRootLogin`. Once you have found that line you'll want to change it to the following: Before: `PermitRootLogin without-password` After: `PermitRootLogin yes` 4. Now that the change has been made use `CTRL` \+ `X` to close Nano. You will be prompted to save your changes with `Y` and `ENTER`. 5. Restart the sshd service for the changes to take effect. `service ssh restart` You now have the ability to Remote SSH into the LXC container directly within the same network using the container's IP address. 💡 If you do not know the IP address of the LXC container, you can run `ifconfig`. Conclusion As mentioned before adjusting the LXC container does hold the potential to open some security vulnerabilities within your home lab. As long as you are not exposing port 22 to WAN you should be fine. If you need to gain SSH access to an LXC container for the greater internet, I would suggest using a self-hosted OpenVPN server or Apache Guacamole. Thanks for reading! Written By: Max Kulik ### Build Your Own CDN with Backblaze and Cloudflare URL: https://klabsdev.com/build-your-own-cdn-with-backblaze-and-cloudflare/ Last updated: 2026-05-20T06:16:10.000Z ### Introduction When building this site and moving away from my old static HTML portfolio, I wanted to have a way to manage all of my content and allow for any of my websites or services to pull from the same location. I also wanted a way to pull it from an external location to allow my content to be served faster to more clients. I also needed this option to be affordable since this is a home lab. ### Backblase for Storage After doing my research and weighing my options I made my choice. Backblaze offers dirt cheap bucket storage and allows for 10GB up upload a day before they charge. If you need to download directly from the bucket you get 1GB before you are charged. Class B Transactions are free for the first 2,500\. And finally, Class C Transactions are free for the first 2,500\. The best part is all those limits are daily. This is what Backblaze’s caps look like on the date of writing: ![](https://klabsdev.com/content/images/2023/12/BackblazeBucketCaps-1-.png) ### Cloudflare to Proxy Next, I decided to use Cloudflare to proxy my traffic. Since Cloudflare will cache some of the content it will reduce some of the transactions used on Backblaze and serve pages and content even faster! It was also a convenient option for me to use since I have already been using their domain and proxy services for most of my public endpoints and websites. ### Setting up Backblaze 1. The first step in setting up Backblaze to use bucket storage is to create an account. 2. Navigate to [Backblaze](https://backblaze.com/?ref=klabsdev.com) and choose the *“B2 Cloud Storage”* option at the top of the page. Then at the top right, click *“Sign Up”*. ![](https://klabsdev.com/content/images/2023/12/BackblazeSignup-1-.gif) 1. Once you have a verified account you can now create your first bucket. 2. Once the Bucket has been created you’ll need to adjust some more settings. First choose *“Lifecycle Settings”* and chooose *“Keep only the last version of the file”*. ## Setting up Backblaze **1)** The first step in setting up Backblaze to use bucket storage is to create an account. **2)** Navigate to [Backblaze](https://backblaze.com/?ref=klabsdev.com) and choose the *"B2 Cloud Storage"* option at the top of the page. Then at the top right, click *"Sign Up"*. ![Account Signup](https://cdn.klabsdev.com/klabsdev/images/BackblazeSignup.gif) **3)** Once you have a verified account you can now create your first bucket. ![Create First Bucket](https://cdn.klabsdev.com/klabsdev/images/BackblazeCreateBucket.gif) Make sure you choose "Public", "Disbale", "Disable" respectively. **4)** Once the Bucket has been created you'll need to adjust some more settings. First choose *"Lifecycle Settings"* and chooose *"Keep only the last version of the file"*. ![Change Lifecycle Settings](https://cdn.klabsdev.com/klabsdev/images/BackblazeLifecycleSettings.gif) Now click the big "Update Bucket" button. Now, for the Last setting. **5)** In the same area you will need to click on the *"CORS Rules"* option and set it to *"Share everything in this bucket with every origin"*. ![Change CORS Rules](https://cdn.klabsdev.com/klabsdev/images/backblazeCORS.gif) **6)** Now that your bucket is setup you could start creating directories or uploading files. For the purpose of this walkthough I will be uploading a single file called *"test.jpg"*. **7)** Once you have a test file uploaded, you need to browse to it's location and view it's information so we can get the public *"Friendly URL"* your bucket is using. This will be used to configure Cloudflare later. Save the domain name. ![Get your public link](https://cdn.klabsdev.com/klabsdev/images/backblazePublicLink.gif) ## Setting up Cloudflare **1)** Now to configure Cloudflare to use a CNAME record to point to your public bucket. You'll need to already have your domain added to Cloudflare. That is out of the scope of this walkthrough so I will not be covering it here. **2)** You'll want to choose the domain name that you want to have your cnd subdomain added to. Once there choose *"DNS"* from the left menu. **3)** You will click *"Add Record"*. Choose *"CNAME*" for the type. Type "cdn" for the Name. The target needs to be to the link that we saved earlier. ![Make CNAME Record](https://cdn.klabsdev.com/klabsdev/images/CloudflareCNAME.gif) **4)** The last step is to create a Cloudflare Page Rule to force full SSL. Without this page rule your CDN will not work. Navigate to the *"Rule"* tab on the left menu and then nacigate to *"Page Rules"*. You'll need to mimic the screenshot below with your own domain name exacly as shown. ![Create Page Rule](https://cdn.klabsdev.com/klabsdev/images/CloudflarePageRule.gif) **4)** You should now be able to see your test image you uploaded by visiting [https://cdn.yourdomain.com/file/yourbucketname/test.jpg](https://cdn.yourdomain.com/file/yourbucketname/test.jpg?ref=klabsdev.com) ## Conclusion There are many ways to go about building out your CDN. Different options all have their advantages and disadvantages. The goal of this project was to create the cheapest personal CDN possible. If anything is not working or you need help feel free to hit me up on Discord Glitch3dPenguin#8857 or Twitter @Glitch3dPenguin. Thanks for reading! Written By: Max Kulik