Go Local is an application to demonstrate docker compose setup with infrastructure dependencies and a Makefile to make running the tasks convenient in the local environment with a minimum of host installation dependencies.
Developing the application assumes you have Docker with docker compose. This can be more easily installed on the developer workstation by installing Docker Desktop.
Managing the environment is done using dotenv files. Since the containers are run through docker-compose, the .env
file is automatically parsed and passed into the container. The following is the list of environment variables that are accepted by the application:
APP_PORT
: the port to expose the app on, defaults to8080
AUTORELOAD
: enables autoreload of the application when the executable changes, defaults totrue
DB_URL
: the url for connecting to the database, defaults to the db created by dockerPOSTGRES_DB
: the postgres database name, defaults toexample
POSTGRES_PASSWORD
: the postgres database password, defaults toexample
POSTGRES_USER
: the postgres database user, defaults toexample
REDIS_URL
: the url for connecting to the redis instance, defaults to the redis instance created by docker
Below are the common commands needed for local development. For a complete list of all commands, run make help
To run in the background, execute
$ make start
If instead you prefer to run in the foregorund, run in interactive mode by executing
$ make run
Once the application is running, it will be available on the specified port, 8080
by default. You can verify that it's running by hitting the ping
endpoint:
$ curl http://localhost:8080/ping
If running in the background, you can view the logs by
$ make logs
To compile changes made to the application, run
$ make build
This will recompile the executable with your changes and restart the application if AUTORELOAD
is enabled.
Dependency management is done via modules. To introduce a new dependency, import it in your code like a regular dependency. Then
$ make build-dependencies
This will download the dependency and modify the go.mod
file to include it.
To connect to the container directly, run
$ make shell
Or to connect to the db shell, run
$ make shell-db
To test and lint the application, run
$ make test
$ make lint