A CLI for Fly.io style deployments for any VM, Raspberry Pi, or SSH server. Powered by docker swarm.
Full documentation: https://gci.jonas.foo
- SSH-based deployments, powered by Docker Swarm (no additional software on the server)
- Local and remote build
- Deploy status monitoring
- Configurable deployment with gci.toml
Install with Go:
go install github.com/sauercrowd/gci@latestOr use the release install script:
macOS/Linux
curl -fsSL https://raw.githubusercontent.com/sauercrowd/gci/main/scripts/install.sh | shFor manual binary downloads and platform-specific details, see https://gci.jonas.foo/installation/client-side.
- Register a server - a single server can be used for as many apps as you like. it just acts as an alias.
gci server add prod \
--host your-server.example.com \
--private-key ~/.ssh/id_rsa- Initialize a GCI app (can include/manage many different containers). This creates
gci.tomlin the current directory.
gci init my_platformMinimal config example:
name = "my_platform"
server = "prod"
build_local = """
docker build -t 127.0.0.1:41114/my_service .
docker push 127.0.0.1:41114/my_service
"""
# local TCP forwards active during local build (SSH -L style)
build_forwards = [
"127.0.0.1:41114:127.0.0.1:41114",
]
[driver_docker_swarm]
force_restart_services = true
# define a stack
[[driver_docker_swarm.stacks]]
name = "app"
compose_file = "docker-compose.prod.yaml"- Deploy
gci deployDeploy does:
- Execute your build step (+ proxy the ports specified)
- sync your docker compose file
- (re)deploy your services, monitoring for their success
Show the status of all containers of your app:
gci statusLogs:
gci logsLLM-oriented project and config reference:
gci agents.mdFull documentation: https://gci.jonas.foo