ããããæ°è£œåããã€ã¯ããµãŒãã¹ã¢ãŒããã¯ãã£äžã§ããã«æžãå§ããããã¢ããªã¹ã®åæã«å¯ŸåŠããããšã¯ã§ããªããšèšã£ããã©ãã§ããããã ããã¯äžè¬çã«æ£åžžã§ããïŒ äŸ¿å©ã§ããïŒ çããç¥ãããã§ããïŒ
ã¿ã¹ã¯ïŒãã¬ãŒã ã¯ãŒã¯ã䜿çšããã«ã鱿«ïŒæéã¯10ã15æéã«å¶éãããŸãïŒã«PHPã§ãã€ã¯ããµãŒãã¹ã«é¢ããçç¶ã®ããã°ãæžãå¿
èŠããããŸãã åžžèã䜿çšã§ããŸãã ãŸããããã³ããšã³ãã«ã€ããŠãå¿ããä»®æ³åãªãã§ã¯çããŠãããªãããšãå¿ããªãã§ãã ããã DockerãéžæããŸãã é¢çœãïŒ ç«ã«è»¢éããŸãã

ãã€ã¯ããµãŒãã¹
ãã€ã¯ããµãŒãã¹ã®ã¢ãããŒãã«èå³ãããããã©ãããå§ããã°ãããããããªãå Žåã¯ãSam Newmanã®èæž ãBuilding Microservicesãããå§ããŠãã ããã ãã®ã¢ãããŒãã®äž»ãªãã€ã³ããå°ã説æããããšæããŸããã远å ãããã°ã³ã¡ã³ãã«æžããŠãã ããã äžè¬ã«ãäœããã®çç±ã§ãç§ã¯ãç¹ã«ããªãã®ç¹å®ã®ã±ãŒã¹ã§ã以äžã«èª¬æããã¢ãããŒãã®ããããã«åœãŠã¯ãŸããµããããŸããã
åè¿°ã®ããã°ã®äŸã§ãã¹ãŠãæ€èšããŸãã ãã¡ãããããã¯ã¿ã¹ã¯ã®ããã®ã¿ã¹ã¯ã§ããããã®ããŒãžã§ã³ã§ãåäœããæ£åžžã«åäœããããšã«æ³šæããŠãã ããïŒè¿
éãã€åé¡ãªãïŒã
ãã€ã¯ããµãŒãã¹ã®æ¬è³ªã¯ãã¢ããªã·ãã¯ã¢ãŒããã¯ãã£ãšæ¯èŒããŠçè§£ããããã§ãã éåžžã®ããã°ãšã³ãžã³ã¯ã©ã®ããã«èŠããŸããïŒ å€§ãŸãã«èšã£ãŠãããã¯1ã€ã®ã¢ããªã±ãŒã·ã§ã³ã«ãããŸããã èšäºãã³ã¡ã³ããããŒãžããŠãŒã¶ãŒãããã³ãã®ä»ã®æ©èœãŠãããã®æäœã¯ã決ããŠå
±æãããªãåäžã®ãœãŒã¹ã³ãŒãããã±ãŒãžã«å«ãŸããŠããŸãã

ã³ã³ããŒãã³ãéã®ãã¹ãŠã®æ¥ç¶ãã³ãŒãå
ã®åŒã³åºãã§ããå Žåãã¯ã©ã¹ããã¿ãŒã³ãªã©ã®éã®äœããã®é¢ä¿ ãŸãã¯ãäºãã«åé¢ããããšãäžå¯èœãªå Žåã¯ãåã«govnokodã§ãããã§ãã
ããã°ã¯ã©ã®ããã«è¡šç€ºãããŸããïŒ ã¯ããã»ãŒåããæ£çŽã«èšããšã

