GithubHelp home page GithubHelp logo

burst3166 / yun_mobile Goto Github PK

View Code? Open in Web Editor NEW

This project forked from lin54241930/yun_mobile

0.0 0.0 0.0 106.36 MB

基于Tcloud优化的完整一套,搭建好插上手机即可使用

License: Apache License 2.0

Shell 0.06% JavaScript 25.26% Python 27.40% CSS 2.20% HTML 1.71% PLpgSQL 1.72% Vue 38.18% Dockerfile 0.10% Pug 2.96% Less 0.01% SCSS 0.39%

yun_mobile's Introduction

yun_mobile

前言(废话)

在使用Tcloud的初期,想的是搭建一套可以使用云真机的平台,因为STF界面不是很好看,且账号系统等不方便修改(自己太菜了),后续就开始着手Tcloud的搭建,但是在搭建过程中遇到很多的问题,从什么都不懂的小白,变成懂一点搭建的小白,再到后面可以自己改改东西的小白,期间学到了很多东西,还是很感谢作者,一直都想着把这套东西弄出来,一直都没什么时间,最近恰巧在整理文档之类的东西,就拉取了作者的源代码和STF官方最新的源代码,合在一起,加上自己的修改,让项目搭建好就可以直接使用

代码来源(觉得可以记得给作者的项目点点小星星,ps:也可以给我点个小星星)

因为集成的是官方的STF,所以没有支持IOS,如果需要请至下面链接

请自行修改,STF详细修改见链接:STF修改项

建议新手照着下面文档的顺序来搭建,一步一步搞,如果你是很少用Linux的话,那么建议在这之前先去补一下Linux的基础知识,后续安装起来会轻松很多,如果是大佬,那么安装步骤请随意,怎么方便怎么来都行😁

安装步骤

一、先准备好后续安装需要的安装环境,详情请见文档 安装前环境准备

二、再就是STF安装前的环境准备,详情请见文档 搭建STF环境准备

三、接下来就开始安装我们的关键部件STF,详情请见文档 STF部署

  1. 这里分两个部署的方法,我吧上面的思维导图文档拆分了下 Linux下安装STF
  2. 另一个就是 Mac下安装STF

四、配置aaptadb

  • 配置adb(STF配置的教程中也有这个的详细教程)

    解压项目目录中/tools/platform-tools.zip文件至/usr/local/

    vim /etc/profile添加一行在最低部 export PATH=$PATH:/usr/local/platform-tools

    再执行source /etc/profile

  • 配置aapt(如果不配置这个,传包至服务器上,解析包会失败,包名和版本号等信息就无法写入到数据库中)

    同配置adb一样,先解压/tools/build-tools.zip文件至/user/local/

    vim /etc/profile添加一行在最低部 export PATH=$PATH:/usr/local/build-tools/30.0.3

    再执行source /etc/profile

五、Tcloud前端部署

  • 需要准备的环境(上面在环境准备已经讲过安装了,这里只是做环境检验)

    NodeJs

  • 修改配置项

    找到 Tcloud/config/dev.env.js ,修改完成后修改 Tcloud/config/prod.env.js

    同理, prod.env.js 是打包发布的配置,也就是生产环境下的配置,可自行更改生产环境的IP

    'use strict'
    const merge = require('webpack-merge')
    const prodEnv = require('./prod.env')
    
    module.exports = merge(prodEnv, {
      NODE_ENV: '"development"',
      // 接口地址配置
      // 修改这里的配置为后端接口的配置
      BASE_URL: '"http://192.168.1.2:9000"',
      //ws 服务的地址配置
      WS_BASE_URL:'"ws://xxxx"',
      //cookie 的过期时间
      COOKIE_EXPIRED: 14,
      //cookie 域名
      // 修改这里的IP为启动前端的服务器IP
      COOKIE_DOMAIN: '"192.168.1.2"',
      //cookie 存储前缀
      COOKIE_SUFFIX: '"_TCLOUD_DEV"',
      //企业微信扫码登录的相关配置
      QYWX_APPID: '"xxxx"',
      QYWX_AGENTID: '"xxxx"',
      QYEX_REDIRECT_URI: '"xxxx"',
      // 修改这里的地址为STF的地址,如果没有先配置好STF可以先配置上,后续再改
      STF_URL:'"http://192.168.1.2:7100"',
      // 修改这里的地址为后端服务器IP:9042这里是为了修改OSS为本地存储而添加的一个接口
      LOCAL_FILE_HOST:'"http://192.168.1.2:9042"'
    })

六、TcloudServer后端部署

后端部署分为docker部署和本地部署,docker部署虽较为方便,但是不方便二次开发

