Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Modeler   Code  
»áÔ±   
 
   
 
 
     
   
 ¶©ÔÄ
  ¾èÖú
Puppet£¬Chef£¬AnsibleµÄ¹²ÐÔ
 
 À´Ô´£º²©¿Í ·¢²¼ÓÚ£º 2016-12-30
  2631  次浏览      30
 

±¾ÎÄÊÔͼÕÒµ½ÀàËÆPuppet¡¢Chef¡¢AnsibleÕâÑù×Ô¶¯»¯ÅäÖùÜÀí¹¤¾ßµÄ¹²ÐÔ£¬ÒÔ²»ÖÁÓÚÃÔʧÔÚÔÓÂҵij¾ÊÀÖС£×Ü»áÓи÷ÖÖÈËΪ¸÷ÖÖÄ¿µÄÔì¸ÅÄÀ´ÈÃÊÀ½ç¸ü¸´ÔÓ¡£

±¾ÎÄͬÑùÊÊÓÃÓÚûÓÐÔËά¾­ÑéµÄÈË¡£ÒòΪÎÒ¾ÍÊÇÒ»¸öûÓÐÔËά¾­ÑéµÄÈË¡£»¶Ó­¸«Õý¡£

ÓëÕâØíÖ®¼äµÄÀúÊ·

±¾È˽Ӵ¥×Ô¶¯»¯ÔËάµÄʱ¼ä±È½ÏÍí£¬Ò²¾ÍÒ»Äêǰ²ÅÖªµÀPuppet¼°×Ô¶¯»¯ÔËά£¨Ö»ÏÞÓÚÖªµÀ£©£¬¶øChef¡¢Ansible¾Í¸üÍíÁË¡£È»¶øÔÚѧϰËüÃÇ֮ǰ£¬ÎÒ¶ÔÔËάҪ×öÄÄЩÊÂÇ鲢ûÓиÅÄî¡£Õâ¾Í¶ÔÎÒѧϰPuppet£¬ChefºÍAnsibleÔì³ÉµÄÕϰ­¡£ÒòΪ²»ÖªµÀÕâÈý¸ö¹¤¾ßÔÚÔËάÁìÓòµÄλÖ㬽â¾öÔËά¹ý³ÌÖеÄÄÄЩÎÊÌâ¡£ÎÒ¶ÔÕâÈý¸ö¹¤¾ßµÄ×î³õÓ¡Ïó¾ÍÊÇÓÐÁËËüÃÇ£¬²»ÓÃÎÒÊÖ¹¤µÄSSHÉÏ·þÎñÆ÷£¬È»ºóÒ»ÌõÌõÃüÁîÈ¥Ö´Ðа²×°Èí¼þ£¬²»ÓÃSCP war°üÉÏ·þÎñÆ÷µÈ£¬¶Ô·þÎñÆ÷µÄ²Ù×÷¶¼¿ÉÒÔ×Ô¶¯»¯ÁË¡£

Õâ¸ö×î³õÓ¡ÏóÒ²¾ÍÊÇÎÒ¸úËüÃǵÄÀúÊ·¡£ÎªÊ²Ã´ÒªËµÕâÐ©ÄØ£¿¾ÍÊÇÒòΪÕâ¸ö×î³õÓ¡Ïó£¬ÈÃÎÒ¾õµÃËüÃÇÊÇÓй²ÐÔ¡£Ëùν¹²ÐÔ¾ÍÊÇ´æÔÚһЩ¹²Í¨µÄ¸ÅÄî»òÔ­ÀíÖ®ÀàµÄ¶«Î÷£¬ÕÆÎÕÕâЩ¡°¶«Î÷¡±£¬ÎҾͿÉÒÔÕ¾ÔÚÒ»¸ö¸ü¸ßµÄ¸ß¶Èȥ˼¿¼¡£Puppet, Chef, Ansible¶¼Êǹ¤¾ß£¬¶ÔÓÚ¹¤¾ßÀ´Ëµ£¬¹²ÐÔÖ¸µÄÊÇËüÃǹ²Í¬Òª½â¾öµÄÎÊÌâ¡£

µ«Êǵ±ÎÒ·­Á˲»ÉÙÎÄÕºóÒÀȻûÓнá¹û¡£ËùÒÔ£¬ÎÒ¾ö¶¨×Ô¼ºÈ¥ÕÒËüÃǵĹ²ÐÔ£¬²¢¼Ç¼ÏÂÀ´¡£

×ÔÖÆÒ»¸ö×Ô¶¯»¯ÔËά¹¤¾ß

µ«ÊÇÒª´Ó¶à¸öÏàËÆµÄ¶«Î÷ÖÐÕÒµ½¹²ÐÔ£¬ËƺõÐèҪͬʱºÜÊìϤËüÃÇ¡£µ«ÊÇÎÒûÓÐÄÇô¶àʱ¼ä¡£ËùÒÔ£¬ÎÒÑ¡ÔñÁËÁíÒ»ÖÖ·½·¨£ºÔÚ´óÄÔÖÐÔ¤Ïë×Ô¼ºÈ¥ÊµÏÖÒ»Ì××Ô¶¯»¯ÔËά¹¤¾ß¡£µ«ÎÊÌâÊÇ£¬ÎÒ¶¼²»ÖªµÀ¡°×Ô¶¯»¯ÔËά¹¤¾ßҪʵÏÖÄÄЩ¹¦ÄÜ¡£

ÄÇÎÒ¾ÍÏȰÑÄ¿±ê½µµÍһЩ£¬°ÑÎÊÌâ¼ò»¯Ò»Ï£º½«ÎÒ×î³õµÄ¡°Ó¡Ïó¡±ÊµÏÖ×Ô¶¯»¯ÁË¡£ÎÒÄÜÏëµ½µÄ¾ÍÊÇдһ¸öbash½Å±¾£º

ssh ....

apt-get install -y java

apt-get -y nginx

scp ..

ºÃ£¬ÏÖÔÚ½«ÎÊÌâÄѶȼӴ󣺶Զą̀·þÎñÆ÷½øÐÐͬÑùµÄ²Ù×÷¡£ÎÒÄܵ½Ïë¾ÍÊǽ«ËùÓеķþÎñÆ÷µÄIP·ÅÔÚÒ»¸öÊý×éÀȻºóÓÃforÑ­»·Ö´ÐС£ÎÊÌâÀ´ÁË£¬Èç¹ûÎÒ¶Ô·þÎñÆ÷ÒѾ­Ö´ÐÐÁËÒ»´ÎÃüÁîʱ¿ÉÄÜ»áʧ°Ü£¬ÎÒÔÙÏëÖ´Ðеڶþ´ÎÔõô°ìÄØ£¿Õâʱ£¬ÎÒÃÇ¿ÉÒÔÔÚbash½Å±¾Àï¼ÓÉÏifÓï¾ä£¬Èç¹û°²×°ÁËjava¾Í²»°²×°µÚ¶þ´ÎÁË¡£