å¯äžã®éãã¯ãã³ã³ããŒãã³ãã®ããããã¯ã¹ã1ã€ã®ã¢ããªã±ãŒã·ã§ã³ã®ã³ãŒãã«å²ãŸããã³ã³ããŒãã³ãã§ã¯ãªããªããç¢å°ããã®ã³ãŒãå
ã®ã¯ã©ã¹ã®ã·ã¹ãã ã³ãŒã«ã§ã¯ãªããªã£ãããšã§ãã çŸåšããããã¯åå¥ã®ã³ã³ããŒãã³ãã§ãããç¢å°ã¯éåžžã®httpèŠæ±ã§ãã
ãªããããå¿
èŠãªã®ã§ããïŒ ãããã誰ãããããå¿
èŠãšããŠããããã§ã¯ãªããšããã«å€æããŸãã ããã¯ãããªã倧ããªäŒç€Ÿã§ãåãµãŒãã¹ã«éçºããŒã ãå²ãåœãŠãããšãã§ããå Žåã«éåžžã«äŸ¿å©ã§ãã äžèŠæš¡ã®äŒç€Ÿã§ãã£ãŠããåãµãŒãã¹ã«äººãå²ãåœãŠããšãããšæããŸãã ãã ããäŒç€Ÿå
šäœã§èªåã1人ã§ãã£ãŠãããã€ã¯ããµãŒãã¹ã«ã¯è峿·±ããã®ããããŸãã
ãµãŒãã¹ã®å€§ããã¯ã©ããããã§ããïŒ å¢çç·ãåŒãã®ã¯å°é£ã§ããééãã¯å€å€§ãªè²»çšãããããŸãããèŠããã«ããµãŒãã¹ã¯ã·ã¹ãã ã®ç¹å®ã®åäœã§ãããçæéã§å®å
šã«æžãæããããšãã§ããŸãã çµéšçã«ãããªããŸãã¯ããªãã®ããŒã ã«1é±éã§ãµãŒãã¹ã«å¯Ÿå¿ãããŠãã ããã ããã§ã®äž»ãªã¢ã€ãã¢ã¯ããµãŒãã¹ãå°ããããããšã§ãã 圌ãã¯ã¢ããªã¹ã®æã«ãªã£ãŠã¯ãããŸããã
ã ãããç§ãèªåã®ããã«éžã¹ãè¯å®çãªããšã¯ãäžè¬ã«ããã¹ãŠåãåŸåã«ãããŸãïŒéçºã®ããã®ä¿¡ããããªãã»ã©ã®äœ¿ããããïŒ
- èé害æ§ã ãµãŒãã¹éã®ãªã³ã¯ã¯ãã¯ãåºå®ãããŠããªãããããµãŒãã¹ã¯èª°ãã®æããïŒããšãã°ãã³ã¡ã³ããµãŒãã¹ïŒã«ãã£ãŠæ¶æ»
ããå¯èœæ§ããããŸãããäžè¬çã«ã¯ãã³ã¡ã³ãã倱ãããããšãé€ããŠããã°ã«ã¯åœ±é¿ããŸããã
- èšèªã äœã§ãæ°ãããµãŒãã¹ãéçºã§ããŸãã äžè¬ã«ãèšèªã®éžæã¯ãç¹å¹è¬ã®æ€çŽ¢ã«äŒŒããã®ã§ã¯ãªããªããŸããã·ã¹ãã ã®åã³ã³ããŒãã³ãã«ã€ããŠãçŸæç¹ã§æãé©ããããŒã«ãéžæã§ããŸãã ãªãã§ïŒ ããã¯äŒç€Ÿã«ãšã£ãŠé«äŸ¡ã§ã¯ãªãããïŒãµãŒãã¹ã¯å°ããïŒãå€ããµãŒãã¹ããã€ã§ãããŒã«ããã¯ã§ããç°ãªãèšèªã§èšè¿°ãããåããµãŒãã¹ãåæã«äœ¿çšããŠãã©ã¡ããåªããŠããããçè§£ããããšãã§ããŸãã ãšã©ãŒã®ä»£åã¯èšãç¥ããŸããã
- ã¹ã±ãŒã©ããªãã£ã ã¢ããªã±ãŒã·ã§ã³ã¯é
ããªãã倱æããŸããïŒ ã¢ããªã±ãŒã·ã§ã³å
šäœã«å·šå€§ãªæ°ãããµãŒããŒãå¿
èŠã§ããã10ãè¶
ããæ¹ãããã§ããããïŒ å¿ã㊠ããã§ããµãŒãã¹ãæ¡åŒµã§ããŸãã ãµãŒãã¹ã远å ããã ãã§ã:)
- äžè¬ã«ãé«éã§ããã¹ãŠãããé«éã«ãªããŸãã
ç§ãã¡ã®ã¢ããªã±ãŒã·ã§ã³ã¯äœãã§ããã¯ãã§ããïŒ ããã»ã©å€ãã¯ãããŸããã
4ããŒãžïŒ
- æçš¿ãªã¹ã
- ã³ã¡ã³ãä»ãã®æçš¿ãéã
- æçš¿ã远å ãã
- ãã°ã€ã³
æ©èœã¯ç°¡åã§ãïŒ
- èš±å¯ãŠãŒã¶ãŒã¯æçš¿ã远å ã§ããŸã
- 誰ã§ãã³ã¡ã³ãã§ããŸãã
Docker

