zoukankan      html  css  js  c++  java
  • 瓦力在线部署工具

    首先感谢软件开源作者http://www.walle-web.io/aboutme.html

    官方教程http://www.walle-web.io/

    依赖环境 centos7

    ansible非必须

    php5.6安装过程

    1. 删除老的安装包

    remove php.x86_64 php-cli.x86_64 php-common.x86_64 php-gd.x86_64 php-ldap.x86_64 php-mbstring.x86_64 php-mcrypt.x86_64 php-mysql.x86_64 php-pdo.x86_64

    2. 这个链接包含安装php5.6源和svn用法

    http://www.cnblogs.com/jokerbj/p/9034188.html

    3. 安装php5.6相关组件

    yum install php56w.x86_64 php56w-cli.x86_64 php56w-common.x86_64 php56w-gd.x86_64 php56w-ldap.x86_64 php56w-mbstring.x86_64 php56w-mcrypt.x86_64 php56w-mysql.x86_64 php56w-pdo.x86_64

    4. 安装php-fpm 5.6

    yum install php56w-fpm

    nginx服务

    yum install nginx

    其他依赖

    需要安装svn,git命令

    yum install svn git

    瓦力安装

    该安装我们称为宿主机安装,其实也就是瓦力在这台机子上部署而已,svn可以不放在宿主机

    我们实验环境如下

    宿主机 192.168.1.127

    目标主机(上线的主机,业务主机)192.168.1.107

    因为我只有2个主机,所以我们在192.168.1.127只安装了瓦力,192.168.1.107安装svn服务和mysql服务

    1.代码检出

    mkdir -p /data/www/walle-web && cd /data/www/walle-web  # 新建目录
    git clone https://github.com/meolu/walle-web.git . # 代码检出

    2.设置mysql连接

    vi config/local.php +14
    'db' => [
    'dsn' => 'mysql:host=192.168.1.107;dbname=walle', # 新建数据库walle
    'username' => 'walle', # 连接的用户名
    'password' => '123456', # 连接的密码
    ],

    3.安装composer,如果已安装跳过

    curl -sS https://getcomposer.org/installer | php
    mv composer.phar /usr/local/bin/composer # PATH目录

    php -r "readfile('installer');" | php

     

    4.安装vendor

    cd walle-web
    composer install --prefer-dist --no-dev --optimize-autoloader -vvvv

    安装速度慢或失败,可直接下载vendor解压到项目根目录

    5.初始化项目

    cd walle-web
    ./yii walle/setup # 需要你的yes

    ./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php/etc --enable-ctype --with-mysql=mysqlnd --with-mysqli=mysqlnd --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir=/usr --enable-xml --disable-rpath --enable-bcmath --enable-shmop --enable-sysvsem --enable-inline-optimization --with-curl --enable-mbregex --enable-mbstring --with-mcrypt --with-gd --enable-gd-native-ttf --with-openssl --with-mhash --enable-pcntl --enable-sockets --with-ldap-sasl --with-xmlrpc --enable-zip --enable-soap --with-gettext --enable-fpm --with-pdo_mysql

    6.配置nginx

    凡是在第7步刷新页面看到50x均是前5步安装不完整,自行检查

    凡是在第7步刷新页面看到404均是nginx配置不当,自行检查

    nginx简单配置

    server {
    listen 80;
    server_name 192.168.1.127; # 改你的host
    root /data/www/walle-web/web; # 根目录为web
    index index.php;

    # 建议放内网
    # allow 192.168.0.0/24;
    # deny all;

    location / {
    try_files $uri $uri/ /index.php$is_args$args;
    }

    location ~ .php$ {
    try_files $uri = 404;
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;
    }
    }

    [root@joker walle-web]# systemctl start nginx
    [root@joker walle-web]# systemctl start php-fpm

    [root@joker walle-web]# systemctl start mysqld

    7.恭喜:)

    访问地址:localhost

    当然,可能你配置nginx时的server_name是192.168.1.127时,配置本地hosts之后,直接访问:192.168.1.127亦可。

    默认密码admin admin

    svn项目配置

    svn 项目配置

    svn部署上线与git有点不太一样,svn是推荐增量发布(当然也可以全量更新),在开发者提交文件列表(可能带版本号),管理员审核上线单。发起部署时,为该上线单开辟一个独立空间,检出代码,选择上线单中的文件(可能带版本号)同步到目标机群。有不了解宿主机和目标机群关系、上线流程的同学先到项目主页了解。

    因为svn没有git的版本快照,所以在部署需要全量代码编译操作时,只能选择全量更新,此时要求发布的分支/tag/trunk是可发布状态。建议java + git组合。同理其它需要全量代码在宿主机做编译相关的操作的语言,且为svn版本管理,请慎用。

    一、基本要求:

    1. svn目录推荐以下规范,详细可以注册riouxsvn,作为svn测试地址。当然三无(无trunk、无branches、无tags)也是支持:)

      • branches
      • tags
      • trunk
    2. 宿主机php进程用户www_php(假如,可通过配置的检测查看或ps aux|grep php)要加入目标机群部署用户www_remote(配置中)ssh-key信任,具体怎么添加可找sa或者百度或者,这一般是用户最不理解的地方,建议先花半小时理解linux用户概念和php配置。

    二、配置项目


    三、检测项目配置

    配置完毕之后,先检测下,如无问题则可以发起上线单了:)

    四、检测的错误和解决办法

    • 宿主机代码检出检测出错,请确认php进程用户{user}有代码存储仓库{path}读写权限。详细错误:{error},PHP默认启动用户apache,我们将php和nginx启动用户改成work,创建work用户。根据上图咱们的paht就是/home/work/tmp

      没有权限,是因为用户{user}对目录{path}没有读写权限,给权限即可
      ll {path}
      chown {user} -R {path}
      chmod 755 -R {path}
    • 目标机器部署出错,请确认php进程{local_user}用户ssh-key加入目标机器的{remote_user}用户ssh-key信任列表,且{remote_user}有目标机器发布版本库{path}写入权限。详细错误:{error},目标主机也是要创建work用户,为了后面同步

      • 问题:请确认php进程{local_user}用户ssh-key加入目标机器的{remote_user}用户ssh-key信任列表

        添加机器信任,还是没理解请百度吧(因为太多的同学问这问题,实在没办法只能这么啰嗦)
        su {local_user} && ssh-copy-id -i ~/.ssh/id_rsa.pub remote_user@remote_server
        # need remote_user's password
      • 问题:{remote_user}有目标机器发布版本库{path}写入权限,咱们的path目录就是/data/www/web-data

        su remote_user
        ll {path}
        chown {remote_user} -R {path}
        chmod 755 -R {path}

    其他问题http://www.walle-web.io/docs/troubleshooting.html

    增加个环境

    models/Project.php
    //研发环境
    const LEVEL_DEV = 4;


    messages/zh-CN/w.php
    'conf_level_4' => '研发环境',

    views/task/select-project.php
    <!-- 研发环境 -->
    <div class="widget-box transparent">
    <div class="widget-header">
    <h4 class="lighter"><?= yii::t('w', 'conf_level_4') ?></h4>

    <div class="widget-toolbar no-border"><a href="javascript:;" data-action="collapse">
    <i class="icon-chevron-up"></i>
    </a>
    </div>
    </div>

    <div class="widget-body">
    <div class="widget-main padding-6 no-padding-left no-padding-right">
    <?php foreach ($projects as $project) { ?>
    <?php if ($project['level'] == Project::LEVEL_DEV) { ?>
    <a class="btn btn-inline btn-info" style="min-120px;margin:auto auto 20px 40px;" href="<?= Url::to("@web/task/submit?projectId={$project['id']}") ?>"><?= $project['name'] ?></a>
    <?php } ?>
    <?php } ?>
    </div>
    </div>
    </div>

    views/conf/edit.php
    Project::LEVEL_DEV => Yii::t('w', 'conf_level_' . Project::LEVEL_DEV),

    Executing: $ ssh -T -p 33899 -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -o CheckHostIP=false 'www'@'ip'
    'ln -sfn /data/releases/nidaye/20190625-125715 /data/releases/nidaye/current-nidaye.tmp
    && chown -h www /data/releases/nidaye/current-nidaye.tmp
    && mv -fT /data/releases/nidaye/current-nidaye.tmp /data/www/nidaye
    && . /etc/profile && cd /data/releases/nidaye/20190625-125715
    && echo "restart" > /tmp/log && sh /home/www/test.sh'


    执行 -T 伪终端,保持连接
    -q 静默模式
    -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no 取消交互认证
    -o CheckHostIP=false 防止DNS欺骗


    -s 软连接
    -f 覆盖
    -n 目录当做普通文件


    -f 禁止交互操作,就是不提醒
    -T 避免目标目录是否存在而产生的不确定性

  • 相关阅读:
    前后台$.post交互并返回JSON对象
    Hello World
    Jquery表单插件使用
    MyBatis插入语句返回主键值
    $ is not defined与SpringMVC访问静态资源
    MySql查询数据令某字段显示固定值
    更改我的网页默认的暴风影音播放器
    adodb.stream对象的方法/属性
    【顶】Asp无组件生成缩略图 (3)
    关于MD5的加解密
  • 原文地址:https://www.cnblogs.com/jokerbj/p/9510460.html
Copyright © 2011-2022 走看看