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
宿主機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
下載百度雲資源,只找到這種方法
初始化項目
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
再次運行,執行成功