ÏÔÈ»ÏÖʵÖл¹»áÓкܶàÎÊÌ⣬È磺

·´ÏòÅäÖÃÎÊÌ⣬Õâʱ£¬ÎÒÃÇÓ¦¸ÃÁíдһ¸öbash½Å±¾À´½â¾öÕâ¸ö·´ÏòµÄÎÊÌ⣿Èç¹û²ÉÓÃÕâÖÖ·½°¸£¬ÎÒÃÇbash½Å±¾ÊýÁ¿ÉÏÉýµ½Ò»¶¨³Ì¶È£¬ÈçºÎ¹ÜÀíÕâЩ½Å±¾¼°ËüÃÇÖ®¼äµÄ¹ØÏµ£¬Õâ¸ö·½°¸´øÀ´µÄеĸ´ÔÓÐÔ½«»á³ÉΪÎÒÃǵÄÐÂÎÊÌ⣻

·þÎñÆ÷ÉϲÙ×÷ϵͳµÄ¼æÈÝÐÔÎÊÌ⣺²»Í¬µÄ²Ù×÷ϵͳ£¬ÎÒÃǵÄbashÃüÁî»á²»Í¬£»

Èí¼þµÄ°æ±¾Éý¼¶»ò½µ¼¶ÎÊÌâµÈµÈ¡£

Ãæ¶ÔÕâЩÎÊÌ⣬ÎÒÃÇÊÇ¿ÉÒÔÿ´Î¶¼ÓÃbash½â¾ö£¬µ«ÊÇÕâÑùʼÖÕ²»ÊǸö°ì·¨¡£ÒòΪ£¬bash¶ÔÓÚ½¨Á¢Ò»¸ö×Ô¶¯»¯ÔËά¹¤¾ß¹ýÓڵײ㡣˵µ½Õâ¾ä»°£¬ÄãÓ¦¸ÃºÜÈÝÒ×¾ÍÏëµ½Éè¼ÆÒ»ÖÖDSL¡£µ½Õâ¸öµã£¬ÎÒ¾õµÃÎÒÃǵķ½ÏòÒѾ­Ã÷ÀÊ¡£Puppet, ChefºÍAnsible¶¼·Ö±ð²ÉÓò»Í¬µÄDSL¡£¶øÕâÖÖDSLÊÇÐèÒª±àÒë³É·þÎñÆ÷¿ÉÖ´ÐеĶ«Î÷µÄ¡£Ê²Ã´¶«Î÷ÊÇ¿ÉÖ´Ðеģ¿Ä¿Ç°£¬ÎÒÃǼÙÉèÕâ¸ö¶«Î÷ÊÇbash½Å±¾¡£

µ«ÊÇÕâ¸öDSLÊÇ·ÅÔÚÄÄÀï±àÒëÄØ£¿·ÅÔÚÊܿػúÆ÷¶Ë£¬»¹ÊÇÖ÷¿Ø»úÆ÷ÉÏ£¿ËùÒÔ£¬ÎÒÈÏΪËùÓеÄ×Ô¶¯»¯ÔËά¹¤¾ß¶¼»áÓöµ½Õâ¸öÎÊÌ⡣ʲôÊÇÊܿػúÆ÷ÓëÖ÷¿Ø»úÆ÷£¿Äã¾ÍÀí½â³Éһ̨»úÆ÷Ö»·¢ÃüÁÁíһ̨»úÆ÷Ö»Ö´ÐÐÃüÁî¡£

ÎÒÃǸոÕ̸µÄÊÇÉè¼ÆDSL¡£µ«ÊÇ£¬ÒªÉè¼ÆÒ»¸öÍêÕûµÄ×Ô¶¯»¯ÔËά¹¤¾ß£¬ÎÒÃÇ×îÏÈÓ¦¸Ã¿¼ÂÇÊÇÖ÷¿Ø»úÆ÷ÈçºÎÓëÊܿػúÆ÷ͨÐÅ¡£Õâ¸öÎÊÌâÈÃÎҺܳ¤Ê±¼ä¸Ðµ½ºÜÎÞÁ¦£¬ÒòΪÎÞ´ÓÏÂÊÖ¡£ºóÀ´ÐÑÎò£¬Ô­À´Äã²»Äܵ¥¶À¿¼ÂÇÕâ¸öÎÊÌ⣬ͨÐÅ·½Ê½»¹ÓëÄãÉè¼ÆµÄDSL¼°±àÒëDSLµÄ·½Ê½Óйء£Í¬Ê±£¬ÊܿػúÆ÷µÄÖ´Ðнá¹ûÕâ¸öÎÊÌ⣬ҲӰÏì×ÅÎÒÃÇÉè¼ÆDSL¡£

ÉÏÃæÎÒÃÇËÆºõÍü¼ÇÁËÒ»¸öÊÂʵ£º×Ô¶¯»¯ÔËά¹¤¾ßÓ¦¶ÔµÄÍùÍù²»ÊÇһ̨»úÆ÷£¬¶øÊǺܶą̀»úÆ÷¡£µ±Ãæ¶Ô¶ą̀»úÆ÷ʱ£¬¾Í»á²úÉúÒ»¸öеÄÎÊÌ⣺ÈçºÎ×éÖ¯ËüÃÇ£¿ÒòΪ²»Í¬µÄ»úÆ÷µÄÖ°Ôð²»Í¬£¬Ëù¶ÔÓ¦µÄÅäÖÃÒ²¾Í²»Í¬¡£

ÎÒÏëÎÒÃÇÒѾ­ÖªµÀ×Ô¶¯»¯ÔËά¹¤¾ß¶¼Òª½â¾öµÄÎÊÌâÁË£º

1. ÈçºÎÓëÊܿػúÆ÷ͨÐÅ

2. ÈçºÎ×éÖ¯³É°ÙÉÏǧ̨»úÆ÷

3. DSLµÄÉè¼ÆÓë±àÒë

4. ÈçºÎµÃµ½Ö´Ðнá¹û

