[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"technology-en-terraform":3,"technology-projects-en-terraform":28,"mdc-cm1tlk-key":75},{"id":4,"title":5,"category":6,"content":7,"description":8,"extension":9,"faq":10,"icon":11,"links":12,"meta":21,"projects":22,"since":24,"stem":25,"updated":26,"__hash__":27},"technologies_en\u002Fen\u002Ftechnologies\u002Fterraform.yml","Terraform","infrastructure","Terraform describes infrastructure resources in configuration files and uses providers to manage them. I use it in the DigiPulse infrastructure to make service configuration easier to review and reproduce.\n\n## Configuration and plans\n\nThe Docker provider connects Terraform to Docker resources. Shared configuration can describe similar environments with different input variables. Each environment needs its own plan based on its current state; a saved plan is not a reusable template for another environment.\n\n## Workspaces and sensitive data\n\nCLI workspaces separate state, but are not an access-control boundary. State and plan files can contain secrets even when values are marked sensitive. Separate credentials, protected state storage and appropriate access controls are needed where environments require stronger isolation.\n\n## Infrastructure and application releases\n\nI use infrastructure configuration to document resources and their relationships. Application releases can then follow their own CI\u002FCD process. Terraform helps detect differences between declared and actual resources when a plan runs; it does not continuously prevent manual changes. Reviewing the plan is essential before applying changes that may replace or remove a resource.\n","Terraform infrastructure as code: Docker resources, environment configuration and reviewed provisioning changes for my SaaS infrastructure.","yml",null,"i-simple-icons-terraform",[13,18],{"label":14,"to":15,"color":16,"icon":17},"terraform.io","https:\u002F\u002Fdeveloper.hashicorp.com\u002Fterraform","neutral","i-heroicons-arrow-top-right-on-square",{"label":19,"to":20,"color":16,"icon":17},"Technical reference","https:\u002F\u002Fdeveloper.hashicorp.com\u002Fterraform\u002Flanguage\u002Fstate\u002Fworkspaces",{},[23],"digipulse","2024","en\u002Ftechnologies\u002Fterraform","2026-09-20","YfeVeQyfeV2b3xWLlWRqQd0j-vEWz4a9t5rnM_SUfyM",[29],{"id":30,"title":31,"content":32,"date":33,"description":34,"extension":9,"featured":35,"image":36,"links":37,"meta":46,"stack":47,"stem":69,"tags":70,"url":40,"__hash__":74},"projects_en\u002Fen\u002Fprojects\u002Fdigipulse.yml","DigiPulse","Uptime monitoring SaaS — 60-second checks, SSL expiry tracking, Telegram and email notifications. The admin panel and core backend are built with Laravel (Octane, Reverb websockets) and Filament, while the monitoring engine is a separate Go service. Includes Google OAuth sign-in and Cloudflare Turnstile integration, plus an MCP server that exposes monitoring data directly to AI assistants. Self-hosted on Proxmox.\n\n## Key Features\n\n- **Dedicated Go engine** - availability checks run in a separate Go service, so constant 60-second polling never slows down the Laravel app\n- **Real-time dashboard** - Reverb websockets push status changes to the UI live, no manual refresh\n- **Octane + Filament** - resident-memory Laravel with a full admin panel for monitors, contacts and alert rules\n- **MCP server** - monitors and incidents are queryable from AI assistants (Claude, Cursor) via the Model Context Protocol\n- **Google OAuth + Turnstile** - passwordless sign-in and bot protection on public forms\n- **Self-hosted** - deployed on a Proxmox homelab I manage end-to-end\n\n## Tech Stack\n\n- **Backend**: Laravel (Octane, Reverb websockets)\n- **Admin Panel**: Filament\n- **Monitoring Engine**: Go (separate service)\n- **Database**: PostgreSQL\n- **AI Integration**: MCP server\n- **Infrastructure**: Self-hosted on Proxmox\n","2026-04-17","Uptime monitoring SaaS: event-driven architecture — Laravel (Octane, Reverb) + Filament dispatch checks through Redis to a lightweight Go worker; an MCP server exposes monitoring data to AI assistants; Telegram\u002Femail alerts",true,"\u002Fhero\u002Fdigipulse.avif",[38,42],{"label":39,"to":40,"color":41,"icon":17},"Live Demo","https:\u002F\u002Fdigipulse.cloud","primary",{"label":43,"to":44,"color":16,"icon":45},"GitHub","https:\u002F\u002Fgithub.com\u002FYurij2015\u002Fdigipulse-backend","i-simple-icons-github",{},[48,51,54,57,60,63,66],{"name":49,"icon":50},"Laravel","i-simple-icons-laravel",{"name":52,"icon":53},"Filament","i-simple-icons-filament",{"name":55,"icon":56},"Go","i-simple-icons-go",{"name":58,"icon":59},"PostgreSQL","i-simple-icons-postgresql",{"name":61,"icon":62},"Redis","i-simple-icons-redis",{"name":64,"icon":65},"Vue","i-simple-icons-vuedotjs",{"name":67,"icon":68},"MCP","i-heroicons-cpu-chip","en\u002Fprojects\u002Fdigipulse",[71,49,55,72,67,61,73],"SaaS","Monitoring","Event-driven","b7hu-_otqukg-JY_hPBvmlUYk5jVOx42XpCotH6Cvqo",{"data":76,"body":77},{},{"type":78,"children":79},"root",[80,88,95,100,106,111,117],{"type":81,"tag":82,"props":83,"children":84},"element","p",{},[85],{"type":86,"value":87},"text","Terraform describes infrastructure resources in configuration files and uses providers to manage them. I use it in the DigiPulse infrastructure to make service configuration easier to review and reproduce.",{"type":81,"tag":89,"props":90,"children":92},"h2",{"id":91},"configuration-and-plans",[93],{"type":86,"value":94},"Configuration and plans",{"type":81,"tag":82,"props":96,"children":97},{},[98],{"type":86,"value":99},"The Docker provider connects Terraform to Docker resources. Shared configuration can describe similar environments with different input variables. Each environment needs its own plan based on its current state; a saved plan is not a reusable template for another environment.",{"type":81,"tag":89,"props":101,"children":103},{"id":102},"workspaces-and-sensitive-data",[104],{"type":86,"value":105},"Workspaces and sensitive data",{"type":81,"tag":82,"props":107,"children":108},{},[109],{"type":86,"value":110},"CLI workspaces separate state, but are not an access-control boundary. State and plan files can contain secrets even when values are marked sensitive. Separate credentials, protected state storage and appropriate access controls are needed where environments require stronger isolation.",{"type":81,"tag":89,"props":112,"children":114},{"id":113},"infrastructure-and-application-releases",[115],{"type":86,"value":116},"Infrastructure and application releases",{"type":81,"tag":82,"props":118,"children":119},{},[120],{"type":86,"value":121},"I use infrastructure configuration to document resources and their relationships. Application releases can then follow their own CI\u002FCD process. Terraform helps detect differences between declared and actual resources when a plan runs; it does not continuously prevent manual changes. Reviewing the plan is essential before applying changes that may replace or remove a resource."]