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

1Ôª 10Ôª 50Ôª





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



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Modeler   Code  
»áÔ±   
 
   
 
 
     
   
 ¶©ÔÄ
  ¾èÖú
ÓÃGit×ÓÄ£¿éºÍDocker ComposeʵÏÖ¸ßЧ¿ª·¢¹¤×÷Á÷
 
À´Ô´£ºAirPair ·¢²¼ÓÚ 2015-5-21
  2301  次浏览      27
 

´î½¨¿ª·¢»·¾³Ò»Ö±ÈóÌÐòÔ±ÃÇÍ·ÌÛ£¬±¾ÎÄʹÓÃGit×ÓÄ£¿éºÍDocker ComposeʵÏÖ¸ßЧÂʵĿª·¢¹¤×÷Á÷£¬ÈóÌÐòÔ±Äܹ»ÇáËɴ³ö¿ª·¢»·¾³£¬°Ñ¾«Á¦Í¶Èëµ½ÐèÒª¿ª·¢µÄÓ¦Óñ¾Éí¡£

ÎÊÌâ

×ÔÎÒÃÇ´ÓContinuous Software¹ÍÓ¶Á˵ÚһλԶ³Ì¿ª·¢µÄ³ÌÐòÔ±ÒÔÀ´£¬ÎÒÃǾÍÒâʶµ½¾«¼ò¿ª·¢¹¤×÷Á÷µÄÖØÒªÐÔ¡£µ±ÐÂÈëÖ°µÄ³ÌÐòÔ±½ÓÊÖÓɺܶàÓ¦ÓÃ×é³ÉµÄ¸´ÔÓÏîĿʱ£¬ÎÒÃÇÏ뾡Á¿±ÜÃâÒÔÏÂÕ⼸¸öÎÊÌ⣺

1.ȱÉÙstackÄ£¿é£ºNode.js¡¢PHP¡¢PostgreSQLµÈ

2.²»Çå³þÏîÄ¿×é¼þ/Ó¦ÓõÄ×ÜÌå¸Å¿ö

3.±¾µØÅäÖóåÍ»£º¼àÌý¶Ë¿Ú¡¢Êý¾Ý¿âÅäÖõÈ

´ËÍ⣬¾ÍÎÒ¸öÈ˾­Ñé¶øÑÔ£¬ÎÒÃÇÕâÑùµÄ³ÌÐòԱ̫ÈÝÒ×ÕÒ²»×ű±ÁË¡£Ôø¾­£¬ÎÒÈëÖ°Ò»¸ö¹«Ë¾µÄµÚÒ»ÕûÌì¶¼»¨Ôڴ¿ª·¢»·¾³ÉÏ£¬ÊÔͼȥÀí½âËùÓеĶ«Î÷Ôõô²ÅÄÜÒ»Æð¹¤×÷£¬¶øÎÞ·¨Ö±½Ó¾ÍÈ¥Àí½â¹«Ë¾¿ª·¢µÄÓ¦Óõ½µ×ÊÇÔõô¹¤×÷µÄ¡£

·½°¸

ÔÚ¾ßÌå½éÉÜÈçºÎ½â¾öÉÏÊöÎÊÌâ֮ǰ£¬ÎÒÏȽéÉÜÏÂÎÒÃÇÏîĿʹÓõĿª·¢¹¤×÷Á÷¡£

ÎÒÃǵÄÿ¸öÏîÄ¿¶¼ÔÚBitbucketÉÏÓÐ×Ô¼ºµÄTeam£¨ºÍGitHubÉϵÄOrganization¶ÔÓ¦£©¡£Ã¿¸öÓ¦Óö¼»áÔÚTeamÏ´´½¨Ò»¸öRepository£¨±ÈÈ磬api¡¢dashboard¡¢cpanel£©¡£ÔÚÕâЩ×ÓÄ£¿éÖ®ÉÏ£¬´´½¨ÁËÒ»¸öÃûΪdevelopmentµÄRepository¡£×ÓÄ£¿éµÄͬһ²ã¼¶ÓÐREADME.mdºÍdocker-compose.ymlÁ½¸öÎļþ¡£