ÎÒ²»È·¶¨ÎÒÃǵÄ˼·ÓëPuppet£¬ChefºÍAnsibleµÄ×÷ÕßÒ»Ñù¡£Ò²²»Ò»¶¨ÍêÈ«ÕýÈ·¡£µ«ÊÇÖÁÉÙ£¬ÎÒÃÇ´ó¸ÅÖªµÀ×Ô¶¯»¯ÔËά¹¤¾ßÒª½â¾öÄÄЩÎÊÌâÁË¡£¶øËüÃÇÊDz»ÊÇ×Ô¶¯»¯ÔËά¹¤¾ßµÄ¹²ÐÔ£¿ÎÒ²»È·¶¨¡£

µ«ÊÇûÓйØÏµ£¬ÎÒÃǼÙÉèËüÃǾÍÊÇËùÓÐÅäÖùÜÀí¹¤¾ß¶¼Òª½â¾öµÄÎÊÌ⣬ËüÃǵĹ²ÐÔ£¬½ÓÏÂÀ´ÎÒÃÇÀ´¿´¿´ËüÃÇ·Ö±ðÊÇÔõô½â¾öÕâЩÎÊÌâµÄ¡£

ÕâØíµÄ±³¾°

ÔÚ½øÈëѧϰ֮ǰ£¬ÎÒÃÇÏÈ¿´¿´ËüÃǵı³¾°£º

Puppet

ÈçºÎÓëÊܿػúÆ÷ͨÐÅ

PuppetµÄÖ÷¿Ø»úÆ÷(Server)³ÆÎªPuppet master£¬ÊܿػúÆ÷(client)³ÆÎªPuppet agent¡£ËüÃÇʹÓÃHTTPS½øÐÐͨÐÅ¡£ÔÚ°²×°puppet֮ǰ£¬ÐèÒª·Ö±ðÔÚÖ÷¿Ø»úÆ÷ºÍÊÜ¿ØÉÏÉèÖõÄhostname¡£

ÒòΪÊÇC/S¼Ü¹¹µÄ£¬Òâζ×ÅÄãÐèÒªÔÚÖ÷¿Ø»úÆ÷Éϰ²×°Puppet master£¬£¨°²×°µÄ¹ý³Ì»ò·­ÔÄÆäËü½Ì³ÌµÄʱºò£¬Çë×¢Òâ½Ì³ÌËùʹÓõÄPuppetµÄ°æ±¾£¬Puppet°æ±¾Ö®¼äÊÇÓвîÒìµÄ£©ÎÒÃÇÒÔUbuntuΪÀý£º

sudo apt-get install -y puppetmaster

ÔÚÊܿػúÆ÷Éϰ²×°Puppet agent:

sudo apt-get install -y puppet

°²×°Íê³Éºó£¬ÊܿػúÆ÷ÐèÒªÉèÖÃÔÚ/etc/puppet/puppet.confÎļþµÄ[main]½ÚµãϼÓÈëserver=<master¡¯s hostname>£¬Í¬Ê±ÔËÐÐsudo puppet agent ¡ªtestÏòÖ÷¿Ø»úÆ÷ÉêÇëÈÏÖ¤¡£Ö÷¿Ø»úÆ÷Ö´ÐÐsudo puppet cert sign <agent¡¯s hostname>ÈÏÖ¤¡£

ÔÚÉú²ú»·¾³²¢²»Ò»¶¨²ÉÈ¡ÕâÑùµÄÊÖ¹¤ÈÏÖ¤¡£

DSLµÄÉè¼ÆÓë±àÒë1

PuppetµÄDSL³ÆÎªManifest £¬ÒÔ.ppΪÎļþÀ©Õ¹Ãû¡£ÏñÆäËü±à³ÌÓïÑÔÒ»Ñù£¬ËüÒ²ÓÐÒ»¸ö³ÌÐòµÄÈë¿Ú£¬ËüĬÈÏ·ÅÔÚ£º/etc/puppet/manifests/site.pp £º

#vim /etc/puppet/manifests/site.pp

node 'mysqlserver.example.com' {

$mysql_password = 123456
package {
['mysql-common', 'mysql-client', 'mysql-server']:
ensure => present
}

service {
'mysql':
enable => true,
ensure => running,
require => Package['mysql-server']
}

exec {
'set-root-password':
path => "/usr/bin:/usr/sbin:/bin",
subscribe => [Package['mysql-common'], Package['mysql-client'], Package['mysql-server']],
refreshonly => true,
unless => "mysqladmin -uroot -p$mysql_password status",
command => "mysqladmin -uroot password $mysql_password",
}


file {
'/etc/mysql/my.cnf':
content => template('my.cnf.erb'),
require => Package['mysql-server'],
notify => Service['mysql']
}
}

ManifestµÄ»ù±¾¸ñʽ£º

node NODENAME{
RESOURCE { NAME:
ATTRIBUTE => VALUE,
...
}

}

Nodenameʵ¼ÊÉϾÍÊǽڵãµÄhostname¡£ÕâÀïÓиöÌáÎÊ£ºÎªÊ²Ã´²»Ö±½ÓʹÓÃIPÄØ£¿Resource´ú±íµÄÊÇ×ÊÔ´£¬Ò²¾ÍÊÇPuppet½«½ÚµãÄÚËùÓеĶ«Î÷¶¼µ±×÷×ÊÔ´¡£¾ßÌåϸ½Ú£¬ÎÒÃÇÉÔºó»á½²µ½¡£

ÈçºÎ×éÖ¯³É°ÙÉÏǧ̨»úÆ÷

Èç¹ûÎÒÒª¿ØÖÆ1000̨»úÆ÷ÊDz»ÊÇÒâζ×ÅÎÒÒªÔÚsite.ppÖÐд1000¸ö ½Úµã node NODENAME{¡­}ÄØ£¿´ð°¸Êǿ϶¨µÄ¡£

DSLµÄÉè¼ÆÓë±àÒë2

ÎÒÃÇ×¢Òâµ½`node`½ÚµãÖÐËù°üº¬µÄËùÓÐÄÚÈÝ£¬±¾ÖÊÉ϶¼ÊÇÔÚÃèÊöÕâ¸önodeµÄ״̬£¬È磺

service { 'mysql':            

enable => true,

ensure => running

}

Ö¸µÄÊÇ`service mysql`Õâ¸öResourceµÄ״̬ÊÇ¿ÉÓõÄÇÒÕýÔÚÔËÐеġ£PuppetÖÐÄÚ½¨Á˲»ÉÙResource¹©¸øÎÒÃÇʹÓã¬È磺file£¬exec, packageµÈ¡£µ«Êǵ±PuppetÄÚ½¨µÄResource²»¹»ÓÃÁËÄØ£¿ËùÒÔ£¬ËüÓ¦¸ÃÖ§³ÖresourceµÄÀ©Õ¹¡£ÒÔ´ËÀàÍÆ£¬ËùÓеÄ×Ô¶¯»¯ÔËά¹¤¾ß¶¼Ó¦¸ÃÖ§³Ö´ËÀàÀ©Õ¹¡£

