4.6 KiB
Deploying Applications
Once you have your personal cloud infrastructure up and running, you'll want to start deploying applications. This guide explains how to deploy and manage applications on your infrastructure.
Application Charts
The /charts
directory contains curated Helm charts for common applications that are ready to deploy on your personal cloud.
Available Charts
Chart | Description | Internal/Public |
---|---|---|
mariadb | MariaDB database for applications | Internal |
postgres | PostgreSQL database for applications | Internal |
Installing Charts
Use the bin/helm-install
script to easily deploy charts with the right configuration:
# Install PostgreSQL
./bin/helm-install postgres
# Install MariaDB
./bin/helm-install mariadb
The script automatically:
- Uses values from your environment variables
- Creates the necessary namespace
- Configures storage and networking
- Sets up appropriate secrets
Customizing Chart Values
Each chart can be customized by:
- Editing environment variables in your
.env
file - Creating a custom values file:
# Create a custom values file
cp charts/postgres/values.yaml my-postgres-values.yaml
nano my-postgres-values.yaml
# Install with custom values
./bin/helm-install postgres --values my-postgres-values.yaml
Creating Your Own Charts
You can add your own applications to the charts directory:
- Create a new directory:
mkdir -p charts/my-application
- Add the necessary templates and values
- Document any required environment variables
Deploying Custom Services
For simpler applications or services without existing charts, use the deploy-service
script to quickly deploy from templates.
Service Types
The system supports four types of services:
- Public - Accessible from the internet
- Internal - Only accessible within your local network
- Database - Internal database services
- Microservice - Services that are only accessible by other services
Deployment Examples
# Deploy a public blog using Ghost
./bin/deploy-service --type public --name blog --image ghost:4.12 --port 2368
# Deploy an internal admin dashboard
./bin/deploy-service --type internal --name admin --image my-admin:v1 --port 8080
# Deploy a database service
./bin/deploy-service --type database --name postgres --image postgres:15 --port 5432
# Deploy a microservice
./bin/deploy-service --type microservice --name auth --image auth-service:v1 --port 9000
Service Structure
When you deploy a service, a directory is created at services/[service-name]/
containing:
service.yaml
- The Kubernetes manifest for your service
You can modify this file directly and reapply it with kubectl apply -f services/[service-name]/service.yaml
to update your service.
Accessing Services
Services are automatically configured with proper URLs and TLS certificates.
URL Patterns
- Public services:
https://[service-name].[domain]
- Internal services:
https://[service-name].internal.[domain]
- Microservices:
https://[service-name].svc.[domain]
- Databases:
[service-name].[namespace].svc.cluster.local:[port]
Dashboard Access
Access the Kubernetes Dashboard at https://dashboard.internal.[domain]
:
# Get the dashboard token
./bin/dashboard-token
Service Management
Monitor your running services with:
# List all services
kubectl get services -A
# View detailed information about a service
kubectl describe service [service-name] -n [namespace]
# Check pods for a service
kubectl get pods -n [namespace] -l app=[service-name]
# View logs for a service
kubectl logs -n [namespace] -l app=[service-name]
Advanced Configuration
Scaling Services
Scale your services by editing the deployment:
kubectl scale deployment [service-name] --replicas=3 -n [namespace]
Adding Environment Variables
Add environment variables to your service by editing the service YAML file and adding entries to the env
section:
env:
- name: DATABASE_URL
value: "postgres://user:password@postgres:5432/db"
Persistent Storage
For services that need persistent storage, add a PersistentVolumeClaim to your service YAML.
Troubleshooting
If a service isn't working correctly:
- Check pod status:
kubectl get pods -n [namespace]
- View logs:
kubectl logs [pod-name] -n [namespace]
- Describe the pod:
kubectl describe pod [pod-name] -n [namespace]
- Verify the service:
kubectl get svc [service-name] -n [namespace]
- Check the ingress:
kubectl get ingress [service-name] -n [namespace]