kytwb@continuous:~/path/to/<project>/$ ls -la
total 40
drwxrwxr-x 11 kytwb amine 4096 Mar 14 16:30 .
drwxr-xr-x 4 kytwb amine 4096 Nov 1 20:17 ..
drwxr-xr-x 20 kytwb amine 4096 Mar 11 14:24 api
drwxr-xr-x 11 kytwb amine 4096 Mar 3 13:21 cpanel
drwxr-xr-x 10 kytwb amine 4096 Mar 12 11:37 dashboard
-rw-r--r-- 1 kytwb amine 2302 Mar 2 15:28 docker-compose.yml
drwxrwxr-x 9 kytwb amine 4096 Mar 14 16:30 .git
-rw-r--r-- 1 kytwb amine 648 Dec 22 17:20 .gitmodules
-rw-r--r-- 1 kytwb amine 1706 Dec 17 16:41 README.md

µ±Ð³ÌÐòÔ±¼ÓÈëÏîĿʱ£¬Ö»ÐèÔÚBitbucketÉÏä¯ÀÀdevelopmentrepository£¬¸ù¾ÝREADME.mdµÄ²½Öè¾Í¿ÉÒÔ¿ìËٴ»·¾³¡£¾ßÌå²½ÖèÈçÏÂËùʾ£º

$ git -v
$ docker -v
$ docker-compose -v
$ git clone git@bitbucket.com:<project>/development.git <project> && cd <project>
$ git submodule init && git submodule update
$ git submodule foreach npm install
$ docker-compose up -d

ÖÁ´Ë£¬Ò»ÇоͶ¼ÒѾ­´î½¨ºÃ£¬²¢ÔËÐÐÔÚ±¾µØ»úÆ÷ÉÏÁË¡£

ʵÏÖÔ­Àí

±¾Õ½éÉÜÎÒÃÇÊÇÈçºÎʵÏÖÉÏÊö¹¤×÷Á÷µÄ¡£

ǰÌáÌõ¼þ

$ git -v
$ docker -v
$ docker-compose

ÓÉÓÚÎÒÃǵĿª·¢¶ÑÕ»ÍêÈ«»ùÓÚDocker£¬ËùÒÔ£¬³ÌÐòÔ±ÐèÒªÏȰ²×°Docker¡£ÕâʱËûÃDz»ÐèÒªÌØ±ðÊìϤDocker£¬Ö»ÐèÒªÔÚ¿ª·¢Ê±Ê¹ÓÃDocker¼´¿É£¬ÎÒÃǼä½ÓµØ½«ËûÃÇÒýÈëµ½ÁËÈÝÆ÷µÄÊÀ½ç£¬Ö®ºó»áÒÔ´ËΪÇÅÁºÏòËûÃǽâÊÍÈçºÎʹÓÃDockerʵÏÖ³ÖÐø¼¯³É¡¢³ÖÐø½»¸¶µÈµÈ¡£README.mdÖв¢Ã»ÓÐÏêϸ½éÉÜÈçºÎ°²×°Docker£¬ÒòΪ°²×°ºÜ¼òµ¥¡£

µ±docker-compose»¹½ÐFigµÄʱºòÎÒÃǾÍÒѾ­ÓÃËüÀ´±àÅÅ¿ª·¢¶ÑÕ»ÀïµÄÈÝÆ÷¡£Ö®ºóDockerÊÕ¹ºÁËFig£¬ÖØÃüÃûΪDocker Compose¡£ÓÐÈËÌáÒ齫Docker ComposeºÏ²¢µ½Docker´úÂëÀµ«ÊÇ»ùÓںܶàÔ­Òò×îÖÕ²¢Ã»ÓÐÕâô×ö£¬ËùÒÔDocker ComposeÈÔÈ»ÐèÒªµ¥¶À°²×°¡£

