added caching to build stage to vastly reduce build times and moved docker stuff to separate folder. Also added priv folder to minimize chance of leaking secrets. Lastly removed build script and replaced with a simple makefile to rebuild container and spin up compose file.
This commit is contained in:
parent
7088a05f8e
commit
5ad7a6bb13
4
.gitignore
vendored
4
.gitignore
vendored
@ -21,4 +21,6 @@
|
|||||||
# Go workspace file
|
# Go workspace file
|
||||||
go.work
|
go.work
|
||||||
|
|
||||||
.env
|
priv
|
||||||
|
# ensures readme still available
|
||||||
|
!priv/readme.md
|
||||||
|
8
Makefile
Normal file
8
Makefile
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
build:
|
||||||
|
docker build -t adonis -f docker/Dockerfile .
|
||||||
|
|
||||||
|
up: build
|
||||||
|
docker compose -f docker/docker-compose.yml --env-file priv/env up
|
||||||
|
|
||||||
|
clean:
|
||||||
|
go clean
|
4
build.sh
4
build.sh
@ -1,4 +0,0 @@
|
|||||||
#! /usr/bin/env bash
|
|
||||||
|
|
||||||
# ensures correct tag is applied
|
|
||||||
docker build . -t adonis
|
|
@ -9,7 +9,10 @@ RUN go mod download
|
|||||||
|
|
||||||
# this could be simplified a lot by being stricter on what we copy.
|
# this could be simplified a lot by being stricter on what we copy.
|
||||||
COPY . .
|
COPY . .
|
||||||
RUN CGO_ENABLED=0 GOOS=linux go build -o adonis .
|
|
||||||
|
ENV GOCACHE=/root/.cache/go-build
|
||||||
|
|
||||||
|
RUN --mount=type=cache,target="/root/.cache/go-build" CGO_ENABLED=0 GOOS=linux go build -o adonis .
|
||||||
|
|
||||||
# copy only binary and static files to slim image size
|
# copy only binary and static files to slim image size
|
||||||
FROM alpine
|
FROM alpine
|
@ -14,7 +14,11 @@ services:
|
|||||||
image: adonis:latest
|
image: adonis:latest
|
||||||
ports:
|
ports:
|
||||||
- "42069:80"
|
- "42069:80"
|
||||||
env_file: ".env"
|
environment:
|
||||||
|
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
|
||||||
|
- POSTGRES_USER=${POSTGRES_USER}
|
||||||
|
- POSTGRES_DB=${POSTGRES_DB}
|
||||||
|
- POSTGRES_HOSTNAME=${POSTGRES_HOSTNAME}
|
||||||
depends_on:
|
depends_on:
|
||||||
- postgres
|
- postgres
|
||||||
networks:
|
networks:
|
@ -5,6 +5,7 @@ import (
|
|||||||
"context"
|
"context"
|
||||||
"fmt"
|
"fmt"
|
||||||
"os"
|
"os"
|
||||||
|
"time"
|
||||||
|
|
||||||
"github.com/jackc/pgx/v5/pgxpool"
|
"github.com/jackc/pgx/v5/pgxpool"
|
||||||
)
|
)
|
||||||
@ -19,9 +20,11 @@ func NewDatabase(username, password, hostname, database string) *Database {
|
|||||||
url := url(username, password, hostname, database)
|
url := url(username, password, hostname, database)
|
||||||
dbpool, err := pgxpool.New(context.Background(), url)
|
dbpool, err := pgxpool.New(context.Background(), url)
|
||||||
|
|
||||||
if err != nil {
|
for err != nil {
|
||||||
fmt.Fprintf(os.Stderr, "Unable to create connection pool: %v\n", err)
|
dbpool, err = pgxpool.New(context.Background(), url)
|
||||||
os.Exit(1)
|
fmt.Fprintf(os.Stderr, "Unable to create connection pool: %v\nRetrying...\n", err)
|
||||||
|
//os.Exit(1)
|
||||||
|
time.Sleep(1 * time.Second)
|
||||||
}
|
}
|
||||||
var greeting string
|
var greeting string
|
||||||
err = dbpool.QueryRow(context.Background(), "select 'Hello, world!'").Scan(&greeting)
|
err = dbpool.QueryRow(context.Background(), "select 'Hello, world!'").Scan(&greeting)
|
||||||
|
2
main.go
2
main.go
@ -45,7 +45,7 @@ func main() {
|
|||||||
database := os.Getenv("POSTGRES_DB")
|
database := os.Getenv("POSTGRES_DB")
|
||||||
hostname := os.Getenv("POSTGRES_HOSTNAME")
|
hostname := os.Getenv("POSTGRES_HOSTNAME")
|
||||||
|
|
||||||
db.NewDatabase(username, password, hostname, database)
|
go db.NewDatabase(username, password, hostname, database)
|
||||||
|
|
||||||
// attach webserver
|
// attach webserver
|
||||||
log.Fatal(http.ListenAndServe(":80", nil))
|
log.Fatal(http.ListenAndServe(":80", nil))
|
||||||
|
Loading…
x
Reference in New Issue
Block a user