feat: working docker image and compose file

This commit is contained in:
2025-02-24 19:44:19 +00:00
parent 43092fa4f5
commit 2115da85b5
7 changed files with 68 additions and 7 deletions

1
backend/.gitignore vendored
View File

@ -1,2 +1,3 @@
screenmark screenmark
.env.docker
.env .env

15
backend/Dockerfile Normal file
View File

@ -0,0 +1,15 @@
FROM golang
WORKDIR /app
# Dependency management
COPY go.mod go.sum ./
RUN go mod download
COPY . .
RUN go build -o /app/haystack
EXPOSE 3040
CMD ["/app/haystack"]

View File

@ -0,0 +1,27 @@
services:
database:
image: postgres
restart: always
environment:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: password
volumes:
- ./schema.sql:/docker-entrypoint-initdb.d/schema.sql
ports:
- 4321:5432
healthcheck:
test: ["CMD-SHELL", "pg_isready -U postgres -d haystack_db"]
interval: 10s
retries: 5
start_period: 5s
timeout: 5s
backend:
build: .
restart: always
env_file: .env.docker
ports:
- 3040:3040
depends_on:
database:
condition: service_healthy
restart: true

View File

@ -5,6 +5,7 @@ import (
"io" "io"
"log" "log"
"net/http" "net/http"
"os"
"screenmark/screenmark/models" "screenmark/screenmark/models"
"time" "time"
@ -23,7 +24,7 @@ func main() {
panic(err) panic(err)
} }
listener := pq.NewListener(models.CONNECTION, time.Second, time.Second, func(event pq.ListenerEventType, err error) { listener := pq.NewListener(os.Getenv("DB_CONNECTION"), time.Second, time.Second, func(event pq.ListenerEventType, err error) {
if err != nil { if err != nil {
panic(err) panic(err)
} }
@ -103,7 +104,7 @@ func main() {
} }
}) })
log.Println("Listening and serving.") log.Println("Listening and serving on port 3040.")
http.ListenAndServe(":3040", mux) http.ListenAndServe(":3040", mux)
} }

View File

@ -2,16 +2,22 @@ package models
import ( import (
"database/sql" "database/sql"
"errors"
"os"
_ "github.com/lib/pq" _ "github.com/lib/pq"
) )
const CONNECTION = "postgresql://localhost:5432/haystack?sslmode=disable"
var db *sql.DB var db *sql.DB
func InitDatabase() error { func InitDatabase() error {
database, err := sql.Open("postgres", CONNECTION) connection := os.Getenv("DB_CONNECTION")
if len(connection) == 0 {
return errors.New("DB_CONNECTION env was not found.")
}
database, err := sql.Open("postgres", connection)
db = database db = database

View File

@ -3,11 +3,13 @@ package models
import ( import (
"errors" "errors"
"fmt" "fmt"
"log"
. "github.com/go-jet/jet/v2/postgres"
"screenmark/screenmark/.gen/haystack/haystack/model" "screenmark/screenmark/.gen/haystack/haystack/model"
. "screenmark/screenmark/.gen/haystack/haystack/table" . "screenmark/screenmark/.gen/haystack/haystack/table"
. "github.com/go-jet/jet/v2/postgres"
"github.com/google/uuid" "github.com/google/uuid"
) )
@ -22,6 +24,8 @@ func GetImage(imageId string) (model.UserImages, error) {
id := uuid.MustParse(imageId) id := uuid.MustParse(imageId)
stmt := UserImages.SELECT(UserImages.ImageName, UserImages.Image).WHERE(UserImages.ID.EQ(UUID(id))) stmt := UserImages.SELECT(UserImages.ImageName, UserImages.Image).WHERE(UserImages.ID.EQ(UUID(id)))
log.Println(stmt.DebugSql())
images := []model.UserImages{} images := []model.UserImages{}
err := stmt.Query(db, &images) err := stmt.Query(db, &images)

View File

@ -1,3 +1,6 @@
DROP DATABASE IF EXISTS haystack_db;
CREATE DATABASE haystack_db;
DROP SCHEMA IF EXISTS haystack CASCADE; DROP SCHEMA IF EXISTS haystack CASCADE;
CREATE SCHEMA haystack; CREATE SCHEMA haystack;
@ -53,4 +56,8 @@ $$ LANGUAGE plpgsql;
CREATE OR REPLACE TRIGGER on_new_image AFTER INSERT CREATE OR REPLACE TRIGGER on_new_image AFTER INSERT
ON haystack.user_images ON haystack.user_images
FOR EACH ROW FOR EACH ROW
EXECUTE PROCEDURE notify_new_image() EXECUTE PROCEDURE notify_new_image();
/* -----| Test Data |----- */
INSERT INTO haystack.users VALUES ('fcc22dbb-7792-4595-be8e-d0439e13990a');