ͬʱ£¬PuppetÌṩÁËÄ£°å»úÖÆ¡£PuppetµÄÄ£°åģʽʹÓõÄÊÇRubyµÄERB¡£Ä㽫`.erb`µÄÎļþ·ÅÔÚ`/etc/puppet/templates`ºó£¬¾Í¿ÉÒÔÔÚpuppetµÄ´úÂëÖÐʹÓÃ`template('my.cnf.erb¡¯)`£º

#vim /etc/puppet/templates/my.cnf.erb
[mysql]
...
...

¼ÈÈ»ÓÐÄ£°å£¬ÔõôÉÙµÃÁ˱äÁ¿£¿±äÁ¿µÄ¶¨Ò壺$VAR_NAME = VALUE¡£ÓбäÁ¿µÄµØ·½£¬Ò»¶¨»áÒýÓÃ×÷ÓÃÓò¸ÅÄ²»ÂÛËüÊǾ²Ì¬×÷ÓÃÓò»¹ÊÇÈ«¾Ö×÷ÓÃÓò¡£¿ÉÒÔ¸æËßÄãPuppetÊǾ²Ì¬×÷ÓÃÓò¡£²Â²ÂPuppetµÄ±äÁ¿µÄ×÷ÓÃÓò·Ö¼¸¼¶£¿Êµ¼ÊÉÏ£¬Puppet£¬Chef£¬AnsibleµÄ±äÁ¿¶¼ÊǾ²Ì¬×÷ÓÃÓò¸ÅÄËüÃǵıäÁ¿×÷ÓÃÓò·ÖÓÖ¶¼·Ö³É¼¸¼¶£¿¶àÎÊÒ»¾ä£ºÕâÒ²ÊÇËüÃǵĹ²ÐÔÂð£¿

ÏÖÔÚÎÒÃÇÁ˽âÁËManifest¼°Æä»ù±¾¸ñʽ¡¢node¡¢resource¸ÅÄģ°åºÍ±äÁ¿¡£Í¬Ê±£¬ÎÒÃDz¢²»Ó¦¸Ã°ÑËùÓеÄÄÚÈݶ¼Ð´µ½Ò»¸ösite.ppÎļþÖУ¬Õâ¾ÍÏñÎÒÃDz»Ó¦¸Ã°ÑËùÓеÄÂß¼­¶¼Ð´ÔÚCÓïÑÔÖеÄmainº¯ÊýÖÐÒ»Ñù¡£ÄÇPuppetµÄDSLÊÇÈçºÎ½â¾öÕâ¸öÎÊÌâµÄ£ºÈçºÎÈÿª·¢Õ߸ü·½±ãµÄ×éÖ¯´úÂë?

ÏÖÔÚÎÒÃÇÀ´¿´Ïà¶ÔÄ£¿é»¯Ò»Ð©µÄPuppet´úÂ룺

#vim /etc/puppet/manifests/site.pp

class mysql($mysql_password = "123456") {
package {
['mysql-common', 'mysql-client', 'mysql-server']:
ensure => present
}

service {
'mysql':
enable => true,
ensure => running,
require => Package['mysql-server']
}

exec {
'set-root-password':
path => "/usr/bin:/usr/sbin:/bin",
subscribe => [Package['mysql-common'], Package['mysql-client'], Package['mysql-server']],
refreshonly => true,
unless => "mysqladmin -uroot -p$mysql_password status",
command => "mysqladmin -uroot password $mysql_password",
}


file {
'/etc/mysql/my.cnf':
content => template('my.cnf.erb'),
require => Package['mysql-server'],
notify => Service['mysql']
}

}
node 'agent' {
include mysql

class { 'mysql':

mysql_password => '456789'
}
}

Õâ¸ö°æ±¾µÄsite.ppÎÒÃÇÓõ½ÁËclass¸ÅÄî¡£Äã¿ÉÒÔ¶¨ÒåÁËÒ»¸öclass£¬È»ºó½«Ö°ÔðÏàͬµÄÂß¼­·ÅÔÚÆäÖС£×îºóÔÚÆäËüµØ·½ÒýÓᣵ«ÊÇÒýÓõÄʱºòÒª·ÖÇé¿ö£¬Õâ¸öclassÓÐûÓдø²ÎÊý£¬ ½«Ó°ÏìʹÓÃÕâ¸öclassµÄ·½Ê½¡£

µ«ÊǾÍËãÕâÑù£¬ÎÒÃǵÄsite.ppµÄ´úÂë¿Éά»¤ÐÔÒ»Ñù²»¸ß¡£ËùÒÔ£¬Puppet»¹ÌṩһÖÖmodule¸ÅÄʵ¼ÊÉÏ£¬ÓÃÁËÄã¾ÍÖªµÀ£¬puppet¾ÍÊǽ«class´Ósite.ppÒÆ³öÈ¥Á˵ÄÁíÒ»ÖÖ˵·¨¡£ÎÒÃÇÀ´¿´Ê¹ÓÃÁËmoduleµÄµÚÈý°æ£º

ÎÒÃǽ«mysql class³éµ½mysql moduleÖУº

#vim /etc/puppet/modules/mysql/manifests/init.pp
class mysql($mysql_password = "123456") {
package {
['mysql-common', 'mysql-client', 'mysql-server']:
ensure => present
}

service {
'mysql':
enable => true,
ensure => running,
require => Package['mysql-server']
}

exec {
'set-root-password':
path => "/usr/bin:/usr/sbin:/bin",
subscribe => [Package['mysql-common'], Package['mysql-client'], Package['mysql-server']],
refreshonly => true,
unless => "mysqladmin -uroot -p$mysql_password status",
command => "mysqladmin -uroot password $mysql_password",
}

file {
'/etc/mysql/my.cnf':
content => template('mysql/my.cnf.erb'),
require => Package['mysql-server'],
notify => Service['mysql']
}

}

ÔÚʹÓÃmodule֮ǰ£¬ÎÒÃǵÄÎļþ½á¹¹ÊÇÕâÑùµÄ£º

|-- auth.conf

|-- environments

|-- files

|-- manifests

| `-- site.pp

|-- puppet.conf

|-- templates

| `¡ªmy.cnf.erb

 

ʹÓÃmoduleºó£º

|-- auth.conf

|-- environments

|-- files

|-- manifests

| `-- site.pp

|-- modules

| `-- mysql

