/cli

✨ Create a new production-ready project with backend, frontend and deploy automation by running one CLI command!

Primary LanguageGoApache License 2.0Apache-2.0

cgapp logo
Create Go App CLI

Create a new production-ready project with backend (Golang), frontend (JavaScript, TypeScript)
and deploy automation (Ansible, Docker) by running one CLI command.

Focus on writing code and thinking of business-logic! The CLI will take care of the rest.

go version go cover go report license

⚡️ Quick start

First, download and install Go. Version 1.17 or higher is required.

If you're looking for the Create Go App CLI for Go 1.16, you can find it here.

Installation is done by using the go install command and rename installed binary in $GOPATH/bin:

go install github.com/create-go-app/cli/v3/cmd/cgapp@latest

Also, macOS and GNU/Linux users available way to install via Homebrew:

# Tap a new formula:
brew tap create-go-app/cli

# Installation:
brew install create-go-app/cli/cgapp

Let's create a new project via interactive console UI (or CUI for short) in current folder:

cgapp create

Next, open the generated Ansible inventory file (called hosts.ini) and fill in the variables according to your server configuration. And you're ready to automatically deploy this project:

cgapp deploy

That's all you need to know to start! 🎉

🐳 Docker-way to quick start

If you don't want to install Create Go App CLI to your system, you feel free to using our official Docker image and run CLI from isolated container:

docker run --rm -it -v ${PWD}:${PWD} -w ${PWD} koddr/cgapp:latest [COMMAND]

🔔 Please note: the deploy command is currently unavailable in this image.

📖 Project Wiki

The best way to better explore all the features of the Create Go App CLI is to read the project Wiki and take part in Discussions and/or Issues. Yes, the most frequently asked questions (FAQ) are also here.

⚙️ Commands & Options

create

CLI command for create a new project with the interactive console UI.

cgapp create [OPTION]
Option Description Type Default Required?
-t Enables to define custom backend and frontend templates. bool false No

cgapp_create

deploy

CLI command for deploy Docker containers with your project via Ansible to the remote server.

🔔 Make sure that you have Python 3.8+ and Ansible 2.9+ installed on your computer.

cgapp deploy [OPTION]
Option Description Type Default Required?
-k Prompt you to provide the remote user sudo password (a standard Ansible --ask-become-pass option). bool false No

cgapp_deploy

📝 Production-ready project templates

Backend

  • Backend template with Golang built-in net/http package:
    • net/http — simple REST API with CRUD and JWT auth.
  • Backend template with Fiber:
    • fiber — complex REST API with CRUD, JWT auth with renew token, DB and cache.
  • Backend template with go-chi:
    • chi — a basic application with health check.

Frontend

  • Pure JavaScript frontend template:
    • vanilla — generated template with pure JavaScript app.
    • vanilla-ts — generated template with pure TypeScript app.
  • Frontend template with React:
    • react — generated template with a common React app.
    • react-ts — generated template with a TypeScript version of the React app.
  • Frontend template with Preact:
    • preact — generated template with a common Preact app.
    • preact-ts — generated template with a TypeScript version of the Preact app.
  • Frontend template with Next.js:
    • next — generated template with a common Next.js app.
    • next-ts — generated template with a TypeScript version of the Next.js app.
  • Frontend template with Nuxt 3:
    • nuxt3 — generated template with a common Nuxt 3 app.
  • Frontend template with Vue.js:
    • vue — generated template with a common Vue.js app.
    • vue-ts — generated template with a TypeScript version of the Vue.js app.
  • Frontend template with Svelte:
    • svelte — generated template with a common Svelte app.
    • svelte-ts — generated template with a TypeScript version of the Svelte app.
  • Frontend template with Lit web components:
    • lit-element — generated template with a common Lit app.
    • lit-element-ts — generated template a TypeScript version of the Lit app.

☝️ Frontend part will be generate using awesome tool Vite.js under the hood. So, you'll always get the latest version of React, Preact, Vue, Svelte, Lit or pure JavaScript/TypeScript templates for your project! And the Next.js and Nuxt 3 frontend parts will be generated using the create-next-app and nuxi utilities.

Please make sure that you have npm version 7 or higher installed to create the frontend part of the project correctly. If you run the cgapp create command using our Docker image, npm of the correct version is already included.

🚚 Pre-configured Ansible roles

Web/Proxy server

  • Roles for run Docker container with Traefik Proxy:
    • traefik — configured Traefik container with a simple ACME challenge via CA server.
    • traefik-acme-dns — configured Traefik container with a complex ACME challenge via DNS provider.
  • Roles for run Docker container with Nginx:
    • nginx — pure Nginx container with "the best practice" configuration.

✌️ Since Create Go App CLI v2.0.0, we're recommend to use Traefik Proxy as default proxy server for your projects. The main reason: this proxy provides automatic SSL certificates from Let's Encrypt out of the box. Also, Traefik was built on the Docker ecosystem and has a really good looking and useful Web UI.

Database

  • Roles for run Docker container with PostgreSQL:
    • postgres — configured PostgreSQL container with apply migrations for backend.

Cache (key-value storage)

  • Roles for run Docker container with Redis:
    • redis — configured Redis container for backend.

⭐️ Project assistance

If you want to say thank you or/and support active development of Create Go App CLI:

Create Go App - Create a new production-ready project by one CLI command | Product Hunt

Together, we can make this project better every day! 😘

⚠️ License

Create Go App CLI is free and open-source software licensed under the Apache 2.0 License. Official logo was created by Vic Shóstak and distributed under Creative Commons license (CC BY-SA 4.0 International).