walle-web自動化部署配置

1、分發原理php

宿主機、目標機羣、操做用戶關係以下圖所示,宿主機(walle所在的機器),是一箇中間機器,是代碼託管與遠程目標機羣的紐帶。因此宿主機須要與代碼託管(github/gitlab)和遠程目標機羣都創建ssh-key信任。mysql

若是把宿主機的php進程用戶(個人是www)的ssh-key添加到gitlab/github、全部目標機羣,配置就完成了90%。


如何添加?添加ssh-key信任的基本教程
先了解下幾個術語:
宿主機:walle服務安裝所在的機器
目標機:代碼要分發到的機羣
ssh-key信任:可免密碼登陸,一個機器的一個用戶與一個機器的一個用戶經過ssh-key來創建信任(通常爲RSA)
nginx

二、流程git

  1.  宿主機php進程用戶www的ssh-key要加入git/gitlab的deploy-keys。github

        (1) 確認宿主機的php進程用戶
web

            ps aux | grep php-fpmsql

        (2) 獲取宿主機的php進程用戶www的ssh-keyshell

           su www數據庫

           #注:報錯 This account is currently not available.api

           #cat /etc/passwd|grep www

           #www:x:502:502::/home/www:/sbin/nologin

           #/sbin/nologin->/bin/bash

           cat ~/.ssh/id_rsa.pub

           #注:若是不存在,就需建立

           #cd ~/.ssh

           #ssh-keygen -t rsa -C "gitlib帳號"

           #按3個回車,密碼爲空

           #最後獲得了兩個文件:id_rsa和id_rsa.pub

           #把公匙(id_rsa.pub)加入gitlib中想要自動部署項目的deploy-keys列表

         (3) 測試ssh與gitlib創建信任、

            git clone ssh-git-url

    2. 宿主機walle-web安裝

           (1) 部署環境

                cd /usr/local/src

                wget --no-check-certificate https://api.sinas3.com/v1/SAE_lnmp/soft/lnmp1.2-full.tar.gz

                tar zxvf lnmp1.2-full.tar.gz

                cd lnmp1.2-full

                ./install.sh lnmp

           (2) git與github經過ssh-key認證

                設置git的user name和email

                git config --global user.name "github帳戶";

                git config --global user.email "github郵箱";

                cd ~/.ssh

                ssh-keygen -t rsa -C "github帳戶"

                按3個回車,密碼爲空

                最後獲得了兩個文件:id_rsa和id_rsa.pub

                在github上添加ssh密鑰,這要添加的是「id_rsa.pub」裏面的公鑰

               打開https://github.com/settings/ssh ,登錄github,而後添加ssh

            (3) 安裝walle-web

                 cd /home/wwwroot/default

                git clone git@github.com:meolu/walle-web.git

                cd walle-web

                vi config/local.php +14

                'db' => [    

                   'dsn'      => 'mysql:host=127.0.0.1;dbname=walle',     # 新建數據庫walle    

                   'username'  => 'username',                       # 鏈接的用戶名    

                   'password'  => 'password',                       # 鏈接的密碼

                ],

                安裝vendor

                下載百度雲資源,只找到這種方法

                wget -c --referer=http://pan.baidu.com/s/1c0wiuyc -O vendor.tgz "http://lx.cdn.baidupcs.com/file/6807c02bb7a8cd68d170ebb08c41e01e?bkt=p3-14006807c02bb7a8cd68d170ebb08c41e01e52a852010000002a644f&xcode=853628eb666ba31fb12e86997c76bef645e0a99531bcf4b6ed03e924080ece4b&fid=1998902510-250528-381466102786301&time=1455874570&sign=FDTAXGERLBH-DCb740ccc5511e5e8fedcff06b081203-L2BTGTsJmmAATuf66ZbpvVJcZ2o%3D&to=lc&fm=Nan,B,U,nc&sta_dx=3&sta_cs=10&sta_ft=tgz&sta_ct=5&fm2=Nanjing02,B,U,nc&newver=1&newfm=1&secfm=1&flow_ver=3&pkey=14006807c02bb7a8cd68d170ebb08c41e01e52a852010000002a644f&sl=72351822&expires=8h&rt=sh&r=512292022&mlogid=1153459173969396250&vuk=1259209467&vbdid=2529669036&fin=vendor.tgz&fn=vendor.tgz&slt=pm&uta=0&rtype=1&iv=0&isw=0&dp-logid=1153459173969396250&dp-callid=0.1.1"

                初始化項目

                mysql -uroot -p

                password:

                create database walle;

                exit;

                ./yii walle/setup

                配置nginx

                vi /usr/local/nginx/conf/nginx.conf

                root /home/wwwroot/default/walle-web/web

                index index.php

                vi /usr/local/nginx/conf/enable-php.conf

                location /

                {

                    try_files $uri $uri/ /index.php$is_args$args;

                }

        3. 宿主機與目標機配置

            宿主機php進程用戶www要加入目標機羣部署用戶www的ssh-key信任。

            #切換宿主機www

            su www 

    #複製宿主機公匙(id_rsa.pub)到目標機

    ssh-copy-id -i ~/.ssh/id_rsa.pub remote_ip@remote_user

    報錯:Permission denied (gssapi-keyex,gssapi-with-mic,publickey,keyboard-interactive)

    能夠試一下ssh

