https://github.com/yarlson/ftl
🚀 FTL is a powerful deployment tool that simplifies the process of setting up servers and deploying applications.
https://github.com/yarlson/ftl
automation cli deployment devops golang iaac noscale server-management ssh zero-downtime
Last synced: 18 days ago
JSON representation
🚀 FTL is a powerful deployment tool that simplifies the process of setting up servers and deploying applications.
- Host: GitHub
- URL: https://github.com/yarlson/ftl
- Owner: yarlson
- License: mit
- Created: 2024-09-01T11:56:02.000Z (8 months ago)
- Default Branch: main
- Last Pushed: 2024-10-22T16:44:59.000Z (6 months ago)
- Last Synced: 2024-10-22T23:47:57.474Z (6 months ago)
- Topics: automation, cli, deployment, devops, golang, iaac, noscale, server-management, ssh, zero-downtime
- Language: Go
- Homepage:
- Size: 17.9 MB
- Stars: 270
- Watchers: 4
- Forks: 4
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# FTL (Faster Than Light) Deployment
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 through a single YAML configuration file.
For comprehensive documentation, visit [https://ftl-deploy.org](https://ftl-deploy.org)
## Features
- Zero-downtime deployments with automated health checks
- Single YAML configuration with environment variable support and validation
- 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## Requirements
- Docker installed locally for building images
- SSH access to target deployment servers
- Git for version control
- Go 1.16+ (only if building from source)## Installation
Choose one of the following installation methods:
### Via Homebrew (macOS and Linux)
```bash
brew tap yarlson/ftl
brew install ftl
```### Direct Download
```bash
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/
```### Build from Source
```bash
go install github.com/yarlson/ftl@latest
```### Verify Installation
After installing FTL, verify it's working correctly by checking the version:
```bash
ftl version
```## Configuration
Create an `ftl.yaml` file in your project root:
```yaml
project:
name: my-project
domain: my-project.example.com
email: [email protected]server:
host: my-project.example.com # Optional, defaults to project.domain
port: 22 # Optional, defaults to 22
user: my-project # Optional, defaults to current system user
ssh_key: ~/.ssh/id_rsa # Optional, auto-detected from standard locationsservices:
- name: web
path: ./src
port: 80
health_check:
path: /
routes:
- path: /dependencies:
- "postgres:16" # Using short notation
- name: redis # Using detailed definition
image: redis:7
volumes:
- redis_data:/custom/redis/path
env:
- REDIS_PASSWORD=${REDIS_PASSWORD:-secret}volumes:
- redis_data
```You can validate your configuration at any time using:
```bash
ftl validate
```### Environment Variables
- Required variables: Use `${VAR_NAME}`
- Optional variables with defaults: Use `${VAR_NAME:-default_value}`## Usage
### Configuration Validation
```bash
# Validate your ftl.yaml configuration
ftl validate
```### Server Setup
```bash
ftl setup
```### Building Applications
FTL supports two deployment modes:
1. Direct SSH Transfer (Default):
```yaml
services:
- name: web
path: ./src # Path to directory containing Dockerfile
```2. Registry-based Deployment:
```yaml
services:
- name: web
image: registry.example.com/my-app:latest
path: ./src
```Build command:
```bash
ftl build [--skip-push]
```### Deployment
```bash
ftl deploy
```### Log Management
```bash
# Stream all logs
ftl logs -f# View specific service logs
ftl logs my-app -n 150
```### SSH Tunnels
```bash
# Create tunnels for all dependencies
ftl tunnels
```## Development
```bash
# Clone repository
git clone https://github.com/yarlson/ftl.git# Install dependencies
cd ftl
go mod download# Run tests
go test ./...
```## Example Projects
Visit our [ftl-examples](https://github.com/yarlson/ftl-examples) repository for complete implementation examples:
- [Flask Application with PostgreSQL](https://github.com/yarlson/ftl-examples/tree/main/flask)
- Additional examples coming soon## Troubleshooting
### Common Issues
1. Configuration Validation Errors
- Ensure all required fields are present
- Check port numbers are valid
- Verify file paths exist
- Confirm environment variables are properly defined2. Registry Authentication Failures
- FTL currently supports only username/password authentication
- Token-based authentication is not supported3. SSH Connection Issues
- Verify SSH key permissions
- Ensure server firewall allows connections
- Check user permissions on target server## Contributing
1. Fork the repository
2. Create a feature branch
3. Commit your changes
4. Push to the branch
5. Create a Pull RequestPlease ensure:
- Code follows project style guidelines
- All tests pass
- Documentation is updated
- Commit messages are clear and descriptive## Security
Report security vulnerabilities by opening an issue with the "security" label. We take all security reports seriously and will respond promptly.
## License
This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.