# Simple Deployment On VM

## Introduction

This rulebook defines a simple but secure methodology for deploying applications on virtual machines, ensuring reliable, production-ready environments through:

* Following clear core principles to minimize risk and avoid disruptions
* Using CLI tools and environment variables for consistent automation
* Securing access with SSH keys and safe credential handling
* Ensuring proper infrastructure, networking, and database configurations
* Verifying deployments with thorough quality assurance checks

## Goal

### Why did we make this rule book?

* To avoid insecure, inconsistent, or incomplete VM-based deployments.
* To prevent operational disruptions by protecting existing cloud resources.
* To create a clear, CLI-driven deployment process for repeatable results.

### What will you achieve?

* Secure, production-ready VM deployments.
* Consistent infrastructure, networking, and database configurations.
* Documented access credentials and verified application functionality.

### Who is this for?

Anyone responsible for deploying applications on virtual machines who needs a simple, secure, and repeatable process that works across environments.

## Workflow

This process ensures applications are deployed on virtual machines securely and efficiently without disrupting existing resources.

1. Follow core principles: Avoid assumptions, use only CLI tools, and never delete existing resources.
2. Provision virtual machines: Prefer VMs over PaaS, place them in public subnets with public IPs, enable SSH access, and size them with the required CPU/memory.
3. Configure networking: Set up domains and DNS records, configure TLS/HTTPS (Let’s Encrypt by default), ensure required ports are open, and apply provider-specific networking settings (e.g., AWS VPC DNS, Cloudflare proxy mode).
4. Set up database (if needed): Choose the correct type/version, prefer managed services, configure environment variables, generate secure passwords, and store them safely.
5. Perform quality assurance: Wait for resources to be ready, check application logs, perform HTTP 200 health checks, and confirm production readiness.
6. Get user confirmation: Confirm domain, TLS, and database preferences before executing the deployment.
7. Finalize & document: Verify all success criteria are met and document credentials, endpoints, and configuration details.

## Use Cases

### Deploying a New Application

Launch a secure, production-ready application on virtual machines.

### **Migrating Applications**&#x20;

Move an application to new virtual machines with minimal downtime.

### **Setting Up a Staging Environment**

Create a secure staging VM environment for pre-production testing.

### **Redeploying After Updates**

Deploy the updated version of an application while preserving access and configurations.

## References

* [Let’s Encrypt Documentation](https://letsencrypt.org/docs/)
* [AWS VPC DNS Documentation](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-dns.html)
* [Cloudflare Proxy Mode Guide](https://developers.cloudflare.com/dns/proxy-status/)
* [OpenSSL Command Reference](https://docs.openssl.org/master/)


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://stakpak.gitbook.io/docs/how-it-works/rulebooks/simple-deployment-on-vm.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
