From f752e46457cb1e9c6402b81eb04693cd735ab319 Mon Sep 17 00:00:00 2001 From: Dmitriy Bondarenko Date: Thu, 27 Mar 2025 18:57:49 +0000 Subject: [PATCH] docker fix --- Dockerfile | 35 ++++++++++++++++++ database/init/00init.sql | 78 +++++++++++++++++----------------------- deployments/dockerfile | 0 docker-compose.yml | 20 ++++++----- go.mod | 2 +- 5 files changed, 81 insertions(+), 54 deletions(-) create mode 100644 Dockerfile delete mode 100644 deployments/dockerfile diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..f452dac --- /dev/null +++ b/Dockerfile @@ -0,0 +1,35 @@ +# Этап сборки +FROM docker.io/library/golang:latest AS builder + +# Рабочая директория +WORKDIR /build + +# Копируем файлы зависимостей +COPY go.mod go.sum ./ + +RUN go mod tidy +RUN go mod download + +# Копируем весь код +COPY . . + +RUN ls + +# Собираем приложение (статически линкуем для Alpine) +RUN CGO_ENABLED=0 GOOS=linux go build -o /app ./cmd/api + +# Этап запуска +FROM docker.io/library/alpine:latest + +# Рабочая директория +WORKDIR /app + +# Копируем бинарник из этапа сборки +COPY --from=builder /app . + + +# Порт, который будет слушать приложение +EXPOSE 8080 + +# Команда запуска +CMD ["./app"] \ No newline at end of file diff --git a/database/init/00init.sql b/database/init/00init.sql index 5a8876e..211141d 100644 --- a/database/init/00init.sql +++ b/database/init/00init.sql @@ -1,61 +1,49 @@ --- Сначала создадим базу данных -CREATE DATABASE transport_company; +-- -- Сначала создадим базу данных +-- DROP DATABASE transport_company; +-- CREATE DATABASE transport_company; -- Переключаемся на базу данных \c transport_company; - --- Таблица для водителей -CREATE TABLE drivers ( +CREATE TABLE Clients ( id SERIAL PRIMARY KEY, name VARCHAR(100) NOT NULL, - license_number VARCHAR(50) UNIQUE NOT NULL, - phone VARCHAR(15), - created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP + email VARCHAR(100) UNIQUE NOT NULL, + is_regular BOOLEAN DEFAULT FALSE ); --- Таблица для автомобилей -CREATE TABLE vehicles ( - id SERIAL PRIMARY KEY, - license_plate VARCHAR(20) UNIQUE NOT NULL, - model VARCHAR(50), - year INT, - driver_id INT REFERENCES drivers(id) ON DELETE CASCADE, - created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP -); - --- Таблица для маршрутов -CREATE TABLE routes ( +CREATE TABLE Routes ( id SERIAL PRIMARY KEY, name VARCHAR(100) NOT NULL, - start_location VARCHAR(100), - end_location VARCHAR(100), - created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP + start_point VARCHAR(100) NOT NULL, + end_point VARCHAR(100) NOT NULL, + price DECIMAL(10, 2) NOT NULL ); --- Таблица для поездок -CREATE TABLE trips ( +CREATE TABLE Transport ( id SERIAL PRIMARY KEY, - vehicle_id INT REFERENCES vehicles(id) ON DELETE CASCADE, - route_id INT REFERENCES routes(id) ON DELETE CASCADE, - driver_id INT REFERENCES drivers(id) ON DELETE CASCADE, - trip_date TIMESTAMP NOT NULL, - status VARCHAR(20) CHECK (status IN ('scheduled', 'completed', 'canceled')), - created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP + type VARCHAR(50) NOT NULL, + capacity DECIMAL(10, 2) NOT NULL, + status VARCHAR(50) DEFAULT 'free' ); --- Пример заполнения начальных данных -INSERT INTO drivers (name, license_number, phone) VALUES -('Иван Петров', 'A1234567', '123456789'), -('Мария Иванова', 'B7654321', '987654321'); +CREATE TABLE RouteTransport ( + route_id INT REFERENCES Routes(id), + transport_id INT REFERENCES Transport(id), + departure_time TIMESTAMP, + arrival_time TIMESTAMP, + PRIMARY KEY (route_id, transport_id) +); -INSERT INTO vehicles (license_plate, model, year, driver_id) VALUES -('ABC123', 'Toyota Camry', 2019, 1), -('XYZ789', 'Honda Accord', 2020, 2); +CREATE TABLE Cargo ( + id SERIAL PRIMARY KEY, + name VARCHAR(100) NOT NULL, + weight DECIMAL(10, 2) NOT NULL, + route_id INT REFERENCES Routes(id) +); -INSERT INTO routes (name, start_location, end_location) VALUES -('Маршрут 1', 'Москва', 'Санкт-Петербург'), -('Маршрут 2', 'Казань', 'Екатеринбург'); - -INSERT INTO trips (vehicle_id, route_id, driver_id, trip_date, status) VALUES -(1, 1, 1, '2024-07-01 08:00:00', 'scheduled'), -(2, 2, 2, '2024-07-02 09:00:00', 'completed'); \ No newline at end of file +CREATE TABLE Orders ( + id SERIAL PRIMARY KEY, + client_id INT REFERENCES Clients(id), + cargo_id INT REFERENCES Cargo(id), + total_cost DECIMAL(10, 2) NOT NULL +); \ No newline at end of file diff --git a/deployments/dockerfile b/deployments/dockerfile deleted file mode 100644 index e69de29..0000000 diff --git a/docker-compose.yml b/docker-compose.yml index 1c191f0..484f02d 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,8 +1,8 @@ version: '3.8' services: - db: - image: postgres:13 + postgres: + image: docker.io/library/postgres:13 container_name: postgres restart: always @@ -13,10 +13,14 @@ services: ports: - "5432:5432" volumes: - - ./init.sql:/docker-entrypoint-initdb.d/init.sql - networks: - - transport_network + - ./database/init:/docker-entrypoint-initdb.d -networks: - transport_network: - driver: bridge \ No newline at end of file + app: + build: . + ports: + - "8080:8080" + environment: + - DB_HOST=postgres + - DB_USER=${POSTGRES_USER} + - DB_PASSWORD=${POSTGRES_PASSWORD} + - DB_NAME=${POSTGRES_DB} diff --git a/go.mod b/go.mod index 368a079..e8771d1 100644 --- a/go.mod +++ b/go.mod @@ -1,4 +1,4 @@ -module track-company +module truck-company go 1.22.2