FTL is a lightweight deployment tool designed to simplify cloud deployments without the complexity of traditional CI/CD pipelines or container orchestration platforms. It provides automated, zero-downtime deployments to various cloud providers through a single YAML configuration file.
For comprehensive documentation, visit https://ftl-deploy.org
- Zero-downtime deployments with automated health checks
- Single YAML configuration with environment variable support
- Built-in Nginx reverse proxy with automatic SSL/TLS certificate management
- Docker-based deployment with layer-optimized transfers
- Real-time log streaming and monitoring
- Secure SSH tunneling for remote dependencies
- Docker installed locally for building images
- SSH access to target deployment servers
- Git for version control
- Go 1.16+ (only if building from source)
Choose one of the following installation methods:
brew tap yarlson/ftl
brew install ftl
curl -L https://github.com/yarlson/ftl/releases/latest/download/ftl_$(uname -s)_$(uname -m).tar.gz | tar xz
sudo mv ftl /usr/local/bin/
go install github.com/yarlson/ftl@latest
After installing FTL, verify it's working correctly by checking the version:
ftl version
Create an ftl.yaml
file in your project root:
project:
name: my-project
domain: my-project.example.com
email: [email protected]
servers:
- host: my-project.example.com
port: 22
user: my-project
ssh_key: ~/.ssh/id_rsa
services:
- name: my-app
image: my-app:latest
port: 80
health_check:
path: /
interval: 10s
timeout: 5s
retries: 3
routes:
- path: /
strip_prefix: false
dependencies:
- name: postgres
image: postgres:16
volumes:
- postgres_data:/var/lib/postgresql/data
env:
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
- POSTGRES_USER=${POSTGRES_USER:-postgres}
- POSTGRES_DB=${POSTGRES_DB:-app}
volumes:
- postgres_data
- Required variables: Use
${VAR_NAME}
- Optional variables with defaults: Use
${VAR_NAME:-default_value}
ftl setup
FTL supports two deployment modes:
- Direct SSH Transfer (Default):
services:
- name: web
build:
context: .
dockerfile: Dockerfile
- Registry-based Deployment:
services:
- name: web
image: registry.example.com/my-app:latest
build:
context: .
dockerfile: Dockerfile
Build command:
ftl build [--skip-push]
ftl deploy
# Stream all logs
ftl logs -f
# View specific service logs
ftl logs my-app -n 150
# Create tunnels for all dependencies
ftl tunnels
# Connect to specific server
ftl tunnels --server my-project.example.com
# Clone repository
git clone https://github.com/yarlson/ftl.git
# Install dependencies
cd ftl
go mod download
# Run tests
go test ./...
Visit our ftl-examples repository for complete implementation examples:
- Flask Application with PostgreSQL
- Additional examples coming soon
-
Registry Authentication Failures
- FTL currently supports only username/password authentication
- Token-based authentication is not supported
-
SSH Connection Issues
- Verify SSH key permissions
- Ensure server firewall allows connections
- Check user permissions on target server
- Fork the repository
- Create a feature branch
- Commit your changes
- Push to the branch
- Create a Pull Request
Please ensure:
- Code follows project style guidelines
- All tests pass
- Documentation is updated
- Commit messages are clear and descriptive
Report security vulnerabilities by opening an issue with the "security" label. We take all security reports seriously and will respond promptly.
This project is licensed under the MIT License - see the LICENSE file for details.