{"id":1729,"date":"2026-08-07T19:19:24","date_gmt":"2026-08-07T19:19:24","guid":{"rendered":"https:\/\/vykhodtsev.dev\/?p=1729"},"modified":"2026-08-07T19:19:24","modified_gmt":"2026-08-07T19:19:24","slug":"%f0%9f%9a%80-migrating-ai-data-lab-from-my-laptop-to-microsoft-azure","status":"publish","type":"post","link":"https:\/\/vykhodtsev.dev\/?p=1729","title":{"rendered":"\ud83d\ude80 Migrating AI Data Lab from My Laptop to Microsoft Azure"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\"><em>August 2 2026 \u2022 Infrastructure Update<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">When I started <strong>AI Data Lab<\/strong>, everything ran directly on my laptop. It was the fastest way to prototype ideas, experiment with AI, and iterate quickly. As the project evolved into a real platform with multiple services, web interfaces, and cloud AI integration, it became clear that the next step was moving to Microsoft Azure.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This migration was not only about hosting the application online\u2014it was about building a scalable foundation for future AI agents and enterprise-grade features.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Why move to Azure?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Running everything on a local machine worked well during early development, but it also introduced several limitations:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>The application was only available while my laptop was powered on.<\/li>\n\n\n\n<li>Local networking complicated remote access and testing.<\/li>\n\n\n\n<li>Database backups depended on manual processes.<\/li>\n\n\n\n<li>Scaling the application for multiple users wasn&#8217;t practical.<\/li>\n\n\n\n<li>Integrating additional cloud services required extra infrastructure.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Moving to Azure solved these problems while preparing the project for future growth.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">New Cloud Architecture<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The current platform is built around Azure services that separate application logic, storage, databases, and AI capabilities.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Core components<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Azure App Service<\/strong>\n<ul class=\"wp-block-list\">\n<li>Hosts the FastAPI backend<\/li>\n\n\n\n<li>Automatically manages the web server<\/li>\n\n\n\n<li>Supports continuous deployment from GitHub<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Azure Database for MySQL<\/strong>\n<ul class=\"wp-block-list\">\n<li>Replaces the local MySQL instance<\/li>\n\n\n\n<li>Automatic backups<\/li>\n\n\n\n<li>Built-in high availability<\/li>\n\n\n\n<li>Managed updates and maintenance<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Azure OpenAI<\/strong>\n<ul class=\"wp-block-list\">\n<li>Natural language processing<\/li>\n\n\n\n<li>SQL generation<\/li>\n\n\n\n<li>AI reasoning<\/li>\n\n\n\n<li>Future AI agents<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Azure Blob Storage<\/strong>\n<ul class=\"wp-block-list\">\n<li>File uploads<\/li>\n\n\n\n<li>Generated reports<\/li>\n\n\n\n<li>Future document processing<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>GitHub Actions<\/strong>\n<ul class=\"wp-block-list\">\n<li>Automatic deployment<\/li>\n\n\n\n<li>CI\/CD pipeline<\/li>\n\n\n\n<li>Version-controlled releases<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Custom Domain &amp; HTTPS<\/strong>\n<ul class=\"wp-block-list\">\n<li>Secure access through <strong>vykhodtsev.dev<\/strong><\/li>\n\n\n\n<li>SSL certificate managed by Azure<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>August 2 2026 \u2022 Infrastructure Update When I started AI Data Lab, everything ran directly on my laptop. It was the fastest way to prototype ideas, experiment with AI, and iterate quickly. As the project evolved into a real platform with multiple services, web interfaces, and cloud AI integration, it became clear that the next [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":1730,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"set","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[1],"tags":[],"class_list":["post-1729","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-uncategorized"],"spectra_blocks_featured_image_url":{"thumbnail":{"url":"https:\/\/vykhodtsev.dev\/wp-content\/uploads\/2026\/08\/migration-1-150x150.png","width":150,"height":150},"medium":{"url":"https:\/\/vykhodtsev.dev\/wp-content\/uploads\/2026\/08\/migration-1-300x173.png","width":300,"height":173},"medium_large":{"url":"https:\/\/vykhodtsev.dev\/wp-content\/uploads\/2026\/08\/migration-1-768x443.png","width":768,"height":443},"large":{"url":"https:\/\/vykhodtsev.dev\/wp-content\/uploads\/2026\/08\/migration-1-1024x590.png","width":1024,"height":590},"full":{"url":"https:\/\/vykhodtsev.dev\/wp-content\/uploads\/2026\/08\/migration-1.png","width":1249,"height":720}},"spectra_blocks_author_info":{"display_name":"Aleksei","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/198b25ea575ebb3cbd0934cb05fd942d0f256a65d3ff388a161c857e00b092bf?s=96&d=mm&r=g","author_link":"https:\/\/vykhodtsev.dev\/?author=1","description":""},"_links":{"self":[{"href":"https:\/\/vykhodtsev.dev\/index.php?rest_route=\/wp\/v2\/posts\/1729","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/vykhodtsev.dev\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/vykhodtsev.dev\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/vykhodtsev.dev\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/vykhodtsev.dev\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1729"}],"version-history":[{"count":1,"href":"https:\/\/vykhodtsev.dev\/index.php?rest_route=\/wp\/v2\/posts\/1729\/revisions"}],"predecessor-version":[{"id":1731,"href":"https:\/\/vykhodtsev.dev\/index.php?rest_route=\/wp\/v2\/posts\/1729\/revisions\/1731"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/vykhodtsev.dev\/index.php?rest_route=\/wp\/v2\/media\/1730"}],"wp:attachment":[{"href":"https:\/\/vykhodtsev.dev\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1729"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vykhodtsev.dev\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1729"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vykhodtsev.dev\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1729"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}