用Git和Gitlab进行协作

在Gitlab上的远程仓库为每个用户创建分支, 例如dev-xxx
本地clone项目以后用fetch命令将远程分支拉到本地

1
git fetch origin dev-xxx:dev-xxx

在本地切换分支

1
git checkout dev-xxx

然后进行开发并提交修改
开发完成后提交到远程dev-xxx分支

1
git push -u origin dev-xxx

之后可以在网页端提交merge request

注意: 为了确保本地dev-xxx分支和远程仓库master分支一致, 请在每次开发前先更新本地仓库(dev-xxx分支)

1
2
3
git checkout dev-xxx
git fetch --all
git reset --hard origin/dev-xxx

Gitlab服务器的备份和迁移

之前在一台Ubuntu的服务器上搭建了一个Gitlab服务器,最近这台服务器即将被回收,所以需要将原来的Gitlab迁移到新的服务器上,由于我是用Omnibus安装的,备份和还原的步骤相对来说比较简单,但也有不少需要注意的点。

首先说一下环境和版本

  • 系统:Ubuntu 16.04
  • Gitlab版本:gitlab-ee_10.7.0-ee.0_amd64
  • 安装方法:Omnibus

大致流程如下

  1. 在原服务器执行备份
  2. 在新服务器安装相同版本的Gitlab
  3. 将原服务器的备份传输到新服务器
  4. 执行还原命令
  5. Done

在原服务器进行备份相当简单,只需要执行以下命令
gitlab-rake gitlab:backup:create
默认的备份位置是/var/opt/gitlab/backups,由于原服务器这个分区的空间已经不足了,所以在备份的时候出现报错,这里顺便提一下,第一次报错以后我把backups文件夹删除又创建了,再执行备份命令的时候提示权限不够,执行以下命令可以解决

1
2
chown git /var/opt/gitlab/backups
chmod 700 /var/opt/gitlab/backups

磁盘空间不足的问题可以通过修改备份的保存位置解决
打开/etc/gitlab/gitlab.rb文件,找到这一行
default['gitlab']['gitlab-rails']['backup_path'] = "/var/opt/gitlab/backups"
修改后面的路径以后reconfigure一下再备份即可

在新服务器上安装完gitlab以后,执行以下命令进行还原

1
2
3
4
sudo gitlab-ctl stop unicorn
sudo gitlab-ctl stop sidekiq
sudo gitlab-rake gitlab:backup:restore BACKUP='your_backup_file'
sudo gitlab-ctl restart

如果要备份和还原配置文件的话只需要将/etc/gitlab文件夹打包传输到新服务器,解压放到新服务器相同的目录下。可以将新gitlab产生的配置文件夹备份一下以备不时之需。

elasticsearch--从安装到使用

最近在做一个实体链接的项目,主要是先用命名实体识别的模型去识别文本中的特定实体,然后再将识别出来的实体链接到知识图谱中对应的节点。之所以要这么做是因为往往识别出来的实体名字并不和图谱中的节点完全对应。关于实体链接的具体细节在这里不多赘述,因为不是本文的重点,大致就是对每个识别出的实体从图谱中选出一些候选节点,计算相似度然后选最相似的。

这里主要说一下挑选候选节点这一步,之所以要用到elasticsearch,是因为我们的图谱目前还不支持模糊搜索,而es的match提供了很好的模糊搜索功能,并且还能给每个结果打分。

我的系统是macOS 10.13.5,安装的es版本是5.6.4。在macOS上有两种主流的安装方法,一种是从官网直接下载压缩包,另一种是用homebrew安装,本文使用的是前一种方法。
首先去官网下载对应版本,下载解压缩完以后我把放在用户根目录下,所以路径是~/elasticsearch-5.6.4/,这时候其实已经可以运行了,执行elasticsearch-5.6.4/bin/elasticsearch就可以启动es。但是有一个问题,es默认的analyzer对中文的分词不是很友好,往往会在搜索的时候把中文分成一个个字,这显然不是我们想要的,好在有ik插件,解决了这个问题。安装ik插件也有两种方法,一种是手动从官网下载安装包放到指定文件夹,另一种可以用elasticsearch-plugin命令来安装(需要安装5.5.1版本以上的es)
./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v5.6.4/elasticsearch-analysis-ik-5.6.4.zip
因为我安装的es高于5.5.1,所以我采用了这种方法,很方便。具体可以参考官方repo

接下来就是es的使用了,首先了解一下es中的索引,它是ES中的一个存储类型,与数据库类似,内部包含类型字段,类型中包含各种文档。如果和关系型数据库进行类比的话,索引就是数据库,类型就是数据库中的表,文档就是每张表中的每一行记录。
下面介绍一些常用的操作

  • 查看所有索引
    curl 'localhost:9200/_cat/indices?v'

  • 创建一个名为country的索引
    curl -XPUT 'localhost:9200/country?pretty'

  • 在country中设置一个名为city的类型,并写入一条数据

    1
    2
    3
    4
    curl -XPUT 'localhost:9200/country/city/1?pretty' -d '
    {
    "name": "London"
    }'
  • 查询

    1
    2
    3
    4
    5
    6
    7
    8
    curl -XGET 'localhost:9200/country/city/1?pretty'
    {
    "_index" : "country",
    "_type" : "city",
    "_id" : "1",
    "_version" : 1,
    "found" : true, "_source" : { "name": "London" }
    }
  • 删除索引
    curl -XDELETE 'localhost:9200/customer?pretty'

另外如果需要在python中使用es,可以参考以下文章

在服务器上部署vue项目

之前用vue-cli搭建了一个ICD编码和电子病历信息抽取的前端小工具,这里讲一下如何部署在服务器上

Read more

用flask、gunicorn和nginx在centos上部署API

最近需要把ICD编码和命名实体识别的API部署在公司外网gpu服务器上,服务器是centos系统的,网上的教程大多数都是基于ubuntu的,于是自己研究了一下,简单说一下步骤吧。

Read more