ͬÑùµØ£¬±¾ÎÄûÓÐÏêϸ½éÉÜDocker ComposeµÄ°²×°£¬ÒòΪºÜ¼òµ¥¡£

´î½¨²Ö¿â£¨Repository£©

ÈçǰËùÊö£¬ÐèÒª´´½¨Ò»¸ö¿ª·¢²Ö¿â£¬ÒÔ¼°ÎªÃ¿¸öÓ¦Óô´½¨¶ÔÓ¦µÄ²Ö¿â¡£ÕâÀïÎÒÃÇ´´½¨ÁËapi¡¢dashboardºÍcpanel¡£µ±´´½¨ÕâЩ²Ö¿âµÄʱºò£¬ÖØµã¹Ø×¢development²Ö¿âµÄ´î½¨¡£

$ git clone git@bitbucket.com:<project>/development.git <project> && cd <project>

ÏÖÔÚ½«Ó¦ÓóÌÐòµÄ²Ö¿âÌí¼ÓΪdevelopment²Ö¿âµÄ×ÓÄ£¿é£¬Ö»ÐèÒª¼üÈëÈçÏÂÃüÁ

$ git submodule add git@bitbucket.org:<project>/api.git
$ git submodule add git@bitbucket.org:<project>/dashboard.git
$ git submodule add git@bitbucket.org:<project>/cpanel.git

ÕâÑù£¬ÄãµÄdevelopment²Ö¿â¸ùĿ¼Ï»ᴴ½¨³ö.gitmodulesÎļþ¡£³ÌÐòÔ±Ò²¾Í¿ÉÒÔÔÚ¿Ë¡developmentrepositoryµÄʱºòÒ»´ÎµÃµ½ËùÓеÄÓ¦ÓóÌÐò²¢ÔËÐУº

$ git submodule init && git submodule update

¸ü¶à×ÓÄ£¿éµÄÐÅÏ¢£¬Çë²Î¿¼Git¹Ù·½Îĵµ¡£

Docker»¯Ò»ÇÐ

ÏÖÔÚÎÒÃÇÒѾ­´î½¨ºÃÁËdevelopment²Ö¿â£¬¿ÉÒÔͨ¹ýcdµÄ·½Ê½·ÃÎÊËùÓв»Í¬µÄÓ¦ÓóÌÐò¡£½ÓÏÂÀ´ÎÒÃÇÒªÓÃ֮ǰÌáµ½µÄ±àÅŹ¤¾ß£ºDocker ComposeÀ´ÈÝÆ÷»¯ËùÓеÄÓ¦Óü°ÆäÅäÖá£

Ê×ÏÈ´ÓapiÓ¦ÓóÌÐò¿ªÊ¼¡£´ò¿ªdocker-compose.yml£¬ÎªAPIÉùÃ÷Ò»¸öÈÝÆ÷£¬²¢ÎªÕâ¸öÈÝÆ÷Ñ¡Ôñ»ù´¡¾µÏñ¡£±¾Ê¾ÀýÖеĴúÂë»ùÓÚNode.js£¬Òò´ËÑ¡Ôñ¹Ù·½Node.js¾µÏñ£º

api:
image: dockerfile/nodejs

Õâʱ£¬ÔËÐÐÃüÁîdocker-compose up -d»á´´½¨³öÒ»¸öÃûΪ&lt;project>_api_1µÄÈÝÆ÷£¬Õâ¸öÈÝÆ÷ʲôҲ²»×ö£¨Æô¶¯ºóÁ¢¼´Í˳ö£©¡£ÔËÐÐÃüÁîdocker-compose ps¿ÉÒԵõ½ÓÉdocker-compose.yml±àÅŵÄËùÓÐÈÝÆ÷µÄÐÅÏ¢¡£

½ÓÏÂÀ´ÅäÖÃapiÈÝÆ÷£¬Ê¹Æä¶àһЩ¹¦ÄÜ¡£ÎªÁËʵÏÖÕâ¸öÄ¿µÄ£¬ÎÒÃÇÐèÒª£º

