feat: initial backend structure and minimal server
This commit is contained in:
43
Dockerfile
Normal file
43
Dockerfile
Normal file
@@ -0,0 +1,43 @@
|
||||
# --- Этап 1: Сборка (Builder) ---
|
||||
# Используем официальный образ Go в качестве сборочной среды
|
||||
FROM golang:1.22-alpine AS builder
|
||||
|
||||
# Устанавливаем рабочую директорию внутри контейнера
|
||||
WORKDIR /app
|
||||
|
||||
# Копируем файлы go.mod и go.sum для загрузки зависимостей
|
||||
COPY go.mod go.sum ./
|
||||
# Загружаем зависимости. Этот слой будет кэшироваться, если файлы не менялись
|
||||
RUN go mod download
|
||||
|
||||
# Копируем весь остальной исходный код
|
||||
COPY . .
|
||||
|
||||
# Собираем наше приложение.
|
||||
# -o /app/server: указывает, куда положить скомпилированный бинарный файл.
|
||||
# -ldflags "-w -s": уменьшает размер бинарника, удаляя отладочную информацию.
|
||||
# CGO_ENABLED=0: отключает CGO для статической линковки, что важно для Alpine.
|
||||
RUN CGO_ENABLED=0 GOOS=linux go build -o /app/server -ldflags="-w -s" ./cmd/server
|
||||
|
||||
# --- Этап 2: Финальный образ (Final) ---
|
||||
# Используем минималистичный образ Alpine. Он не содержит ничего лишнего.
|
||||
FROM alpine:latest
|
||||
|
||||
# Устанавливаем рабочую директорию
|
||||
WORKDIR /app
|
||||
|
||||
# Копируем только скомпилированный бинарник из этапа сборки
|
||||
COPY --from=builder /app/server .
|
||||
|
||||
# (Опционально, но хорошая практика) Добавляем сертификаты для HTTPS-запросов из нашего приложения
|
||||
RUN apk --no-cache add ca-certificates
|
||||
|
||||
# (Опционально, но хорошая практика) Запускаем приложение от имени непривилегированного пользователя
|
||||
RUN addgroup -S appgroup && adduser -S appuser -G appgroup
|
||||
USER appuser
|
||||
|
||||
# Указываем, что контейнер будет слушать порт 8080
|
||||
EXPOSE 8080
|
||||
|
||||
# Команда для запуска нашего приложения при старте контейнера
|
||||
ENTRYPOINT ["/app/server"]
|
||||
29
cmd/server/main.go
Normal file
29
cmd/server/main.go
Normal file
@@ -0,0 +1,29 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"log"
|
||||
"net/http"
|
||||
|
||||
"github.com/go-chi/chi/v5"
|
||||
"github.com/go-chi/chi/v5/middleware"
|
||||
)
|
||||
|
||||
func main() {
|
||||
// Создаем новый роутер
|
||||
r := chi.NewRouter()
|
||||
|
||||
// Используем стандартные middleware для логирования и восстановления после паник
|
||||
r.Use(middleware.Logger)
|
||||
r.Use(middleware.Recoverer)
|
||||
|
||||
// Определяем простой маршрут
|
||||
r.Get("/", func(w http.ResponseWriter, r *http.Request) {
|
||||
w.Write([]byte("Backend server is running!"))
|
||||
})
|
||||
|
||||
// Запускаем сервер на порту 8080, как мы указали в Caddyfile
|
||||
log.Println("Starting backend server on :8080")
|
||||
if err := http.ListenAndServe(":8080", r); err != nil {
|
||||
log.Fatalf("Failed to start server: %v", err)
|
||||
}
|
||||
}
|
||||
5
go.mod
Normal file
5
go.mod
Normal file
@@ -0,0 +1,5 @@
|
||||
module gitea.mrixs.me/minecraft-platform/backend
|
||||
|
||||
go 1.24.1
|
||||
|
||||
require github.com/go-chi/chi/v5 v5.2.1 // indirect
|
||||
Reference in New Issue
Block a user