作者: itgeeker

  • Odoo错误修复 Exception: bus.Bus unavailable Finally fixed by ITGeeker

    Odoo错误修复 Exception: bus.Bus unavailable Finally fixed by ITGeeker

    相信Odoo的错误Exception: bus.Bus unavailable困扰了全球太多的Odoo的开发者,因为网上一搜提问者甚多,解决方案看上去也是一堆,似乎最终失望者还是比比皆是。ITGeeker技术奇客尝试了各种办法,最终解决了这一问题,分享过程给大家,希望能帮到一些Odoo开发者节约一点时间吧

    Exception: bus.Bus unavailable错误日志样例:

    2023-06-06 02:45:38,198 1388075 ERROR itgeeker odoo.http: Exception during JSON request handling. 
    Traceback (most recent call last):
      File "/opt/odoo13/odoo13_source/odoo/http.py", line 624, in _handle_exception
        return super(JsonRequest, self)._handle_exception(exception)
      File "/opt/odoo13/odoo13_source/odoo/http.py", line 310, in _handle_exception
        raise pycompat.reraise(type(exception), exception, sys.exc_info()[2])
      File "/opt/odoo13/odoo13_source/odoo/tools/pycompat.py", line 14, in reraise
        raise value
      File "/opt/odoo13/odoo13_source/odoo/http.py", line 669, in dispatch
        result = self._call_function(**self.params)
      File "/opt/odoo13/odoo13_source/odoo/http.py", line 350, in _call_function
        return checked_call(self.db, *args, **kwargs)
      File "/opt/odoo13/odoo13_source/odoo/service/model.py", line 94, in wrapper
        return f(dbname, *args, **kwargs)
      File "/opt/odoo13/odoo13_source/odoo/http.py", line 339, in checked_call
        result = self.endpoint(*a, **kw)
      File "/opt/odoo13/odoo13_source/odoo/http.py", line 915, in __call__
        return self.method(*args, **kw)
      File "/opt/odoo13/odoo13_source/odoo/http.py", line 515, in response_wrap
        response = f(*args, **kw)
      File "/opt/odoo13/odoo13_source/addons/bus/controllers/main.py", line 35, in poll
        raise Exception("bus.Bus unavailable")
    Exception: bus.Bus unavailable

    错误分析

    基本都认为是longpolling配置不正确引起的,涉及到的配置文件主要有两个:

    • 一个是Nginx或者Apache的配置文件,ITGeeker技术奇客用的是Nginx,所以这里以Nginx为例
    • 另一个是Odoo的配置文件

    影响的Odoo版本:

    Odoo 8 | Odoo 9 | Odoo 10 | Odoo 11 | Odoo 12 | Odoo 13 | Odoo 14 | Odoo 15

    Odoo 16应该不会有这个问题了,因为采用了gevent_port,直接不再使用longpolling_port端口了

    网上收集的解决方案:

    Nginx配置文件:

    无非就是要在路径的上加上proxy_redirect off;和定义一些header,然并卵,愿意尝试的可以按照下面的代码试试看

    location / {
            proxy_pass  http://backend_o13_itgeeker;
            # force timeouts if the backend dies
            proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
            proxy_redirect off;
            # set headers
            proxy_set_header    Host            $host;
            proxy_set_header    X-Real-IP       $remote_addr;
            proxy_set_header    X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header    X-Forwarded-Proto https;
        }    
    
    location /longpolling/ {
            proxy_pass  http://backend_o13_itgeeker_chat;
            # force timeouts if the backend dies
            proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
            proxy_redirect off;
            # set headers
            proxy_set_header    Host            $host;
            proxy_set_header    X-Real-IP       $remote_addr;
            proxy_set_header    X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header    X-Forwarded-Proto https;
        }
    Odoo配置文件:

    要确认三个配置项,workers一定要大于等于2, 如果前端使用了Nginx或者apache,proxy_mode这里应该是True:

    • proxy_mode = True
    • longpolling_port = 8372
    • workers = 3
    ODOO依赖安装

    关键检查是否已安装python以下两个模块,可以用pip list | grep module_name来检查

    • pip install gevent
    • pip install psycogreen

    据说没安装psycogreen的人还挺多,记得一定要安装上。

    这三个方面的配置,最终的目的就是检查longpolling_port是否已正常启动?

    by itgeeker.net
    netstat -ntpl | grep 8372
    tcp        0      0 0.0.0.0:8372            0.0.0.0:*               LISTEN      1439095/python3     
    很遗憾,ITGeeker技术奇客这些都正常,longpolling_port端口也正常,但是Exception: bus.Bus unavailable还是不断的出现,真是百思不得其解。在午饭前,忽然想到,要不改一下Nginx的proxy名称,也就是这两个上游端口的名称:
    # Odoo backend ##
    upstream backend_o13_itgeeker {
        server 127.0.0.1:8369 weight=1 fail_timeout=3000s;
    }
    upstream backend_o13_itgeeker_chat {
        server 127.0.0.1:8372 weight=1 fail_timeout=3000s;
    }
    然后优雅的重启nginx服务nginx -s reload就去吃饭了,回来后意外发现,问题真的解决了,log不再出现Exception: bus.Bus unavailable了。希望能帮到被Odoo的这个问题困扰的你。
  • 上海市人力资源和社会保障自助经办系统FileOperatorWSInstaller.zip控件下载

    上海市人力资源和社会保障自助经办系统FileOperatorWSInstaller.zip控件下载

    为了申请上海“初创企业社会保险费补贴”,就要上“上海市人力资源和社会保障自助经办系统(https://zzjb.rsj.sh.gov.cn/zzjbdl )”, 要在线操作必须要安装本地服务程序安装包FileOperatorWSInstaller.zip。但是这个文件非常的难下载,本人每次都下载的精疲力竭,还不一定能下载成功,文件包有70多兆,下载速度奇慢,真是无语。

    这次好不容易下载下来了,在Windows11加Edge的环境安装成功了,所以分享给大家希望能帮到有需要的人。

    官方的程序安装说明文件包含了日常可能会碰到的问题。

    1. 下载日期为 2023年4月12日
    2. 包含官方的程序安装说明word文件FileOperatorWSInstaller-instruction.docx
    3. 原始文件未作任何修改

    安装包和说明文件我上传到百度网盘:

    百度网盘链接: https://pan.baidu.com/s/1wNbHNR3BwCmCUdYuoUERUw?pwd=7x9x
    提取码: 7x9x

    by itgeeker.net

    如果过了有效期,又确有需求的,可以联系ITGeeker技术奇客寻求帮助。或者你想申请初创企业社会保险费补贴,也可以联系我们。

  • frp内网穿透访问家里的Esxi8.0服务器 frpc如何配置http2https插件

    frp内网穿透访问家里的Esxi8.0服务器 frpc如何配置http2https插件

    ITGeeker技术奇客这次计划给家里的Esxi 8.0服务器搞个公网访问,查了一下看到网上有篇文章介绍说frpc用的type = tcp,然后还要用Haproxy 二次转发,因为Esxi服务器要求ssl访问,再配置nginx的一大堆,觉得甚是复杂。

    ITGeeker技术奇客按照自己对frpc插件http2https的理解,参考官方 https://github.com/fatedier/frp#example-usage 文档,实践后一次成功,分享一下给大家。关键是穿透后实现内网https访问!

    1. 添加frpc配置文件(关键)

    [esxi]
    type = http
    subdomain = esxi # 公网的二级域名
    plugin = http2https
    plugin_local_addr = 192.168.118.118:443 # Esxi8.0服务器内网ip + port
    plugin_host_header_rewrite = 192.168.118.118 # Esxi8.0服务器内网ip
    plugin_header_X-From-Where = frp # 默认为frp

    2. frps服务配置

    #####################################################
    # for esxi公网访问 by itgeeker.net
    #####################################################
    server
    {
        server_name esxi.itgeeker.net;
    
        client_max_body_size 2048M;
        location / {
            proxy_redirect off;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_pass http://127.0.0.1:1118; # 此处须和frps.ini的vhost_http_port端口一致
        }
        access_log /var/log/nginx/esxi.itgeeker.net-https-access.log;
        error_log /var/log/nginx/esxi.itgeeker.net-https-error.log;
    
        listen 443 ssl http2;
        ssl_certificate /etc/letsencrypt/live/esxi.itgeeker.net/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/esxi.itgeeker.net/privkey.pem; 
        include /etc/letsencrypt/options-ssl-nginx.conf;
        ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; 
    }
    # http 80自动跳转443
    server
    {
        if ($host = esxi.itgeeker.net) {
            return 301 https://$host$request_uri;
        } 
    
        listen 80;
        server_name esxi.itgeeker.net;
        return 404; 
    }

    3. 域名DNS解析esxi.itgeeker.net到frps服务器IP

    4. 重启frpc和frps服务器的nginx服务

    # frpc重启命令
    ./frpc reload -c ./frpc.ini
    
    # nginx重启命令:
    nginx -s reload 

    然后就可以愉快的用https://esxi.itgeeker.net来访问家里的Esxi8.0服务器管理页面了

    注意:Esxi8.0服务器公网访问需要ssl 443端口,非ssl 80端口是不可以访问的。

    by itgeeker.net

    如果你家里的Synology群晖NAS也启用了SSL 443端口,
    然后同样也觉得群晖的quickconnect非常不好用,
    那么也可以通过frp的http2https插件实现内网穿透来访问家里的NAS啦!

    by itgeeker.net

    最新文章

  • Esxi 8 更换Nvme硬盘后 如何迁移Esxi主机和虚拟机到新硬盘

    Esxi 8 更换Nvme硬盘后 如何迁移Esxi主机和虚拟机到新硬盘

    因为去年底开始SSD和内存大幅降价,ITGeeker技术奇客就想着给自己的小主机升个级,换个三星1G的980硬盘,再加了一根32G的金士顿32G内存。

    1. 关闭虚拟机,用ovftool.exe导出完整的ova备份。

    之前用的250G固态硬盘,装了三个虚拟机,其它两个只要关停后, 在Windows系统用ovftool.exe就可以备份出ova或者ovf文件。

    关于要导成ova还是ovf,ITGeeker技术奇客觉得区别不大吧,ova是单文件,ovf是多文件的形式。

    by itgeeker.net

    由于我用的是Esxi 8 系统,VMware官方下载ovftool的时候有这么一个提示:Note: OVF Tool 4.5 for vSphere 8.0 is here at this location, not in the drop-down menu. 如果你也用的Esxi 8系统,那么直接到下面的地址下载ovftool吧:

    https://developer.vmware.com/web/tool/4.5.0/ovf-tool

    解压缩下载好的文件后,用CMD命令进入目录,然后运行:

    ovftool.exe vi://root:YOUR PASSWORD@ESXI 8 IP OR DOMAIN/istore F:\ITGeekerBackupFolder\ESXi\BKN5100_ovftool_bk\istore-2023-02-01.ova

    注意修改你的密码、主机IP和备份路径

    备份之前要关闭虚拟主机的运行,否则提示无法备份之类的错误提示。

    但是,ITGeeker技术奇客碰到的问题是:Esxi 8主机现在是作为主路由器在使用,如果关闭OpenWRT之后就无法访问Esxi 8 主机了。

    主路由虚拟机OpenWrt不能关闭,所以此路不通。

    2. 使用dd命令,完整克隆esxi 8主机

    这个注意听起来很不错的,只要把主机完整的备份位img文件,然后用rufu工具把img写入到新的硬盘就可以啦

    先用命令找出系统硬盘的参数
    ls -l /dev/disks/
    
    # 然后选择一个后面不跟冒号和数字1,5,6,7等的那个,例如:
    t10.NVMe____LITEON_CA32D8D256________________________AA50085056032300
    再使用dd命令备份
    dd if=/dev/disks/t10.NVMe____LITEON_CA32D8D256________________________AA50085056032300 of=/vmfs/volumes/datastore1/ESXi8_bkn5100_all.img
    
    
    # 如果担心文件太大,可以添加gzip进行压缩
    dd if=/dev/disks/t10.NVMe____LITEON_CA32D8D256________________________AA50085056032300 | gzip > /vmfs/volumes/datastore1/ESXi8_bkn5100_all.img.gz
    

    事实上,250G的SSD,安装Esxi 8之后,留给datastore的空间只有111G

    ITGeeker技术奇客在安装了3个虚拟机后,空间只剩55G左右了,再怎么压缩还是不够大。

    空间不足,放弃!

    使用DiskGenius克隆旧的硬盘到新的三星980硬盘上

    本来ITGeeker技术奇客是想用DiskGenius把硬盘克隆成文件存到电脑,然后再转换到新硬盘,不过DiskGenius的这个功能需要付费才行。

    于是下载了傲梅来备份硬盘,傲梅倒是免费开放这个功能,但是试了几次都失败了,也不知道是啥原因。

    DiskGenius把硬盘克隆到另一个硬盘倒是免费的,只好拆了我的飞龙峡谷NUC,把新的三星980硬盘装上去,然后把原先的Esxi 8的硬盘插入nvme移动硬盘盒(幸亏我还有一个硬盘盒),因为刚好拆了飞龙峡谷NUC的系统盘,只好用微PE U盘启动DiskGenius,克隆旧硬盘到新硬盘当中,速度还可以,整个过程花费11分钟不到一点。

    终于克隆成功了,赶紧转到G31的主机开机,接上显示器,Esxi 8启动一切正常,浏览器登录Esxi 8主机,看到虚拟机都不能正常运行了,原因是找不到虚拟机文件了,Esxi 8自己的系统文件到都是正常。

    第一波:解决错误“尚未在主机 上配置数据存储”的问题

    解决方案:先使用ssh登录到Esxi 8主机(需先开启ssh服务)

    esxcfg-volume -l 
    Scanning for VMFS-6 host activity (4096 bytes/HB, 1024 HBs).
    VMFS UUID/label: 63a1884d-cc084b52-f293-60beb4079214/datastore1
    Can mount: Yes
    Can resignature: Yes
    Extent name: t10.NVMe____Samsung_SSD_980_1TB_____________________D9BBA121AS382500:5	range: 0 - 112895 (MB)
    
    #使用esxcfg-volume -M 命令以相同的签名重新挂载VMFS卷(-M 表示持久性,-m 表示非持久性)
    esxcfg-volume -M 63a1884d-cc084b52-f293-60beb4079214

    使用esxcfg-volume -M重新挂载VMFS的UUID即可解决。✌🏿

    第二波:解决错误“无法扩展 VMFS 数据存储 datastore1 – 无法更新”的问题

    硬盘变大了,自然首先想到的是要把增加的空间用起来,于是乎使用Esxi 8的操作界面尝试展开现有VMFS空间,但是失败了:“无法扩展 VMFS 数据存储 datastore1 – 无法更新”,再怎么刷新或者重新扫描硬盘都无济于事。

    于是一顿搜索,找到了用命令行来解决的方法,同样需要先开启Esxi 8主机的SSH服务,再用Shell登录到主机。

    首先,确认一下VMFS分区的存储设备标识符
    ls -l /dev/disks/
    
    #一般最后一个便是VMFS分区,你也可以再Esxi 8的存储-硬盘设备-分区图中查看并确认是否正确
    t10.NVMe____Samsung_SSD_980_1TB_____________________D9BBA121AS382500:5

    我的是第五个分区,后面有冒号和数字5的便是,Esxi 8和之前的Esxi 6和7的盘符有很大区别,之前一般mpx.开头,类似mpx.vmhba0:C0:T0:L0这样的,Esxi 8的会更长些。

    然后,用分区工具partedUtil查看硬盘各分区的开始和结束扇区
    partedUtil getptbl "/vmfs/devices/disks/t10.NVMe____Samsung_SSD_980_1TB_____________________D9BBA121AS382500"
    gpt
    121601 255 63 1953525168
    1 64 204863 C12A7328F81F11D2BA4B00A0C93EC93B systemPartition 128
    2 208896 8595455 EBD0A0A2B9E5443387C068B6B72699C7 linuxNative 0
    3 8597504 16984063 EBD0A0A2B9E5443387C068B6B72699C7 linuxNative 0
    4 16986112 268435455 4EB2EA3978554790A79EFAE495E21F8D vmfsl 0
    5 268437504 1953525133 AA31E02A400F11DB9590000C2911D1B8 vmfs 0
    
    然后,获取硬盘最后的扇区
    partedUtil getUsableSectors "/vmfs/devices/disks/t10.NVMe____Samsung_SSD_980_1TB_____________________D9BBA121AS382500"
    
    34 1953525134
    
    指定分区的起始扇区和所需的结束扇区,调整VMFS分区大小
    partedUtil resize "/vmfs/devices/disks/Device" 分区数字码 开始扇区 结束扇区
    
    #开始扇区为第5区的开始扇区,结束扇区为硬盘最后扇区减去1的值,这里要运行的命令:
    partedUtil resize "/vmfs/devices/disks/t10.NVMe____Samsung_SSD_980_1TB_____________________D9BBA121AS382500" 5 268437504 1953525133

    如果partedUtil resize命令运行失败:”在内核无法重新读取 /dev/Device 上的分区表(设备或资源繁忙)。“请尝试重新引导 ESXi 主机再试一遍。

    ITGeeker技术奇客运行该命令无错误,但是空间没有实际扩展,在分区图查看是扩展了空间,但在实际存储datastore里面实际没有扩张空间,无法使用新的空间,失败!

    第三波:解决错误命令行partedUtil无法resize的问题

    如果第二波并未实际扩展空间的话,那么需要采用进一步的措施来解决扩容问题了。

    为此,您必须先“注销”数据存储区上的所有虚拟机,然后“卸载”数据存储区。

    放心此操作不会丢失任何数据的
    esxcfg-volume --list
    
    Scanning for VMFS-6 host activity (4096 bytes/HB, 1024 HBs).
    VMFS UUID/label: 63a19a4d-cc084b52-f293-60beb4079214/datastore1
    Can mount: Yes
    Can resignature: Yes
    Extent name: t10.NVMe____Samsung_SSD_980_1TB_____________________D9BBA121AS382500:5	range: 0 - 112895 (MB)
    
    # esxcfg-volume --list确认你的硬盘标识符和UUID,然后重新签名您的UUID:
    
    esxcfg-volume --resignature 63a19a4d-cc084b52-f293-60beb4079214
    
    vmkfstools -V
    
    # 接下来使用vmkfstools --growfs "/vmfs/devices/disks/devicename:partition#" "/vmfs/devices/disks/扩张分区,后面输入两遍相同的待扩张分区盘符。例如:
    
    vmkfstools --growfs "/vmfs/devices/disks/t10.NVMe____Samsung_SSD_980_1TB_____________________D9BBA121AS382500:5" "/vmfs/devices/disks/t10.NVMe____Samsung_SSD_980_1TB_____________________D9BBA121AS382500:5"

    至此,我的Esxi 8主机一切恢复正常。👌

    注:未接显示器引起的另一起血案

    不知你是否看过我之前一遍关于没接显示器无法启动华硕主板的文章:折腾了一周的硬盘Raid计划 主机始终点不亮故障分析 原来是华硕主板的显卡Bug

    这次同样发生在倍控G31 N5100的小主机上了,由于把它作为软路由,所以就放在弱电箱旁边,自然无法接显示器。于是我测试的时候拿到电脑边,接上显示器,每次都正常,只要一放到弱电箱那边不接显示器,始终无法找到Esxi 8主机,OpenWRT虚拟机也无法自动启动,折腾了N次最终才想到可能是没接显示的原因。

    于是找到倍控客服,客服让加工程师的微信,果不然还是那句:“扣电池试试吧”。哎,当工程师还是挺简单的,出问题了,扣主板电池吧,之前碰到无法开机,也是这么一句。

    这回还问了我装了啥系统,回答Esxi 8,你装Esxi 7试试吧,我叻个去

  • OpenWrt如何完整的完全的禁用IPV6

    OpenWrt如何完整的完全的禁用IPV6

    虽说IPV6推广那么多年了,但真正使用的似乎还是很少。当你使用OpenWrt作为路由器系统的时候,有些应用反而会因为ipv6产生一些莫名奇妙的问题。ITGeeker技术奇客经过多方面搜索,并经过多次尝试,找到了完整且完全禁用ipv6的正确方法。

    以下是通过命令行来禁止OpenWrt的ipv6的完整过程:

    1. 首先禁止Lan,Wan和DHCPv6及odhcpd

    uci set 'network.lan.ipv6=0'
    uci set 'network.wan.ipv6=0'
    uci set 'dhcp.lan.dhcpv6=disabled'
    /etc/init.d/odhcpd disable
    uci commit
    

    有些人可能会担心禁用odhcpd会带来问题,实际上据说odhcpd是专门位IPV6服务的。

    by itgeeker.net

    2. 禁用 RA 和 DHCPv6,这样就不会分发 IPv6 IP

    uci -q delete dhcp.lan.dhcpv6
    uci -q delete dhcp.lan.ra
    uci commit dhcp
    /etc/init.d/odhcpd restart
    

    3. 现在可以禁用 LAN 委派

    uci set network.lan.delegate="0"
    uci commit network
    /etc/init.d/network restart
    

    4. 禁用odhcpd

    /etc/init.d/odhcpd disable
    /etc/init.d/odhcpd stop
    

    5. 最后你可以删除 IPv6 ULA 前缀

    uci -q delete network.globals.ula_prefix
    uci commit network
    /etc/init.d/network restart
    

    你现在登录OpenWrt界面就会发现所有IPV6相关的配置和设置都已被删除或禁止(disabled)。

  • 吐槽一下华为的小艺输入法为什么没有了个人词典 手机输入法的比较与选择

    吐槽一下华为的小艺输入法为什么没有了个人词典 手机输入法的比较与选择

    自从选择了鸿蒙Harmony系统的华为手机,输入法换了又换,但始终没有遂人心愿的一个。个人使用上用的最多的是快捷码输入(个人词典)和语音输入。以下主要从这两个方面比较了个人这几年使用比较久的几个输入法。

    谷歌输入法(Gboard)

    谷歌输入法的最大优势,就是如果你也使用srccpy来同步屏幕到电脑的话,他可以完美支持用电脑键盘往手机屏幕里输入内容。这是其他键盘所不具备的。如果不熟悉scrcpy,可以看看技术奇客的这篇文章:

    scrcpy通过wifi把手机无线投屏到电脑上 并通过键盘和鼠标直接操作手机

    谷歌输入法有一个“个人字典”的功能比较强大,和微软Windows11中输入法的“用户自定义短语”一样,可以自定义快捷输入短码,很方便的输入常用的短语。例如:

    当然Gboard的语音输入也很强大,还有很多其他特色功能,但是语音输入需要智能上网,在国内环境就显得不是那么方便了,如果你不需要语音输入,或许是个不错的选择。不过在中文的智能提醒,常用语选择和国内的输入发差距还是有的。

    华为小艺输入法

    当时华为推出输入法,第一次尝试就被他的语音输入的快捷反应和准确度给吸引了,使用的时间最长。

    但是还是要吐槽为什么不提供个人词典的功能,这个模块在手机没有被阉割,但是启用小艺输入法后,个人词典进去之后是不能做任何操作的。以为这个问题,一开始我还发聩给了华为,华为还真的给我打电话,但是回复说是问过华为的技术团队,是因为当时输入法还没开发到这个功能,所以暂时不能用,这至少是1年前的事情了,但是到了2023年,华为的仍然没有开发这个功能。

    不过后来华为的小艺输入法增加了一个“添加自创语录”的功能,你可以把常用的语句添加到里面,但是最大的问题是他并不支持简码或者说是快捷键输入,语录比较多的使用,在半个屏幕里选择是种煎熬,所以始终是个残缺的功能。

    今天鸿蒙3.0更新后把我原来的输入法重置为小艺输入法,但是功能并未更新,所以这是技术奇客吐槽华为的原因。

    微信键盘-腾讯的手机输入法

    2022年末推出的,现在已经更新到v1.0.1,使用下来感觉语音输入反应有些慢,还不太稳定,和小艺输入法有些差距。不过他提供了“常用语”功能。

    常用于功能不用自定义快捷键,只要输入常用于的前3个字符就可以自动显示常用语,不管中文和英文都可以实现。和自定义相比,缺少些个性化方案吧。还有就是从之前自定义的快捷键方式转换过来需要点时间适应一下。期待他快速提高语音输入的反应和准确性,接下来就看好你了。

奇客罗方公众号 奇客罗方小程序 奇客罗方客服 ITGeeker Telegram

网站由ITGeeker技术奇客开发并管理;隶属于GeekerCloud奇客罗方智能科技
Site designed and developed by ITGeekerwhich is a sub-website of GeekerCloud
网站地图 | 沪ICP备2021031434号-4