gerapy安装教程docker版

git克隆项目

git clone https://github.com/Gerapy/Gerapy.git

修改挂载目录

打开docker-compose.yml文件,可以看出挂载目录是gerapy:/home/gerapy,也就是说直接存到根目录了,而且没有自动创建

version: "3.9"

services:

  gerapy:
    image: germey/gerapy
    build: .
    container_name: gerapy
    restart: always
    volumes:
      - gerapy:/home/gerapy
    ports:
      - 8000:8000

volumes:
  gerapy:

这里个人选择存放在/home/gerapy下,先创建目录

mkdir -p /home/gerapy

修改docker-compose.yml文件如下

version: "3.9"

services:

  gerapy:
    image: germey/gerapy
    build: .
    container_name: gerapy
    restart: always
    volumes:
      - /home/gerapy:/home/gerapy
    ports:
      - 8000:8000

volumes:
  gerapy:

通过docker-compose.yml文件安装容器

docker-compose up

修改密码

  • 因为gerapy是使用python的django进行开发的,所以使用django管理面板修改即可
  • 访问网址:http://your-gerapy-domain/admin/
  • 在页面右上角,点击. CHANGE PASSWORD 进行修改即可

后台运行

如果已经通过docker-compose up运行,按Ctrl+C退出即可,然后在执行一下指令

docker-compose up -d

停止gerapy

docker-compose down

重启gerapy

docker-compose restart

打包失败问题

项目安装完正常能启动后,在“项目管理”,点进项目后,点击“打包”项目,出现“打包失败”的提示,页面上没有具体的提示,只能通过自行排查。排查问题首先从日志入手,有两种方式,如下:

  • 第一种:通过容器日志查看
docker logs gerapy
  • 第二种:通过/home/gerapy/logs下的日志查看

但查看后查看到的log都只有简单的信息

ERROR - 2024-01-10 13:43:12,554 - process: 28 - build.py - gerapy.server.core.build - 78 - build - error occurred (1, ['/usr/local/bin/python', 'setup.py', 'clean', '-a', 'bdist_uberegg', '-d', '/tmp/gerapy-fhxtp8iu'])
INFO - 2024-01-10 13:43:12,554 - process: 28 - build.py - gerapy.server.core.build - 24 - build - successfully build project jujia_scrapy to egg file None

根本无从入手,于是只能从源码入手,通过搜索“successfully build project”查找到源码相应位置:

def build_project(project):
    """
    build project
    :param project:
    :return:
    """
    egg = build_egg(project)
    logger.info('successfully build project %s to egg file %s', project, egg)
    return egg

def build_egg(project):
    '''
    build project to egg file
    :param project: 
    :return: 
    '''
    work_path = os.getcwd()
    try:
        path = os.path.abspath(join(os.getcwd(), PROJECTS_FOLDER))
        project_path = join(path, project)
        os.chdir(project_path)
        settings = config(project_path, 'settings', 'default')
        setup_file_path = join(project_path, 'setup.py')
        create_default_setup_py(
            setup_file_path, settings=settings, project=project)
        d = tempfile.mkdtemp(prefix='gerapy-')
        o = open(os.path.join(d, 'stdout'), 'wb')
        e = open(os.path.join(d, 'stderr'), 'wb')
        retry_on_eintr(check_call, [sys.executable, 'setup.py', 'clean', '-a', 'bdist_uberegg', '-d', d],
                       stdout=o, stderr=e)
        o.close()
        e.close()
        egg = glob.glob(os.path.join(d, '*.egg'))[0]
        # Delete Origin file
        if find_egg(project_path):
            os.remove(join(project_path, find_egg(project_path)))
        shutil.move(egg, project_path)
        return join(project_path, find_egg(project_path))
    except Exception as e:
        logger.error('error occurred %s', e.args)
    finally:
        os.chdir(work_path)