且作者的docker-commpose.yml文件许久都没有更新了,部署的话可能需要自己改改

Ps:(我也懒,不想折腾docker了)

综上所诉还是建议本地部署,这里就不介绍docker的部署方法了,作者的文档中有详细的部署方法

  1. 需要准备的环境(最前面的步骤已经讲过怎么安装,这里确认下是否安装成功)

    Nginx

    Python3.7及以上版本

    MySQL

  2. 安装Python依赖

    后端部署的坑在于 pip install 安装Python依赖,这里会有些坑,不过我都修改了 requirement.txt里面的内容了

    现在唯一的难点就在于安装mysqlclient

    Mac上安装问题不是很大,配置好MySQL后,安装下mariadb就基本上可以解决问题

    但在Linux上可能会遇到问题多一点,如果安装依赖出现了问题,那么记得返回之前面安装MySQL的步骤检查下

    放个地址Centos7安装MySQL

  3. 配置数据库

    找到/TcloudServer/local_config.py修改数据库配置

    # SQL 连接字符串
    SQLALCHEMY_DATABASE_URI = 'mysql://<username>:<password>@<host>:<port>/<db>?charset=utf8'
    # 举个🌰
    SQLALCHEMY_DATABASE_URI = 'mysql:/root:[email protected]:3306/demo?charset=utf8'
  4. 初始化数据库

    找到数据库init文件 /TcloudServer/deploy/init/init.sql

    Navicat或其他数据库可视化软件执行init.sql文件即可

  5. 修改数据库中表configstf的配置

    执行查询语句

    SELECT * FROM config WHERE module = 'stf'

    修改查询出来的三个数据里面字段content中的值

    修改192.168.1.2:7100为自己STF的地址

    修改bearer后面的token,这里的token可在STF中获取,地址为http://IP:7100/#!/settings生成访问令牌

    {"URL":"http://192.168.1.2:7100/api/v1/devices","headers":{"Authorization": "Bearer 60c67b9246bc45c6922c3b302be48809eb57f647eff647059ce56773d963060c"}}
    {"URL":"http://192.168.1.2:7100/auth/api/v1/url","headers":{"Authorization": "Bearer 60c67b9246bc45c6922c3b302be48809eb57f647eff647059ce56773d963060c"}}
    {"URL":"http://192.168.1.2:7100/api/v1/user/devices/","headers":{"Authorization": "Bearer 60c67b9246bc45c6922c3b302be48809eb57f647eff647059ce56773d963060c"}}
  6. 找到/TcloudServer/local_config.py修改存储文件到本地的地址和本地接口,这里的接口地址是为了获取本地图片

    # 本地接口地址
    LOCAL_URL = 'http://192.168.1.2:9000'
    
    # 储存文件到本地的地址
    LOCAL_FOLDER = r'/usr/local/Tcloudfile'
  7. 配置Nginx

    我在作者原基础上加了个9044端口,因为下载文件需要用到这个

    server {
        listen 9000;
        server_name 127.0.0.1 localhost;
    
      location /v1/datashow/ {
            proxy_pass http://127.0.0.1:9022;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            add_header 'Access-Control-Allow-Origin' '*';
            add_header 'Access-Control-Allow-Headers' 'Content-Type, Authorization, projectid';
            add_header 'Access-Control-Allow-Methods' 'POST, GET, DELETE, OPTIONS';
    
        }
        location /v1/jobs/ {
            proxy_pass http://127.0.0.1:9038;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            add_header 'Access-Control-Allow-Origin' '*';
            add_header 'Access-Control-Allow-Headers' 'Content-Type, Authorization, projectid';
            add_header 'Access-Control-Allow-Methods' 'POST, GET, DELETE, OPTIONS';
    
        }
           location /v1/message/ {
            proxy_pass http://127.0.0.1:9030;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            add_header 'Access-Control-Allow-Origin' '*';
            add_header 'Access-Control-Allow-Headers' 'Content-Type, Authorization, projectid';
            add_header 'Access-Control-Allow-Methods' 'POST, GET, DELETE, OPTIONS';
    
        }
    
        location /v1/tcdevices/ {
            proxy_pass http://127.0.0.1:9036;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            add_header 'Access-Control-Allow-Origin' '*';
            add_header 'Access-Control-Allow-Headers' 'Content-Type, Authorization, projectid';
            add_header 'Access-Control-Allow-Methods' 'POST, GET, DELETE, OPTIONS';
    
        }
    
        location  /v1/public/ {
            proxy_pass http://127.0.0.1:9034;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            add_header 'Access-Control-Allow-Origin' '*';
            add_header 'Access-Control-Allow-Headers' 'Content-Type, Authorization, projectid';
            add_header 'Access-Control-Allow-Methods' 'POST, GET, DELETE, OPTIONS';
    
        }
    
        location  /v1/monkey/ {
            proxy_pass http://127.0.0.1:9022;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            add_header 'Access-Control-Allow-Origin' '*';
            add_header 'Access-Control-Allow-Headers' 'Content-Type, Authorization, projectid';
            add_header 'Access-Control-Allow-Methods' 'POST, GET, DELETE, OPTIONS';
    
        }
    
        location ~* /v1/(flow|deploy)/ {
            proxy_pass http://127.0.0.1:9026;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            add_header 'Access-Control-Allow-Origin' '*';
            add_header 'Access-Control-Allow-Headers' 'Content-Type, Authorization, projectid';
            add_header 'Access-Control-Allow-Methods' 'POST, GET, DELETE, OPTIONS';
    
        }
    
        location ~* /v1/(cidata|tool)/ {
            proxy_pass http://127.0.0.1:9024;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            add_header 'Access-Control-Allow-Origin' '*';
            add_header 'Access-Control-Allow-Headers' 'Content-Type, Authorization, projectid';
            add_header 'Access-Control-Allow-Methods' 'POST, GET, DELETE, OPTIONS';
    
        }
    
        location ~* /v1/interface.* {
            proxy_pass http://127.0.0.1:9028;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            add_header 'Access-Control-Allow-Origin' '*';
            add_header 'Access-Control-Allow-Headers' 'Content-Type, Authorization, projectid';
            add_header 'Access-Control-Allow-Methods' 'POST, GET, DELETE, OPTIONS';
    
        }
    
        location ~* /v1/(user|track|role|ability|feedback|wxlogin)/ {
            proxy_pass http://127.0.0.1:9020;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            add_header 'Access-Control-Allow-Origin' '*';
            add_header 'Access-Control-Allow-Headers' 'Content-Type, Authorization, projectid';
            add_header 'Access-Control-Allow-Methods' 'POST, GET, DELETE, OPTIONS';
    
        }
    
        location / {
            proxy_pass http://127.0.0.1:9032;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            add_header 'Access-Control-Allow-Origin' '*';
            add_header 'Access-Control-Allow-Headers' 'Content-Type, Authorization, projectid';
            add_header 'Access-Control-Allow-Methods' 'POST, GET, DELETE, OPTIONS';
    
        }
        
        location ~* /v1/(getfile|getimage|defaultimage)/ {
            proxy_pass http://127.0.0.1:9044;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            add_header 'Access-Control-Allow-Origin' '*';
            add_header 'Access-Control-Allow-Headers' 'Content-Type, Authorization, projectid';
            add_header 'Access-Control-Allow-Methods' 'POST, GET, DELETE, OPTIONS';
    
        }
    
    }

