soleprint init commit
This commit is contained in:
4
station/tools/infra/shared/__init__.py
Normal file
4
station/tools/infra/shared/__init__.py
Normal file
@@ -0,0 +1,4 @@
|
||||
# Shared configuration module
|
||||
from .config import get_config, AppConfig, APP_SERVER_INIT_SCRIPT
|
||||
|
||||
__all__ = ["get_config", "AppConfig", "APP_SERVER_INIT_SCRIPT"]
|
||||
99
station/tools/infra/shared/config.py
Normal file
99
station/tools/infra/shared/config.py
Normal file
@@ -0,0 +1,99 @@
|
||||
"""
|
||||
Shared configuration for all cloud deployments.
|
||||
Centralizes app-specific settings that are cloud-agnostic.
|
||||
"""
|
||||
|
||||
from dataclasses import dataclass
|
||||
from typing import Optional
|
||||
import pulumi
|
||||
|
||||
|
||||
@dataclass
|
||||
class AppConfig:
|
||||
"""Application configuration shared across all cloud providers."""
|
||||
|
||||
# Naming
|
||||
project_name: str = "amar"
|
||||
environment: str = "production" # production, staging, dev
|
||||
|
||||
# Compute sizing
|
||||
app_cpu: int = 2 # vCPUs
|
||||
app_memory_gb: int = 4 # GB RAM
|
||||
|
||||
# Database
|
||||
db_name: str = "amarback"
|
||||
db_user: str = "amaruser"
|
||||
db_version: str = "15" # PostgreSQL version
|
||||
db_size_gb: int = 10 # Storage
|
||||
|
||||
# Redis
|
||||
redis_version: str = "7"
|
||||
redis_memory_mb: int = 1024
|
||||
|
||||
# Networking
|
||||
allowed_ssh_ips: list = None # IPs allowed to SSH (None = your IP only)
|
||||
domain: Optional[str] = "amarmascotas.ar"
|
||||
|
||||
def __post_init__(self):
|
||||
if self.allowed_ssh_ips is None:
|
||||
self.allowed_ssh_ips = []
|
||||
|
||||
@property
|
||||
def resource_prefix(self) -> str:
|
||||
"""Prefix for all resource names."""
|
||||
return f"{self.project_name}-{self.environment}"
|
||||
|
||||
@property
|
||||
def tags(self) -> dict:
|
||||
"""Common tags for all resources."""
|
||||
return {
|
||||
"Project": self.project_name,
|
||||
"Environment": self.environment,
|
||||
"ManagedBy": "Pulumi",
|
||||
}
|
||||
|
||||
|
||||
def get_config() -> AppConfig:
|
||||
"""Load configuration from Pulumi config or use defaults."""
|
||||
config = pulumi.Config()
|
||||
|
||||
return AppConfig(
|
||||
project_name=config.get("project_name") or "amar",
|
||||
environment=config.get("environment") or "production",
|
||||
app_memory_gb=config.get_int("app_memory_gb") or 4,
|
||||
db_name=config.get("db_name") or "amarback",
|
||||
db_user=config.get("db_user") or "amaruser",
|
||||
domain=config.get("domain") or "amarmascotas.ar",
|
||||
)
|
||||
|
||||
|
||||
# Cloud-init script for app server setup
|
||||
APP_SERVER_INIT_SCRIPT = """#!/bin/bash
|
||||
set -e
|
||||
|
||||
# Update system
|
||||
apt-get update
|
||||
apt-get upgrade -y
|
||||
|
||||
# Install dependencies
|
||||
apt-get install -y \\
|
||||
python3-pip python3-venv \\
|
||||
postgresql-client \\
|
||||
gdal-bin libgdal-dev libgeos-dev libproj-dev \\
|
||||
nginx certbot python3-certbot-nginx \\
|
||||
supervisor \\
|
||||
git
|
||||
|
||||
# Create app user
|
||||
useradd -m -s /bin/bash amarapp || true
|
||||
|
||||
# Create directories
|
||||
mkdir -p /var/www/amarmascotas/media
|
||||
mkdir -p /var/etc/static
|
||||
mkdir -p /home/amarapp/app
|
||||
chown -R amarapp:amarapp /var/www/amarmascotas
|
||||
chown -R amarapp:amarapp /var/etc/static
|
||||
chown -R amarapp:amarapp /home/amarapp
|
||||
|
||||
echo "Base setup complete. Deploy application code separately."
|
||||
"""
|
||||
Reference in New Issue
Block a user