在本地部署SciNote

SciNote是一个开源的ELN(Electronic Lab Notebook), Github页面:https://github.com/biosistemika/scinote-web
有一个在线服务SciNote, 但是国内网速很慢, 难以使用.
由于scinote开源,因此可以在本地部署。

准备工作

  1. 获取源代码

    1
    git clone https://github.com/biosistemika/scinote-web.git
  2. 创建文件config/application.yml
    对应变量说明

  3. 环境要求:
  1. 确认安装权限
    如果在Ubuntu下, 运行sudo -i获取sudo权限

开发者环境

  1. 依次执行以下命令:
    make docker
    make run
    等待执行完毕可以看到服务已经运行在3000端口, 然后在命令行中Ctrl + C停止服务.
    参考页面
  2. 执行make cli进入docker container, 依次执行以下语句:

    • rails db:drop
    • rails db:create
    • rails db:migrate
    • rails db:seed
    • exit
  3. 到这里已经可以在http://localhost:3000 看到有服务在运行了, 但是我运行到这一步的时候, 显示的是错误页面. 我检查之后发现container下面的public文件夹几乎是空的. 这个项目使用的是前端webpacker + 后端rails. 我推测是没有编译webpacker导致的问题, 但是我对于这两个工具都相当不熟悉, 没能找到编译的方法. 如果是对于这两个工具比较熟悉的朋友, 应该编译一下就能用了. 尝试编译的朋友请在评论区留个言~
    我没办法只能转向生产环境

生产环境

  1. 依次执行以下语句:
    make config-production
    make docker-production
    make database-production
  2. 启动服务:
    docker-compose -f ./docker-compose.production.yml up
    如果想在后台运行, 使用docker-compose -f ./docker-compose.production.yml up -d
  3. 此时在http://localhost:3000 已经可以正常使用了.
    参考页面

备份数据

需要备份的数据有postgres数据库中的数据和系统文件, 以及config/application.ymlproduction.env文件.

备份postgresql数据库

docker exec scinote_db_production pg_dump -h localhost -p 5432 -U postgres -d scinote_production -c -b -f /home/db.bak
docker cp scinote_db_production:/home/db.bak /your/bakup/path/

备份文件系统中的数据

docker cp scinote_web_production:/usr/src/app/public/system /your/bakup/path/

定期执行备份

将上述命令编写成脚本, 使用crontab定期执行备份.
这里也可以结合以前提到过的bypy工具包, 定期备份到百度云.
我的备份脚本:

恢复数据

如果是在另外一台主机上恢复数据, 需要将备份的config/application.ymlproduction.env文件拷贝到对应位置.

恢复postgresql数据库

  • 拷贝数据到container:
    docker cp db.bak scinote_db_production:/home/db.bak
  • 进入scinote_db_production的container,执行
    psql -h localhost -p 5432 -U postgres -d scinote_production -f /home/db.bak
    docker cp ~/Documents/sciweb-data-bak/system/. scinote_web_production:/usr/src/app/public/system/
    make docker-production

恢复文件系统中的数据

  • 拷贝数据到container:
    docker cp /your/bakup/path/ scinote_web_production:/usr/src/app/public/system

更新源文件

  1. 重建docker镜像: make docker-production
  2. 迁移数据:
    • make cli-production
    • rails db:migrate
  3. 重启docker container
    docker-compose -f ./docker-compose.production.yml up -d