éçºè ãšãµã€ãææè ã¯ãã€ã§ããã§ããã ãå€ãã®é¡§å®¢ã«ã§ããã ãæ©ãã³ã³ãã³ããé ä¿¡ãããšããé£ããã¿ã¹ã¯ã«çŽé¢ããŠããŸããã æãæ£ãã決å®ã®1ã€ã¯ãCDNïŒã³ã³ãã³ãé ä¿¡ãããã¯ãŒã¯ïŒã䜿çšããŠéçãã¡ã€ã«ãé åžããããšã§ãã ãµãŒããŒäžã®ããŒãžã®åçã¬ã³ããªã³ã°ã®å Žåãã¹ã¿ã€ã«ã·ãŒããã¹ã¯ãªãããã¡ã€ã«ãç»åãªã©ãCDNã«é 眮ã§ãããªããžã§ã¯ãã®å°ããªãªã¹ãã«å¶éããå¿ èŠããããŸããã ãã ããAngularïŒReactãVue.js ...ïŒã§èšè¿°ãããããã³ããšã³ãã¯ãã€ã³ããã¯ã¹ããŒãžãå«ããŠå®å šã«éçã§ãã ããã§èããçãŸããŸããCDNãä»ããŠããã³ããšã³ãå šäœã®é åžãæŽçããŠã¿ãŸãããïŒ
ãã®èšäºã§ã¯ãGitlab CIãAmazon S3ãããã³Amazon CloudFrontã䜿çšããŠãéçãµã€ãã®éçºãããŒãžã§ã³ç®¡çãèªåã¢ã»ã³ããªãé ä¿¡ã®ããã®å æ¬çãªãœãªã¥ãŒã·ã§ã³ãæ§æããæ¹æ³ã«ã€ããŠèª¬æããŸãã ãŸããé¢é£äºé ã®èšå®ã«ã€ããŠã説æããŸãïŒgitãå®å šãªHTTPSæ¥ç¶ããã¡ã€ã³ã¡ãŒã«ãDNSãã¹ãã£ã³ã°ãããã¯ãšã³ããµãŒããŒ...
ãã®ãããã¯ã«èå³ãããå Žåã¯ãcatã«ããããã ã泚æ ã¹ã¯ãªãŒã³ã·ã§ãããããããã
ãŠã©ãŒã¯ã¹ã«ãŒã®çµæãšããŠåŸããããã®ïŒ
- Angularã§ãµã€ããéå§ããŸãã
- ããŒãžã§ã³ç®¡çïŒgitïŒã
- Amazon S3ãã±ããã§ããã³ããšã³ããèªåçã«æ§ç¯ããŠå ¬éããŸãã
- CDNïŒAmazon CloudFrontïŒãä»ããããã³ããšã³ãã®é åžã
- èªåæŽæ°æ©èœãåããAmazonã®ç¡æSSL蚌ææžïŒãµã€ããHTTPSçµç±ã§åäœããããïŒã
- Yandexããã®ç¡æãã¡ã€ã³ã¡ãŒã«ãšDNSã¬ã³ãŒãã管çããããã®äŸ¿å©ãªã€ã³ã¿ãŒãã§ã€ã¹ïŒã ãã§ãªãïŒã
- ããã¯ãšã³ããµãŒããŒãèªåçã«æ§æããBashã¹ã¯ãªããã
- Debain 9ïŒnginx + PHP7.1-FPMïŒã§å®è¡ãããŠããããã¯ãšã³ããµãŒããŒã
- Let's Encryptã®ç¡æã®SSL蚌ææžãšèªåæŽæ°ïŒãã¡ã€ã³ã«ãŒããŸãŒã³ããã³HTTPSçµç±ã®ããã¯ãšã³ããµãŒãã¹çšïŒã
ããã«å¿ èŠãªãã®ïŒ
- ã¬ãžã¹ãã©ã®ã³ã³ãããŒã«ããã«ã«ã¢ã¯ã»ã¹ã§ãããã¡ã€ã³åã
- Gitlabã¢ã«ãŠã³ã ã
- AWSã¢ã«ãŠã³ãïŒAmazon WebãµãŒãã¹ïŒ ã
- Yandexã¢ã«ãŠã³ã ã
- Debain 9ãã€ã³ã¹ããŒã«ãããVDSïŒä»®æ³å°çšãµãŒããŒïŒã
ãã®ããŒã«ã®éžæã«é¢ããããã€ãã®èšè
å€ãã®åºæºã«åŸã£ãŠé©åãªãµãŒãã¹ãæ€çŽ¢ããã®ã«å€ãã®æéãè²»ãããŸããã 第äžã«ãããã¯äŸ¡æ Œã§ã-ãµãŒãã¹ãç¡æã«ããããããŸãé«äŸ¡ã§ã¯ãªãããšãåžæããŸãã 第äºã«ãä¿¡é Œæ§ã ãŸãããµãŒãã¹ãã»ãšãã©ã®è²¬ä»»ãåŒãåããäœããã€ã³ã¹ããŒã«ããŠæ§æããå¿ èŠããªããªãå Žåã«ã圹ç«ã¡ãŸãã ããšãã°ãç¬èªã®gitãµãŒããŒãã»ããã¢ãããããµãŒãããŒãã£ã®CIãµãŒãã¹ïŒç¶ç¶çã€ã³ãã°ã¬ãŒã·ã§ã³ïŒã䜿çšããçç±ã¯ãGitlabããããã®ãµãŒãã¹ããã¹ãŠæäŸãããã©ã€ããŒããªããžããªãçµç¹ãååã®æ°ã«å¶éããªãå Žåã§ããïŒ ãããYandexã«æäŸã§ããã®ã«ããªãèªåã®ãµãŒããŒã«ãã¡ã€ã³ã¡ãŒã«ãã»ããã¢ããããã®ã§ããïŒ CDNã«ã€ããŠ-Amazon CloudFrontã»ã©å®ããã®ã¯èŠã€ãããŸããã§ããã Amazon S3ãã¡ã€ã«ã¹ãã¬ãŒãžãé«äŸ¡ã§ã¯ãããŸããïŒããããé«äŸ¡ãªã®ã«ãªãVDSã«å€ãã®ãã¡ã€ã«ãä¿åããã®ã§ããïŒïŒã
ãããè¡ããïŒ
1. DNSãã¹ãã£ã³ã°ãšYandexã¡ãŒã«
ãŸãããã¡ã€ã³ãYandexã¡ãŒã«ã«æ·»ä»ããŸãã ãã®æé ã¯ãäž»ã«ãã¡ã€ã³ã¡ãŒã«ãã»ããã¢ããããããã«è¡ããŸãã Amazon SSL蚌ææžãåãåãã«ã¯ãã¡ã€ã³ã®æææš©ã確èªããå¿ èŠããããŸãããã®ããã«webmaster@yourdomain.comã§ã¡ãŒã«ãåãåãå¿ èŠããããŸãã
1.1ã Yandexã«ç»é²/ãã°ã€ã³ããŸãã
1.2ã Yandexãã¡ã€ã³ã¡ãŒã«ã«ç§»åãããã¡ã€ã³ãè¿œå ããŸãïŒã¡ãã¥ãŒé ç®ããã¡ã€ã³ã®æ¥ç¶ãïŒã
ããã§ãYandexã«ã¯ãSDA 2.0ããŸãã¯ãYandex.Connectããããããšã«ããã«æ³šç®ããŸãã ãã ããYandex.Connectã€ã³ã¿ãŒãã§ãŒã¹ãäžå¿ èŠã«
1.3ã ãã¡ã€ã³ã®æææš©ã確èªããŸãã
æãç°¡åãªæ¹æ³ã¯ããã¡ã€ã³ãYandexã«å§ä»»ããããšã§ãã ãããè¡ãã«ã¯ãã¬ãžã¹ãã©ã®ã³ã³ãããŒã«ããã«ã§ãã¡ã€ã³ã«æ¬¡ã®NSãµãŒããŒãã€ã³ã¹ããŒã«ããŸãã
dns1.yandex.net
dns2.yandex.net
泚æïŒ ãã®æé ã¯ããã¡ã€ã³ããã¡ã€ã³ã®ã¡ãŒã«ã«æ¥ç¶ããåŸã«å³å¯ã«å®è¡ããå¿ èŠããããŸãïŒ1.2é ïŒã
1.4ã ç§ãã¡ã¯æ倧72æéåŸ ã£ãŠããŸãïŒéãè¯ããã°ïŒã
ãã¡ã€ã³æææš©ã®æ€èšŒã¯èªåçã«ãã¹ããã¯ãã§ãã ãã®åŸããç§ã®ãã¡ã€ã³ãã®ãªã¹ãã®ãã©ãã£ãã¯ã«ãŒã«ããŒãžã§ãããã¡ã€ã³ãæ¥ç¶ãããYandexã«å§ä»»ãããŸããããšããç·è²ã®ã¡ãã»ãŒãžã衚瀺ãããŸãã
ããã§ããã¡ã€ã³ã®ã¡ãŒã«ãæ¥ç¶ã§ããŸãã ãã¡ã€ã³ã®MXã¬ã³ãŒããæ§æããå¿ èŠã¯ãããŸããã ãã¡ã€ã³ãYandex NSãµãŒããŒã«å§ä»»ããŸããã
ãã®æ®µéã§ãæ倧1000åã®ã¡ãŒã«ããã¯ã¹ãè¿œå ã§ãããã¡ã€ã³ã¡ãŒã«ãšãæ£ããDNSã¡ãŒã«ã¬ã³ãŒããå«ããã¡ã€ã³ã¡ãŒã«ãæ¢ã«åä¿¡ããŠããŸãã
1.5ã æåã®ã¡ãŒã«ããã¯ã¹johndoe@yourdomain.comãäœæããŸãã
1.6ã ãããã¡ãã¥ãŒã§ã[æ¥ç¶ã«ç§»è¡]ãªã³ã¯ãã¯ãªãã¯ããŸãã
ãã¡ã€ã³ãYandex.Connectã«ç§»ããçµç¹ã®ååã瀺ããŸãã ãã®åŸã httpsïŒ//connect.yandex.ru/portal/homeããŒãžãå©çšå¯èœã«ãªããŸãã
1.7ã ã管çè ãã«ç§»åããŸãã ããã§ããŸããŸãªèšå®ãå©çšã§ããŸãã
ç§ãã¡ã«ãšã£ãŠæãèå³æ·±ãã®ã¯ãã¡ãã¥ãŒé ç®ãDNS管çãã§ãã åŸã§æ»ããŸãã 次ã«ãwebmaster @ yourdomain.comãšããååã®ã¡ãŒã«ããã¯ã¹ã®ãšã€ãªã¢ã¹ãè¿œå ããå¿ èŠããããŸãã Amazonããã®ãã¡ã€ã³æææš©ã®ç¢ºèªã®ãªã¯ãšã¹ããå«ãé»åã¡ãŒã«ãåä¿¡ããã«ã¯ããã®ããã¯ã¹ãå¿ èŠã§ãã
1.8ã ãçµç¹æ§é ãã¡ãã¥ãŒé ç®ã«ç§»åããæåã®ã¡ãŒã«ããã¯ã¹ãè¿œå ããããšãã«èªåçã«äœæãããå¯äžã®ïŒãããŸã§ã®ïŒãŠãŒã¶ãŒïŒé ç®1.5ïŒãéžæããŸãã
1.9ã ãŠãŒã¶ãŒã®ã«ãŒãã®å³äžé ã«ããçç¥èšå·ãã¯ãªãã¯ãããã«ããŠã³ã¡ãã¥ãŒã§[ãšã€ãªã¢ã¹ã®ç®¡ç]ãéžæããŸãã
衚瀺ããããŠã£ã³ããŠã§ããæ°èŠè¿œå ããã¿ã³ãã¯ãªãã¯ããŸãã
ãwebmasterããšå ¥åãããè¿œå ããã¿ã³ãã¯ãªãã¯ããŸãã
ããã§ãwebmaster @ yourdomain.comã¡ãŒã«ããã¯ã¹ã®ãšã€ãªã¢ã¹ãäœæããããã¡ã€ã³ã¡ãŒã«ãžã®æçŽãåãåãæºåãæŽããŸããã
2.ã¢ããŸã³ãŠã§ããµãŒãã¹ã¢ã«ãŠã³ã
ãã®ã¬ã€ãã®ä»¥éã®æé ãå®äºããã«ã¯ã AWSã«ãŒããŠãŒã¶ãŒã¢ã«ãŠã³ããå¿ èŠã§ãã
ã¢ã«ãŠã³ãããŸã ãæã¡ã§ãªãå Žåã¯ãéåžžã«å¹žéã§ãããAWSç¡æå©çšæ ãå©çšã§ããŸãã ãããè¡ãã«ã¯ãç»é²æé ãå®è¡ããå¿ èŠããããŸã ã ç»é²ããã»ã¹äžã«ãæ¯æèœåã確èªããããã«ãéè¡ã«ãŒãæ å ±ãæ±ããããŸãããããã$ 1ãåŒãåºãããŸãïŒè¿ãããŸããïŒïŒã ãŸããã¢ã¡ãªã«ãããããããåŒã³åºãé»è©±çªå·ãæå®ããå¿ èŠããããŸãã
äžè¬ã«ãç»é²ããã»ã¹ã¯éåžžã«åçŽã§ãããç§ã®æèŠã§ã¯è©³çŽ°ãªèª¬æã¯å¿ èŠãããŸããã
3. Amazonã»ãã¥ãªãã£èªèšŒæ å ±
AWSãµãŒãã¹ãšã®èªåããŒã¿äº€æã«ã¯ãaws cliã³ã³ãœãŒã«ãŠãŒãã£ãªãã£ïŒAWSã³ãã³ãã©ã€ã³ã€ã³ã¿ãŒãã§ã€ã¹ïŒã䜿çšããŸãã ãŠãŒãã£ãªãã£ã¯ãã¢ã¯ã»ã¹ããŒIDãšã·ãŒã¯ã¬ããã¢ã¯ã»ã¹ããŒã®ãã¢ã䜿çšããŠæ¿èªãããŸãã ããããäœæããŸãã
3.1ã AWSã³ã³ãœãŒã«ã«ç§»åããŸãã
3.2ã å³åŽã®äžéšã®ã¡ãã¥ãŒã§ããŠãŒã¶ãŒåãã¯ãªãã¯ããŸãã ããããããŠã³ã¡ãã¥ãŒã§ãã¢ã€ãã ãMy Security CredentialsããéžæããŸãã
3.3ã èŠåãŠã£ã³ããŠãããã«è¡šç€ºãããå ŽåããããŸãã
ãããç¡èŠããŠããã»ãã¥ãªãã£è³æ Œæ å ±ã®ç¶è¡ããã¿ã³ãã¯ãªãã¯ããŠãã ããã
3.4ã å·ŠåŽã®ã¡ãã¥ãŒã§ãããŠãŒã¶ãŒãé ç®ãéžæããŸãã ããŠãŒã¶ãŒã®è¿œå ããã¿ã³ãæŒããŸãã
3.5ã [ãŠãŒã¶ãŒå]ãã£ãŒã«ãã«ãŠãŒã¶ãŒåãå ¥åããŸãã ããšãã°ããcli-managerãã
ãã¢ã¯ã»ã¹ã¿ã€ããã®é ç®ã§ããããã°ã©ã ã«ããã¢ã¯ã»ã¹ãããã¯ã¹ããã§ãã¯ããŸãã
[次ãžïŒã¢ã¯ã»ã¹èš±å¯]ãã¿ã³ãã¯ãªãã¯ããŸãã
3.6ã 次ã®æ®µèœã§ããæ¢åã®ããªã·ãŒãçŽæ¥æ·»ä»ããããéžæããŸãã ãAdministratorAccessããã§ãã¯ããã¯ã¹ãéžæããŸãã
[次ãžïŒã¬ãã¥ãŒ]ãã¿ã³ãã¯ãªãã¯ããŸãã
3.7ã 次ã®æ®µèœã§ãããŠãŒã¶ãŒã®äœæããã¿ã³ãã¯ãªãã¯ããŸãã
3.8ã æåŸã®æ®µèœã§ã¯ãæ°ããäœæããããŠãŒã¶ãŒãšãã®ããŒã¿ã衚瀺ãããŸãã
泚æïŒ ããã«ã¢ã¯ã»ã¹ããŒIDãšã·ãŒã¯ã¬ããã¢ã¯ã»ã¹ããŒãæžãçãïŒã衚瀺ããã¯ãªãã¯ãããšè¡šç€ºã§ããŸãïŒããŠãŒã¶ãŒããŒã¿ãšå ±ã«.csvãã¡ã€ã«ãããŠã³ããŒãããŸãïŒã.csvãããŠã³ããŒãããã¿ã³ãã¯ãªãã¯ããŸãïŒã ä»ã®å Žæã«ã·ãŒã¯ââã¬ããã¢ã¯ã»ã¹ããŒã¯è¡šç€ºãããŸããã
4. Amazon SSL蚌ææž
次ã«ããã¡ã€ã³ã®SSL蚌ææžãååŸããå¿ èŠããããŸãã
4.1ã AWSã³ã³ãœãŒã«ã§ããããã¡ãã¥ãŒã®[ãµãŒãã¹]ãéžæããŸãã
4.2ã ãµãŒãã¹ã®æ€çŽ¢ã§ãã蚌ææžãããŒãžã£ãŒããšå ¥åããŸãã
4.3ã ã蚌ææžããªã¯ãšã¹ãããã¿ã³ãã¯ãªãã¯ããŸãã
4.4ã ããã¡ã€ã³åããã£ãŒã«ãã«ã* .yourdomain.comããšå ¥åããŸãã
ãã¡ã€ã³åã®åã®ã¢ã¹ã¿ãªã¹ã¯ãšãããã«æ³šæããŠãã ããã ãã®ããã«ããŠããã¡ã€ã³ãšãã®ãã¹ãŠã®ãµããã¡ã€ã³ã®ã¯ã€ã«ãã«ãŒã蚌ææžãååŸããŸãã [ã¬ãã¥ãŒãšãªã¯ãšã¹ã]ãã¿ã³ãã¯ãªãã¯ããŸãã
4.5ã 次ã®æ®µèœã§ãã確èªãšèŠæ±ããã¿ã³ãã¯ãªãã¯ããŸãã
4.6ã 次ã®æ®µèœã§ã[ç¶è¡]ãã¿ã³ãã¯ãªãã¯ããŸãã
ããã§ã¯ãèŠæ±ãããã°ããã®èšŒææžãšãã®ã¹ããŒã¿ã¹ãPending validationãã衚瀺ãããŸãã
4.7ã 次ã«ã Yandexã¡ãŒã«ã«ç§»åããŸãã
ãã©ã°ã©ã1.5ã§äœæãããã¡ã€ã³ã¡ãŒã«ããã¯ã¹ã«ãã°ã€ã³ããŸãã ãã®ããã¥ã¢ã«ã®ïŒjohndoe@yourdomain.comïŒã Amazonãããã¡ã€ã³æææš©ã®ç¢ºèªãæ±ããã¡ãŒã«ãåãåã£ãŠããã¯ãã§ãã
4.8ã æçŽã®ãªã³ã¯ããã©ããŸãã
æ°ãããã©ãŠã¶ã¿ããéãããã¡ã€ã³æææš©ã®ç¢ºèªããŒãžã衚瀺ãããŸãã
ãæ¿èªããã¿ã³ãã¯ãªãã¯ããŸãã
蚌ææžã¯æåãã確èªã«åæ Œããå¿ èŠããããŸãã
蚌ææžãããŒãžã£ãŒã«æ»ããšã蚌ææžãšãã®ã¹ããŒã¿ã¹ã衚瀺ãããŸãïŒãçºè¡æžã¿ãã
5. Amazon S3ãã¹ã±ãã
ããã³ããšã³ãã®éçãã¡ã€ã«ãä¿åãããAmazon S3ãã¹ã±ãããäœæããŸãããã
5.1ã AWSã³ã³ãœãŒã«ã§ããããã¡ãã¥ãŒã®[ãµãŒãã¹]ãéžæããŸãã
5.2ã ãµãŒãã¹ã®æ€çŽ¢ã§ã¯ããS3ããšå ¥åããŸãã
5.3ã [ãã±ãããäœæ]ãã¿ã³ãã¯ãªãã¯ããŸãã
[ãã±ããå]ãã£ãŒã«ãã§ããã¹ãåãïŒwwwãšãšãã«ïŒç€ºããŸãã ãã¡ã€ã³ã®ååãšäžèŽããå¿ èŠããããŸãã äŸïŒ www.yourdomain.com ã
[å°å]ãã£ãŒã«ãã§ã[ç±³åœæ±éšïŒããŒãžãã¢åéšïŒ]ãéžæããŸãã ãŸããããã«ãããééã£ããªããžã§ã¯ããžã®ãªãã€ã¬ã¯ãã«é¢ããåé¡ãåé¿ã§ããŸãïŒ ããã¥ã¡ã³ãèšäº ïŒã 第äºã«ãããã¯æã人æ°ã®ããå°åã§ãããæäœäŸ¡æ Œã§ãã 第äžã«ããã¹ã±ãããã©ã®å°åã«ãããã¯æ°ã«ããŸããã CDNã¯ã³ã³ãã³ããé ä¿¡ããã¯ã©ã€ã¢ã³ãã¯S3ãã¡ã€ã«ã«çŽæ¥ã¢ã¯ã»ã¹ããŸããã
ã次ãžããæ°åã¯ãªãã¯ãããã¹ãŠã®ãã£ãŒã«ãããã®ãŸãŸã«ããŸãã
www.yourdomain.comãšããååã®æ°ãããã¹ã±ããããã¹ã±ããã®ãªã¹ãã«è¡šç€ºãããŸã
5.4ã ãã¹ã±ããã®ããããã£ãç·šéããŸãã
ãã¹ã±ããã®ååã®æšªã«ãã空ã®ã¹ããŒã¹ãã¯ãªãã¯ããŸãã ãŠã£ã³ããŠã®å³åŽã«ãããã¢ãããŠã£ã³ããŠã衚瀺ãããŸãã
5.5ã ãããããã£ãé ç®ãéžæããŸãã
5.6ã ãéçWebãµã€ãã®ãã¹ãã£ã³ã°ããã¯ãªãã¯ããŸãã
ããšã³ããã€ã³ããURLãããã«ã³ããŒããŸãïŒãŠã£ã³ããŠã®äžéšã«ãããŸãïŒã ããã«èšå®ããå¿ èŠããããŸãã
æåã®é ç®ããã®ãã±ããã䜿çšããŠWebãµã€ãããã¹ãããããéžæããŸãã
ãã€ã³ããã¯ã¹ããã¥ã¡ã³ãããã£ãŒã«ãã«ãindex.htmlããšå ¥åããŸãã
ãä¿åããã¿ã³ãã¯ãªãã¯ããŸãã
5.7ã ãèš±å¯ãã¿ããéžæããŸãã
ããã§ã¯ã www.yourdomain.com.s3-website-us-east-1.amazonaws.comããã³httpsïŒ//*.yourdomain.comãã¯ãã¹ãã¡ã€ã³ãªã¯ãšã¹ãã®èš±å¯ããããã¹ãã®ãªã¹ãã«è¿œå ããå¿ èŠããããŸãã
ãCORS configurationããã¿ã³ãæŒããŸãã
XMLãã¡ã€ã«åœ¢åŒã¯è§£æããŸããã ãã®åé¡ã®è©³çŽ°ãªèª¿æ»ã«ã€ããŠã¯ã ããã¥ã¡ã³ããèªãããšãã§ããŸã ã ãããããã¹ããã£ãŒã«ãã«ã³ããŒããã ãã§ååã§ãã
<?xml version="1.0" encoding="UTF-8"?> <CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/"> <CORSRule> <AllowedOrigin>http://www.yourdomain.com.s3-website-us-east-1.amazonaws.com</AllowedOrigin> <AllowedMethod>GET</AllowedMethod> <AllowedMethod>HEAD</AllowedMethod> <AllowedHeader>Content-*</AllowedHeader> <AllowedHeader>Host</AllowedHeader> <AllowedHeader>Origin</AllowedHeader> </CORSRule> <CORSRule> <AllowedOrigin>https://*.yourdomain.com</AllowedOrigin> <AllowedMethod>GET</AllowedMethod> <AllowedMethod>HEAD</AllowedMethod> <AllowedHeader>Content-*</AllowedHeader> <AllowedHeader>Host</AllowedHeader> <AllowedHeader>Origin</AllowedHeader> </CORSRule> </CORSConfiguration>
AllowedOriginã¿ã°ã®å€ãèªåã®ãã®ã«çœ®ãæããŸãã æåã®ã¢ãã¬ã¹ã¯ããã®ããã¥ã¢ã«ã®5.6ã§ã³ããŒããéçãŠã§ããµã€ãã®ãšã³ããã€ã³ããšåãã§ãã
ãä¿åããã¿ã³ãã¯ãªãã¯ããŸãã
6. Amazon CloudFrontãã£ã¹ããªãã¥ãŒã·ã§ã³
次ã«ãæ°ããäœæãããã¹ã±ããããCDNãä»ããŠãã¡ã€ã«ã®é åžãæŽçããå¿ èŠããããŸãã
6.1ã AWSã³ã³ãœãŒã«ã§ããããã¡ãã¥ãŒã®[ãµãŒãã¹]ãéžæããŸãã
6.2ã ãµãŒãã¹ã®æ€çŽ¢ã§ããCloudFrontããšå ¥åããŸãã
6.3ã [é åžã®äœæ]ãã¿ã³ãã¯ãªãã¯ããŸãã
ãWebãé ä¿¡æ¹æ³ãéžæãã察å¿ãããGet Startedããã¿ã³ãã¯ãªãã¯ããŸãã
éåžžã«å€§ããªãã©ãŒã ãéããŸãïŒç»é¢ã衚瀺ããŸããïŒã
å¿ èŠãªãã£ãŒã«ããèŠãŠãããŸãããã æ®ãã®ãã£ãŒã«ãã¯è§Šããããã®ãŸãŸã«ããŸãã ãããã«ãããå°æ¥ãããã®èšå®ããã¹ãŠå€æŽããæ©äŒããããŸãã
å ã®èšå®
å ã®ãã¡ã€ã³å ïŒããã«æ³šæããŠãã ããïŒ ãã®ãã£ãŒã«ãã®ããŒã«ããããããã¡ã€ã³ã www.yourdomain.com.s3.anazonaws.com ããéžæããå¿ èŠã¯ãããŸããïŒ ãã®ããã¥ã¢ã«ã®æ®µèœ5.6ã§ã³ããŒããéçWebãµã€ããšã³ããã€ã³ãããå é ã«ãhttpïŒ//ããªãã§ããã«è²Œãä»ããŸãã
ããã©ã«ãã®ãã£ãã·ã¥åäœèšå®
ãã¥ãŒã¢ãŒãããã³ã«ããªã·ãŒ ïŒ[HTTPãHTTPSã«ãªãã€ã¬ã¯ã]ãéžæããŸãã
èš±å¯ãããHTTPã¡ãœãã ïŒãGETãHEADãOPTIONSããéžæããŸãã
ãã£ãã·ã¥ãããHTTPã¡ãœãã ïŒ [ãªãã·ã§ã³]ã®é£ã®ããã¯ã¹ããªã³ã«ããŸã ã
éžæãããªã¯ãšã¹ãããããŒã«åºã¥ããã£ãã·ã¥ ïŒããã¯ã€ããªã¹ãããéžæããŸãã 衚瀺ãããã ãã¯ã€ããªã¹ãããã㌠ãã¢ã€ãã ã§ãã çºä¿¡å ããéžæãããè¿œå ããã¿ã³ãã¯ãªãã¯ããŸãã
ãªããžã§ã¯ãã®ãã£ãã·ã¥ ïŒ[ã«ã¹ã¿ãã€ãº]ãéžæããŸãã
æå°TTL ïŒå€ã300ããæžã蟌ã¿ãŸãã
ãªããžã§ã¯ããèªåçã«å§çž® ïŒãã¯ãããéžæããŸãã
é ä¿¡èšå®
代æ¿ãã¡ã€ã³åïŒCNAMEïŒ ïŒããã¹ãããã¯ã¹ã«ãã www.yourdomain.com ããšãstatic.yourdomain.comããšæžã蟌ã¿ãŸã-åè¡ã«1ã€ã static.yourdomain.comã§ã¯ã www.yourdomain.comãä»ããå Žåãšåãããã«ãã¹ãŠã«ã¢ã¯ã»ã¹ã§ããŸãã ã¡ã€ã³ãã¡ã€ã³ãžã®ã¯ãšãªã®æ°ãæžããããã«ãéçãã¡ã€ã«ãååŸããããã«äœ¿çšããŸãã
SSL蚌ææž ïŒãã«ã¹ã¿ã SSL蚌ææžããéžæããŸãã äžã®ããããããŠã³ãªã¹ãã§ã以åã«åä¿¡ããSSL蚌ææžã* .yourdomain.comããéžæããŸãã
ããã©ã«ãã®ã«ãŒããªããžã§ã¯ã ïŒãindex.htmlãïŒå é ã«ã¹ã©ãã·ã¥ãªãïŒãå ¥åããŸãã
[é åžã®äœæ]ãã¿ã³ãã¯ãªãã¯ããŸãã
é åžãäœæãããŸããã 圌女ã¯ãã¹ããŒã¿ã¹ããé²è¡äžãã§ãªã¹ãã«è¡šç€ºãããŸãã äžå®æéïŒéåžžã¯æ倧10åïŒã«ããã£ãŠãæå¹ãã«ãªããŸãã
ãã£ã¹ããªãã¥ãŒã·ã§ã³ã®IDãšãã¡ã€ã³åãããã«ã³ããŒããŠãã ãããããã«èšå®ããããã«å¿ èŠã«ãªããŸãã
6.4ã ãšã©ãŒããŒãžãèšå®ããŸãã
ãªã¹ãå ã®é åžIDãã¯ãªãã¯ããŸãã [ãšã©ãŒããŒãž]ã¿ãã«ç§»åããŸãã
[ã«ã¹ã¿ã ãšã©ãŒå¿çã®äœæ]ãã¿ã³ãã¯ãªãã¯ããŸãã
ãHTTPãšã©ãŒã³ãŒãããã£ãŒã«ãã§ãã403ïŒçŠæ¢ããéžæããŸãã
ããšã©ãŒå¿çã®ã«ã¹ã¿ãã€ãºã-ãã¯ãããéžæããŸãã
ãå¿çããŒãžã®ãã¹ããã£ãŒã«ãã«ã/index.htmlããšå ¥åããŸãã
ãHTTPå¿çã³ãŒãããã£ãŒã«ãã§ã200ïŒOKããéžæããŸãã
ãšã©ãŒ404ã«ã€ããŠãåãæé ãç¹°ãè¿ããŸãã
ãããã£ãŠãèŠã€ãããªãããããã¯ãããŠããªãã¢ãã¬ã¹ã¯index.htmlã«ãªãã€ã¬ã¯ããããAngular Routerã«ãã£ãŠåŠçãããŸãã
7.ããã¯ãšã³ããµãŒããŒ
ããã¯ãšã³ããµãŒããŒãã»ããã¢ãããããšãã§ãã
ãµãŒããŒã§APIåŒã³åºããå¿ èŠãšããªãå®å šã«éçãªãµã€ãã䜿çšããŠããå Žåã§ããVDSã¯åé¡ãããŸããã å®éãã«ãŒããã¡ã€ã³ãšã³ããªã¯ã¿ã€ãAïŒããã³/ãŸãã¯IPv6ãããå Žåã¯AAAAïŒã§ãªããã°ãªãããããã«å¿ããŠIPã¢ãã¬ã¹ãåç §ããå¿ èŠããããŸãã ç§ã®æèŠã§ã¯ãã€ã³ã¿ãŒãããäžã§æ°žç¶çãªIPã¢ãã¬ã¹ãååŸããæãç°¡åã§å®äŸ¡ãªæ¹æ³ã¯ãVDSãåããããšã§ãã ããã«å ããŠããã®IPã¢ãã¬ã¹ã§ããŸããŸãªãµãŒãã¹ïŒAPIãããŒã¿ããŒã¹ããªã¢ã«ã¿ã€ã ã¡ãã»ãŒãžã³ã°ãµãŒãã¹ãªã©ïŒããã¹ãããæ©äŒããããŸãã äžéšã®DNSãã¹ãã£ã³ã°äŒç€Ÿã¯ãã¿ã€ãAã¬ã³ãŒãã®ä»£ããã«ALIASã䜿çšããæ©èœãæäŸããŠããŸããããã§ã¯ãIPã¢ãã¬ã¹ã§ã¯ãªããã¡ã€ã³åãç»é²ã§ããŸãã ããšãã°ãAmazon Route 53ã䜿çšããŠãã«ãŒããã¡ã€ã³ã¬ã³ãŒããå¥ã®S3ãã¹ã±ãããžã®ãªã³ã¯ãšããŠèšå®ãããšãCloudFrontãã£ã¹ããªãã¥ãŒã·ã§ã³ã«ãªãã€ã¬ã¯ããããŸãã
ãããã«ãããããã¯çã®éžæã§ãã ç¹ã«äŸ¡æ Œãæé ãªäŸ¡æ Œã«ãªã£ããããVDSãã¬ã³ã¿ã«ããåŸåããããŸãã ããšãã°ã Ayhor Hostingã¯ã幎é1080ã«ãŒãã«ã®ã¿ã®VDSïŒ1PU/ 512 MB RAM / 10 GB HDDïŒãæäŸããŠããŸãã ããã¯æãå®ãæéã§ãåå¿è ã«ã¯éåžžã«é©ããŠããŸãã ãã ããSSDãåããVDSã®è³Œå ¥ããå§ãããŸãã
次ã«ãã«ãŒãã¢ã¯ã»ã¹ãšãªã³ããŒãã®Debian 9ãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã§VDSïŒãŸãã¯ãã«ãµãŒããŒïŒãã»ããã¢ããããããã»ã¹ã«ã€ããŠèª¬æããŸãã
ç§ã®ä»äºã§ã¯ãåãã¿ã€ãã®è€æ°ã®VDSã䜿çšããISPManagerãªã©ã®ã³ã³ãããŒã«ããã«ã¯äœ¿çšããŸããã ãã®ãããåçŽãªbashã¹ã¯ãªãããäœæããŠããµãŒããŒæ§æããã»ã¹ãèªååããŸããã åãããšãããŠãããã€ãã®ãã¡ã€ã«ãäœæããŸãããã 泚æããŠãã ããïŒ ãã¡ã€ã«ã®æ¹è¡ã¯ãWindowsïŒCRLFïŒã¹ã¿ã€ã«ã§ã¯ãªããUnixïŒLFïŒã¹ã¿ã€ã«ã«ããå¿ èŠããããŸãã
nginx.conf ïŒ
user www-data; worker_processes 1; error_log /var/log/nginx/error.log warn; pid /var/run/nginx.pid; events { worker_connections 1024; use epoll; } http { include /etc/nginx/mime.types; default_type application/octet-stream; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; sendfile on; tcp_nopush on; client_header_timeout 30; client_body_timeout 30; reset_timedout_connection on; keepalive_timeout 30; client_max_body_size 32m; client_body_buffer_size 128k; server_tokens off; gzip on; gzip_vary on; gzip_disable "msie6"; gzip_proxied any; gzip_min_length 1024; gzip_comp_level 5; gzip_types application/atom+xml application/javascript application/json application/ld+json application/manifest+json application/octet-stream application/rss+xml application/vnd.geo+json application/vnd.ms-fontobject application/x-font-ttf application/x-web-app-manifest+json application/xhtml+xml application/xml font/opentype image/bmp image/svg+xml image/x-icon text/cache-manifest text/css text/plain text/vcard text/vnd.rim.location.xloc text/vtt text/x-component text/x-cross-domain-policy; expires max; include /etc/nginx/conf.d/*.conf; include /etc/nginx/sites-enabled/*; }
ããã¯ã¡ã€ã³ã®nginxæ§æãã¡ã€ã«ã§ãã ããã§è¡ãäž»ãªããšã¯ãgzipå§çž®ãæå¹ã«ãã / etc / nginx / sitesenabledãã£ã¬ã¯ããªã«ããèšå®ãæ¥ç¶ããããšã§ãã
ssl.conf ïŒ
ssi on; ssl on; ssl_certificate "/etc/letsencrypt/live/{{DOMAIN}}/fullchain.pem"; ssl_certificate_key "/etc/letsencrypt/live/{{DOMAIN}}/privkey.pem"; ssl_trusted_certificate "/etc/letsencrypt/live/{{DOMAIN}}/chain.pem"; ssl_ciphers AES256+EECDH:AES256+EDH; ssl_prefer_server_ciphers on; ssl_protocols TLSv1.2; ssl_ecdh_curve secp384r1; ssl_dhparam /etc/nginx/dhparam.pem; ssl_stapling on; ssl_stapling_verify on; ssl_session_timeout 24h; ssl_session_cache shared:SSL:24m; ssl_buffer_size 1400;
SSLçšã®Nginxèšå®ãã³ãã¬ãŒãã ããã§ãLet's EncryptãæäŸãã蚌ææžãæ¥ç¶ããå¿ èŠãªSSLãã©ã¡ãŒã¿ãŒãèšå®ããŸããããã«ããã Qualys SSL Server Testã§A +è©äŸ¡ãåŸãããŸã ã éšåæåå{{DOMAIN}}ã«æ³šæããŠãã ãã-ããã§ãªããã°ãªããŸããã æ§æã¹ã¯ãªããèªäœããããããã¡ã€ã³ã«çœ®ãæããŸãã
site.conf ïŒ
server { server_name {{DOMAIN}}; listen 80; listen 443 ssl http2; error_log off; access_log off; add_header X-Content-Type-Options nosniff; add_header X-XSS-Protection "1; mode=block"; add_header Strict-Transport-Security "max-age=31536000;"; add_header Cache-Control public; include /etc/nginx/ssl.conf; location /.well-known/acme-challenge/ { alias /var/www/.well-known/acme-challenge/; } location / { return 301 https://www.$host:443$request_uri; } }
ãã¡ã€ã³ã«ãŒããŸãŒã³ã®nginxæ§æãã³ãã¬ãŒãã ããã§SSLæ§æãæ¥ç¶ããLet's Encryptããã¡ã€ã³æ€èšŒçšã®ãã¡ã€ã«ã眮ãå€éšãããã£ã¬ã¯ããªã«ã¢ã¯ã»ã¹ã§ããããã«ããŸãã yourdomain.comãŸãã¯yourdomain.comãžã®ãã¹ãŠã®ãªã¯ãšã¹ã㯠www.yourdomain.comã«ãªãã€ã¬ã¯ããããŸã ã
api.conf ïŒ
server { server_name {{DOMAIN}}; listen 80; error_log off; access_log off; add_header X-Content-Type-Options nosniff; add_header X-XSS-Protection "1; mode=block"; location /.well-known/acme-challenge/ { alias /var/www/.well-known/acme-challenge/; } location / { return 301 https://$host:443$request_uri; } } server { server_name {{DOMAIN}}; listen 443 ssl http2; access_log /var/log/nginx/{{DOMAIN}}.access.log; error_log /var/log/nginx/{{DOMAIN}}.error.log; add_header X-Frame-Options DENY; add_header X-Content-Type-Options nosniff; add_header X-XSS-Protection "1; mode=block"; add_header Strict-Transport-Security "max-age=31536000;"; add_header Cache-Control public; add_header 'Access-Control-Allow-Origin' "$http_origin"; add_header 'Access-Control-Allow-Credentials' 'true'; add_header 'Access-Control-Allow-Methods' 'GET, HEAD, OPTIONS, POST, PUT, DELETE, PATCH'; add_header 'Access-Control-Allow-Headers' 'Accept,Accept-Encoding,Accept-Language,Authorization,Cache-Control,Content-Length,Content-Type,Origin,If-Modified-Since,User-Agent,X-Requested-With'; add_header 'Access-Control-Expose-Headers' 'X-Powered-By'; set $root_path /var/www/{{DOMAIN}}; root $root_path; disable_symlinks if_not_owner from=$root_path; charset utf-8; index index.php; autoindex off; include /etc/nginx/ssl.conf; if ($request_method ~* ^(OPTIONS|HEAD)$) { return 204; } location / { try_files $uri $uri/ /index.php?$query_string; } location ~ \.php$ { try_files $uri =404; fastcgi_pass unix:/var/run/php/php7.1-fpm.sock; fastcgi_index index.php; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; } }
api.yourdomain.comãµããã¡ã€ã³ã®nginxæ§æãã³ãã¬ãŒãã ããã§ã¯ãSSLæ§æãæ¥ç¶ããå€éšããã¢ã¯ã»ã¹ã§ãããã£ã¬ã¯ããªãäœæããŸããLet's Encryptã¯ããã¡ã€ã³æ€èšŒã®ããã«ãã¡ã€ã«ãä¿åããŸãã api.yourdomain.comãžã®ãã¹ãŠã®ãªã¯ãšã¹ãã¯api.yourdomain.comã«ãªãã€ã¬ã¯ããããŸã ã PHP7.1-FPMãæ¥ç¶ããŸãã
setup.sh ïŒ
#!/usr/bin/env bash time_start=`date +%s` ######################## # EDIT THESE VARIABLES: ######################## DOMAIN=yourdomain.com API_DOMAIN="api.$DOMAIN" SUPERUSER="inpassor" SUPERUSER_PASSWORD="12341234" USER="johndoe" USER_EMAIL="johndoe@yourdomain.com" USER_PASSWORD="12341234" ######################## apt update echo y | apt install dialog apt-utils echo y | apt install sed wget gnupg nano htop curl zip unzip apt-transport-https lsb-release ca-certificates debian-archive-keyring certbot # add users adduser --quiet --disabled-password --gecos "" $SUPERUSER echo "$SUPERUSER:$SUPERUSER_PASSWORD" | chpasswd adduser --quiet --disabled-password --gecos "" $USER echo "$USER:$USER_PASSWORD" | chpasswd sed -i "s/$SUPERUSER:x:1000:1000/$SUPERUSER:x:0:0/" /etc/passwd # add external repositories and GPG keys echo "deb http://nginx.org/packages/debian/ stretch nginx" > /etc/apt/sources.list.d/nginx.list wget --quiet -O - https://nginx.org/packages/keys/nginx_signing.key | apt-key add - echo "deb https://packages.sury.org/php/ stretch main" > /etc/apt/sources.list.d/php.list wget --quiet -O - https://packages.sury.org/php/apt.gpg | apt-key add - apt update echo y | apt upgrade echo y | apt install nginx php7.1-cli php7.1-fpm php7.1-mbstring php7.1-curl php7.1-xml # nginx setup mkdir /var/www mkdir "/var/www/$API_DOMAIN" chown -R $USER:www-data /var/www rm /etc/nginx/conf.d/default.conf cp nginx.conf /etc/nginx/nginx.conf echo "" > /etc/nginx/ssl.conf mkdir /etc/nginx/sites-available mkdir /etc/nginx/sites-enabled sed "s@{{DOMAIN}}@$DOMAIN@g" site.conf > /etc/nginx/sites-available/$DOMAIN.conf ln -s /etc/nginx/sites-available/$DOMAIN.conf /etc/nginx/sites-enabled sed "s@{{DOMAIN}}@$API_DOMAIN@g" api.conf > /etc/nginx/sites-available/$API_DOMAIN.conf ln -s /etc/nginx/sites-available/$API_DOMAIN.conf /etc/nginx/sites-enabled # ssl setup service nginx restart certbot register --agree-tos --email $USER_EMAIL certbot certonly --webroot -w /var/www -d $DOMAIN -d $API_DOMAIN --rsa-key-size 4096 openssl dhparam -out /etc/nginx/dhparam.pem 4096 sed "s@{{DOMAIN}}@$DOMAIN@g" ssl.conf > /etc/nginx/ssl.conf service nginx restart chown -R nginx:$USER /var/log/nginx chmod 664 /var/log/nginx/* time_end=`date +%s` echo Execution time: $((time_end-time_start)) sec.
ãµãŒããŒãèªåçã«æ§æããBashã¹ã¯ãªããã ãã¡ã€ã«ã®å é ã§ãããã€ãã®å€æ°ã宣èšãããŠããŸãïŒ
DOMAIN = yourdomain.comïŒãã¡ã€ã³ïŒå é ã«wwwãé€ãïŒ
API_DOMAIN = "apiã$ DOMAIN"ïŒAPIããã¯ãšã³ããååšãããµããã¡ã€ã³ïŒããã§ã¯api.yourdomain.comïŒ
SUPERUSER = "inpassor"ïŒrootãŠãŒã¶ãŒã®ã«ãŒãå
SUPERUSER_PASSWORD = "12341234"ïŒã¹ãŒããŒãŠãŒã¶ãŒã®ãã¹ã¯ãŒã
USER = "johndoe"ïŒãŠãŒã¶ãŒå
USER_EMAIL = "johndoe@yourdomain.com"ïŒãŠãŒã¶ãŒã¡ãŒã«-Let's Encryptã§ã®ç»é²ã«äœ¿çš
USER_PASSWORD = "12341234"ïŒãŠãŒã¶ãŒãã¹ã¯ãŒã
ãã¡ãããããããåå²ãåœãŠããå¿ èŠããããŸãã
次ã«ã次ã®ã¢ã¯ã·ã§ã³ãé çªã«å®è¡ãããŸãã
- å¿ èŠãªããã±ãŒãžãã€ã³ã¹ããŒã«ãããŸãã
- å€éšãªããžããªãšGPGããŒãè¿œå ãããææ°ã®nginxããã³PHPããã±ãŒãžã«ã¢ã¯ã»ã¹ã§ããŸãã
- ããã±ãŒãžã¯ãnginxãphp7.1-cliãphp7.1-fpmãphp7.1-mbstringãphp7.1-curlãããã³php7.1-xmlã§ã€ã³ã¹ããŒã«ãããŸãã
- nginxãæ§æããŸãã
- Let's Encrypt SSL蚌ææžãååŸããããã»ã¹ãéå§ãããŸãã dhparam.pemãã¡ã€ã«ãããã§çæãããããšã«æ³šæããŠãã ããã ãã®ããã»ã¹ã¯éåžžã«é·ããããçæããããã¡ã€ã«ãä¿åããŠåŸã§ã³ããŒã§ããŸãã
ããã§ããµãŒããŒæ§æã¹ã¯ãªãããæºåã§ããŸããã
ããã§ãVDSã«rootãšããŠSSHïŒIPã¢ãã¬ã¹ïŒãä»ããŠVDSã«ã¢ã¯ã»ã¹ããããã«* .confãã¡ã€ã«ãšsetup.shãã¡ã€ã«ãã³ããŒããsetup.shãå®è¡å¯èœãã¡ã€ã«ïŒchmod 700 setup.shïŒã«ããŠå®è¡ã§ããŸãã
æ§æããã»ã¹ãå®äºãããšãVDSã®æºåãæŽããŸãã
yourdomain.com ã yourdomain.com ã api.yourdomain.com ã api.yourdomain.comã®ã¢ãã¬ã¹ãžã®ãªã¯ãšã¹ãããªãã¹ã³ããnginxãã€ã³ã¹ããŒã«ããŸãã ã httpãžã®ãªã¯ãšã¹ãã¯httpsã«ãªãã€ã¬ã¯ããããyourdomain.comãžã®ãªã¯ãšã¹ãã¯www.yourdomain.comã«ãªãã€ã¬ã¯ããããŸã ã api.yourdomain.comã«ã¯APIããããŸãã ããã§ç©ºã«ãªãããªã¯ãšã¹ãã«å¿çããããã«ã/ var / www / api.yourdomain.com /ãã£ã¬ã¯ããªã«index.phpãã¡ã€ã«ãäœæããå¿ èŠããããŸãã
ãã ããå¿ èŠãªDNSèšå®ãç»é²ãããŠããªããããããã¯çŸåšã®ãšããå©çšã§ããŸããã
8. DNSèšå®
CloudFrontãã£ã¹ããªãã¥ãŒã·ã§ã³ãšããã¯ãšã³ããµãŒããŒãæ§æããããDNSã¬ã³ãŒããå®æãããæºåãæŽããŸãã
8.1ã Yandex.Connectã«æ»ããŸãã
8.2ã ã管çè ãã«ç§»åããŸãã
8.3ã ã¡ãã¥ãŒé ç®ãDNS管çããéžæããŸãã
4ã€ã®æ°ããDNSã¬ã³ãŒããè¿œå ããå¿ èŠããããŸãã
- ã¬ã³ãŒãAãå ¥åããŸããããã¹ãããã£ãŒã«ãã§ããã¬ã³ãŒãå€ããã£ãŒã«ãã«ã@ããVTTLã®IPã¢ãã¬ã¹ããTTLããã£ãŒã«ãã«ã3600ããæå®ããŸãã
- ã¬ã³ãŒãAïŒããã¹ãã-ãapiãããã¬ã³ãŒãå€ã-VDSã®IPã¢ãã¬ã¹ããTTLã-ã3600ãã
- CNAMEã¬ã³ãŒãïŒããã¹ãã-ãwwwãããã¬ã³ãŒãå€ã-CloudFrontãã£ã¹ããªãã¥ãŒã·ã§ã³ã®ãã¡ã€ã³åïŒãã®ããã¥ã¢ã«ã®6.3é ãåç §ïŒããTTLã-ã3600ãã
- CNAMEã¬ã³ãŒãïŒããã¹ãã-ãéçãããã¬ã³ãŒãå€ã-CloudFrontãã£ã¹ããªãã¥ãŒã·ã§ã³ã®ãã¡ã€ã³åããTTLã-ã3600ãã
yourdomain.comïŒwwwãªãïŒããã³api.yourdomain.comã«VDSã«ãªã¯ãšã¹ããéä¿¡ããwww.yourdomain.comããã³static.yourdomain.comã«CloudFrontãã£ã¹ããªãã¥ãŒã·ã§ã³ã«ãªã¯ãšã¹ããéä¿¡ããŸããã
9. Gitlabãªããžããª
次ã«ãAngularã§ãããžã§ã¯ãã®ãœãŒã¹ãã¡ã€ã«ãä¿åããã³ããŒãžã§ã³ç®¡çãããã©ã€ããŒãgitãªããžããªãäœæããå¿ èŠããããŸãã
9.1ãGitlabã«ç»é²/ãã°ã€ã³ããŸãã
9.2ããæ°èŠãããžã§ã¯ãããã¿ã³ãæŒããŸãã
9.3ã次ã«ããããžã§ã¯ããžã®ãã¹ãšãã®ååãéžæããŸãã
ãå¯èŠæ§ã¬ãã«ããããã©ã€ããŒããã«èšå®ããããããžã§ã¯ããäœæããã¿ã³ãã¯ãªãã¯ããŸãã
9.4ãèšå®ã«å ¬éSSHããŒãè¿œå ããŸãã
ããŒããªãå Žåã¯ãäœæããå¿ èŠããããŸããç§å¯éµãã¢ã®äœææ¹æ³-Windowsã®å ¬ééµã¯ãããšãã°ããã§èªãããšãã§ããŸãã
ãããã¡ãã¥ãŒã§ã¢ãã¿ãŒãã¯ãªãã¯ããããããããŠã³ã¡ãã¥ãŒã§[èšå®]é ç®ãéžæããŸãã
å·ŠåŽã®ã¡ãã¥ãŒã§ããSSHããŒããéžæããŸãã
[ããŒ]ãã£ãŒã«ãã«ãå ¬éããŒãã¡ã€ã«ã®å 容ã貌ãä»ããŸãã Windowsã·ã¹ãã ã§ã¯ãéåžžCïŒ\ Users \ YourUsername \ .ssh \ id_rsa.pubã®ãã¹ã«æ²¿ã£ãŠé 眮ãããŸãã
[ã¿ã€ãã«]ãã£ãŒã«ãã«ãããŒã®ååïŒäœã§ãïŒãå ¥åããŸãã
9.5ããªããžããªãããŒã«ã«ã³ã³ãã¥ãŒã¿ãŒã«è€è£œããŸãã
ãããè¡ãã«ã¯ãWindowsã®git / gitãã³ã³ãã¥ãŒã¿ãŒã«ã€ã³ã¹ããŒã«ããå¿ èŠããããŸãã
ã³ãã³ãããã³ããã§ãããšãã°CïŒ\ Projectsã«ãããããžã§ã¯ãã®ããŒã«ã«ãã©ã«ããŒã«ç§»åããŸãã
ã³ãã³ããå®è¡ããŸãïŒ
git clone git@gitlab.com:YourLogin/my-awesome-project.git MyAwesomeProject
ãªããžããªã¢ãã¬ã¹ãgit@gitlab.comïŒYourLogin / my-awesome-project.gitãã¯ãGitlab Webãµã€ãã®ãããžã§ã¯ãã®ã¡ã€ã³ããŒãžã§è¡šç€ºã§ããŸããããã§ããMyAwesomeProjectãã¯ãããžã§ã¯ããå«ãŸããããŒã«ã«ãã©ã«ããŒã®ååã§ãèªåçã«äœæãããŸãã
空ã®ãªããžããªãããŒã«ã«ã³ã³ãã¥ãŒã¿ã«è€è£œããã°ããã§ããããžã§ã¯ãã®äœæãéå§ã§ãããããžã§ã¯ããã©ã«ãããããŸãã
10. Gitlab CI
Gitlab CIãæ§æããŠããããžã§ã¯ããèªåçã«ãã«ãããåéãããã¡ã€ã«ãAmazon S3ãã±ãããšåæããŠãCloudFrontã®é åžãæŽæ°ããŸãã
10.1ããŠã§ããµã€ãhttps://gitlab.comã§ãããžã§ã¯ãã«ã¢ã¯ã»ã¹ããŸãã
10.2ãå·ŠåŽã®ã¡ãã¥ãŒã§ã[CI / CD]-[ç°å¢]ãéžæããŸãã
ãæ°ããç°å¢ããã¿ã³ãæŒããŸãã
10.3ããååããã£ãŒã«ãã«ãprodããšå ¥åããŸãã
[å€éšURL]ãã£ãŒã«ãã«ããã¡ã€ã³ãå ¥åããŸãïŒå é ã«httpsïŒ//ããã³wwwãä»ããŸãïŒãäŸïŒwww.yourdomain.comã ãä¿åããã¿ã³ãã¯ãªãã¯ããŸãã
10.4ãå·ŠåŽã®ã¡ãã¥ãŒã§ããèšå®ã-ãCI / CDããéžæããŸãã
10.5ã ãSecret variablesãã¢ã€ãã ã®å察åŽã«ãããExpandããã¿ã³ãã¯ãªãã¯ããŸãã
ãããŒããã£ãŒã«ãã«ãAWS_ACCESS_KEY_IDããšå ¥åããŸãã
[å€]ãã£ãŒã«ãã«ããã®ããã¥ã¢ã«ã®ãã©ã°ã©ã3.8ã§ååŸããã¢ã¯ã»ã¹ããŒIDãå ¥åããŸãã
[ç°å¢ã¹ã³ãŒã]ãã£ãŒã«ãã«ã¢ã¹ã¿ãªã¹ã¯ãæ®ããŸãã
[æ°ããå€æ°ãè¿œå ]ãã¿ã³ãã¯ãªãã¯ããŸãã
å¥ã®å€æ°ãAWS_SECRET_ACCESS_KEYããè¿œå ããŸãã
ãã®æé ãç¹°ãè¿ãã[å€]ãã£ãŒã«ãã«ããã®ããã¥ã¢ã«ã®ãã©ã°ã©ã3.8ã§ååŸããã·ãŒã¯ã¬ããã¢ã¯ã»ã¹ããŒãå ¥åããŸãã
ãŸããå¥ã®å€æ°ã¯ãAWS_DISTRIBUTION_IDãã§ãã
ãã®æé ãç¹°ãè¿ãããå€ããã£ãŒã«ãã«ããã®ããã¥ã¢ã«ã®ãã©ã°ã©ã6.3ã§ååŸããé åžIDãå ¥åããŸãã
ä»åã¯ããç°å¢ã¹ã³ãŒãããã£ãŒã«ãã«ãprodããšå ¥åããŸãã
ã¹ã¯ãªãŒã³ã·ã§ããã®ããã«ãªã
ãŸããç°å¢å€æ°ãšCIå€æ°ãèšå®ããæ®ãããããžã§ã¯ãã®.gitlab-ci.ymlãã¡ã€ã«ã«çŽæ¥æžã蟌ã¿ãŸãã
11. Angularã®éå§ãµã€ã
Angularã§ãããžã§ã¯ããäœæããŸãã
11.1ãã³ãã³ãã©ã€ã³ã§ããããžã§ã¯ãã®ãã£ã¬ã¯ããªã«ç§»åããŸããããã§ã空ã®ãªããžããªãã¯ããŒã³ããŸããïŒãã®ããã¥ã¢ã«ã®9.5é ãåç §ïŒã
ãã®äŸã§ã¯ãããã¯CïŒ\ Projects \ MyAwesomeProjectã§ãã
次ã®ã³ãã³ããå®è¡ããŸãã
npm i -g @angular/cli ng new yourdomain.com --style=scss --skip-git=true --directory=.
yourdomain.comããããžã§ã¯ãã®ååã«çœ®ãæããŸãïŒãã¡ã€ã³åãšäžèŽããå¿ èŠã¯ãããŸããïŒã
Angular cliãã°ããŒãã«ã«ã€ã³ã¹ããŒã«ããŸããããããžã§ã¯ããã£ã¬ã¯ããªã«ã¯ãäœæ¥ãéå§ã§ãããã¡ã€ã«ããããŸãã
11.2ã.gitignoreãã¡ã€ã«ãäœæããŸãïŒ11.3ããã¡ã€ã«.angular-cli.jsonãç·šéããŸãããappsãã»ã¯ã·ã§ã³ã§ãassetsãããŒãèŠã€ãããã®å€ã次ã®ããã«å€æŽããŸãã
/.idea
/dist
/out-tsc
/node_modules
/e2e/*.js
/e2e/*.map
npm-debug.log
package-lock.json
[ { "glob": "**/*", "input": "./assets/", "output": "./" } ]
ãããã£ãŠãsrc / assetã«é 眮ããããã¹ãŠã®ãã¡ã€ã«ãšãã£ã¬ã¯ããªã¯ãã¢ã»ã³ããªã®ã«ãŒãã«åé¡ãããŸãã
ãã¹ã¿ã€ã«ãã§ããstyles.scssãããstyles / styles.scssãã«çœ®ãæããŸãã
11.4ãsrc / stylesãã£ã¬ã¯ããªãäœæããããã«src / styles.scssãã¡ã€ã«ã転éããŸãã
次ã®å 容ã§src / styles / _variables.scssãã¡ã€ã«ãäœæããŸãã
$static-url: 'https://static.yourdomain.com';
src / styles / styles.scssãã¡ã€ã«ã®å é ã«ã次ã®è¡ãæ¿å ¥ããŸãã
@import 'variables';
å°æ¥çã«ã¯ããã«ãã¹ã¯ãªããã¯ãå€æ°ãæŽæ°ãããŸã$ã®éçURLã®ãã¡ã€ã«ãSRC /ã¹ã¿ã€ã«/ _variables.scssã
ãããã£ãŠããã®å€æ°ãä»ããŠç»åãšãã©ã³ããžã®ãã¹ãã¹ã¿ã€ã«ã§èŠå®ããããšãã§ããŸãã
11.5ãsrc / assets / favicon.icoãã¡ã€ã«ãè¿œå ããŸããã§ã¯ãã¢ã€ã³ã³ãªãã§ã¯ã©ãã§ããããïŒ
11.6ãsrc / asset / robots.txtãã¡ã€ã«ãäœæããŸãïŒ11.7ãsrc / asset / sitemap.xmlãã¡ã€ã«ãäœæããŸãã
User-agent: *
Host: {{SERVER_URL}}
Sitemap: {{SERVER_URL}}/sitemap.xml
<?xml version="1.0" encoding="UTF-8"?> <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"> <url> <loc>{{SERVER_URL}}</loc> </url> </urlset>
11.8ã.gitlab-ci.ymlãã¡ã€ã«ãäœæããŸãã
image: node:8.9 stages: - deploy cache: paths: - node_modules/ before_script: - npm install --unsafe-perm --silent --global @angular/cli - npm install --unsafe-perm --silent - apt update - echo y | apt install python-dev unzip - curl "https://s3.amazonaws.com/aws-cli/awscli-bundle.zip" -o "awscli-bundle.zip" - unzip awscli-bundle.zip - ./awscli-bundle/install -i /usr/local/aws -b /usr/local/bin/aws deploy_prod: stage: deploy only: - master environment: name: prod artifacts: paths: - dist script: - DEPLOY_SERVER="${CI_ENVIRONMENT_URL/https:\/\/www./}" - STATIC_URL="https://static.$DEPLOY_SERVER" - sed -i "s@$static-url:.*;@$static-url:'$STATIC_URL';@g" src/styles/_variables.scss - ng build --prod --aot --build-optimizer --no-progress --extract-licenses=false - sed -i -e "s@\" href=\"@\" href=\"$STATIC_URL\/@g; s@href=\"styles@href=\"$STATIC_URL\/styles@g; s@src=\"@src=\"$STATIC_URL\/@g" dist/index.html - SED_PATTERN="s@{{STATIC_URL}}@$STATIC_URL@g; s@{{SERVER_URL}}@$CI_ENVIRONMENT_URL@g" - sed -i -e "$SED_PATTERN" dist/robots.txt - sed -i -e "$SED_PATTERN" dist/sitemap.xml - aws configure set aws_access_key_id $AWS_ACCESS_KEY_ID - aws configure set aws_secret_access_key $AWS_SECRET_ACCESS_KEY - aws s3 rm s3://www.$DEPLOY_SERVER/ --recursive --exclude "*" --include "*.css" --include "*.js" --include "*.json" --include "*.html" --include "*.xml" --include "*.txt" - aws s3 sync dist/ s3://www.$DEPLOY_SERVER/ --no-progress --delete --size-only --acl public-read - aws cloudfront create-invalidation --distribution-id $AWS_DISTRIBUTION_ID --paths /*.html /*.xml /*.txt /*.json
ããã«ãããã®ãèŠãŠã¿ãŸãããã
ã¹ã¯ãªããã¯ãDockerã€ã¡ãŒãžãnodeïŒ8.9ãã䜿çšããŸãã
ãããã€ã®1ã€ã®ãã«ããã§ãŒãºã宣èšãããŸãã
node_modulesãã£ã¬ã¯ããªããã£ãã·ã¥ãããŸãã
ãã«ãã¹ã¯ãªãããå®è¡ããåã«ããã¹ãŠã®ãããžã§ã¯ãã®äŸåé¢ä¿ãã€ã³ã¹ããŒã«ãããåŸãangular / cliã®ã°ããŒãã«ã€ã³ã¹ããŒã«ãå®è¡ãããŸãã
次ã«ãå¿ èŠãªpython-devããã³unzipããã±ãŒãžãã€ã³ã¹ããŒã«ãããaws cliãŠãŒãã£ãªãã£ãããŠã³ããŒãããã解åãããŠã€ã³ã¹ããŒã«ãããŸãã
1ã€ã®ã¿ã¹ã¯ããdeploy_prodããšããååã§ã¢ããŠã³ã¹ãããŸããããã¯ãç°å¢ãprodãããdeployãã®æ®µéã§ããmasterããã©ã³ãã§ã®ã¿å®è¡ãããŸãã
ãã®ã¿ã¹ã¯ã®çµæãã¢ãŒãã£ãã¡ã¯ããäœæãããŸã-ãdistããã£ã¬ã¯ããªã®ã³ã³ãã³ãå šäœïŒãããžã§ã¯ãã¢ã»ã³ããªã®çµæïŒã
ã¿ã¹ã¯ãå®äºããããã»ã¹ïŒ
- $DEPLOY_SERVER, $CI_ENVIRONMENT_URL ( «External URL», . 10.3 ), « www .» (yourdomain.com).
- $STATIC_URL â static .$DEPLOY_SERVER (https://static.yourdomain.com).
- "$static-url" src/styles/_variables.scss $STATIC_URL (https://static.yourdomain.com).
- Angular (environment â production, AOT, build optimizer, , ).
- index.html , $STATIC_URL.
- robots.txtããã³sitemap.xmlãã¡ã€ã«ã§ã¯ãéšåæååã{{SERVER_URL}}ãã¯å€$ CI_ENVIRONMENT_URLïŒhttps://www.yourdomain.comïŒã«çœ®ãæããããéšåæååã{{STATIC_URL}}ãã¯å€$ STATIC_URLïŒhttpsïŒ //static.yourdomain.comïŒã
- ãã¹ããŒIDãšãã©ã€ããŒãããŒã¯ãAWSã«å®å šã«æ¥ç¶ããããã«èšå®ãããŠããŸãã
- ãã¹ãŠã®* .cssã* .jsã* .jsonã* .htmlã* .xmlãããã³* .txtãã¡ã€ã«ã¯ãS3ã®ãã¿ç®±ããååž°çã«åé€ãããŸãã
- ãdistããã£ã¬ã¯ããªã¯ãS3ãã±ãããšåæãããŸãïŒç»é¢ã«é²è¡ç¶æ³ã衚瀺ããããã±ãããããdistãã«ãªããã¡ã€ã«ãåé€ãããã¡ã€ã«ãµã€ãºã®ã¿ãæ¯èŒããèªã¿åãçšã«ãã¡ã€ã«ãå ¬éããŸãïŒã
- CloudFrontãé åžããããã«ãã«ãŒããã©ã«ããŒãã* .htmlã* .xmlã* .txtãããã³* .jsonãã¡ã€ã«ãåé€ããŠç¡å¹åïŒããã¥ã¡ã³ãèšäºïŒãäœæããŸãã
11.9ããããžã§ã¯ããã£ã¬ã¯ããªã§æ¬¡ã®ã³ãã³ããå®è¡ããŸãã
git add . git commit -m "first commit" git push
ããã ãã§ãïŒãã®ã¬ã€ãã®ãã¹ãŠã®æé ãæ£ããå®äºããããGitlabãã¿ã¹ã¯ãå®äºãããŸã§åŸ æ©ããããšã«ãªããéå§ãµã€ããwww.yourdomain.comã«è¡šç€ºãããŸãã
ããã§ãšãããããŸãïŒ
12.çµè«
ããã§ãAngularã«ãµã€ããäœæããããã®äŸ¿å©ãªäœæ¥ç°å¢ãå±éãããããžã§ã¯ãã®èªåã¢ã»ã³ããªãšCDNãä»ããé ä¿¡ãã»ããã¢ããããŸããããŸããããã¯ãšã³ããµãŒããŒãSSL蚌ææžãDNSã¬ã³ãŒããèšå®ãããã¡ã€ã³ã¡ãŒã«ãçšæããŠããŸãã
èšäºã§ç§ãèšåããªãã£ãããšãä»ã«ã§ããããšã¯äœã§ããïŒ
- APIããã¯ãšã³ããå¿ èŠãªå Žåã¯ãäœæããå¿ èŠããããŸãïŒãã®äŸã§ã¯PHPã§ïŒãã»ãšãã©ã®å ŽåãããŒã¿ããŒã¹ã®ã€ã³ã¹ããŒã«ãªã©ãè¿œå ããŠãbashãµãŒããŒã®æ§æã¹ã¯ãªãããè€éã«ããå¿ èŠããããŸãã
- , robots.txt Host, S3 CloudFront.
- Gitlab CI â «prod». , , .
- Gitlab CI .
- , , Angular. ?