1.½«Ô´´úÂë¹ÒÔØµ½ÈÝÆ÷ÖÐ

2.ÉùÃ÷ÓÃʲôÃüÁîÔËÐÐÓ¦ÓÃ

4.±©Â¶ºÏÊʵĶ˿ÚÒÔ¹©·ÃÎÊÓ¦ÓÃ

ÕâÑùÅäÖÃÎļþÀàËÆ£º

api:
image: dockerfile/nodejs
volumes:
- ./api/:/app/
working_dir: /app/
command: npm start
ports:
- "8000:8000"

ÏÖÔÚÔÙÔËÐÐdocker-compose up -d£¬¾ÍÆô¶¯ÁËapiÓ¦Ó㬿ÉÒÔÔÚhttp://localhost:8000·ÃÎÊËü¡£Õâ¸ö³ÌÐò¿ÉÄÜ»á±ÀÀ££¬¿ÉÒÔʹÓÃdocker-compose logs api¼ì²éÈÝÆ÷ÈÕÖ¾¡£

ÕâÀÎÒ»³ÒÉapiµÄ±ÀÀ£ÊÇÒòΪËüÁ¬²»ÉÏÊý¾Ý¿â¡£Òò´ËÐèÒªÌí¼ÓdatabaseÈÝÆ÷£¬²¢ÈÃapiÈÝÆ÷Äܹ»Ê¹ÓÃËü¡£

api:
image: dockerfile/nodejs
volumes:
- ./api/:/app/
working_dir: /app/
command: npm start
ports:
- "8000:8000"
links:
- database
database:
image: postgresql
ports:
- "5432:5432"

ͨ¹ý´´½¨databaseÈÝÆ÷£¬²¢½«ÆäÁ¬½Óµ½apiÈÝÆ÷£¬ÎÒÃǾͿÉÒÔÔÚapiÈÝÆ÷ÀïÕÒµ½database¡£ÒªÏëչʾAPIµÄ»·¾³£¨±ÈÈ磬console.log(process.env)£©£¬±ØÐëʹÓÃÈçϱäÁ¿£¬±ÈÈçPOSTGRES_1_PORT_5432_TCP_ADDRºÍPOSTGRES_1_PORT_5432_TCP_PORT¡£ÕâÊÇÎÒÃÇÔÚAPIµÄÅäÖÃÎļþÀïʹÓõĹØÁªµ½Êý¾Ý¿âµÄ±äÁ¿¡£

ͨ¹ýlinkÖ¸ÁÕâ¸öÊý¾Ý¿âÈÝÆ÷±»ÈÏΪÊÇAPIÈÝÆ÷µÄÒÀÀµÌõ¼þ¡£ÕâÒâζ×ÅDocker ComposeÔÚÆô¶¯APIÈÝÆ÷֮ǰһ¶¨»áÏÈÆô¶¯Êý¾Ý¿âÈÝÆ÷¡£

ÏÖÔÚÎÒÃÇÓÃͬÑùµÄ·½Ê½ÃèÊöÆäËüÓ¦ÓóÌÐò¡£ÕâÀÎÒÃÇ¿ÉÒÔͨ¹ý»·¾³±äÁ¿API_1_PORT_8000_TCP_ADDRºÍAPI_1_PORT_8000_TCP_PORT£¬½«apiÁ¬½Óµ½dashboardºÍcpanelÓ¦Óá£

- ./api/:/app/
working_dir: /app/
command: npm start
ports:
- "8000:8000"
links:
- database
database:
image: postgresql
dashboard:
image: dockerfile/nodejs
volumes:
- ./dashboard/:/app/
working_dir: /app/
command: npm start
ports:
- "8001:8001"
links:
- api
cpanel:
image: dockerfile/nodejs
volumes:
- ./api/:/app/
working_dir: /app/
command: npm start
ports:
- "8002:8002"
links:
- api