三、錯誤處理

        1. 宿主機代碼檢出檢測出錯,請確認php進程用戶www有代碼存儲倉庫/data/www/deploy讀寫權限,而且把ssh-key加入git的deploy-keys列表。

            chown -R www.www /data/www/deploy

            chmod -R 755 /data/www/deploy

           注:需把代碼檢出倉庫/data/www/deploy/kt-wechat的kt-wechat刪除

          2. 目標機器部署出錯,請確認php進程www用戶ssh-key加入目標機器的www用戶ssh-key信任列表,且www有目標機器發佈版本庫/data/releases寫入權限。

            chown -R www.www /data/releases

            chmod -R 755 /data/releases

         3. 全量服務器錯誤

            須要目標機www對webroot目錄的上一級有讀寫權限,shell腳本自動建立目錄,無需手動

         4. 目標機www用戶須要可登錄權限,不然報錯

            /etc/passwd   /sbin/nologin->/bin/bash

         5. useradd 建立用戶時報錯

            useradd: warning: the home directory already exists.

            Not copying any file from skel directory into it.

            緣由:

                系統添加用戶的標準步驟

                    1)編輯/etc/passwd與/etc/group

                    2)建立用戶主目錄

                    3)從/etc/skel拷貝文件與目錄

                    4)讓新用戶得到其主目錄與文件的擁有權限

                    5)給新用戶一個密碼

            解決辦法:

                依舊使用useradd建立用戶,而後手動補全缺失文件

                    1)mkdir -p /home/www

                    2)cp /etc/skel/.bash_profile /home/www

                    3)cp /etc/skel/.bashrc /home/www

                    4)cp /etc/skel/.bash_logput /home/www

                   5)mkdir -p /home/www/.ssh

                   6)vi /home/www/.ssh/authorized_keys

                   7)chown www.www  /home/www/.ssh/authorized_keys

四、高級任務

         1. post_release(sudo lnmp restart)

            1).root用戶下vi /etc/sudoers,

               root    ALL=(ALL)    ALL

                這一行以後,添加

                www    ALL=(root)    /bin/lnmp

                :wq 提示E45: 'readonly' option is set (add ! to override)

                :wq!,可保存

                walle部署,報錯  抱歉,您必須擁有一個終端來執行 sudo

                root用戶下,vi /etc/sudoers,搜索requiretty

                註釋掉#Defaults    requiretty這一行

                再次運行walle部署,還需手動填寫www用戶密碼

                root用戶下,vi /etc/sudoers,修改爲

                www    ALL=(root)    NOPASSWD:/bin/lnmp

                再次運行,執行成功

相關文章
相關標籤/搜索