| |-- manifests

| | `-- init.pp

| `-- templates

| `-- my.cnf.erb

|-- puppet.conf

`-- templates

¶¨ÒåÁËmodule£¬ÄÇÔõôÓÃÄØ£¿

#vim /etc/puppet/manifests/site.pp
node 'agent' {
include mysql
}

µ½ÕâÀÎÒÏàÐÅÄãÖªµÀ´ó¸ÅÔõôдPuppet£¬µ«ÊÇÎÒ¾õµÃÊDz»¹»µÄ¡£ÎÒ²»Àí½âËüΪʲôÕâÑùÉè¼Æ¡£ÎÒÃÇΪʲô²»ÊÇ£º

node 'agent_hostname'{

install package [¡®mysql¡¯,¡¯mysqlserver¡¯]

start service ¡®mysql'

create template mysql.cnf

}

ÎÒµÄÒâ˼ÊÇΪʲôÊÇÒÔÃû´Êµ¼ÏòµÄÃèÊöÐÔÓïÑÔ£¬¶ø²»ÊÇÒÔ¶¯´ÊΪµ¼Ïò¡£È»ºó£¬ÎÒ¾ÍÈ¥ÕÒ¡¶ÅäÖùÜÀí×î¼Ñʵ¼ù¡·¡£ÐÑÎòÁË£¬Ô­À´ÅäÖùÜÀí²»ÊÇÒ»Á½¸ö¹¤¾ß¾Í¿ÉÒԸ㶨¡£ËüÊÇÒ»¸öϵͳ£¬°üÀ¨Áù¸öºËÐÄÖ°ÄÜ£º

1. Ô´´úÂë¹ÜÀí

2. ¹¹½¨¹¤³Ì

3. »·¾³ÅäÖÃ

4. ±ä¸ü¿ØÖÆ

5. ·¢²¼¹¤³Ì

6. ²¿Êð

ËùÒÔ£¬ÎÒÒÔǰһֱ²»Àí½â×Ô¶¯»¯ÔËάºÍ×Ô¶¯»¯ÅäÖùÜÀíÖ®¼äµÄÇø±ð¡£Í¬Ê±ÎÒ¿´µ½ÁËһЩÎÄÕÂÀÅäÖùÜÀíʵ¼ÊÉϾÍÊÇ״̬¹ÜÀí£¬²»ÂÛÊÇ·þÎñÆ÷״̬»¹ÊÇÈí¼þ״̬¡£

ÕâÏÂÖÕÓڸоõÃ÷°×ÁË£¬Ò²ÄѹÖPuppet£¬Chef£¬AnsibleµÄDSL¶¼ÊÇÃèÊöÐÔµÄÓïÑÔ¡£

µ«ÊÇ£¬PuppetÈçºÎ±àÒ룬ÔÚÄÄÀï±àÒëÎÒÃÇдºÃµÄmanifestÄØ£¿ÔÚÖ÷¿Ø»úÆ÷ÓëÊܿػúÆ÷ÈÏÖ¤³É¹¦ºó£¬ÊܿػúÆ÷»áÿ¸ôÒ»¶Îʱ¼ä¾ÍÏòÖ÷¿Ø»úÆ÷·¢ÇëÇó£¬Õâ¸öÇëÇ󽫻á°Ñ×Ô¼º£¨ÊܿػúÆ÷£©µÄÐÅÏ¢¸æËßÖ÷¿Ø»úÆ÷¡£Ö÷¿Ø»úÆ÷Äõ½ÕâЩÐÅÏ¢ºóÓëmanifestÁ´½Ó±àÒ룬×îºóÉú³ÉÒ»·ÝÊܿػúÆ÷£¨puppet¿Í»§¶Ë£©¿ÉÖ´ÐеÄcatalog¡£ÊܿػúÆ÷ÔÚÖ´ÐеĹý³ÌÖУ¬½«Ö´ÐÐÇé¿ö·´À¡¸øÖ÷¿ØÖ÷»ú¡£Õâ¾ÍÊÇPuppetÖÐÖ÷¿Ø»úÆ÷ÈçºÎµÃµ½ÊܿػúÆ÷µÄÃüÁîÖ´Ðнá¹ûµÄ¡£

µ½´Ë£¬ÎÒÃÇ¿´µ½ÁËPuppetÒѾ­»Ø´ðÁËÎÒÃÇ֮ǰµÄËĸöÎÊÌâ¡£

С½á

1. ÈçºÎÓëÊܿػúÆ÷ͨÐÅ

²ÉÓÃC/S¼Ü¹¹£¬Ê¹ÓÃHTTPS£¬agentÏòmasterÉêÇëÖ¤Êé¡£

2. ÈçºÎ×éÖ¯³É°ÙÉÏǧ̨»úÆ÷

ÔÚmanifestÖÐʹÓÃ`node`¹Ø¼ü×Ö¶¨Òå¡£

3. DSLµÄÉè¼ÆÓë±àÒë

* ×éÖ¯´úÂëµÄ·½Ê½

PuppetÔÚmanifestÎļþÖж¨Òånode£¨Êܿؽڵ㣩£¬½«ËùÓÐnodeÖеĹ¹¼þ³éÏóΪresource£¬ÎÒÃÇ¿ÉÒÔ¸øÕâ¸öresourceµÄattributeÉèÖÃÖµ¡£nodeÏ¿ÉÒÔ°üº¬¶à¸öresource£¬ÕâЩresource¹²Í¬¹¹³ÉÁËÕâ¸önodeµÄ״̬¡£µ«ÊDz»¿ÉÄܽ«ËùÓеÄresource¶¼Ð´ÔÚÒ»¸öÎļþÖУ¬ÔÙ˵һ¸ömanifestÎļþͨ³£²»Ö¹Ò»¸önode¡£ËùÒÔ£¬ËùÒÔ£¬PuppetÌṩһÖÖmoduleºÍclass»úÖÆ£¬ÈÃÄãÄܽ«Ò»Ð©¹²Í¬Æðµ½Í¬Ò»Ö°ÔðµÄresource´ò°üµ½Ò»Æð¡£classÓëmoduleÓÐʲô²»Í¬ÄØ£¿class¿ÉÒÔÖ±½Óдµ½manifestÎļþÖУ¬¶ømodule±ØÐëÁíÍâн¨Ò»¸öĿ¼½á¹¹¡£Õâ¾ÍÊÇPuppet×éÖ¯´úÂëµÄ·½Ê½¡£

