复制项目

This commit is contained in:
kim.dev.6789
2026-01-14 22:16:44 +08:00
parent e2577b8cee
commit e50142a3b9
691 changed files with 97009 additions and 1 deletions

View File

@@ -0,0 +1,64 @@
# Use Go 1.22 Alpine as the base image for building the application
FROM golang:1.22-alpine AS builder
# Install git, build tools and dependencies for Quirc
RUN apk add --no-cache git ca-certificates build-base make gcc musl-dev pkgconfig
# Build and install Quirc library (static library)
RUN cd /tmp && \
git clone --depth 1 https://github.com/dlbeer/quirc.git && \
cd quirc && \
sed -i 's/\$(shell pkg-config --cflags sdl 2>&1)/\$(shell pkg-config --cflags sdl 2>\/dev\/null || true)/g' Makefile && \
sed -i 's/\$(shell pkg-config --libs sdl)/\$(shell pkg-config --libs sdl 2>\/dev\/null || true)/g' Makefile && \
sed -i 's/\$(shell pkg-config --cflags opencv4 2>&1)/\$(shell pkg-config --cflags opencv4 2>\/dev\/null || true)/g' Makefile && \
sed -i 's/\$(shell pkg-config --libs opencv4)/\$(shell pkg-config --libs opencv4 2>\/dev\/null || true)/g' Makefile && \
make libquirc.a && \
mkdir -p /usr/local/lib /usr/local/include && \
cp libquirc.a /usr/local/lib/ && \
cp lib/quirc.h /usr/local/include/ && \
ls -la /usr/local/lib/libquirc.a /usr/local/include/quirc.h && \
rm -rf /tmp/quirc
# Define the base directory for the application as an environment variable
ENV SERVER_DIR=/openim-server
ENV CGO_ENABLED=1
# Set the working directory inside the container based on the environment variable
WORKDIR $SERVER_DIR
# Copy protocol directory
COPY protocol /protocol
# Copy current directory
COPY . .
RUN go mod tidy
# Build with static linking for Quirc (静态链接,运行时无需库文件)
# 使用 -ldflags 强制静态链接 Quirc 库和数学库
# 注意Alpine Linux 使用 musl libc需要静态链接数学库
RUN go build -tags cgo \
-ldflags '-linkmode external -extldflags "-static -L/usr/local/lib -lquirc -lm"' \
-o _output/openim-rpc-msg ./cmd/openim-rpc/openim-rpc-msg && \
echo "构建完成,验证二进制文件..." && \
file _output/openim-rpc-msg && \
ldd _output/openim-rpc-msg 2>&1 | head -5 || echo "静态链接验证:二进制文件不依赖动态库(这是正常的)"
# Using Alpine Linux for the final image
FROM alpine:latest
# Install necessary packages, such as bash
RUN apk add --no-cache bash
# Set the environment and work directory
ENV SERVER_DIR=/openim-server
WORKDIR $SERVER_DIR
# Copy the compiled binaries and mage from the builder image to the final image
COPY --from=builder $SERVER_DIR/_output $SERVER_DIR/_output
# COPY --from=builder $SERVER_DIR/config $SERVER_DIR/config
# Set the command to run when the container starts
ENTRYPOINT ["sh", "-c", "_output/openim-rpc-msg"]