侧边栏壁纸
  • 累计撰写 218 篇文章
  • 累计创建 59 个标签
  • 累计收到 5 条评论

MongoDB + Rails + SQLite3 API 项目快速部署方案

barwe
2022-06-24 / 0 评论 / 0 点赞 / 812 阅读 / 1,972 字
温馨提示:
本文最后更新于 2022-06-24,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

MongoDB + Rails + SQLite3 API 项目快速部署方案

准备 MongoDB 应用

mkdir -p context/mongodb5

# https://www.mongodb.com/try/download/community
MAIN_PKG=mongodb-linux-x86_64-debian10-5.0.9
wget https://fastdl.mongodb.org/linux/$MAIN_PKG.tgz
tar -zxf $MAIN_PKG.tgz
mv $MAIN_PKG/bin context/mongodb5

# https://www.mongodb.com/try/download/database-tools
TOOL_PKG=mongodb-database-tools-debian10-x86_64-100.5.3
wget https://fastdl.mongodb.org/tools/db/$TOOL_PKG.tgz
tar -zxf $TOOL_PKG.tgz
mv $TOOL_PKG/bin/* context/mongodb5

mongodb5 包含了 MongoDB 的 client,server 和 cmd tools:

image-20220624102307584

准备 Dockerfile

cd context && touch Dockerfile

Dockerfile 文件内容如下:

FROM ruby:2.7.0

COPY mongodb5/* /usr/local/bin/
RUN mkdir -p /app/src \
    && mkdir -p /app/tasks \
    && mkdir -p /app/temp \
    && mkdir -p /var/lib/mongo \
    && mkdir -p /var/log/mongodb \
    # Install sqlite3
    && apt-get update \
    && apt-get install -y sqlite3 \
    && rm -rf /var/lib/apt/lists/* \
    # Install rails
    && gem install rails:6.1.6 \
    && gem install bundler:2.3.7 \
    # else
    && echo "alias startdb='mongod --dbpath /var/lib/mongo --logpath /var/log/mongodb/mongod.log --fork'" >> /root/.bashrc \
    && echo "alias startapp='cd /app/src && nohup rails server -e production 2>&1 &'" >> /root/.bashrc \
    && echo "alias ll='ls -lh'" >> /root/.bashrc

WORKDIR /app/src
EXPOSE 3000
EXPOSE 27017

构建镜像主要做这几个事:

  • 将 MongoDB 的几个程序复制到系统路径中
  • 将项目的所有代码和数据放到 /app 目录下:src 放代码,temp 用来从宿主机传递一些数据到容器,tasks 存放任务结果
  • 设置 MongoDB 数据库和日志的保存位置
  • 安装 sqlite3 依赖
  • 安装 Rails 和 Bundler
  • 设置几个 alias 用来启动数据库
  • 设置进入容器时的工作目录为项目代码根目录
  • 容器应该暴露 API 服务端口 3000 和数据库端口 27017

写好 Dockerfile 后构建镜像:

docker build -t myproject:local .

启动容器

找个地方存放项目代码,这个目录将被挂载到容器的 /app/src 上:

cd ~/containers/myproject
git clone xxxxxxxxxxxxxxxxxxxx app

启动容器:

CONTAINER=$HOME/containers/myproject
docker run -itd \
--name myproject \
-p 3004:3000 \
# 后端代码
-v $CONTAINER/src:/app/src \
# 后端结果
-v $CONTAINER/tasks:/app/tasks \
# 数据库数据
-v $CONTAINER/db:/var/lib/mongo \
# 其他数据
-v $CONTAINER/temp:/app/temp \
myproject:local


启动项目:

docker exec -it myproject bash
bundle install
startdb
rails server --environment=production
0

评论区