开始启动

一、启动rethinkdb

  • 直接输入rethinkdb启动,占用80端口
  • 指定端口启动rethinkdb --bind all --cache-size 8192 --http-port 8090

二、启动STF

cdstf/bin目录下

这里的192.168.1.2是我本地的IP,换成你自己的IP

./stf local --public-ip 192.168.1.2 --allow-remote

三、启动Tcloud前端

有小伙伴在问前端怎么打包,其实我也不是专业的前端人员,可能用到的方法不是很标准,不过能用就行😁

  1. 开发环境启动
    • cdTcloud/目录下执行npm run dev即可
  2. 需要打包发布到正式环境详情请见文档 Tcloud前端打包发布

四、启动TcloudServer后端

cdTcloudServer/目录下

  • Linux上可以一键启动,如报错没有logs目录,可手动创建logs目录后再执行
./start.sh
  • Mac上不能一键启动,有两种办法

    一种是通过Pycharm工具一个一个右键run启动

    一种就是一个窗口一个窗口单独启动

    这里只介绍用命令启动的办法

python -m apps.auth.run
python -m apps.autotest.run
python -m apps.dowloadfile.run
python -m apps.extention.run
...
以此类推,需要启动apps目录下所有的服务,总共13个

优化显示

一、配置手机图片

  • 将图片上传至OSS或本地,得到图片地址后,手动配置tc_devicesn_info表中pic字段的值
  • 如需图片请自行寻找,涉及到版权问题暂不提供

二、配置手机型号

  • 作者原代码中是拼接了manufacturermodel,这样设备的辨识度不是很高,我修改成配置的方式,只需要像配置设备图片一样手动配置tc_devicesn_info表中comment字段的值,就可以实现自定义设备名称

致谢

yun_mobile's People

Contributors

lin54241930 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.