¾ÍÏñ֮ǰΪÊý¾Ý¿âÐÞ¸ÄAPIÅäÖÃÎļþÒ»Ñù£¬¿ÉÒÔΪdashboardºÍcpanelÓ¦ÓÃʹÓÃÀàËÆµÄ»·¾³±äÁ¿£¬´Ó¶ø±ÜÃâÓ²±àÂë¡£

ÏÖÔÚ¿ÉÒÔÔÙ´ÎÔËÐÐdocker-compose up -dÃüÁîºÍdocker-compose psÃüÁ

kytwb@continuous:~/path/to/<project>$ docker-compose up -d
Recreating <project>_database_1...
Recreating <project>_api_1...
Creating <project>_dashboard_1...
Creating <project>_cpanel_1...
kytwb@continuous:~/path/to/<project>$ docker-compose ps
Name Command State Ports
----------------------------------------------
<project>_api_1 npm start Up 0.0.0.0:8000->8000/tcp
<project>_dashboard_1 npm start Up 0.0.0.0:8001->8001/tcp
<project>_cpanel_1 npm start Up 0.0.0.0:8002->8002/tcp
<project>_database_1 /usr/local/bin/run Up 0.0.0.0:5432->5432/tcp

Ó¦ÓÃÓ¦¸Ã¾ÍÒѾ­Æô¶¯²¢ÔËÐÐÁË¡£

´Óhttp://localhsot:8000¿ÉÒÔ·ÃÎÊapi¡£

´Óhttp://localhsot:8001¿ÉÒÔ·ÃÎÊdashboard¡£

´Óhttp://localhsot:8002¿ÉÒÔ·ÃÎÊcpanel¡£

¸ü½øÒ»²½

±¾µØÂ·ÓÉ

ÔÚʹÓÃdocker-compose up -dÔËÐÐËùÓÐÈÝÆ÷Ö®ºó£¬¿ÉÒÔͨ¹ýhttp://localhost:<application_port>·ÃÎÊÎÒÃǵÄÓ¦Ó᣻ùÓÚµ±Ç°ÅäÖã¬ÎÒÃÇ¿ÉÒÔºÜÈÝÒ×µØÊ¹ÓÃjwilder/nginx-proxy¼ÓÉϱ¾µØÂ·Óɹ¦ÄÜ£¬ÕâÑù¾Í¿ÉÒÔʹÓúÍÉú²ú»·¾³ÀàËÆµÄURL·ÃÎʱ¾µØÓ¦ÓÃÁË¡£±ÈÈ磬ͨ¹ýhttp://api.domain.local·ÃÎÊhttp://api.domain.comµÄ±¾µØ°æ±¾¡£

jwilder/nginx-proxy¾µÏñ½«Ò»ÇбäµÃºÜ¼òµ¥¡£Ö»ÐèÒªÔÚdocker-compose.ymlÀï¼ÓÉÏÃèÊöÈ¥´´½¨Ò»¸öÃûΪnginxµÄÐÂÈÝÆ÷¡£¸ù¾Ýjwilder/nginx-proxyµÄREADMEÎļþ£¨¹ÒÔØDockerÊØ»¤½ø³Ìsocket£¬±©Â¶80¶Ë¿Ú£©ÅäÖøÃÈÝÆ÷¾Í¿ÉÒÔÁË¡£Ö®ºó£¬ÔÚÏÖÓÐÈÝÆ÷ÀïÔÙÌí¼Ó¶îÍâµÄ»·¾³±äÁ¿VIRTUAL_HOSTºÍVIRTUAL_PORT£¬ÈçÏ£º