ÉîÈëѧϰ£ºÈç¹û´¦ÀíresourceÖ®¼äµÄ¹ØÏµÎÊÌ⣬ËüÃǺÜÓпÉÄÜÓÐÒÀÀµ¹ØÏµ¡£class¼°moduleÒ²»áÓÐͬÑùµÄÎÊÌâ¡£if else¼°forÄØ£¿

* ±äÁ¿¶¨Ò壺 $VAR_NAME = VALUE¡£

ÉîÈëѧϰ£ºÁ˽â±äÁ¿µÄ×÷ÓÃÓò

* Ä£°å£ºÊ¹ÓÃrubyµÄerbÎļþ

4. ÈçºÎµÃµ½Ö´Ðнá¹û

ÊܿػúÆ÷Ö÷¶¯½«Ö´Ðнá¹û·¢Ë͸øÖ÷¿Ø»úÆ÷¡£

ËüÕæµÄÒ»¶¨ÒªÓÐmaster²ÅÄÜÓÃÂ𣿲»Êǵġ£PuppetÌṩÁ˵¥»ú°æµÄʹÓ÷½·¨¡£¾ßÌåÇëgoogle: puppet apply¡£

Chef

ChefµÄÖÐÎÄÒâ˼ÊdzøÊ¦¡£ËùÒÔËü½«ËùÓеÄÊܿػúÆ÷¿´×÷¡°²ËëÈ¡±¡£µ«ÊÇÈç¹ûÎÒÃDz»¸ø¸æËßËü²ËÆ×£¨Cookbook£©£¬ËüÊDz»»á¸øÎÒÃÇ×ö²ËµÄ¡£²ËÆ×É϶¼Ð´×ÅÊ²Ã´ÄØ£¿ÊÇÅä·½£¨Recipe£©¡£ËùÒÔ£¬ÎÒÃǰÑrecipeÒ»¸ö¸öµÄдµ½CookbookÖУ¬×îºó½»¸øChef¡£

ChefͬÑùÊÇC/S¼Ü¹¹£¬CÓëSÒ²ÊÇʹÓÃHTTPS½øÐÐͨÐŵġ£Í¬ÑùµÄ£¬ÕýÒòΪÕâÑù£¬ÎÒÃÇ¿ÉÄÜÖØÓÃѧϰPuppetµÄpatternÀ´Ñ§Ï°Chef¡£µ«ÊÇÒòΪChefµÄC/SģʽµÄͶ×ʻر¨ÂÊÌ«µÍÁË£¬ËùÒÔ£¬ÎÒ¼á³ÖÒ»¶Îʱ¼äºó£¬¾Í·ÅÆúÁË¡£ºÍPuppetÒ»Ñù£¬ChefÒ²ÌṩÁ˵¥»ú°æ£ºChef-solo¡£

Ansible

Ansible˵ÊÇagentles£¨È¥¿Í»§¶Ë£©µÄ¡£µ«ÊÇʵ¼ÊÉÏ£¬ËüÒªÇóÊܿػúÆ÷ÉÏ×°ÓÐSSH¼°Python£¬²¢ÇÒ×°ÁËpython-simplejson°ü¡£Êµ¼ÊÉÏ£¬ÎÒÃÇÏÖÔڵĻúÆ÷»ù±¾ÉÏĬÈ϶¼ÒѾ­°²×°ÕâЩ¡£ËùÒÔ£¬ÔÚʹÓÃAnsibleʱ£¬Äã²»ÐèÒªÌØÒâ×¼±¸Ò»Ì¨»úÆ÷×öΪÖ÷¿Ø·þÎñÆ÷¡£Ö»ÒªÄãÏ룬ÈκλúÆ÷ËæÊ±¶¼¿ÉÒÔ±ä³ÉÖ÷¿Ø»úÆ÷¡£

¹ØÓÚAnsibleµÄ°²×°¿´Îĵµ¾ÍºÃÁË¡£ÓëChefºÍPuppet²»Í¬µÄÊÇ£¬Ansible×éÖ¯ÊܿػúÆ÷µÄÄDz¿·ÖÂß¼­³éÀ´µ¥¶À·Å£¬½ÐInventory¡£ËüÊÇÒ»¸öini¸ñʽµÄÎļþ£¬Èçhosts£º

[web]
192.168.33.10

[db]
192.168.33.11

ÎļþÃûºÍ·¾¶¶¼ÈÎÒ⣬µ«Êǽ¨ÒéʹÓñíÒâµÄÃû×Ö¼°ºÏÊʵÄ·¾¶¡£

PuppetºÍChef¶¼×Ô¼º×öÁËÒ»Ì×DSL£¬È»ºóÔÙ×Ô¼ºÐ´±àÒëÆ÷£¬µ«ÊÇAnsibleʹÓõÄÊÇyaml¸ñʽ¡£ÎÒ¾õµÃÕâÊǷdz£´ÏÃ÷µÄÉè¼Æ£ºÒ»ÊÇ´ó¼Ò¶¼ÊìϤyaml¸ñʽ±ÈÊìϤ×Ô¶¨ÒåµÄDSLÀ´µÃ¼òµ¥£¬¶þÊDz»ÐèÒª×Ô¼ºÉè¼ÆDSLÁË£¬ÈýÊDz»ÓÃ×Ô¼ºÐ´±àÒëÆ÷ÁË¡£ËùÒÔ£¬ÎÒ¸öÈËѧϰ¹ý³ÌÖУ¬·¢ÏÖËüÊÇÏà¶ÔPuppet£¬Chef¼òµ¥ºÜ¶à¡£

Á˽âyamlÎļþ¸ñʽºó£¬½ÓמÍÊÇÀí½âAnsibleµÄÒþÓ÷ÁË¡£AnsibleÊǵ¼ÑÝ£¬½«ËùÓеÄÊܿػúÆ÷Àí½âΪÑÝÔ±¡£¶øÎÒÃÇ¿ª·¢ÕßÔòÊDZà¾ç¡£ÎÒÃÇÖ»Òª°Ñ¾ç±¾(playbook)дºÃ£¬AnsibleÄþ籾ÔÙÓëInvenstoryÒ»¶ÔÉϺţ¬ÑÝÔ±Ö»»á°´Õվ籾ÉϵÄÈçʵ·¢»Ó£¬²»»áÓÐÈκεĸöÈË·¢»Ó¡£

ºÃ£¬ÎÒÃǾÍÀ´Ð´µÚÒ»°æ±¾µÄplaybook.yml£¨Â·¾¶ºÍÃû×Ö¶¼¿É×Ô¶¨Ò壩£º

---
- hosts: web
tasks:
- name: install nginx
apt: name=nginx state=latest

