1
0

fix: 更新Docker构建脚本

This commit is contained in:
TsMask
2025-05-20 18:47:08 +08:00
parent ac23c3a9f1
commit 46bc90c2e4
8 changed files with 128 additions and 54 deletions

View File

@@ -0,0 +1,81 @@
## 第一阶段 ====> Nodejs打包编译输出前端资源
FROM node:20-alpine AS build-node
# 系统文件
COPY ./linux /linux
# 后端程序
COPY ./omc_api /api
# 前端程序
COPY ./omc_web /web
RUN npm config set registry https://registry.npmmirror.com
RUN cd /web && npm install && npm run build
## 第二阶段 ====> Go打包编译输出后端程序
FROM golang:1.24-alpine AS build-golang
ARG TARGETARCH
ARG VERSION
# 从上个阶段复制文件
COPY --from=build-node /web/dist /web
COPY --from=build-node /api /api
COPY --from=build-node /linux /linux
# 设置变量
ARG VERSION
ENV CGO_ENABLED 1
ENV GOOS linux
ENV GOPROXY https://goproxy.cn,direct
# 更新apt并安装必要工具
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories
RUN apk add gcc musl-dev libpcap-dev && rm -rf /var/cache/apk/*
RUN cd /api && go mod download
RUN cd /api && go build -o omc -v -ldflags "-s -w \
-X 'be.ems/src/framework/config.Version=$VERSION' \
-X 'be.ems/src/framework/config.BuildTime=$(date)' \
-X 'be.ems/src/framework/config.GoVer=$(go version)'"
# RUN cd /api/sshsvc && go build -o sshsvc -v -ldflags "-s -w \
# -X 'be.ems/lib/global.Version=$VERSION' \
# -X 'be.ems/lib/global.BuildTime=$(date)' \
# -X 'be.ems/lib/global.GoVer=$(go version)'"
## 第三阶段 ====> 构建前后端融合镜像
FROM alpine:3.20
# 从上个阶段复制文件
COPY --from=build-golang /linux/usr/local/etc/omc /usr/local/etc/omc
COPY --from=build-golang /linux/usr/local/omc /usr/local/omc
COPY --from=build-golang /api/omc /usr/local/bin/omc
# COPY --from=build-golang /api/sshsvc/sshsvc /usr/local/bin/sshsvc
COPY --from=build-golang /web /usr/local/etc/omc/web
# 更新apt并安装必要工具
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories
RUN apk add musl-dev libpcap-dev nginx tzdata && rm -rf /var/cache/apk/*
# 设置时区和语言环境
ENV LANG="en_US.UTF-8"
ENV TZ="Asia/Shanghai"
WORKDIR /usr/local/etc/omc
SHELL ["/bin/bash", "-o", "errexit", "-o", "nounset", "-o", "pipefail", "-c"]
RUN chmod +x /usr/local/etc/omc/script/*.sh
RUN /usr/local/etc/omc/script/postunpack.sh
EXPOSE 80 443 33030 33443 33033 33034 33060
CMD [ "/usr/local/etc/omc/script/entrypoint.sh" ]
# build 546 MB
# docker docker build --platform linux/amd64 --build-arg TARGETARCH=amd64 --build-arg VERSION=2.2505.2 -t omc:r2.2505.2-ubuntu22.04-amd64 .
# service ssh start && service nginx start && /usr/local/bin/omc --env prod -c /usr/local/etc/omc/omc.yaml
# docker run -it omc:r2.2505.2-ubuntu22.04-amd64 /bin/bash
# docker run --privileged=true --restart=always -m 512M --name omc_2.2505.2 -d omc:r2.2505.2-ubuntu22.04-amd64
# docker rm -f omc_2.2505.2
# docker run -it omc_2.2505.2 bash

View File

@@ -69,21 +69,27 @@ ENV TZ="Asia/Shanghai"
WORKDIR /usr/local/etc/omc
SHELL ["/bin/bash", "-o", "errexit", "-o", "nounset", "-o", "pipefail", "-c"]
RUN chmod +x /usr/local/etc/omc/script/*.sh
RUN /usr/local/etc/omc/script/postunpack.sh
EXPOSE 80 443 33030 33443 33033 33034 33060
USER 1001
ENTRYPOINT [ "/usr/local/etc/omc/script/entrypoint.sh" ]
CMD [ "/usr/local/etc/omc/script/run.sh" ]
CMD [ "/usr/local/etc/omc/script/entrypoint.sh" ]
# build 546 MB
# docker docker build --platform linux/amd64 --build-arg TARGETARCH=amd64 --build-arg VERSION=2.2505.2 -t omc:r2.2505.2-ubuntu22.04-amd64 .
# service ssh start && service nginx start && /usr/local/bin/omc --env prod -c /usr/local/etc/omc/omc.yaml
# docker run -it omc:r2.2505.2-ubuntu22.04-amd64 /bin/bash
# docker run --privileged=true --restart=always -m 512M --name omc_2.2505.2 -d omc:r2.2505.2-ubuntu22.04-amd64
# docker run -it omc:2.2505.2-ubuntu22.04-amd64 /bin/bash
# docker run --privileged=true --restart=always -m 512M -e M_PARAM=lite --name omc_2.2505.2 -d omc:2.2505.2-ubuntu22.04-amd64
# docker run --privileged=true --restart=always -m 512M \
# -e TZ=Asia/Shanghai \
# -e M_PARAM=lite \
# -p 80:80 \
# -p 443:443 \
# --network omcnet \
# --name omc \
# -d omc:2.2505.2-ubuntu22.04-amd64
# docker rm -f omc_2.2505.2
# docker run -it omc_2.2505.2 bash

View File

@@ -10,21 +10,25 @@ set -o pipefail
# Load OMC environment variables
. /usr/local/etc/omc/script/omc-env.sh
# Initialize OMC DB
if [ ! -f /usr/local/etc/omc/omc.conf ]; then
bash /usr/local/etc/omc/script/setup.sh -i -m $M_PARAM -c $C_PARAM
fi
# We add the copy from default config in the entrypoint to not break users
# case someone mounts a configuration file in /usr/local/etc/omc/default)
cp -nr "$BASE_DIR"/default/. "$BASE_DIR"
if [[ "$*" = *"/usr/local/etc/omc/script/run.sh"* || "$*" = *"run.sh"* ]]; then
# Ensure OMC is initialized
omcd version
# Start Nginx server
nginx -g "daemon off;"
# Initialize OMC DB
if [ ! -f /usr/local/etc/omc/machine.ini ]; then
bash /usr/local/etc/omc/script/setup.sh -i -m $M_PARAM -c $C_PARAM
fi
echo ""
exec "$@"
# Start Nginx server
nginx -g "daemon off;"
# Parse CLI flags to pass to the 'omc' call
args=("--config" "${BASE_DIR}/omc.conf")
# Add flags specified via the 'CMD_EXTRA_FLAGS' environment variable
read -r -a extra_flags <<< "$CMD_EXTRA_FLAGS"
[[ "${#extra_flags[@]}" -gt 0 ]] && args+=("${extra_flags[@]}")
# Add flags passed to this script
args+=("$@")
omc --version
exec omc "${args[@]}"

View File

@@ -3,7 +3,7 @@ export BASE_DIR="/usr/local/etc/omc"
export DATA_DIR="/usr/local/omc"
# OMC settings
export M_PARAM="${M_PARAM:std}"
export M_PARAM="${M_PARAM:-std}"
export C_PARAM="${C_PARAM:-omc}"
# OMC Config settings

View File

@@ -17,16 +17,19 @@ chmod -R g+rwX "$BASE_DIR" "$DATA_DIR"
cp -rf /usr/local/etc/omc/default/* "$BASE_DIR"
# OMC config
sed -i 's/port: 33030/port: $API_HTTP_PORT/' "$BASE_DIR"/omc.yaml
sed -i 's/port: 33443/port: $API_HTTPS_PORT/' "$BASE_DIR"/omc.yaml
sed -i "s/port: 33030/port: $API_HTTP_PORT/" "$BASE_DIR"/omc.yaml
sed -i "s/port: 33443/port: $API_HTTPS_PORT/" "$BASE_DIR"/omc.yaml
sed -i '/webServer:/,/-/s/^\( *enabled:\) true/\1 false/' "$BASE_DIR"/omc.yaml
sed -i '/type: "mysql"/,/-/s/^\( *host:\) "127.0.0.1"/\1 "omc_mariadb"/' "$BASE_DIR"/omc.yaml
sed -i 's/port: 33066/port: 3306/' "$BASE_DIR"/omc.yaml
sed -i '/port: 6379 # Redis port/,/-/s/^\( *host:\) "127.0.0.1"/\1 "omc_keydb"/' "$BASE_DIR"/omc.yaml
# Nginx config
sed -i 's/# gzip_/gzip_/' /etc/nginx/nginx.conf
sed -i 's/include \/etc\/nginx\/sites-enabled/# include \/etc\/nginx\/sites-enabled/' /etc/nginx/nginx.conf
cp -rf /usr/local/etc/omc/nginx/omc.conf /etc/nginx/conf.d
touch /usr/local/etc/omc/web/dist/config.js && echo 'sessionStorage.clear()' | tee /web/dist/config.js
sed -i 's/33030;/$API_HTTP_PORT;/' /etc/nginx/conf.d/omc.conf
sed -i 's/33443;/$API_HTTPS_PORT;/' /etc/nginx/conf.d/omc.conf
sed -i 's/80;/$WEB_HTTP_PORT;/' /etc/nginx/conf.d/omc.conf
sed -i 's/443;/$WEB_HTTPS_PORT;/' /etc/nginx/conf.d/omc.conf
sed -i "s/33030;/$API_HTTP_PORT;/" /etc/nginx/conf.d/omc.conf
sed -i "s/33443;/$API_HTTPS_PORT;/" /etc/nginx/conf.d/omc.conf
sed -i "s/80;/$WEB_HTTP_PORT;/" /etc/nginx/conf.d/omc.conf
sed -i "s/443;/$WEB_HTTPS_PORT;/" /etc/nginx/conf.d/omc.conf

View File

@@ -1,21 +0,0 @@
#!/bin/bash
# shellcheck disable=SC1091
set -o errexit
set -o nounset
set -o pipefail
# set -o xtrace # Uncomment this line for debugging purposes
# Load OMC environment variables
. /usr/local/etc/omc/script/omc-env.sh
# Parse CLI flags to pass to the 'omc' call
args=("--config" "${BASE_DIR}/omc.conf")
# Add flags specified via the 'CMD_EXTRA_FLAGS' environment variable
read -r -a extra_flags <<< "$CMD_EXTRA_FLAGS"
[[ "${#extra_flags[@]}" -gt 0 ]] && args+=("${extra_flags[@]}")
# Add flags passed to this script
args+=("$@")
exec omc "${args[@]}"

View File

@@ -1,8 +1,8 @@
#!/bin/bash
OMC_CONTAINER_NAME="omc_{version}-{system}-{arch}"
MYSQL_CONTAINER_NAME="omc_mariadb_10.6.21_{arch}"
REDIS_CONTAINER_NAME="omc_keydb_6.3.4_{arch}"
OMC_CONTAINER_NAME="omc"
MYSQL_CONTAINER_NAME="omc_mariadb"
REDIS_CONTAINER_NAME="omc_keydb"
# usage
usage() {
@@ -62,9 +62,10 @@ install(){
docker load --input $(pwd)/tar/mariadb_10.6.21_{arch}.tar
MYSQL_IMAGE="mariadb-{arch}:10.6.21"
MYSQL_ROOT_PASSWORD="1000omc@kp!"
SQL_FILE_PATH="$(pwd)/sql/install/omc_db.sql"
# SQL_FILE_PATH="$(pwd)/sql/install/omc_db.sql"
MYSQL_DATA=/usr/local/etc/$MYSQL_CONTAINER_NAME/data
mkdir -p $MYSQL_DATA
mkdir -p $MYSQL_DATA && chmod 777 $MYSQL_DATA
echo "CREATE DATABASE IF NOT EXISTS omc_db;" >> $MYSQL_DATA/database.sql
docker run --privileged=true --restart=always -e TZ="$OMC_TZ" \
-e MYSQL_ROOT_PASSWORD=$MYSQL_ROOT_PASSWORD \
-v $SQL_FILE_PATH:/docker-entrypoint-initdb.d/database.sql \
@@ -84,7 +85,7 @@ install(){
REDIS_IMAGE="keydb-{arch}:6.3.4"
REDIS_PASSWORD="helloearth"
REDIS_DATA=/usr/local/etc/$REDIS_CONTAINER_NAME/data
mkdir -p $REDIS_DATA
mkdir -p $REDIS_DATA && chmod 777 $REDIS_DATA
docker run --privileged=true --restart=always -e TZ="$OMC_TZ" \
-e KEYDB_PASSWORD=$REDIS_PASSWORD \
-v $REDIS_DATA:/bitnami/keydb/data \