ããã§ãçè«ã«ã€ããŠã¯ãã話ãããã¢ããªã±ãŒã·ã§ã³ãã«ããããŸãããã ãããã³ã°ãŠã£ã³ããŠã«é
眮ããŸãã ãã®ãããªåæ£ã¢ããªã±ãŒã·ã§ã³ãä»®æ³åãªãã§1å°ã®ãã·ã³ã§éçºããããšã¯ã»ãšãã©äžå¯èœã§ãã Dockerã®èª¬æã¯ããã®èšäºã®ç¯å²ãè¶
ããŠããããããã©ã°ã¡ã³ãã§è¡šç€ºãããŸãã ããªãã¯åœŒã«ã€ããŠäœããç¥ã£ãŠãããšä»®å®ãããŸãã
ãšããã§ãããã«ããã°ãããŠã³ããŒãããŠå®è¡ã§ããã«ããžã®ãªã³ã¯ããããŸãã以äžã®ã³ãŒãã䜿çšããŠäœããåç
§ããŠãã ããã https://github.com/gregory-vc/blog
ç§ãã¡ã®æãåçŽãªããã°ã«ã¯ããã€ã®ã³ã³ããããããŸããïŒ ã¡ãªã¿ã«ãã³ã³ããã¯ãæ¬è³ªçã«ã¯ããããã¯ãŒã¯ãä»ããŠä»ã®ã³ã³ãããšéä¿¡ããå¥ã®ãµãŒããŒã®ä»®æ³åã§ãããã ããå³å¯ãªé¡äŒŒã®container = serverã䜿çšããå Žåãäžéšã®ã³ã³ããã¯æŸæ£ããå¿
èŠããããŸãã ãã€ã¯ããµãŒãã¹ã«é¢ããããã°ã®æãç°¡åãªå®è£
ã§ã¯ã24åã®ã³ã³ãããŒãã«ãŠã³ãããŸããã èŠãŠã¿ãŸãããã
- äžè¬çãªã³ã³ããïŒèªèšŒãµãŒãã¹ã®ããŒã¹ãã¡ã€ã³ã®ããã°ããŒã¹ãå€§æ ¹ã
- ãµãŒãã¹ã²ãŒããŠã§ã€ïŒphpããœãŒã¹ã³ãŒãã®ã³ã³ãããŒãnginxã
- æçš¿ãåŠçããããã®ãµãŒãã¹ïŒïŒphpããœãŒã¹ã³ãŒãã®ã³ã³ãããŒãnginxïŒx 2
- ã³ã¡ã³ããåŠçããããã®ãµãŒãã¹ïŒãŸãx 2
- æ¿èªããã³èªèšŒãµãŒãã¹ïŒãŸãx 2
äžéšã®ãµãŒãã¹ã®ã³ããŒã2ã€ããã®ã¯ãªãã§ããïŒ ãªããªãããã¯é¢çœããªããã¯ã£ããããªãããã§ãã
1ã€ã®ã³ãã³ãã§ãã¹ãŠããããã€ããdocker-composeãã¡ã€ã«ã¯æ¬¡ã®ããã«ãªããŸãã
https://github.com/gregory-vc/blog/blob/master/host/docker-compose.yml
æãè峿·±ããã®ãããã²ãŒããŠã§ã€ã³ã³ããã®phpèšå®ãæ€èšããŸãã
'php_gate': image: 'tattoor/blog_php' container_name: 'php_gate' volumes_from: ['source_gate'] volumes: ['./logs/php/gate/:/var/log/dev_php'] links: - nginx_post_1:post1.blog - nginx_post_2:post2.blog - nginx_comment_1:comment1.blog - nginx_comment_2:comment2.blog - nginx_auth_1:auth1.blog - nginx_auth_2:auth2.blog - redis environment: - POST_1_HOST=post1.blog - POST_1_PORT=80 - POST_2_HOST=post2.blog - POST_2_PORT=80 - COMMENT_1_HOST=comment1.blog - COMMENT_1_PORT=80 - COMMENT_2_HOST=comment2.blog - COMMENT_2_PORT=80 - AUTH_1_HOST=auth1.blog - AUTH_1_PORT=80 - AUTH_2_HOST=auth2.blog - AUTH_2_PORT=80
ãªã³ã¯ã³ã³ããã®èª¬æã»ã¯ã·ã§ã³ãããã¯åºæ¬çã«/ etc / hosts /
docker exec php_gate cat /etc/hosts 172.17.0.36 auth1.blog 86b8b266477d nginx_auth_1 172.17.0.36 nginx_auth_1 86b8b266477d 172.17.0.21 comment1.blog 836bacb42e78 nginx_comment_1 172.17.0.19 comment2.blog c554a8888801 nginx_comment_2 172.17.0.20 post2.blog 37f81921419c nginx_post_2 172.17.0.7 redis a1932016be87 172.17.0.37 auth2.blog 5715045a213b nginx_auth_2 172.17.0.37 nginx_auth_2 5715045a213b 172.17.0.21 nginx_comment_1 836bacb42e78 172.17.0.19 nginx_comment_2 c554a8888801 172.17.0.22 nginx_post_1 1cc1ef5ab896 172.17.0.22 post1.blog 1cc1ef5ab896 nginx_post_1 172.17.0.20 nginx_post_2 37f81921419c 172.17.0.23 fafe93f31a67
æå®ããããã¹ãã§ãDockerã®å
éšãããã¯ãŒã¯ãä»ããŠå¥ã®ã³ã³ããã«ã¢ã¯ã»ã¹ããã ãã§ãã
ãŸããç°å¢ã»ã¯ã·ã§ã³ã¯ãgetenvïŒïŒãä»ããŠã¢ããªã±ãŒã·ã§ã³å
ã§ååŸã§ãã倿°ã®æå®ã«ãããŸããã docker-composeãã¡ã€ã«ãã¢ããªã±ãŒã·ã§ã³å
šäœãèšå®ããããã®åäžã®ãšã³ããªãã€ã³ãã«ãªãããã«äœæãããŸãã
ãµãŒãã¹ã®æ§é ã¯ããã£ã¬ã¯ããªãè¿ãã«ããããã«èŠããŸããã
- èªèšŒ
- ã³ã¡ã³ã
- ã²ãŒã
- æçš¿
ããããå®éã«ã¯ããã¹ãã®ããã«ãŒãèµ·åãããšããããã®åãã£ã¬ã¯ããªã¯åå¥ã®åé¢ããã察å¿ããã³ã³ããå
ã«è¡šç€ºãããŸãã ããã¯äœããã®åœ¢ã§è¡ãããŸãïŒ
'source_post_1': volumes: ['../Services/Post:/home/gregory/source/']
ã€ãŸãããããã¯ããããè¿ãã«ãããŸãããèµ·åæã«ã¯ããããµãŒãã¹ãªã©ããå¥ã®ãµãŒãã¹ã®ã¯ã©ã¹ãå«ããæ©äŒã¯ãããŸããã è¿ãã«ããã®ã¯å©äŸ¿æ§ã®ããã ãã§ãããå®éã«ã¯ãäºãã«ãŸã£ããè§Šããã«ãããããããªããžããªå
ã«ããå¿
èŠããããŸãã
ã²ãŒããµãŒãã¹