对于看源码和分析的细节,个人就不透露了。有需要的V281523824。
对此,可以了解到打包项目的时候会在/tmp目录下生成一个gerapy-前缀的文件夹,然后在里面打包,并会输出stderr,这个很关键,这个就是我们可以排查的文件,对此我们需要进到容器里面找到这个文件
进入容器

docker exec -it gerapy bash

转到/temp/gerapy-dcvhg文件夹(dcvhg是随机生成的,自己查看进入),由于是容器,只能直接cat输出

cat stderr

可以看到以下错误内容

  File "/home/gerapy/projects/jujia_scrapy/setup.py", line 5, in <module>
    setup(
  File "/usr/local/lib/python3.10/site-packages/setuptools/__init__.py", line 87, in setup
    return distutils.core.setup(**attrs)
  File "/usr/local/lib/python3.10/site-packages/setuptools/_distutils/core.py", line 185, in setup
    return run_commands(dist)
  File "/usr/local/lib/python3.10/site-packages/setuptools/_distutils/core.py", line 201, in run_commands
    dist.run_commands()
  File "/usr/local/lib/python3.10/site-packages/setuptools/_distutils/dist.py", line 968, in run_commands
    self.run_command(cmd)
  File "/usr/local/lib/python3.10/site-packages/setuptools/dist.py", line 1217, in run_command
    super().run_command(command)
  File "/usr/local/lib/python3.10/site-packages/setuptools/_distutils/dist.py", line 987, in run_command
    cmd_obj.run()
  File "/usr/local/lib/python3.10/site-packages/uberegg.py", line 37, in run
    log.warn(
  File "/usr/local/lib/python3.10/site-packages/setuptools/_distutils/log.py", line 49, in warn
    self._log(WARN, msg, args)
  File "/usr/local/lib/python3.10/site-packages/setuptools/_distutils/log.py", line 25, in _log
    msg = msg % args
TypeError: must be real number, not str

看了一圈,根据个人从业经验,这个跟gerapy代码和依赖关系都不大,反而是setuptools这个工具的问题。所以我删除了setuptools,然后升级了一下pip,再重新安装了一下,问题就解决了

pip uninstall setuptools
pip install --upgrade pip
pip install setuptools

特此记录这个问题,一方面是巩固自己的docker使用和问题排查经验。这种问题,换做以前可能看到了错误日志,也都还是找不出原因,现在做久了,看到类似报错,都能有灵机一动了。
但也有疑问,docker-compose安装出来的,怎么还有python版本和包兼容的问题。不是应该都是统一了吗?作者肯定是有自测的,所以程序这种东西,不是最新就最好,最合适才是最重要。

打包失败问题2.0

项目根目录下不能有requirements.txt文件

通过git克隆同步代码

安装git

首先需要进入到容器中进行安装

docker exec -it gerapy bash

安装git指令

apt-get install -y git

这里有一点个人的题外话,因为自己的gitlab是使用docker搭建的,端口映射是8087—>80,所以gitlab.rb配置文件中还不能直接修改external_url ‘http://gitlab.example.com:8087’。所以,只能手动在git链接上添加8087端口,属于个人问题,可以跳过

克隆命令

git clone http://username:password@host:port/my_scrapy.git

使用以上格式即可通过http,然后无需手动输入账号密码的方式直接克隆项目

  • 特别注意:基于安全性的问题,如果你的gitlab上面有很多项目,那需要创建一个gitlab的账号,然后这个账号仅有读取权限,确保安全

提示克隆成功,但实际没有代码

  • 另外千万注意username和password中不要使用符号,类似@#¥%这些,这些会影响到解析,导致莫名错误。如下
fatal: unable to access 'http://127.0.0.1:8087/python/clean.git/': URL using bad/illegal format or missing URL

此时需要你修改一下代码即可

结言

gerapy相比scrapydweb有一点不好,就是发布的项目没有版本管理,只能是最新的,有一种场景,就是爬虫大改后,上线正式,出现问题了,想回退版本,就只能重新拉取对应版本的代码,比较麻烦
而scrapydweb可以选择版本进行发布,相比方便一些

  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值