- hosts: db
vars:
mysql_password: '123465'
tasks:
- name: install mysql
yum: name={{item}}
with_items:
- 'mysql-common'
- 'mysql-client'
- 'mysql-server'

- name: configurate mysql-server
template: src=my.cnf.j2 dest=/etc/mysql/my.cnf

- name: start service
service: name=mysql state=started

#vim templates/my.cnf.j2
[mysql]
...
passowrd={{mysql_password}}

ÎÒÃǵľ籾°üÀ¨Á½¸öÑÝÔ±£ºweb£¬db¡£ËüÃǶ¼¶ÔÓ¦ÄÄЩÊܿػúÆ÷ÄØ£¿¿´InvenstoryÎļþ¾ÍÖªµÀÁË¡£ÄÇÕâЩÑÝÔ±¶¼Òª×öÄÄЩÊÂÇéÄØ£¿¿´tasks£¬ËüÏÂÃæ¸úµÄÊÇÒ»¸öÁÐ±í¡£Ïñ`yum`£¬`apt`£¬`template`£¬`service`£¬±»³ÆÎªmodule£¬ÀàËÆÓÚPuppetµÄresourceºÍChefµÄrecipe¡£Ansible±¾ÉíÌṩÁ˲»ÉÙmodule£¬µ«ÊÇÏë¶¼²»ÓÃÏ룬һ¶¨²»ÄÜÂú×ãËùÓÐÏîÄ¿µÄÐèÇó£¬ËùÒÔ£¬Äã¿ÉÒÔ¿ª·¢×Ô¼ºµÄmodule¡£

ͬÑùµÄ£¬AnsibleÌṩ±äÁ¿ºÍÄ£°å£¨Jinja2£©»úÖÆ¡£ÎÊÌâÀ´ÁË£¬AnsibleµÄ×÷ÓÃÓò·ÖΪ¼¸¼¶ÄØ£¿

ͬÑùµÄ£¬ÎÒÃÇ¿ÉÒÔ²»ÄÜÈÝḚ̀ÑËùÓеÄtask¶¼Ð´ÔÚÒ»¸öÎļþÀï¡£AnsibleÊÇÈçºÎ×éÖ¯´úÂëµÄÄØ£¿AnsibleÌá³öroleµÄ¸ÅÄî¡£Êǵ쬰çÑݹ²Í¬Ö°ÔðµÄtask£¬ÎÒÃǰÑËüÃǹ鵽ͬһ¸öroleÖС£ËùÒÔ£¬ÎÒÃÇÎļþ½á¹¹Ò²±äÁË£¬ÓÉÔ­À´µÄÖ»ÓÐÁ½¸öÎı¾Îļþ£¬µ½ÏÖÔÚÐèҪн¨Ä¿Â¼ÁË£º

©¤©¤ hosts

©À©¤©¤ playbook.yml

©¸©¤©¤ roles

©¸©¤©¤ mysql

©À©¤©¤ tasks

©¦ ©¸©¤©¤ main.yml

©¸©¤©¤ templcates

©¸©¤©¤ my.cnf.j2

Õâʱ£¬playbook.yml£º

--
- hosts: web
tasks:
- name: install nginx
apt: name=nginx state=latest

- hosts: db
var:
mysql_password: '123456'
roles:
- mysql

¶ømain.yml:

- name: install mysql
yum: name={{item}}
with_items:
- 'mysql-common'
- 'mysql-client'
- 'mysql-server'

- name: configurate mysql-server
template: src=my.cnf.j2 dest=/etc/mysql/my.cnf

- name: start service
service: name=mysql state=started

¾ÍÊÇtaskºÍroleÖ®¼äµÄ¹ØÏµ¡£ÄÇtaskÖ®¼äµÄ¹ØÏµ£¬roleÖ®¼äµÄ¹ØÏµÄØ£¿

AnsibleµÄDSL¾ÍÊÇÕâÑù×éÖ¯´úÂëµÄ¡£×îºóÒ»¸öÎÊÌâÈçºÎµÃµ½Ö´Ðнá¹ûÄØ£¿Õâ¾ÍҪ˵µ½AnsibleµÄÔ­Àí£ºAnsible½«±¾µØµÄymlÎļþ±àÒë³Épython´úÂ룬Ȼºó´«µ½ÊܿػúÆ÷£¬ÊܿػúÆ÷Ö´Ðнá¹ûÒÔJson¸ñʽ·µ»Ø¡£

AnsibleµÄÈëÃŷdz£¼òµ¥¡£

С½á

1. ÈçºÎÓëÊܿػúÆ÷ͨÐÅ

Ö»ÒªÖ÷¿Ø»úÆ÷ÓëÊܿػúÆ÷Ë«·½½«ÓÐSSH

2. ÈçºÎ×éÖ¯³É°ÙÉÏǧ̨»úÆ÷

ʹÓÃInvenstory¹ÜÀí

3. DSLµÄÉè¼ÆÓë±àÒë

* ×éÖ¯´úÂëµÄ·½Ê½

Ansible LanguageµÄÈë¿Ú¾ÍÊÇplaybook¡£Äã¿ÉÒÔÖ±½ÓÔÚplaybookÀï¼Ó`tasks`¡£ºÜ×ÔÈ»£¬ÎÒÃÇÏëµ½µÄÕâ¸ötasksÀïÊÇÒ»ÅúСtask¡£ÊÂʵµÄÈ·ÊÇÕâÑù£¬µ«ÊÇÔÚAnsibleÖУ¬Ëü½Ðmodule¡£µ«ÊÇ£¬ÎÒÃDz»Ï£ÍûËùÓеÄtaskдÔÚͬһ¸öÎļþÖУ¬Õâʱ£¬AnsibleµÄrole»úÖÆ¾ÍÆð×÷ÓÃÁË¡£Äã¿ÉÒÔ°ÑÍê³ÉͬһְÔðµÄÒ»Åú·ÅÔÚÒ»¸öroleÖоͺÃÁË¡£

ÉîÈëѧϰ£ºmoduleÖ®¼äµÄÒÀÀµÎÊÌ⣬if-elseÎÊÌâ

* ±äÁ¿¶¨Ò壺²»Í¬µÄ¼¶±ðÓв»Í¬µÄ¶¨Òå·½·¨

ÉîÈëѧϰ£ºÁ˽â±äÁ¿µÄ×÷ÓÃÓò

* Ä£°å£ºÊ¹ÓÃJinja2

4. ÈçºÎµÃµ½Ö´Ðнá¹û

ÊܿػúÆ÷Ö÷¶¯½«Ö´Ðнá¹û·¢Ë͸øÖ÷¿Ø»úÆ÷¡£

