配色: 字号:
centos7
2016-10-30 | 阅:  转:  |  分享 
  
centos7.2环境nginx+mysql+php-fpm+svn配置walle自动化部署系统详解操作系统:centos7.2x86_
64安装walle系统服务端1.以下安装,均在宿主机(一台配置了LAMP/LNMP的linux机器)上操作安装lnmp环境,建议使
用centos7yum安装,因为centos7yum源默认支持Php5.4以上版本,避免walle系统不兼容yuminsta
ll-ymariadbmariadb-servernginxphpphp-bcmathphp-fpmphp-gd
php-jsonfreetypefreetype-develphp-mbstringphp-mcryptphp-mys
qlphp-opcachephp-pdophp-pdo_dblibphp-pgsqlphp-recodephp-snm
pphp-soapphp-xmlphp-pecl-zipmhashlibmcryptlibmcrypt-devel2.
创建walle的web目录,我把web根目录配置成/data/www/walle-web(需要配置nginx指向,后面会详述)mk
dir-p/data/www/walle-web&&cd/data/www/walle-web?#新建目录下载wal
le-web-master.zip并解压(下载地址:https://github.com/meolu/walle-web)unzi
pwalle-web-master.zipcdwalle-web-master3.设置mariadb数据库(mysql的操作一
样),只需要创建数据库,建表的操作交给walle的setup.php安装程序MariaDB[(none)]>createda
tabasewallecharset=utf8mb4collateutf8mb4_unicode_ci;MariaDB[
(none)]>grantallprivilegesonwalle.to''walleuser''@''%''ident
ifiedby''wallepass'';修改walle的web连接vim/data/www/walle-web/walle-w
eb-master/config/local.php+14''db''=>[''dsn''???=>''mysql:hos
t=127.0.0.1;dbname=walle'',#新建数据库walle''username''?=>''username''
,?????????????#连接的用户名''password''?=>''password'',?
????????????#连接的密码],4.安装composer,如果已安装跳过curl-sShttp
s://getcomposer.org/installer|phpmvcomposer.phar/usr/local/bi
n/composer#PATH目录5.安装vendorcd/data/www/walle-web/walle-web-mas
tercomposerinstall--prefer-dist--no-dev--optimize-autoloader
-vvvv安装速度慢或失败,可直接下载vendor解压到项目根目录(即/data/www/walle-web/walle-web-
master目录下)6.初始化项目cd/data/www/walle-web/walle-web-master./yiiwal
le/setup#需要输入yes-----------------------------------------------
---------------------------------------createdir创建目录...mkdiring
dir:/tmp/walle/mkdiringdir:/data/www/walle-web/walle-web-mast
er/runtime/ansible_hosts/mkdiringdir:/data/www/walle-web/walle-
web-master/vendor/bower/jquery/distsetwritable设置可写权限...Setting
writable:/data/www/walle-web/walle-web-master/runtimeSettingwri
table:/data/www/walle-web/walle-web-master/web/assetsSettingwri
table:/tmp/walle/Settingwritable:/data/www/walle-web/walle-web
-master/runtime/ansible_hosts/setexecutable设置可执行权限...Settingex
ecutable:/data/www/walle-web/walle-web-master/yiiupdatedatabase
更新数据库:yiimigrate/up...YiiMigrationTool(basedonYiiv2.0.7
-dev)Creatingmigrationhistorytable"migration"...Done.Total17
newmigrationstobeapplied:m140328_144900_initm150926_151034_i
nit_userm150927_061454_alter_conf_to_mysqlm150929_004629_change_r
ecord_actionm150929_034627_session_to_mysqlm150929_115951_project
_user_groupm151005_001053_alter_conf_2_projectm151010_050344_grou
p_user_adminm151011_054352_task_need_more_longm151012_135612_task
_add_branchm151014_115546_add_pre_release_taskm151018_032238_supp
ort_svnm151027_063246_keep_version_numm160307_082032_ansiblem1604
02_173643_add_post_release_delaym160418_035413_user_status_migrat
em160420_015223_add_file_transmission_modeApplytheabovemigrati
ons?(yes|no)[no]:yesapplyingm140328_144900_init>createt
ableuser...done(time:0.047s)>createtableconf...done(t
ime:0.042s)>createtabletask...done(time:0.016s)>create
tablerecord...done(time:0.018s)appliedm140328_144900_i
nit(time:0.134s)applyingm150926_151034_init_user>insert
into{{%user}}...done(time:0.006s)>insertinto{{%user}}..
.done(time:0.002s)appliedm150926_151034_init_user(time:
0.088s)applyingm150927_061454_alter_conf_to_mysql>dropcol
umnconffromtableconf...done(time:0.050s)>addcolumngit
_urlstring(200)DEFAULT""COMMENT"git地址"totableconf...don
e(time:0.016s)>addcolumndeploy_fromstring(200)NOTNULLCO
MMENT"宿主机存放clone出来的文件"totableconf...done(time:0.017s)>a
ddcolumnexcludesstring(500)DEFAULT""COMMENT"要排除的文件"totab
leconf...done(time:0.027s)>addcolumnrelease_userstring(
50)NOTNULLCOMMENT"目标机器用户"totableconf...done(time:0.059
s)>addcolumnrelease_tostring(200)NOTNULLCOMMENT"目标机器的目录,
相当于nginx的root,可直接web访问"totableconf...done(time:0.010s)>a
ddcolumnrelease_librarystring(200)NOTNULLCOMMENT"目标机器版本发布库
"totableconf...done(time:0.018s)>addcolumnhostsstring
(500)NOTNULLCOMMENT"目标机器列表"totableconf...done(time:0.0
16s)>addcolumnpre_deploystring(500)DEFAULT""COMMENT"部署前置
任务"totableconf...done(time:0.025s)>addcolumnpost_deplo
ystring(500)DEFAULT""COMMENT"同步之前任务"totableconf...done
(time:0.023s)>addcolumnpost_releasestring(500)DEFAULT""C
OMMENT"同步之后任务"totableconf...done(time:0.020s)>addcolum
ngit_typestring(50)DEFAULT"branch"COMMENT"两种上线方式,分支、tag"to
tableconf...done(time:0.034s)>addcolumnauditsmallint(1
)DEFAULT0COMMENT"是否需要审核任务0不需要,1需要"totableconf...done(ti
me:0.025s)>dropcolumncreated_atfromtableconf...done(ti
me:0.012s)>addcolumncreated_atdatetimeCOMMENT"创建时间"after
audittotableconf...done(time:0.022s)>addcolumnupdated
_atdatetimeCOMMENT"修改时间"totableconf...done(time:0.014s)
>dropcolumncreated_atfromtabletask...done(time:0.021s)
>addcolumncreated_atdatetimeCOMMENT"创建时间"totabletask..
.done(time:0.011s)>addcolumnupdated_atdatetimeCOMMENT"修
改时间"totabletask...done(time:0.055s)appliedm150927_061
454_alter_conf_to_mysql(time:0.495s)applyingm150929_004629
_change_record_action>altercolumnactionintablerecordtoin
teger(3)unsignedDEFAULT10COMMENT"任务执行到的阶段"...done(time:0
.021s)appliedm150929_004629_change_record_action(time:0.02
7s)applyingm150929_034627_session_to_mysql>createtablese
ssion...done(time:0.005s)appliedm150929_034627_session_t
o_mysql(time:0.012s)applyingm150929_115951_project_user_gr
oup>createtablegroup...done(time:0.004s)>addcolumnava
tarstring(100)DEFAULT"default.jpg"COMMENT"头像图片地址"AFTERemai
ltotable{{%user}}...done(time:0.014s)appliedm150929_1
15951_project_user_group(time:0.023s)applyingm151005_00105
3_alter_conf_2_project>renametableconftoproject...done(t
ime:0.004s)appliedm151005_001053_alter_conf_2_project(time
:0.011s)applyingm151010_050344_group_user_admin>addcolum
ntypesmallint(1)DEFAULT0COMMENT"用户在项目中的关系类型0普通用户,1管理员"to
tablegroup...done(time:0.032s)>altercolumnuser_idinta
blegrouptointeger(32)NOTNULLCOMMENT"用户id"...done(time:
0.013s)appliedm151010_050344_group_user_admin(time:0.051s)
applyingm151011_054352_task_need_more_long>altercolumnex
cludesintableprojecttotextCOMMENT"要排除的文件"...done(time:
0.013s)>altercolumnhostsintableprojecttotextCOMMENT"目标
机器列表"...done(time:0.015s)>altercolumnpre_deployintable
projecttotextCOMMENT"部署前置任务"...done(time:0.013s)>alter
columnpost_deployintableprojecttotextCOMMENT"同步之前任务"...
done(time:0.012s)>altercolumnpost_releaseintableproject
totextCOMMENT"同步之后任务"...done(time:0.015s)appliedm1510
11_054352_task_need_more_long(time:0.073s)applyingm151012_
135612_task_add_branch>addcolumnbranchstring(100)DEFAULT"m
aster"comment"选择上线的分支"totabletask...done(time:0.011s)>
altercolumnnameintableprojecttostring(100)DEFAULT"master
"comment"项目名字"...done(time:0.009s)appliedm151012_13561
2_task_add_branch(time:0.026s)applyingm151014_115546_add_p
re_release_task>altercolumnpost_releaseintableprojecttot
extCOMMENT"同步之前目标机器执行的任务"...done(time:0.003s)>renamecolu
mnpost_releaseintableprojecttopre_release...done(time:0
.011s)>addcolumnpost_releasetextCOMMENT"同步之后目标机器执行的任务"AFT
ERpre_releasetotableproject...done(time:0.013s)applie
dm151014_115546_add_pre_release_task(time:0.033s)applying
m151018_032238_support_svn>renamecolumngit_urlintableproje
cttorepo_url...done(time:0.040s)>renamecolumngit_typei
ntableprojecttorepo_mode...done(time:0.016s)>altercolu
mnrepo_modeintableprojecttostring(50)DEFAULT"branch"COMM
ENT"上线方式:branch/tag"AFTERrepo_url...done(time:0.015s)>ad
dcolumnrepo_typestring(10)DEFAULT"git"COMMENT"上线方式:git/svn
"AFTERrepo_modetotableproject...done(time:0.014s)>add
columnrepo_usernamestring(50)DEFAULT""COMMENT"版本管理系统的用户名,一般
为svn的用户名"AFTERrepo_urltotableproject...done(time:0.013s)
>addcolumnrepo_passwordstring(100)DEFAULT""COMMENT"版本管理系
统的密码,一般为svn的密码"AFTERrepo_usernametotableproject...done(ti
me:0.037s)>addcolumnfile_listtextCOMMENT"文件列表,svn上线方式可能会产
生"totabletask...done(time:0.009s)>altercolumncommit_id
intabletasktostring(100)DEFAULT""COMMENT"gitcommitid"
...done(time:0.010s)appliedm151018_032238_support_svn(ti
me:0.159s)applyingm151027_063246_keep_version_num>addcol
umnkeep_version_numinteger(3)NOTNULLDEFAULT20COMMENT"线上版本
保留数"AFTERaudittotableproject...done(time:0.012s)>addc
olumnenable_rollbackinteger(1)NOTNULLDEFAULT1COMMENT"能否回滚
此版本:0no1yes"totabletask...done(time:0.011s)appliedm1
51027_063246_keep_version_num(time:0.030s)applyingm160307_
082032_ansible>addcolumnansiblesmallint(3)NOTNULLDEFAULT
0COMMENT"是否启用Ansible0关闭,1开启"AFTERaudittotableproject...
done(time:0.038s)appliedm160307_082032_ansible(time:0.05
9s)applyingm160402_173643_add_post_release_delay>addcolum
npost_release_delayinteger(11)NOTNULLDEFAULT0COMMENT"每台目标
机执行post_release任务间隔/延迟时间单位:秒"AFTERpost_releasetotableprojec
t...done(time:0.010s)appliedm160402_173643_add_post_rele
ase_delay(time:0.015s)applyingm160418_035413_user_status_m
igrate>altercolumnroleintable{{%user}}tosmallint(6)NOT
NULLDEFAULT1...done(time:0.005s)>altercolumnstatusint
able{{%user}}tosmallint(6)NOTNULLDEFAULT1...done(time:
0.003s)>update{{%user}}...done(time:0.006s)>update{{%us
er}}...done(time:0.002s)>update{{%user}}...done(time:0
.002s)>update{{%user}}...done(time:0.003s)>update{{%use
r}}...done(time:0.001s)appliedm160418_035413_user_status
_migrate(time:0.028s)applyingm160420_015223_add_file_trans
mission_mode>altercolumncreated_atintabletasktodatetime
COMMENT"创建时间"AFTERenable_rollback...done(time:0.016s)>al
tercolumnupdated_atintabletasktodatetimeCOMMENT"修改时间"AF
TERcreated_at...done(time:0.052s)>addcolumnfile_transmis
sion_modesmallint(3)NOTNULLDEFAULT1COMMENT"上线文件模式:1.全量所有文
件2.指定文件列表"AFTERbranchtotabletask...done(time:0.039s)
appliedm160420_015223_add_file_transmission_mode(time:0.111s)
Migratedupsuccessfully.----------------------------------------
----------------------------------------------7.配置nginx刷新页面看到50x或
者404均是nginx配置不当,需要查看nginx日志nginx简单配置server{listen???80;ser
ver_name?192.168.3.13;#改你的hostroot/data/www/walle-web/walle-
web-master/web;#根目录为webindexindex.php;#建议放内网#allow192.16
8.0.0/24;#denyall;location/{try_files$uri$uri//index.ph
p$is_args$args;}location~\.php${try_files$uri=404;fastc
gi_pass?127.0.0.1:9000;fastcgi_param?SCRIPT_FILENAME?$docume
nt_root$fastcgi_script_name;include????fastcgi_params;}}8.访
问地址:http://192.168.3.13当然,可能你配置nginx时的server_name是walle.chinasoft
.com时,配置本地hosts之后,直接访问:walle.chinasoft.com亦可。管理员默认账户密码都为:admin至此w
alle系统的部署告一段落walle系统的使用:几个术语:宿主机:walle服务安装所在的机器目标机:代码要分发到的机群ssh-k
ey信任:可免密码登录,一个机器的一个用户与一个机器的一个用户通过ssh-key来建立信任(一般为RSA)实验环境:宿主机192
.168.3.13(部署了walle系统的服务器)目标机器192.168.3.17(需要部署web项目的环境)svn服务器19
2.168.3.18宿主机walle系统上的操作:1.安装ansible,需要ansible命令操作远程主机yuminstall
-yansible添加用户www_php并设置成walleweb端php-fpm的运行用户,该用户主要是宿主机walle用来
操作项目部署(代码拉取、项目部署操作等的用户)useraddwww_phpecho''www_php''|passwd--st
dinwww_phpvim/etc/php-fpm.d/www.conf#配置www_php有运行权限listen.owne
r=www_phplisten.group=www_phpuser=www_phpgroup=www_php修改w
alle_web目录权限,否则不可写chown-Rwww_php.www_php/data/www/walle-web2.把
宿主机的php进程用户的ssh-key添加到gitlab/github(svn不需要添加,直接使用访问svn的账号密码即可wall
e有具体的配置界面),所有目标服务器机群,配置就完成了90%。确认宿主机的php进程用户:viphp-fpm.confuser
=php-user??#看下用的是哪个用户psaux|grepphp-fpm#也是可以的2.获取宿主机的php
进程用户pwww_php的ssh-key并添加到目标主机信任su-php-usercat~/.ssh/id_rsa.pubp
hp-user设置为no-login?先取消no-login,添加完ssh-key认证后再设置为no-loginsu–www.
mntuku.cnssh-keygenssh-copy-id-i.ssh/id_rsa.pubrelease_user@1
92.168.3.17添加目标机器的信任[www_php@localhost~]$ssh-copy-id-i.ssh/id
_rsa.pubrelease_user@192.168.3.17/usr/bin/ssh-copy-id:INFO:att
emptingtologinwiththenewkey(s),tofilteroutanythatare
alreadyinstalled/usr/bin/ssh-copy-id:INFO:1key(s)remainto
beinstalled--ifyouarepromptednowitistoinstallthenew
keysrelease_user@192.168.3.17''spassword:?Numberofkey(s)added:
1Nowtryloggingintothemachine,with:?"ssh''release_user@19
2.168.3.17''"andchecktomakesurethatonlythekey(s)youwante
dwereadded.目标主机chown-Rrelease_user.release_user/data/wwwchmo
d755-R/data/wwwuseraddrelease_userecho''release_user''|passwd
--stdinrelease_user关于walle的错误调试:默认日志打印在/tmp/walle/目录下,centos7.2
没有这个日志目录原因:centos7yum安装的php-fpm默认/tmp目录不可写:/usr/lib/systemd/sy
stem/php-fpm.service中的PrivateTmp=true禁止了向tmp目录写日志解决办法:mkdir/t
mp/wallechmod777-R/tmpvim/usr/lib/systemd/system/php-fpm.serv
ice?PrivateTmp=false重新加载配置生效systemctldaemon-reloadsystemctlrelo
adphp-fpm对svn不熟悉的朋友可以看下:关于SVN的trunk、branch、tag相关概念,网上摘抄的文章——简单的对
比SVN的工作机制在某种程度上就像一颗正在生长的树:一颗有树干和许多分支的树?分支从树干生长出来,并且细的分支从相对较粗的树干中
长出?一棵树可以只有树干没有分支(但是这种情况不会持续很久,随着树的成长,肯定会有分支啦,^^)?一颗没有树干但是有很多分支的树看
起来更像是地板上的一捆树枝?如果树干患病了,最终分支也会受到影响,然后整棵树就会死亡?如果分支患病了,你可以剪掉它,然后其他分支还
会生长出来的哦!?如果分支生长太快了,对于树干它可能会非常沉重,最后整棵树会垮塌掉?当你感觉你的树、树干或者是分支看起来很漂亮的时
候,你可以给它照张相,这样就就可以记得它在那时是多么的赞。?——TrunkTrunk是放置稳定代码的主要环境,就好像一个汽车工厂
,负责将成品的汽车零件组装在一起。以下内容将告诉你如何使用SVNtrunk:除非你必须处理一些容易且能迅速解决的BUG,或者你
必须添加一些无关逻辑的文件(比如媒体文件:图像,视频,CSS等等),否则永远不要在trunk直接做开发不要因为特殊的需求而去对先前
的版本做太大的改变,如何相关的情况都意味着需要建立一个branch(如下所述)不要提交一些可能破坏trunk的内容,例如从bran
ch合并如果你在某些时候偶然间破坏了trunk,bringsomecakethenextday(”withgreat
responsibilitiescome…hugecakes”)——Branches一个branch就是从一个SVN仓库
中的子树所作的一份普通拷贝。通常情况它的工作类似与UNIX系统上的符号链接,但是你一旦在一个SVNbranch里修改了一些文件,
并且这些被修改的文件从拷贝过来的源文件独立发展,就不能这么认为了。当一个branch完成了,并且认为它足够稳定的时候,它必须合并回
它原来的拷贝的地方,也就是说:如果原来是从trunk中拷贝的,就应该回到trunk去,或者合并回它原来拷贝的父级branch。以
下内容将告诉你如何使用SVNbranches:如果你需要修改你的应用程序,或者为它开发一个新的特性,请从trunk中创建一个新的branch,然后基于这个新的分支进行开发除非是因为必须从一个branch中创建一个新的子branch,否则新的branch必须从trunk创建当你创建了一个新branch,你应当立即切换过去。如果你没有这么做,那你为什么要在最初的地方创建这个分支呢?——Tags从表面上看,SVNbranches和SVNtags没有什么差别,但是从概念上来说,它们有许多差别。其实一个SVNtags就是上文所述的“为这棵树照张相”:一个trunk或者一个branch修订版的命名快照。以下内容将告诉你如何使用SVNtags:作为一个开发者,永远不要切换至、取出,或者向一个SVNtag提交任何内容:一个tag好比某种“照片”,并不是实实在在的东西,tags只可读,不可写。在特殊或者需要特别注意的环境中,如:生产环境(production)、?(staging)、测试环境(testing)等等,只能从一个修复过的(fixed)tag中checkout和update,永远不要commit至一个tag。对于上述提及到的环境,可以创建如下的tags:“production”,“staging”,“testing”等等。你也可以根据软件版本、项目的成熟程度来命名tag:“1.0.3”,“stable”,“latest”等等。当trunk已经稳定,并且可以对外发布,也要相应地重新创建tags,然后再更新相关的环境(production,staging,etc)——工作流样例假设你必须添加了一个特性至一个项目,且这个项目是受版本控制的,你差不多需要完成如下几个步骤:使用SVNcheckout或者SVNswitch从这个项目的trunk获得一个新的工作拷贝(branch)使用SVN切换至新的branch完成新特性的开发(当然,要做足够的测试,包括在开始编码前)一旦这个特性完成并且稳定(已提交),并经过你的同事们确认,切换至trunk合并你的分支至你的工作拷贝(trunk),并且解决一系列的冲突重新检查合并后的代码如果可能的话,麻烦你的同事对你所编写、更改的代码进行一次复查(review)提交合并后的工作拷贝至trunk如果某些部署需要特殊的环境(生成环境等等),请更新相关的tag至你刚刚提交到trunk的修订版本使用SVNupdate部署至相关环境
献花(0)
+1
(本文系雨亭之东首藏)