目 录CONTENT

文章目录

【已放弃】sqlite-web 开源的sqlite可视化web工具修改时区

码农街
2024-01-23 / 0 评论 / 0 点赞 / 43 阅读 / 7362 字 / 正在检测是否收录...

前言

在开发某个产品的时候,后端用到了sqlite数据,为方便管理,在测试环境使用了 sqlite-web 做数据查询,但是查询的时候发现时间不对。

Dockerfile

然后看一下作者的Dockerfile

FROM python:3-alpine3.7
ENV CFLAGS="-DSQLITE_DEFAULT_CACHE_SIZE=-8000 \
            -DSQLITE_DEFAULT_FOREIGN_KEYS=1 \
            -DSQLITE_DEFAULT_MEMSTATUS=0 \
            -DSQLITE_DEFAULT_PAGE_SIZE=4096 \
            -DSQLITE_DEFAULT_SYNCHRONOUS=0 \
            -DSQLITE_DEFAULT_WAL_SYNCHRONOUS=0 \
            -DSQLITE_DISABLE_DIRSYNC \
            -DSQLITE_ENABLE_COLUMN_METADATA \
            -DSQLITE_ENABLE_DESERIALIZE \
            -DSQLITE_ENABLE_FTS3 \
            -DSQLITE_ENABLE_FTS3_PARENTHESIS \
            -DSQLITE_ENABLE_FTS4 \
            -DSQLITE_ENABLE_FTS5 \
            -DSQLITE_ENABLE_JSON1 \
            -DSQLITE_ENABLE_MEMDB \
            -DSQLITE_ENABLE_STAT4 \
            -DSQLITE_ENABLE_STMTVTAB \
            -DSQLITE_ENABLE_UNLOCK_NOTIFY \
            -DSQLITE_ENABLE_UPDATE_DELETE_LIMIT \
            -DSQLITE_LIKE_DOESNT_MATCH_BLOBS \
            -DSQLITE_MAX_EXPR_DEPTH=0 \
            -DSQLITE_SOUNDEX \
            -DSQLITE_STMTJRNL_SPILL=-1 \
            -DSQLITE_TEMP_STORE=3 \
            -DSQLITE_USE_ALLOCA \
            -DSQLITE_USE_URI \
            -DSQLITE_DEFAULT_WAL_AUTOCHECKPOINT=512 \
            -DHAVE_USLEEP \
            -O2 -fPIC"
RUN apk update \
      && apk add --no-cache --virtual .build-deps build-base libressl coreutils gcc libc-dev linux-headers make tar wget tcl tcl-dev dpkg dpkg-dev \
      && wget https://www.sqlite.org/src/tarball/sqlite.tar.gz?r=release -O sqlite.tar.gz -q \
      && tar xzf sqlite.tar.gz \
      && cd sqlite \
      && buildArch="$(dpkg-architecture --query DEB_BUILD_GNU_TYPE)" \
      && LIBS="-lm" PREFIX="/usr/local" ./configure --build="$buildArch" --disable-tcl --enable-shared --enable-static --enable-tempstore=always --prefix="/usr/local" \
      && make -j4 \
      && make install \
      && cd ../ \
      && rm -rf ./sqlite/ ./sqlite.tar.gz \
      && pip install --upgrade pip \
      && pip install --no-cache-dir cython \
      && pip install --no-cache-dir flask peewee sqlite-web \
      && apk del .build-deps
EXPOSE 8080
VOLUME /data
WORKDIR /data
CMD sqlite_web -H 0.0.0.0 -x $SQLITE_DATABASE

发现没做时区配置,应该走的 UTC,进容器,看下时间

果然。。。果断自己改一下

Dockerfile 改造

