Commit 2b6fb1e8 authored by jan.koester's avatar jan.koester
Browse files

test

parent faf001ab
Loading
Loading
Loading
Loading

.Dockerfile.swp

0 → 100644
+1 KiB

File added.

No diff preview for this file type.

+150 −91
Original line number Diff line number Diff line
# ==========================================
# STAGE 1: Build Environment
# ==========================================
FROM node:alpine AS build  
WORKDIR /build/alpine

RUN apk update --no-cache  && apk upgrade --no-cache 
RUN apk add --no-cache cmake ninja clang alpine-sdk lua-aports sudo openssh-keygen fakeroot openssh-client yaml-dev brotli-dev json-c-dev sqlite-dev libpq-dev mariadb-dev util-linux-dev libc-dev tinyxml2-dev ffmpeg-dev nodejs-dev

RUN git clone https://git.tuxist.de/git/jan.koester/libcmdplus.git
RUN mkdir libcmdplus/build
RUN cd libcmdplus/build && cmake ../ -DCMAKE_CXX_FLAGS="-fPIC" -G Ninja && ninja install

RUN git clone https://git.tuxist.de/git/tuxist/uuidplus.git
RUN mkdir uuidplus/build
RUN cd uuidplus/build && cmake ../ -G Ninja && ninja install

RUN git clone https://git.tuxist.de/git/jan.koester/libnetplus.git
RUN mkdir libnetplus/build
RUN cd libnetplus/build && cmake ../ -G Ninja && ninja install

RUN git clone https://git.tuxist.de/git/jan.koester/libhtmlpp.git
RUN mkdir libhtmlpp/build
RUN cd libhtmlpp/build && cmake ../ -G Ninja && ninja install

RUN git clone https://git.tuxist.de/git/jan.koester/libhttppp.git
RUN mkdir libhttppp/build
RUN cd libhttppp/build && cmake ../ -G Ninja && ninja install

RUN git clone https://git.tuxist.de/git/jan.koester/libconfplus.git
RUN mkdir libconfplus/build
RUN cd libconfplus/build && cmake ../ -G Ninja && ninja install

RUN git clone https://git.tuxist.de/git/jan.koester/libdbpp.git
RUN mkdir libdbpp/build
RUN cd libdbpp/build && cmake ../ -G Ninja && ninja install

RUN git clone https://git.tuxist.de/git/jan.koester/libgameinfoplus.git
RUN mkdir libgameinfoplus/build
RUN cd libgameinfoplus/build && cmake ../ -G Ninja && ninja install

RUN git clone https://git.tuxist.de/git/tuxist/libparitypp
RUN mkdir libparitypp/build
RUN cd libparitypp/build && cmake ../ -G Ninja && ninja install

RUN git clone https://git.tuxist.de/git/tuxist/authdb.git
RUN mkdir authdb/build
RUN cd authdb/build && cmake ../ -G Ninja -DBUILD_BINDINGS=OFF && ninja install

RUN git clone https://git.tuxist.de/git/tuxist/mediadb.git
RUN mkdir mediadb/build
RUN cd mediadb/build && cmake ../ -G Ninja && ninja install

RUN git clone https://github.com/Tuxist/CPP-SMTPClient-library.git
RUN mkdir CPP-SMTPClient-library/build
RUN cd CPP-SMTPClient-library/build && cmake ../ -G Ninja -DCMAKE_INSTALL_LIBDIR=/usr/local/lib -DCMAKE_INSTALL_INCLUDEDIR=/usr/local/include && ninja install

RUN git clone https://git.tuxist.de/git/jan.koester/blogi.git
RUN mkdir ./blogi/build
RUN cd ./blogi/build && cmake ../ -G Ninja -DBUILD_EDITOR=ON && ninja install

#RUN mkdir /etc/blogi && cp blogi/config.yaml /etc/blogi

# Install build dependencies
RUN apk update --no-cache && apk upgrade --no-cache && \
    apk add --no-cache \
    alpine-sdk \
    brotli-dev \
    cmake \
    clang \
    fakeroot \
    ffmpeg-dev \
    json-c-dev \
    libc-dev \
    libpq-dev \
    lua-aports \
    mariadb-dev \
    ninja \
    nodejs-dev \
    openssh-client \
    openssh-keygen \
    sqlite-dev \
    sudo \
    tinyxml2-dev \
    util-linux-dev \
    yaml-dev 

# Clone and build C++ dependencies sequentially
# Using cmake -B/build -S/source to avoid sloppy 'cd' tracking
RUN git clone https://git.tuxist.de/git/jan.koester/libcmdplus.git && \
    cmake -B libcmdplus/build -S libcmdplus -DCMAKE_CXX_FLAGS="-fPIC" -G Ninja && \
    ninja -C libcmdplus/build install

