legit

Fork of https://git.icyphox.sh/legit

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
  27. 27
  28. 28
  29. 29
  30. 30
  31. 31
  32. 32
  33. 33
  34. 34
  35. 35
  36. 36
  37. 37
  38. 38
  39. 39
  40. 40
  41. 41
  42. 42
  43. 43
  44. 44
  45. 45
  46. 46
  47. 47
  48. 48
  49. 49
  50. 50
  51. 51
  52. 52
  53. 53
  54. 54
  55. 55
  56. 56
  57. 57
  58. 58
  59. 59
  60. 60
  61. 61
  62. 62
  63. 63
  64. 64
  65. 65
  66. 66
# Copyright 2026 Shota FUJI <pockawoooh@gmail.com>
# SPDX-License-Identifier: MIT

FROM golang:1.26-alpine3.24 AS build
WORKDIR /app

# Download external modules for caching.
COPY go.mod go.sum ./
RUN go mod download

# Copy source files needed for building the binary.
COPY *.go ./
COPY config/*.go ./config/
COPY templates ./templates
COPY renderer ./renderer
COPY git ./git
COPY core ./core
COPY pages ./pages
COPY embed ./embed
RUN go build -o /bin/legit -ldflags="-X 'main.additionalAccessDirs=/usr/lib,/lib'"

# Scratch image does not have mkdir.
RUN mkdir -p /var/www/legit

# ---

FROM alpine/git:2.54.0
WORKDIR /etc/legit

COPY --from=build /bin/legit /bin/legit

# Mount "config.yaml" file at "/etc/legit/config.yaml".
# You can optionally mount "static" and "templates" directories under "/etc/legit/"
# then tell legit to read them.
#
#     dirs:
#       templates: /etc/legit/templates
#       static: /etc/legit/static
COPY config/base.yaml /etc/legit/config.yaml
VOLUME ["/etc/legit"]

# "/var/www/legit" holds git repositories to host. You have to mount at this
# otherwise legit hosts empty top page, which is useless.
COPY --from=build /var/www/legit /var/www/legit
VOLUME ["/var/www/legit"]

# legit serves HTTP content on this TCP port. Bind it to host's :80 or whatever
# you want.
EXPOSE 5555

# Override default entrypoint set by alpine/git.
ENTRYPOINT []

# Prevent git from accessing config files.
ENV GIT_CONFIG_GLOBAL=/dev/null
ENV GIT_CONFIG_SYSTEM=/dev/null

# File paths and listen address depend on how the container was built.
# Users are not supposed to change these options.
CMD [ \
	"/bin/legit", \
	"-config", "/etc/legit/config.yaml", \
	"-server.host", "0.0.0.0", \
	"-server.port", "5555", \
	"-repo.scanPath", "/var/www/legit" \
]