FROM python:3-alpine3.7
ENV CFLAGS="-DSQLITE_DEFAULT_CACHE_SIZE=-8000 \
            -DSQLITE_DEFAULT_FOREIGN_KEYS=1 \
            -DSQLITE_DEFAULT_MEMSTATUS=0 \
            -DSQLITE_DEFAULT_PAGE_SIZE=4096 \
            -DSQLITE_DEFAULT_SYNCHRONOUS=0 \
            -DSQLITE_DEFAULT_WAL_SYNCHRONOUS=0 \
            -DSQLITE_DISABLE_DIRSYNC \
            -DSQLITE_ENABLE_COLUMN_METADATA \
            -DSQLITE_ENABLE_DESERIALIZE \
            -DSQLITE_ENABLE_FTS3 \
            -DSQLITE_ENABLE_FTS3_PARENTHESIS \
            -DSQLITE_ENABLE_FTS4 \
            -DSQLITE_ENABLE_FTS5 \
            -DSQLITE_ENABLE_JSON1 \
            -DSQLITE_ENABLE_MEMDB \
            -DSQLITE_ENABLE_STAT4 \
            -DSQLITE_ENABLE_STMTVTAB \
            -DSQLITE_ENABLE_UNLOCK_NOTIFY \
            -DSQLITE_ENABLE_UPDATE_DELETE_LIMIT \
            -DSQLITE_LIKE_DOESNT_MATCH_BLOBS \
            -DSQLITE_MAX_EXPR_DEPTH=0 \
            -DSQLITE_SOUNDEX \
            -DSQLITE_STMTJRNL_SPILL=-1 \
            -DSQLITE_TEMP_STORE=3 \
            -DSQLITE_USE_ALLOCA \
            -DSQLITE_USE_URI \
            -DSQLITE_DEFAULT_WAL_AUTOCHECKPOINT=512 \
            -DHAVE_USLEEP \
            -O2 -fPIC"
RUN apk update \
      && apk add --no-cache --virtual .build-deps build-base libressl coreutils gcc libc-dev linux-headers make tar wget tcl tcl-dev dpkg dpkg-dev \
      && wget https://www.sqlite.org/src/tarball/sqlite.tar.gz?r=release -O sqlite.tar.gz -q \
      && tar xzf sqlite.tar.gz \
      && cd sqlite \
      && buildArch="$(dpkg-architecture --query DEB_BUILD_GNU_TYPE)" \
      && LIBS="-lm" PREFIX="/usr/local" ./configure --build="$buildArch" --disable-tcl --enable-shared --enable-static --enable-tempstore=always --prefix="/usr/local" \
      && make -j4 \
      && make install \
      && cd ../ \
      && rm -rf ./sqlite/ ./sqlite.tar.gz \
      && pip install --upgrade pip \
      && pip install --no-cache-dir cython \
      && pip install --no-cache-dir flask peewee sqlite-web \
      && apk del .build-deps

ENV TZ=Asia/Shanghai
RUN apk add tzdata \
    && echo "${TZ}" > /etc/timezone \
    && ln -sf /usr/share/zoneinfo/${TZ} /etc/localtime \
    && rm /var/cache/apk/*

EXPOSE 8080
VOLUME /data
WORKDIR /data
CMD sqlite_web -H 0.0.0.0 -x $SQLITE_DATABASE

核心代码如下:

ENV TZ=Asia/Shanghai
RUN apk update \
    && apk add tzdata \
    && echo "${TZ}" > /etc/timezone \
    && ln -sf /usr/share/zoneinfo/${TZ} /etc/localtime \
    && rm /var/cache/apk/*

镜像构建

docker build -f Dockerfile -t githubwyj/sqlite-web .

PS: 由于网络原因,可能部分包下载会出错,这个建议在科学网络环境下进行操作

当然我这边已经发布到DockerHub仓库:githubwyj/sqlite-web,如果不放心就自己构建吧。。。

镜像食用

docker-compose.yaml

version: '3'
services:
   sqlite-web:
    restart: always
    container_name: sqlite-web
    hostname: sqlite-web
    image: githubwyj/sqlite-web
    ports:
      - "8089:8080"
    environment:
      - TZ=Asia/Shanghai
      - SQLITE_DATABASE=yourdb.db
    volumes:
      - /pathyourdb:/data

然后执行:

docker-compose up -d

时间查看

docker exec -it -u root sqlite-web date

容器的时间是正常的,但是发现,控制台查出的时间不对

额,这就尴尬了,不得行

0

评论区