×ܽá

Ãæ¶Ô²ã³ö²»ÇîµÄбà³ÌÓïÑÔ¡¢Ð¿ò¼Ü¡¢Ð¸ÅÄÎÒÃdzÌÐòÔ±×ÜÊÇѧ²»Íê¡£³ÏÈ»£¬ÎÒ¼ÙÉè´ó¼Ò¶¼°®Ñ§Ï°£¬µ«ÊÇ£¬ÎÒÃǸüÐèÒªÎÊ£ºÑ§µ½µÄÕâЩ¶«Î÷£¬µ½µ×ÊôÓÚ½â¾öÓò»¹ÊÇÎÊÌâÓò¡£ËùÒÔ£¬À´ÁËж«Î÷£¬ÎÒ×ÜÊÇÒªÎÊÕâ¶«Î÷½â¾öÁËʲôÎÊÌ⣿ΪʲôËüÄܽâ¾ö£¬ÒÀ¾ÝÊÇʲô£¿ÎÒÃÇÐèÒªµÄÊÇÎÊÌâµÄ±¾ÖʺÍÎÊÌâµÄ½â¾öÄ£ÐÍ£¬¶ø²»ÊDZðÈ˺ù«ÀïµÄÒ©¡£

˵ԶÁË¡£Êµ¼ÊÉÏ£¬³ýÁËÉÏÊöµÄØí×Ô¶¯»¯ÅäÖùÜÀí¹¤¾ß£¬ÊÐÃæ»¹Óкܶà±ðµÄ¡£×ܵÄÀ´£¬ÎÒ¾õµÃ¶¼¿ÉÒÔÓÃÒÔÉÏ˼·ȥѧϰ¡£»Øµ½ÎÒÃÇ×ʼµÄÎÊÌ⣺Puppet£¬Chef£¬AnsibleµÄ¹²ÐÔÊÇʲô£¿ ÎÒÄܲ»ÄÜ˵ÄÇËĸöÎÊÌâ¾ÍÊÇËüÃǵĹ²ÐÔ£¬´ð°¸ÊÇÎÒÒ²²»ÖªµÀ¡£

   
2631 ´Îä¯ÀÀ       30
Ïà¹ØÎÄÕÂ

ÆóÒµ¼Ü¹¹¡¢TOGAFÓëArchiMate¸ÅÀÀ
¼Ü¹¹Ê¦Ö®Â·-ÈçºÎ×öºÃÒµÎñ½¨Ä££¿
´óÐÍÍøÕ¾µçÉÌÍøÕ¾¼Ü¹¹°¸ÀýºÍ¼¼Êõ¼Ü¹¹µÄʾÀý
ÍêÕûµÄArchimateÊÓµãÖ¸ÄÏ£¨°üÀ¨Ê¾Àý£©
Ïà¹ØÎĵµ

Êý¾ÝÖÐ̨¼¼Êõ¼Ü¹¹·½·¨ÂÛÓëʵ¼ù
ÊÊÓÃArchiMate¡¢EA ºÍ iSpace½øÐÐÆóÒµ¼Ü¹¹½¨Ä£
ZachmanÆóÒµ¼Ü¹¹¿ò¼Ü¼ò½é
ÆóÒµ¼Ü¹¹ÈÃSOAÂ䵨
Ïà¹Ø¿Î³Ì

ÔÆÆ½Ì¨Óë΢·þÎñ¼Ü¹¹Éè¼Æ
ÖÐ̨սÂÔ¡¢ÖÐ̨½¨ÉèÓëÊý×ÖÉÌÒµ
ÒÚ¼¶Óû§¸ß²¢·¢¡¢¸ß¿ÉÓÃϵͳ¼Ü¹¹
¸ß¿ÉÓ÷ֲ¼Ê½¼Ü¹¹Éè¼ÆÓëʵ¼ù

×îл¼Æ»®
DeepSeekÔÚÈí¼þ²âÊÔÓ¦ÓÃʵ¼ù 4-12[ÔÚÏß]
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢Êµ¼ù 4-19[ÔÚÏß]
UAF¼Ü¹¹ÌåϵÓëʵ¼ù 4-11[±±¾©]
AIÖÇÄÜ»¯Èí¼þ²âÊÔ·½·¨Óëʵ¼ù 5-23[ÉϺ£]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 4-26[±±¾©]
ÒµÎñ¼Ü¹¹Éè¼ÆÓ뽨ģ 4-18[±±¾©]

Ïà¹ØÎÄÕÂ


ר¼ÒÊӽǿ´ITÓë¼Ü¹¹
Èí¼þ¼Ü¹¹Éè¼Æ
ÃæÏò·þÎñÌåϵ¼Ü¹¹ºÍÒµÎñ×é¼þ
ÈËÈËÍøÒÆ¶¯¿ª·¢¼Ü¹¹
¼Ü¹¹¸¯»¯Ö®ÃÕ
̸ƽ̨¼´·þÎñPaaS

Ïà¹ØÅàѵ¿Î³Ì


ÃæÏòÓ¦Óõļܹ¹Éè¼ÆÊµ¼ù
µ¥Ôª²âÊÔ+ÖØ¹¹+Éè¼ÆÄ£Ê½
Èí¼þ¼Ü¹¹Ê¦¡ª¸ß¼¶Êµ¼ù
Èí¼þ¼Ü¹¹Éè¼Æ·½·¨¡¢°¸ÀýÓëʵ¼ù
ǶÈëʽÈí¼þ¼Ü¹¹Éè¼Æ¡ª¸ß¼¶Êµ¼ù
SOAÌåϵ½á¹¹Êµ¼ù

³É¹¦°¸Àý


Èñ°²¿Æ¼¼ Èí¼þ¼Ü¹¹Éè¼Æ·½·¨
³É¶¼ ǶÈëʽÈí¼þ¼Ü¹¹Éè¼Æ
ÉϺ£Æû³µ ǶÈëʽÈí¼þ¼Ü¹¹Éè¼Æ
±±¾© Èí¼þ¼Ü¹¹Éè¼Æ
ÉϺ£ Èí¼þ¼Ü¹¹Éè¼Æ°¸ÀýÓëʵ¼ù
±±¾© ¼Ü¹¹Éè¼Æ·½·¨°¸ÀýÓëʵ¼ù
ÉîÛÚ ¼Ü¹¹Éè¼Æ·½·¨°¸ÀýÓëʵ¼ù
ǶÈëʽÈí¼þ¼Ü¹¹Éè¼Æ¡ª¸ß¼¶Êµ¼ù