api:
image: dockerfile/nodejs
volumes:
- ./api/:/app/
working_dir: /app/
command: npm start
environment:
- VIRTUAL_HOST=api.domain.local
- VIRTUAL_PORT=8000
ports:
- "8000:8000"
links:
- database
database:
image: postgresql
dashboard:
image: dockerfile/nodejs
volumes:
- ./dashboard/:/app/
working_dir: /app/
command: npm start
environment:
- VIRTUAL_HOST=dashboard.domain.local
- VIRTUAL_PORT=8001
ports:
- "8001:8001"
links:
- api
cpanel:
image: dockerfile/nodejs
volumes:
- ./api/:/app/
working_dir: /app/
command: npm start
environment:
- VIRTUAL_HOST=cpanel.domain.local
- VIRTUAL_PORT=8002
ports:
- "8002:8002"
links:
- api
nginx:
image: jwilder/nginx-proxy
volumes:
- /var/run/docker.sock:/tmp/docker.sock
ports:
- "80:80"

nginxÈÝÆ÷»á¼ì²éËùÓÐÔËÐÐÔÚDockerÊØ»¤½ø³ÌÖ®ÉÏ£¨Í¨¹ý¹ÒÔØµÄdocker.sockÎļþ£©µÄÈÝÆ÷£¬ÎªÃ¿¸öÈÝÆ÷´´½¨ºÏÊʵÄnginxÅäÖÃÎļþ£¬²¢ÉèÖÃVIRTUAL_HOST»·¾³±äÁ¿¡£

ÒªÏëÍê³É±¾µØÂ·ÓɵĴ£¬»¹ÐèÒªÔÚetc/hostsÀïÌí¼ÓËùÓеÄVIRTUAL_HOST¡£ÎÒÊÇÊÖ¶¯ÓÃnode.jsµÄhostile°üÀ´Íê³ÉÕâ¸ö¹¤×÷µÄ£¬²»¹ýÎÒ²ÂÓ¦¸Ã¿ÉÒÔ×Ô¶¯»¯ÊµÏÖ£¬¾ÍÏñjwilder/nginx-proxy¿ÉÒÔ¸ù¾ÝnginxÅäÖÃÎļþ¶¯Ì¬±ä»¯Ò»Ñù¡£ÕâÀïÐèÒªÔÙÑо¿Ò»Ï¡£

ÏÖÔÚ¿ÉÒÔÔÙ´ÎÔËÐÐdocker-compose up -d£¬È»ºóʹÓúÍÉú²ú»·¾³Ò»ÑùµÄurl·ÃÎÊÓ¦ÓóÌÐò£¬Ö»ÐèÓÃ.localTLD´úÌæ.comTLD¡£

   
2301 ´Îä¯ÀÀ       27
 
Ïà¹ØÎÄÕÂ

ÔÆ¼ÆËãµÄ¼Ü¹¹
¶ÔÔÆ¼ÆËã·þÎñÄ£ÐÍ
ÔÆ¼ÆËãºËÐļ¼ÊõÆÊÎö
Á˽âÔÆ¼ÆËãµÄ©¶´
 
Ïà¹ØÎĵµ

ÔÆ¼ÆËã¼ò½é
ÔÆ¼ÆËã¼ò½éÓëÔÆ°²È«
ÏÂÒ»´úÍøÂç¼ÆËã--ÔÆ¼ÆËã
ÈídzÎöÔÆ¼ÆËã
 
Ïà¹Ø¿Î³Ì

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

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

ÔÆ¼ÆËãÔ­ÀíÓëÓ¦ÓÃ
Windows Azure ÔÆ¼ÆËãÓ¦ÓÃ

ĦÍÐÂÞÀ­ ÔÆÆ½Ì¨µÄ¹¹½¨ÓëÓ¦ÓÃ
ͨÓù«Ë¾GE DockerÔ­ÀíÓëʵ¼ù
ijÑз¢ÖÐÐÄ Openstackʵ¼ù
ÖªÃûµç×Ó¹«Ë¾ ÔÆÆ½Ì¨¼Ü¹¹ÓëÓ¦ÓÃ
ijµçÁ¦ÐÐÒµ »ùÓÚÔÆÆ½Ì¨¹¹½¨ÔÆ·þÎñ
ÔÆ¼ÆËãÓëWindows AzureÅàѵ
±±¾© ÔÆ¼ÆËãÔ­ÀíÓëÓ¦ÓÃ