RUN git clone https://git.tuxist.de/git/tuxist/uuidplus.git && \
    cmake -B uuidplus/build -S uuidplus -G Ninja && \
    ninja -C uuidplus/build install

RUN git clone https://git.tuxist.de/git/jan.koester/libnetplus.git && \
    cmake -B libnetplus/build -S libnetplus -G Ninja && \
    ninja -C libnetplus/build install

RUN git clone https://git.tuxist.de/git/jan.koester/libhtmlpp.git && \
    cmake -B libhtmlpp/build -S libhtmlpp -G Ninja && \
    ninja -C libhtmlpp/build install

RUN git clone https://git.tuxist.de/git/jan.koester/libhttppp.git && \
    cmake -B libhttppp/build -S libhttppp -G Ninja && \
    ninja -C libhttppp/build install

RUN git clone https://git.tuxist.de/git/jan.koester/libconfplus.git && \
    cmake -B libconfplus/build -S libconfplus -G Ninja && \
    ninja -C libconfplus/build install

RUN git clone https://git.tuxist.de/git/jan.koester/libdbpp.git && \
    cmake -B libdbpp/build -S libdbpp -G Ninja && \
    ninja -C libdbpp/build install

RUN git clone https://git.tuxist.de/git/jan.koester/libgameinfoplus.git && \
    cmake -B libgameinfoplus/build -S libgameinfoplus -G Ninja && \
    ninja -C libgameinfoplus/build install

RUN git clone https://git.tuxist.de/git/tuxist/libparitypp && \
    cmake -B libparitypp/build -S libparitypp -G Ninja && \
    ninja -C libparitypp/build install

RUN git clone https://git.tuxist.de/git/tuxist/authdb.git && \
    cmake -B authdb/build -S authdb -G Ninja -DBUILD_BINDINGS=OFF && \
    ninja -C authdb/build install

RUN git clone https://git.tuxist.de/git/tuxist/mediadb.git && \
    cmake -B mediadb/build -S mediadb -G Ninja && \
    ninja -C mediadb/build install

RUN git clone https://github.com/Tuxist/CPP-SMTPClient-library.git && \
    cmake -B CPP-SMTPClient-library/build -S CPP-SMTPClient-library -G Ninja \
          -DCMAKE_INSTALL_LIBDIR=/usr/local/lib \
          -DCMAKE_INSTALL_INCLUDEDIR=/usr/local/include && \
    ninja -C CPP-SMTPClient-library/build install

RUN git clone https://tuxist.de/git/jan.koester/blogi.git && \
    cmake -B blogi/build -S blogi -G Ninja \
          -DBUILD_EDITOR=ON \
          -DCMAKE_EXE_LINKER_FLAGS="-Wl,--no-as-needed" \
          -DCMAKE_CXX_STANDARD_LIBRARIES="-lnode -lv8" && \
    ninja -C blogi/build install

# ==========================================
# STAGE 2: Core Blogi Runtime Target
# ==========================================
FROM node:alpine AS blogi
WORKDIR /blogi
RUN addgroup blogi
RUN adduser blogi -h /var/lib/blogi -S -G blogi
RUN apk update && apk upgrade
RUN apk add --no-cache yaml brotli openssl json-c libuuid libpq mariadb-connector-c sqlite-libs libstdc++ pwgen sed tinyxml2 ffmpeg ca-certificates

RUN mkdir /etc/blogi
RUN mkdir /usr/local/share/blogi
RUN addgroup -S blogi && adduser -h /var/lib/blogi -S -G blogi blogi
RUN apk update && apk upgrade && \
    apk add --no-cache \
    brotli \
    ca-certificates \
    ffmpeg \
    json-c \
    libpq \
    libstdc++ \
    libuuid \
    mariadb-connector-c \
    openssl \
    pwgen \
    sed \
    sqlite-libs \
    tinyxml2 \
    yaml \
    nodejs-libs

RUN mkdir -p /etc/blogi /usr/local/share/blogi /usr/local/sbin /usr/local/bin /usr/local/lib

COPY docker-config.yaml /usr/local/share/blogi

RUN mkdir -p /usr/local/sbin /usr/local/bin /usr/local/lib
COPY run.sh /usr/local/sbin
COPY run.sh /usr/local/sbin/run.sh
RUN chmod +x /usr/local/sbin/run.sh

# Copy binaries and libraries from build stage
COPY --from=build /usr/local/bin/blogi /usr/local/bin/blogi
RUN chmod +x /usr/local/bin/blogi

COPY --from=build /usr/local/bin/authcli /usr/local/bin/authcli
RUN chmod +x /usr/local/bin/authcli

COPY --from=build /usr/local/share/blogi /usr/local/share/blogi
COPY --from=build /usr/local/lib /usr/local/lib

