美文网首页
搭建Walle2.0自动部署(国产Jenkins)

搭建Walle2.0自动部署(国产Jenkins)

作者: Super三脚猫 | 来源:发表于2020-01-03 17:15 被阅读0次
    Walle.png

    看到Walle是不是会想到迪士尼电影瓦力~~~

    瓦力.png

    Walle2.0 自动化部署

    开启部署之旅

    这么好用并且尤其是国产,我们必须要:github - walle给此项目标个星star
    然后再克隆git clone https://github.com/meolu/walle-web.git

    • Install
    【克隆项目】git clone https://github.com/meolu/walle-web.git
    【初始化】sh admin.sh init
    
    • 修改walle配置数据库连接
    # 这里是自己的绝对路径 请勿核对后复制后半段
    【打开配置文件】vim /home/wwwroot/walle-web/walle/config/settings_prod.py
    需要修改的部分:@TODO
    
    SETTINGS = {
        "MYSQL_USER": "root",
        "MYSQL_PASSWORD": "walle",
        "MYSQL_DATABASE": "walle",
        "MYSQL_ROOT_PASSWORD": "walle",
        "MYSQL_HOST": "127.0.0.1",
        "MYSQL_PORT": 3306,
    }
    ...
    HOST = 'walle.xxxxx.com'
    PORT = 5000
    ...
    # 数据库设置 @TODO
    SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://{}:{}@{}:{}/{}?charset=utf8mb4'.format(
        SETTINGS["MYSQL_USER"], SETTINGS["MYSQL_PASSWORD"], SETTINGS["MYSQL_HOST"], SETTINGS["MYSQL_PORT"],
        SETTINGS["MYSQL_DATABASE"])
    
    • Migration !(Mysql5.6.5+
    【创建数据库】mysql -h 127.0.0.1 -u root -p -e'create schema walle default character set utf8mb4 collate utf8mb4_general_ci'
    【执行迁移】sh admin.sh migration # 这一部大部分人会报错请看最下面的问题解决
    【启动】sh admin.sh start
    【重启】sh admin.sh restart
    【升级】sh admin.sh upgrade # 暂时还没用过,因为目前作者并未更新版本
    
    • tail logs (附Linux命令)
    【清空日志】> test.log
    【实时监控100行日志】tail -100f logs/runtime.log
    【查询日志尾部最后10行的日志】tail -n 10 logs/runtime.log
    # 防止日志没有写入权限
    【修改日志用户属组】chown -R www:www dir
    【修改权限】chmod -R 660 dir
    
    • nginx配置(为了安全并配置指定开放IP地址)
    upstream webservers {
        server 0.0.0.0:5000 weight=1; #域名设置(不要更改)
    }
    
    server {
        listen       80;
        server_name  walle.xxxxx.com;
        #access_log   /data/logs/nginx/walle.log main;
        index index.php index.html index.htm;
    
        location / {
            # 配置指定ip地址 访问 隔离其余用户
            # if ($remote_addr != '39.***.***.***') {
            #     return 403;
            # }
    
            try_files $uri $uri/ /index.html;
            add_header access-control-allow-origin *;
            root /home/wwwroot/walle-web/fe; # 前端代码已集成到walle-web,即walle-web/fe的绝对路径
        }
    
        location ^~ /api/ {
            add_header access-control-allow-origin *;
            proxy_pass      http://webservers;
            proxy_set_header X-Forwarded-Host $host:$server_port;
            proxy_set_header  X-Real-IP  $remote_addr;
            proxy_set_header    Origin        $host:$server_port;
            proxy_set_header    Referer       $host:$server_port;
        }
    
        location ^~ /socket.io/ {
            add_header access-control-allow-origin *;
            proxy_pass      http://webservers;
            proxy_set_header X-Forwarded-Host $host:$server_port;
            proxy_set_header  X-Real-IP  $remote_addr;
            proxy_set_header    Origin        $host:$server_port;
            proxy_set_header    Referer       $host:$server_port;
            proxy_set_header Host $http_host;
            proxy_set_header X-NginX-Proxy true;
    
            # WebScoket Support
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";
        }
    }
    
    • Hosts
    vim /etc/hosts
    # 新增一行
    127.0.0.1  walle.xxxxx.com
    
    大白话解答权限管理
    • 默认用户并且他们的作用
      默认密码都是:Walle123
    1. 超管:super@walle-web.io
    2. 所有者:owner@walle-web.io
    3. 负责人:master@walle-web.io
    4. 开发者:developer@walle-web.io
    5. 访客:reporter@walle-web.io
    • 权限模型->权限模型角色

    首先使用super账户新增一个用户A和开发用户B,并新增一个空间SA,把A赋予SA作为空间所属人(这里俗称组长),然后就用用户A去管理整个空间以及分配权限。
    所以说白了超管就是来1.添加用户2.赋予空间管理员

    登陆A组长用户后,通过他自己的用户管理把B开发者添加到此空间来
    所以空间就类似项目组,组长把组员拉进来

    • 权限码表 (官网搬过来的)
    1. 一个用户必须先分配一个空间,方可登录系统
    2. 用户所有操作均在登录空间下,或有多个空间可以切换
    action reporter developer master owner super
    Dashboard-xxx-查看
    部署中心-上线单-查看
    配置中心-项目管理-查看
    部署中心-上线单-新建、更新、删除
    用户中心-用户管理-查看
    用户中心-用户组管理-查看
    部署中心-上线单-审核
    配置中心-服务器管理-查看
    配置中心-项目管理-更新、删除
    配置中心-服务器管理-新建、更新、删除
    配置中心-项目管理-新建
    用户中心-用户管理-更新、删除
    用户中心-用户组管理-更新、删除
    用户中心-负责空间管理-查看、更新
    空间管理-新建、查看、更新、删除
    部署Vue项目

    目的是:
    1. 摆脱本地打包后在dist里用git上传提交代码
    2. 解决前端等待打包时间
    3. 最恶心的就是打包上传后,文件/代码报错!需要继续等待打包然后上传。有walle的话就可以当场回滚代码,节约了大家的调试时间。

    • yum安装Node.js
     # setup_10.x 是对应的node版本
    【下载】curl --silent --location https://rpm.nodesource.com/setup_10.x | sudo bash -
    【安装】sudo yum -y install nodejs
    【检查】node -v
    【移除】yum remove nodejs npm -y
    
    • 神奇的n模块 => node版本更新/切换
      (n模块不支持Windows!!!)
      推荐使用 nvm node版本管理
    【安装n模块】npm install -g n
    【升级node】n stable
     # n命令冲突时需要 `/usr/local/node-v13.0.1-linux-x64/bin/n v10.16.3` 这种方式
    【安装指定版本】n v10.16.3
    
    • 配置cnpm淘宝镜像(为了更快的打包部署)
      淘宝镜像
    【临时使用】
    【持久使用】npm --registry https://registry.npm.taobao.org install express
    【检测配置】npm config get registry
    【通过cnpm使用】npm install -g cnpm --registry=https://registry.npm.taobao.org
    【使用】cnpm install express
    
    • 安装Vue脚手架 vue/cli
    【全局安装】npm install -g @vue/cli
    
    • 自定义全局变量
    PROJECT_PATH=/home/wwwroot/walle-project/{project-A}/
    VUE_BUILD=/{dir}/{dir}
    WEB_ROOT=/home/wwwroot/{project-A}
    
    • 高级任务-Release前置任务
    echo '执行 git 拉取代码中 ... ...'
    
    • 配置高级任务-Release后置任务
    echo '===============================>>>>>>>'
    echo '开始部署:'${PROJECT_NAME} - ${BRANCH}分支
    echo '当前部署的版本号:'${COMMIT_ID} - ${DEPLOY_USER}
    echo '<<<<<<==============================='
    cd ${WEB_ROOT}${VUE_BUILD} && cnpm install
    echo '开始打包... ...'
    cd ${WEB_ROOT}${VUE_BUILD} && npm run build
    echo '结束部署:'${DEPLOY_USER} - ${DEPLOY_TIME}
    
    任务配置.png
    系统预置可用高级变量 (官方搬过来)
    高级变量 备注 样例
    ${WEBROOT} 目标集群部署路径 /data/www/walle-tiny-demo
    ${CURRENT_RELEASE} 目标集群部署仓库 /data/releases/walle-tiny-demo
    ${VERSION} 当前要发布目标集群部署仓库里的版本 29_78_20190225_190422
    ${BRANCH} 当前部署分支 master
    ${COMMIT_ID} 当前部署的commit_id abcde12
    ${PROJECT_NAME} 当前部署的项目名称 大数据平台
    ${PROJECT_ID} 当前部署的项目id 12
    ${TASK_NAME} 当前部署的任务名称 增加图表样式
    ${TASK_ID} 当前部署的任务id 11
    ${DEPLOY_USER} 当前部署的用户 吴水永
    ${DEPLOY_TIME} 当前部署的时间 2019-01-01 10:09:03

    问题集合 github - issues

    我提交并解答过的:

    1. No module named flask.helpers
    • 查看 walle 日志报错 flask.helpers 或者 No such command "db"
      日志类似如下:
    Traceback (most recent call last):
    File "waller.py", line 5, in <module>
    from flask.helpers import get_ debug_ flag 
    ImportError: No module named flask.helpers
    
    • 检查 sh admin.sh init 初始化时是否最后有报错:如下图
      ERROR: Package 'gunicorn' requires a different Python: 2.7.5 not in '>=3.4'
    gunicorn.png
    • python环境是2.7+
      需要需改文件配置:/walle-web/requirements/prod.txt 如下图
    # Deployment
    gunicorn>=19.1.1  改成 gunicorn==19.1.1
    
    prod.txt.png
    • 然后一定要重新初始化 sh admin.sh init 再去执行初始化部署
      如果还是不行 pip list 检查一下是否有 flask-helpers
      如果没有 pip install flask-helpers 安装后再尝试部署 sh admin.sh init
    1. Error: No such command "db"
      如下图:(同1.的解决方法一样,同一个问题不同的报错)

      No such command.png
    2. 执行migration时报错,大部分是数据库没有配置

    sqlalchemy.exc.OperationalError: (pymysql.err.OperationalError) 
    (1045, u"Access denied for user 'root'@'localhost'
     (using password: YES)") (Background on this error at: http://sqlalche.me/e/e3q8)
    Migration:                 [ fail ]
    

    查看文章上面的「修改walle配置数据库连接」
    修改walle-web/walle/config/settings_prod.py配置文件

    1. 重启服务器后 接口nginx502 处理
    • 解决:重新执行以下 【启动】sh admin.sh start
    connect() failed (111: Connection refused) while connecting to upstream, client: 
    39.xx.xxx.xx0, server: xxx.xxxx.com, 
    request: "GET /api/general/menu HTTP/1.1", upstream: 
    "http://0.0.0.0:5000/api/general/menu", host: "xxx.xxxx.com", 
    referrer: "http://xxx.xxxx.com/"
    
    walle接口502.png walleNginx日志.png
    最后 我想说 :!
    • 关于 walle 官方说:

    我们期望打造一个比 jenkins 更为好用的的部署平台,walle团队孜孜不倦地做免费开源。愿 walle 能真真切切为你解决 DevOps 的问题,也愿能与志同道合之人相知畅聊。

    • 关于 搭完之后我想说:

    都记的去 github 点一个star,这是最有效的支持!!!!!!!
    然后钱不在多,多少都是心意,哈哈哈哈哈嗝。寓意希望Walle走的长长久久

    打赏作者杯咖啡.jpeg

    相关文章

      网友评论

          本文标题:搭建Walle2.0自动部署(国产Jenkins)

          本文链接:https://www.haomeiwen.com/subject/xfftactx.html