ãã®ãµãŒãã¹ã¯ãããã°ãžã®ãšã³ããªãã€ã³ããšãªãããã³ãã¬ãŒããã¬ã³ããªã³ã°ããçµæã衚瀺ããå¿
èŠãªãµãŒãã¹ãåŒãåºããŸãã ãšããã§ãããŸããŸãªã¢ãããŒãããããŸããããšãã°ãåäžã®ãšã³ããªãã€ã³ããæåŠãããã¹ãŠãããã³ããšã³ãã«å®è£
ã§ããŸãã ã€ãŸãããã©ãŠã¶èªäœãå¿
èŠãªãµãŒãã¹ã«ã¢ã¯ã»ã¹ãããã©ãŠã¶ã§çµæãçŽæ¥åéããŸãã ç§ãèšããããšã¯ãããã¯ãã¹ãŠããªãã®ç¹å®ã®ã±ãŒã¹ã«äŸåããããã«ã¯ãã©ã¹ãšãã€ãã¹ããããŸãã
ã ãããç§ãã¡ã¯PHPãæã£ãŠããŸãã ãšã¯ãããå°ãªããšãäœæ²å®¶ãé£ããŠè¡ããŸãããã ããã«2ã€ã®ãã£ã¬ã¯ããªãäœæããŠã¿ãŸãããã1ã€ã¯ãã€ã¯ããã¬ãŒã ã¯ãŒã¯çšã§ãããã¯ããããäœæããŸãã2ã€ç®ã¯ãããªãã¯ã¹ã¯ãªãããjsãããã³ãã®ä»ã®ãªãœãŒã¹çšã§ãã
次ã®ããã«ãªããŸãã
- ç§ã®
- å
Ž
- composer.json
ã³ã³ããŒã¶ãŒã§ã¯ãåçŽã«ãªãŒãããŒããå®è£
ããå Žæãæå®ãããããããã«ç
©ããããããšã¯ãªããçæããããªãŒãããŒããpublic / index.phpã«æ¥ç¶ããŸãã
ã ãããç§ãã¡ã¯ãã§ã«äœããæã£ãŠããŸããç§ãã¡ããŸã å¿
èŠãªãã®ã決å®ããŸããã
- MVCãã€ãŸãã³ã³ãããŒã©ãŒãæå³ããŸã
- ããžãã¹ããžãã¯ã®å Žæ
- ãã¿ãŒã³
- ãã³ãã¬ãŒããšã³ãžã³
æªããªããä»ã«äœïŒ
- ä¿ç®¡æœèšã®åœ¢ã§ãå°ãç°¡åã«ã§ããŸãã
- Vaultèªäœ
- ãªã¯ãšã¹ã
- çã
- ã«ãŒãã£ã³ã°ããããããããããå§ãã䟡å€ããããŸãã
- ã»ãã·ã§ã³ãããããªããšã«é¢ãããã®ã
ãã®ãããªãªããžã§ã¯ãã®ãªããžããªãäœæããŠãã©ãã«ãäœæããªãããã«ããŸãããã ããå¿
èŠãªäŸåé¢ä¿ããã¹ãŠåããã¢ããªã±ãŒã·ã§ã³ã®ä»»æã®æç¹ã§æ¢ã«äœæãããã¢ããªã±ãŒã·ã§ã³ã«ã¢ã¯ã»ã¹ïŒã€ã³ãžã§ã¯ãïŒã§ããããã«ããŸãã Reflectionããã®ä»ã®è峿·±ãããšã楜ããããšã¯ãããŸãããæéã¯å³ããå¶éãããŠããŸãã
Storage::set('Request', new Request()); Storage::set('Router', new Router()); Storage::set('Redirect', new Redirect()); Storage::set('App', new App());
Diã§ã¯ããã®ãªããžããªã䜿çšããŠãå¿
èŠãªãªããžã§ã¯ãããã¹ãŠè¿œå ããŸãã
å
¬éã§ã¯ãDiãèµ·åããã«ãŒã¿ãŒãååŸãã䟿å©ãªãã¹ãŠã®URLãç»é²ããã¢ããªã±ãŒã·ã§ã³ãåãåã£ãŠèµ·åããŸãã
$router->get('/logout/', 'AuthController@logout'); $router->get('/404', 'SystemController@notFound'); $router->post('/post/add_request/', 'PostController@add')
ã¢ããªã±ãŒã·ã§ã³ã§ã¯ãèŠæ±ãååŸãããã®èŠæ±ã«å¯Ÿããæ¢åã®ã³ã³ãããŒã©ãŒã®æ¢åã®ã¢ã¯ã·ã§ã³ãã«ãŒã¿ãŒã«ãããã³ã°ãããšåæã«ãåä¿¡ãããã¹ãŠã®ãã¹ã倿°ãŸãã¯ååŸå€æ°ãèŠæ±ã«æžã蟌ã¿ãŸãã
ã³ã³ãããŒã©ãŒã¡ãœãããå®è¡ããå¿çãååŸããå¿çãã¬ã³ããªã³ã°ããŠãäœæ¥ã®çµæã衚瀺ããã ãã§ãã
$current_request = $this->router->getCurrent(); $controller = new $current_request->controller; $response = $controller->{$current_request->method}(); $response->render();
ãã¬ãŒã ã¯ãŒã¯ãããããµãŒãã¹ãæäœãããµãŒãã¹ãå«ããã£ã¬ã¯ããªãäœæããåãµãŒãã¹ã®ã¯ã©ã¹ãäœæããåãµãŒãã¹ã®ã¢ã¯ã»ã¹ãã€ã³ããèšè¿°ããå¿
èŠããããŸãã ã¯ãšãªãªãã·ã§ã³ãå®è£
ãããµãŒãã¹ã®ã¡ã€ã³ã¯ã©ã¹ããããããç¶æ¿ããŸãã
https://github.com/gregory-vc/blog/blob/master/Services/Gate/My/Engine/Service.php
static public function get($method, $params = []) { $service = new static; return $service->executeGet($method, $params); } static public function post($method, $params = []) { $service = new static; return $service->executePost($method, $params); }
ããã§ããªã¯ãšã¹ãå
ã§ããµãŒãã¹ã«ãã£ãŠæäŸãããã³ãã¯ã¿ããã©ã³ãã ãªã³ãã¯ã¿ãéžæããŸãã
$rand_connector = rand(0, $count_connector) % $count_connector;
ã³ã³ãããŒã©ãããªã¯ãšã¹ããäœæããæ¬¡ã®ããã«ã¬ã³ããªã³ã°ããŸãã
$posts = Post::get('all'); return $this->response->html('posts', $posts);
ã¬ã³ããªã³ã°ããå¿
èŠããããŸãããã©ããã£ãŠïŒ ãã³ãã¬ãŒããšã³ãžã³ã¯ãããŸããã èªåã§æžããŸããïŒ ãããã phpã䜿çšããŠãã ããã
ob_start(); require_once($layout_template); $contents = ob_get_contents(); ob_end_clean(); $this->content = $contents;
4è¡ã®ãµã€ãºã®éåžžã«åŒ·åãªãã³ãã¬ãŒããšã³ãžã³ã
æçš¿ããã³ã³ã¡ã³ããµãŒãã¹
次ã¯ïŒ ããã§ããªã¯ãšã¹ããäœæããŠçµæã衚瀺ã§ããããã«ãªããŸãããæ¬¡ã«ãçããæäŸãããµãŒãã¹ãäœæããå¿
èŠããããŸãã æ°ãããšã³ãžã³ãä»ã®ãµãŒãã¹ã«ã³ããŒããURLã倿Žãããªã¢ãŒããµãŒãã¹ã®ä»£ããã«ã¢ãã«ãšããŒã¿ããŒã¹ã§äœæ¥ãèšè¿°ããŸãã
ããã©ã«ãã§ã¯findAllãfindByãaddãsaveã®ã¢ãã«ã§äœæ¥ãå®è£
ããŸãïŒ
https://github.com/gregory-vc/blog/blob/master/Services/Auth/My/Engine/Model.php
ããã§äœïŒ æ£çŽã«èšããšãæ¿èªãé€ãã°ãããã ãã§ååã§ãã
ä»ã®ãµãŒãã¹ããä»ã®ãµãŒãã¹ãŸã§ããããããµãŒãã¹ã®ã²ãŒããªã¯ãšã¹ããè¡ãããšãã§ããŸãã
èªå¯ãµãŒãã¹
ã¹ããŒã ã¯åçŽã§ãããŠãŒã¶ãŒãšãã®ã¢ã¯ã»ã¹æš©ãæ¿èªãµãŒããŒã«ãããã²ãŒããŠã§ã€ããæ¿èªãªã¯ãšã¹ããäœæããããŒã¯ã³ãçæãããããã²ãŒããŠã§ã€ãšå¥ã®ãŠãŒã¶ãŒã«è¿ãããŠãŒã¶ãŒãšããŒã¯ã³ãã»ãã·ã§ã³ã«å
¥ããŸãã æçš¿ã远å ãããªã¯ãšã¹ããšäžç·ã«ããŒã¯ã³ãéä¿¡ããããšãå¿ããããªããäœã®ããïŒ ããã§ããéµäŸ¿ãµãŒãã¹ã¯æ¿èªãµãŒãã¹ã«è¡ãããã®ããŒã¯ã³ãè¯ããã©ãããå°ããŸããïŒ çµæã«å¿ããŠããžã§ãã¬ãŒã¿ãŒã®å®è¡ã¯ç°ãªããŸãã
public function login($user, $password) { $hash = hash('sha256', $password); $user = User::findBy([ 'login' => $user, 'password' => $hash ]); if (!empty($user) && is_array($user)) { $user = current($user); $user['token'] = bin2hex(random_bytes(30)); User::save($user); return [ 'login' => $user['login'], 'token' => $user['token'] ]; } else { throw new \Exception('Not found user'); } }
çµæ
äžè¬ã«ã1ã€ã®ã³ãã³ãã§ããŠã³ããŒãããŠãããã€ã§ããŸãããªããžããªãæãåºãããŸãïŒ https : //github.com/gregory-vc/blog
æå³ã®ã©ãã«åãŸãã-æç¢ºã«ããããã«ããã®ç¹å®ã®ããŒããŸãã¯ãã®ãããã¯ãçæãããããŒããæšæž¬ããŸããã
ãŸããããŒãžãçæãããæéã«ãæéãåããŸããã ããã¯ãæçš¿ãšããã€ãã®ã³ã¡ã³ãïŒïŒïŒãããããŒãžã®å Žåã5ã9ããªç§ã§ãã ã¯ããããã¯ãã¹ãŠåã£ãŠããŸããã¯ãããããã¯ãã¹ãŠãªãŠã ã§ããã¯ãããã€ã¯ããµãŒãã¹ã¯ãããšã¯äœã®é¢ä¿ããããŸãããã¯ããæ¯èŒãããã®ã«äŸåããŸãã ãããã åããã£ã©ã¡ã«ããã®ããŒãžãçæããŸããäžè¬ã«ããªã¯ãšã¹ããšããŒã¿ã¯ãªããèªåã®ãã·ã³äžã§90ããªç§éããããã€ã ãã§ãã ããã¯10ã20åé·ããªããŸãã
æ¯èŒããã®ã§ã¯ãªããããã«å€ãã®ããšãè¡ãããŠããããšãçè§£ããŠããŸãããããã§ããå¥ã®åé¢ããããã€ã¯ããµãŒãã¹ã®ãã®ç¹å®ã®çŸåšã®ã¿ã¹ã¯ã§ã¯ãããã¯ãã¹ãŠå¿
èŠã§ã¯ãããŸããã ã³ã¡ã³ããµãŒãã¹ã«ã€ããŠã¯ããããã¯ãŒã¯çµç±ã§ãµãŒãã¹ãæ±ãã¯ã©ã¹ã廿¢ããŸããã ã²ãŒããŠã§ã€ãµãŒãã¹ã®å Žåãåºæ¬ã¯ã©ã¹ãç Žæ£ããŸããã ç¹å®ã®ãµãŒãã¹ããšã«ã圌ãå¿
èŠãšãããã®ã ããåéããŸããã ãããŠãé©åãªãµãŒãã¹ã¯ã»ãã®å°ãå¿
èŠã§ã:)
ãããŠæãéèŠãªããšã¯ãããã¯ãã®ããã°ãä¿¡ããããªãã»ã©ã®ã¯ãŒã¯ããŒãã«æ¡å€§ããããã®ä¿¡ããããªãã»ã©ã®å¯èœæ§ã§ãã ããšãã°ã誰ãå¹²æžãããGoã®ã³ã¡ã³ããµãŒãã¹ã䜿çšããŠæžãæããŸãã
åé¡
ãããã¯ãŒã¯ãªãŒããŒããã
å¥ã®ãµãŒãã¹ãã©ã®ããã«æ©èœãããããããªãå Žåãã²ã©ãæ©èœããããã¹ãŠãæãªãç¶æ³ã«ãªãå¯èœæ§ããããŸãããŸãããµãŒãã¹ã䜿çšããŸãïŒïŒïŒçµæãæäŸããŸãã
ãã¹ãŠãè©Šãæ¹æ³ãæãåºãããŠãã ãã
Clone git clone https://github.com/gregory-vc/blog.git . Install Docker: wget -qO- https://get.docker.com/ | sh sudo usermod -aG docker user sudo apt-get install python-pip sudo pip install docker-compose Compile chmod 744 compile ./compile chmod 744 upload_db ./upload_db Run http://gate.blog:30001/ admin admin