RUN chmod +x /usr/local/bin/blogi /usr/local/bin/authcli

# Ensure internal plugin paths exist and match build outputs
COPY --from=build /usr/local/lib/dbpp/pgsql.so /usr/local/lib/blogi/dbpp/pgsql.so
COPY --from=build /usr/local/lib/dbpp/sqlite.so /usr/local/lib/blogi/dbpp/sqlite.so
COPY --from=build /usr/local/lib/dbpp/mariadb.so /usr/local/lib/blogi/dbpp/mariadb.so

COPY --from=build /usr/local/lib/blogi/plugins /usr/local/lib/blogi/plugins


CMD ["sh", "/usr/local/sbin/run.sh"]


# ==========================================
# STAGE 3: Blogi Editor Runtime Target
# ==========================================
FROM node:alpine AS blogi-editor
WORKDIR /blogi-editor
RUN addgroup blogi
RUN adduser blogi -h /var/lib/blogi -S -G blogi
RUN apk update && apk upgrade
RUN apk add --no-cache yaml brotli openssl ca-certificates json-c libuuid libpq mariadb-connector-c sqlite-libs libstdc++ pwgen sed tinyxml2 ffmpeg nodejs-libs

RUN mkdir /etc/blogi
RUN mkdir /usr/local/share/blogi
RUN mkdir -p /var/lib/blogi-editor
RUN mkdir -p /var/lib/blogi-editor/node/widgets
RUN addgroup -S blogi && adduser -h /var/lib/blogi -S -G blogi blogi
RUN apk update && apk upgrade && \
    apk add --no-cache \
    brotli \
    ca-certificates \
    ffmpeg \
    json-c \
    libpq \
    libstdc++ \
    libuuid \
    mariadb-connector-c \
    nodejs-libs \
    openssl \
    pwgen \
    sed \
    sqlite-libs \
    tinyxml2 \
    yaml

RUN mkdir -p /etc/blogi \
    /usr/local/share/blogi \
    /var/lib/blogi-editor/node/widgets \
    /usr/local/sbin \
    /usr/local/bin \
    /usr/local/lib

COPY editor/docker-config.yaml /usr/local/share/blogi
COPY editor/config.test.two-widget-paths.yaml /usr/local/share/blogi-editor/config.test.two-widget-paths.yaml

RUN mkdir -p /usr/local/sbin /usr/local/bin /usr/local/lib
COPY editor/run.sh /usr/local/sbin
COPY editor/run.sh /usr/local/sbin/run.sh
RUN chmod +x /usr/local/sbin/run.sh

# Copy binaries and libraries from build stage
COPY --from=build /usr/local/bin/blogi-editor /usr/local/bin/blogi-editor
RUN chmod +x /usr/local/bin/blogi-editor

COPY --from=build /usr/local/bin/authcli /usr/local/bin/authcli
RUN chmod +x /usr/local/bin/authcli

COPY --from=build /usr/local/share/blogi-editor /usr/local/share/blogi-editor
COPY --from=build /usr/local/lib /usr/local/lib

RUN chmod +x /usr/local/bin/blogi-editor /usr/local/bin/authcli

# Ensure internal plugin paths exist and match build outputs
COPY --from=build /usr/local/lib/dbpp/pgsql.so /usr/local/lib/blogi/dbpp/pgsql.so
COPY --from=build /usr/local/lib/dbpp/sqlite.so /usr/local/lib/blogi/dbpp/sqlite.so
COPY --from=build /usr/local/lib/dbpp/mariadb.so /usr/local/lib/blogi/dbpp/mariadb.so

COPY --from=build /usr/local/lib/blogi/plugins /usr/local/lib/blogi/plugins


CMD ["sh", "/usr/local/sbin/run.sh"]
+13 −1
Original line number Diff line number Diff line
@@ -53,7 +53,19 @@ endif()

message(STATUS "libnode enabled: ${LIBNODE_LIBRARY} (${LIBNODE_INCLUDE_DIR})")
target_include_directories(blogi-editor PRIVATE ${LIBNODE_INCLUDE_DIR})
target_link_libraries(blogi-editor ${LIBNODE_LIBRARY})

if(CMAKE_SYSTEM_NAME MATCHES "Linux")
    # Zwingt den Linker, die gesamte libnode.so inklusive V8 einzulesen
    target_link_libraries(blogi-editor PRIVATE
        -Wl,--no-as-needed
        -Wl,--whole-archive
        ${LIBNODE_LIBRARY}
        -Wl,--no-whole-archive
    )
else()
    target_link_libraries(blogi-editor PRIVATE ${LIBNODE_LIBRARY})
endif()

target_compile_definitions(blogi-editor PRIVATE BLOGI_HAVE_LIBNODE=1)

# Export to widget subdirectories that include the shared node bridge header.