{"id":504,"date":"2017-05-07T23:36:10","date_gmt":"2017-05-07T14:36:10","guid":{"rendered":"http:\/\/www.typea.info\/blog\/index.php\/2017\/05\/07\/centos7_django_gradle\/"},"modified":"2017-05-07T23:36:10","modified_gmt":"2017-05-07T14:36:10","slug":"centos7_django_gradle","status":"publish","type":"post","link":"https:\/\/www.typea.info\/blog\/index.php\/2017\/05\/07\/centos7_django_gradle\/","title":{"rendered":"CentOS7 \u3078\u306e Django \u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u30c7\u30d7\u30ed\u30a4\u3092 Gradle \u3067\u534a\u81ea\u52d5\u5316"},"content":{"rendered":"<p><a href=\"https:\/\/www.amazon.co.jp\/Gradle%E5%BE%B9%E5%BA%95%E5%85%A5%E9%96%80-%E6%AC%A1%E4%B8%96%E4%BB%A3%E3%83%93%E3%83%AB%E3%83%89%E3%83%84%E3%83%BC%E3%83%AB%E3%81%AB%E3%82%88%E3%82%8B%E8%87%AA%E5%8B%95%E5%8C%96%E5%9F%BA%E7%9B%A4%E3%81%AE%E6%A7%8B%E7%AF%89-%E7%B6%BF%E5%BC%95-%E7%90%A2%E7%A3%A8\/dp\/4798136433\/ref=as_li_ss_il?ie=UTF8&amp;qid=1494167646&amp;sr=8-1&amp;keywords=gradle&amp;linkCode=li2&amp;tag=typea09-22&amp;linkId=da9dcdece9cc0bd6bd1bd07c9ca1ef97\" target=\"_blank\"><img decoding=\"async\" src=\"\/\/ws-fe.amazon-adsystem.com\/widgets\/q?_encoding=UTF8&amp;ASIN=4798136433&amp;Format=_SL160_&amp;ID=AsinImage&amp;MarketPlace=JP&amp;ServiceVersion=20070822&amp;WS=1&amp;tag=typea09-22\" border=\"0\"><\/a><img loading=\"lazy\" decoding=\"async\" width=\"1\" height=\"1\" style=\"margin: 0px;\" alt=\"\" src=\"https:\/\/ir-jp.amazon-adsystem.com\/e\/ir?t=typea09-22&amp;l=li2&amp;o=9&amp;a=4798136433\" border=\"0\">  <\/p>\n<p><a href=\"https:\/\/www.typea.info\/blog\/index.php\/2017\/05\/03\/centos7_python3_django\">CentOS7 \u3078 Python3 \u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u3066 Django REST framework&nbsp; \u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u30b5\u30f3\u30d7\u30eb\u306e\u52d5\u4f5c\u78ba\u8a8d\u304c\u3067\u304d\u305f<\/a>\u306e\u3067\u3001Gradle\u3092\u4f7f\u3063\u3066\u30c7\u30d7\u30ed\u30a4\u624b\u9806\u306e\u534a\u81ea\u52d5\u5316\u3092\u8a66\u307f\u308b\u3002<\/p>\n<h2>1.\u3084\u308a\u305f\u3044\u3053\u3068<\/h2>\n<p>\u3068\u3063\u304b\u304b\u308a\u3068\u3057\u3066\u3001\u6700\u4f4e\u9650\u3001\u4ee5\u4e0b\u7a0b\u5ea6\u306e\u3053\u3068\u3092\u3084\u308a\u305f\u3044\u3002<\/p>\n<ol>\n<li>Git\u304b\u3089HEAD\u30ea\u30d3\u30b8\u30e7\u30f3\u3092\u53d6\u5f97\n<li>Zip\u5727\u7e2e\u3057\u3066\u30a2\u30fc\u30ab\u30a4\u30d6\u3092\u4f5c\u6210\n<li>SSH\u7d4c\u7531\u3067\u30b5\u30fc\u30d0\u30fc\u3078\u30a2\u30fc\u30ab\u30a4\u30d6\u3092\u30b3\u30d4\u30fc\n<li>\u30a2\u30fc\u30ab\u30a4\u30d6\u3092\u5c55\u958b<\/li>\n<\/ol>\n<h2>2.\u69cb\u6210<\/h2>\n<p><a href=\"https:\/\/www.typea.info\/blog\/index.php\/2017\/05\/01\/anaconda_eclipsepydev_visual_studio_code_django_rest\">\u3053\u3053\u307e\u3067\u3067\u3001Visual Studio Code\u4e0a\u306b\u4f5c\u6210\u3057\u305f\u69cb\u9020\u306f\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u611f\u3058<\/a>\u3002\u3042\u3068\u3001\u30ef\u30fc\u30af\u30b9\u30da\u30fc\u30b9(django_api_lesson) \u76f4\u4e0b\u306b\u4ee5\u4e0b\u3092\u4f5c\u6210<\/p>\n<ul>\n<li>\u30c7\u30d7\u30ed\u30a4\u7528\u30a2\u30fc\u30ab\u30a4\u30d6\u4f5c\u6210\u7528\u306e\u30c7\u30a3\u30ec\u30af\u30c8\u30ea(buid)\u3092\u4f5c\u6210\n<li>Gradle\u7528\u306e\u30d3\u30eb\u30c9\u30b9\u30af\u30ea\u30d7\u30c8(build.gradle)\u3092\u4f5c\u6210\n<li>SSH KEY \u30d5\u30a1\u30a4\u30eb(id_rsa) \u3092\u914d\u7f6e\u3002<\/li>\n<\/ul>\n<p><a href=\"https:\/\/www.typea.info\/blog\/wp-content\/uploads\/image\/3246c5b8df60_C1EF\/django_gradle01.jpg\"><img loading=\"lazy\" decoding=\"async\" width=\"220\" height=\"428\" title=\"django_gradle01\" style=\"border-width: 0px; padding-top: 0px; padding-right: 0px; padding-left: 0px; display: inline; background-image: none;\" alt=\"django_gradle01\" src=\"https:\/\/www.typea.info\/blog\/wp-content\/uploads\/image\/3246c5b8df60_C1EF\/django_gradle01_thumb.jpg\" border=\"0\"><\/a><\/p>\n<h3>SSH KEY\u30d5\u30a1\u30a4\u30eb\u306e\u4f5c\u6210<\/h3>\n<p>Gradle \u304b\u3089 SSH\u3067\u30ed\u30b0\u30a4\u30f3\u3059\u308b\u305f\u3081\u306b\u3001SSH KEY\u30d5\u30a1\u30a4\u30eb\u3092\u3001\u30ed\u30b0\u30a4\u30f3\u5148\u306e\u30b5\u30fc\u30d0\u30fc\u3067\u4f5c\u6210\u3059\u308b\u3002<\/p>\n<pre class=\"prettyprint linenums\">[root@ganzin ~]# ssh-keygen -t rsa\r\nGenerating public\/private rsa key pair.\r\nEnter file in which to save the key (\/root\/.ssh\/id_rsa):\r\nCreated directory '\/root\/.ssh'.\r\nEnter passphrase (empty for no passphrase):\r\nEnter same passphrase again:\r\nYour identification has been saved in \/root\/.ssh\/id_rsa.\r\nYour public key has been saved in \/root\/.ssh\/id_rsa.pub.\r\nThe key fingerprint is:\r\n28:90:51:e4:6d:a7:ae:8b:36:95:67:f2:83:b5:bf:fc root@ganzin\r\nThe key's randomart image is:\r\n+--[ RSA 2048]----+\r\n|  .oo            |\r\n|   + .           |\r\n|  o . o .        |\r\n|   . . +         |\r\n|    ..o S        |\r\n|    +o+          |\r\n|   . B..         |\r\n|  o...+.         |\r\n| ...o. o+oE      |\r\n+-----------------+<\/pre>\n<p>\u30db\u30fc\u30e0\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306e\u3000.ssh \u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u914d\u4e0b\u306b\u3001id_rsa \u30d5\u30a1\u30a4\u30eb\u304c\u751f\u6210\u3055\u308c\u308b\u306e\u3067\u3001FTP\u306a\u3069\u3067\u3001\u30ed\u30fc\u30ab\u30eb\u306b\u53d6\u5f97\u3059\u308b\u3002<\/p>\n<pre class=\"prettyprint linenums\">[root@ganzin .ssh]# ls \r\nid_rsa id_rsa.pub <\/pre>\n<h2>3.Gradle \u30d3\u30eb\u30c9\u30b9\u30af\u30ea\u30d7\u30c8\u306e\u8a18\u8ff0<\/h2>\n<p><a href=\"https:\/\/gradle.org\/\">Gradle<\/a> \u3092 <a href=\"https:\/\/gradle.org\/install\">\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u624b\u9806<\/a> \u306b\u5f93\u3044\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3002<\/p>\n<p>\u4e0a\u8a18\u3001build.gradle \u306b\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u30b9\u30af\u30ea\u30d7\u30c8\u3092\u8a18\u8ff0\u3002<\/p>\n<pre class=\"prettyprint linenums\">buildscript{\r\n    repositories {\r\n        jcenter()\r\n    }\r\n    dependencies {\r\n        \/\/ SSH\u30d7\u30e9\u30b0\u30a4\u30f3\u306e\u8a2d\u5b9a\r\n        \/\/ https:\/\/gradle-ssh-plugin.github.io\/\r\n        classpath 'org.hidetake:gradle-ssh-plugin:2.9.0'\r\n    }\r\n}\r\n\r\nplugins {\r\n  \/\/ SSH\u30d7\u30e9\u30b0\u30a4\u30f3\u306e\u8a2d\u5b9a\r\n  id 'org.hidetake.ssh' version '2.9.0'\r\n}\r\n\r\n\/\/ SSH\u30d7\u30e9\u30b0\u30a4\u30f3\u306e\u8a2d\u5b9a\r\napply plugin: 'org.hidetake.ssh'\r\n\r\n\/\/ \u30c7\u30d5\u30a9\u30eb\u30c8\u3067\u5b9f\u884c\u3059\u308b\u30bf\u30b9\u30af\u9806\u306b\u6307\u5b9a\r\ndefaultTasks 'clean', 'export', 'zip', 'deploy'\r\n\r\n\/\/ \u5404\u7a2e\u8a2d\u5b9a\r\nfinal APP_NAME = 'firstapi' \/\/ \u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u540d\r\nfinal REOMOTE_PATH = '\/home\/piroto\/djangoapp' \/\/ \u30c7\u30d7\u30ed\u30a4\u5148\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\r\nfinal BUID_DIR = 'build' \/\/ \u30c7\u30d7\u30ed\u30a4\u7528\u30a2\u30fc\u30ab\u30a4\u30d6\u4f5c\u6210\u5148\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\r\nfinal EXPORT_DIR = 'repo' \/\/ GIT\u30ea\u30dd\u30b8\u30c8\u30eaExport\u5148\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\r\n\r\n\/\/ SSH\u63a5\u7d9a\u60c5\u5831\r\n\/\/ $ ssh-keygen -t rsa\r\n\/\/ C:\\Users\\pppiroto\\.ssh\\known_hosts\r\nremotes {\r\n    web01 {\r\n        host = '192.168.0.36'\r\n        user = 'root'\r\n        password = 'password'\r\n        \/\/ SSH KEY\u30d5\u30a1\u30a4\u30eb\u3092\u6307\u5b9a(\u30b5\u30fc\u30d0\u30fc\u3067\u3001ssh-keygen\u3067\u751f\u6210\u3057\u3001\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u30eb\u30fc\u30c8\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306b\u914d\u7f6e)\r\n        identity = file('id_rsa')\r\n    }\r\n}\r\n\r\n\/\/ \u30c7\u30d7\u30ed\u30a4\u7528\u30a2\u30fc\u30ab\u30a4\u30d6\u4f5c\u6210\u5148\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306e\u30af\u30ea\u30fc\u30f3\r\ntask clean {\r\n    doLast {\r\n        exec {\r\n            executable 'cmd'\r\n            args 'rmdir', '\/S', '\/Q', \"${BUID_DIR}\\\\${EXPORT_DIR}\"\r\n        }\r\n        exec {\r\n            executable 'cmd'\r\n            args 'del', \"${BUID_DIR}\\\\${APP_NAME}.zip\"\r\n        }\r\n    }\r\n}\r\n\r\n\/\/ \u30ed\u30fc\u30ab\u30ebGit\u30ea\u30dd\u30b8\u30c8\u30ea\u304b\u3089HEAD\u30ea\u30d3\u30b8\u30e7\u30f3\u3092Export\r\n\/\/ http:\/\/sakebook.hatenablog.com\/entry\/2014\/09\/03\/084456\r\n\/\/ http:\/\/qiita.com\/scalper\/items\/1905b47209989dda5648\r\ntask export {\r\n    doLast {\r\n        exec {\r\n            executable 'git'\r\n            args 'checkout-index', '-a', '-f', \"--prefix=${BUID_DIR}\/${EXPORT_DIR}\/\"\r\n        }\r\n    }\r\n}\r\n\r\n\/\/ Git\u30ea\u30dd\u30b8\u30c8\u30ea\u304b\u3089Export\u3057\u305f\u30d7\u30ed\u30b0\u30e9\u30e0\u3092Zip\u306b\u5727\u7e2e\r\ntask zip(type: Zip) {\r\n    baseName = \"${APP_NAME}\"\r\n    destinationDir = file(\"${BUID_DIR}\")\r\n    exclude \"${APP_NAME}\\\\__pycache__\"\r\n    into(\"${APP_NAME}\") {\r\n        from (\"${BUID_DIR}\/${EXPORT_DIR}\/${APP_NAME}\") {\r\n            include '**\/*.*'\r\n        }\r\n    }\r\n}\r\n\r\n\/\/ SSH\u3092\u5229\u7528\u3057\u3066\u30c7\u30d7\u30ed\u30a4\u7528\u30a2\u30fc\u30ab\u30a4\u30d6\u3092\u9001\u4fe1\u5f8c\u3001\u5c55\u958b\r\ntask deploy {\r\n    doLast {\r\n        ssh.run {\r\n            session(remotes.web01) {\r\n                execute \"rm -R -f ${REOMOTE_PATH}\/${APP_NAME}\"\r\n                execute \"rm -f ${REOMOTE_PATH}\/${APP_NAME}.zip\"\r\n                put from:\"${projectDir}\\\\${BUID_DIR}\\\\${APP_NAME}.zip\", into:\"${REOMOTE_PATH}\/${APP_NAME}.zip\"\r\n                execute \"unzip ${REOMOTE_PATH}\/${APP_NAME}.zip -d ${REOMOTE_PATH}\"\r\n            }\r\n        }\r\n    }\r\n}\r\n<\/pre>\n<p><a href=\"https:\/\/www.typea.info\/blog\/index.php\/2017\/07\/03\/gradle_ssh_reject_hostkey\">Gradle ssh \u30d7\u30e9\u30b0\u30a4\u30f3\u3067 reject HostKey \u30a8\u30e9\u30fc \u767a\u751f\u6642\u306e\u5bfe\u51e6<\/a>\n<\/p>\n<h3>4.\u5b9f\u884c<\/h3>\n<pre class=\"prettyprint linenums\">PS C:\\workspaces\\vscode\\django_api_lesson&gt; gradle\r\n:clean\r\nMicrosoft Windows [Version 10.0.14393]\r\n(c) 2016 Microsoft Corporation. All rights reserved.\r\n\r\nMicrosoft Windows [Version 10.0.14393]\r\n(c) 2016 Microsoft Corporation. All rights reserved.\r\n\r\nC:\\workspaces\\vscode\\django_api_lesson&gt;Microsoft Windows [Version 10.0.14393]\r\n(c) 2016 Microsoft Corporation. All rights reserved.\r\n\r\nC:\\workspaces\\vscode\\django_api_lesson&gt;:export\r\n:zip UP-TO-DATE\r\n:deploy\r\nweb01#53|Archive:  \/home\/piroto\/djangoapp\/firstapi.zip\r\nweb01#53|   creating: \/home\/piroto\/djangoapp\/firstapi\/\r\nweb01#53|  inflating: \/home\/piroto\/djangoapp\/firstapi\/db.sqlite3\r\nweb01#53|   creating: \/home\/piroto\/djangoapp\/firstapi\/firstapi\/\r\nweb01#53|  inflating: \/home\/piroto\/djangoapp\/firstapi\/firstapi\/settings.py\r\nweb01#53|  inflating: \/home\/piroto\/djangoapp\/firstapi\/firstapi\/urls.py\r\nweb01#53|  inflating: \/home\/piroto\/djangoapp\/firstapi\/firstapi\/wsgi.py\r\nweb01#53|  inflating: \/home\/piroto\/djangoapp\/firstapi\/firstapi\/__init__.py\r\nweb01#53|  inflating: \/home\/piroto\/djangoapp\/firstapi\/manage.py\r\n\r\nBUILD SUCCESSFUL\r\n\r\nTotal time: 4.73 secs<\/pre>\n<p>OK OK<\/p>\n<p><a href=\"https:\/\/www.amazon.co.jp\/Python%E3%83%97%E3%83%AD%E3%83%95%E3%82%A7%E3%83%83%E3%82%B7%E3%83%A7%E3%83%8A%E3%83%AB%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0-%E7%AC%AC2%E7%89%88-%E6%A0%AA%E5%BC%8F%E4%BC%9A%E7%A4%BE%E3%83%93%E3%83%BC%E3%83%97%E3%83%A9%E3%82%A6%E3%83%89-ebook\/dp\/B00XZTYMG6\/ref=as_li_ss_il?s=books&amp;ie=UTF8&amp;qid=1494167695&amp;sr=1-11&amp;keywords=django&amp;linkCode=li2&amp;tag=typea09-22&amp;linkId=4570211e27953d50719975c1ee89a771\" target=\"_blank\"><img decoding=\"async\" src=\"\/\/ws-fe.amazon-adsystem.com\/widgets\/q?_encoding=UTF8&amp;ASIN=B00XZTYMG6&amp;Format=_SL160_&amp;ID=AsinImage&amp;MarketPlace=JP&amp;ServiceVersion=20070822&amp;WS=1&amp;tag=typea09-22\" border=\"0\"><\/a><img loading=\"lazy\" decoding=\"async\" width=\"1\" height=\"1\" style=\"margin: 0px;\" alt=\"\" src=\"https:\/\/ir-jp.amazon-adsystem.com\/e\/ir?t=typea09-22&amp;l=li2&amp;o=9&amp;a=B00XZTYMG6\" border=\"0\"><\/p>\n","protected":false},"excerpt":{"rendered":"<p>CentOS7 \u3078 Python3 \u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u3066 Django REST framework&nbsp; \u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u30b5\u30f3\u30d7\u30eb\u306e\u52d5\u4f5c\u78ba\u8a8d\u304c\u3067\u304d\u305f\u306e\u3067\u3001Gradle\u3092\u4f7f\u3063\u3066\u30c7\u30d7\u30ed\u30a4\u624b\u9806\u306e\u534a\u81ea\u52d5\u5316\u3092\u8a66\u307f\u308b\u3002 1. [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"sns_share_botton_hide":"","vkExUnit_sns_title":"","_vk_print_noindex":"","sitemap_hide":"","_veu_custom_css":"","veu_display_promotion_alert":"","vkexunit_cta_each_option":"","footnotes":""},"categories":[64,29,97,20],"tags":[],"class_list":["post-504","post","type-post","status-publish","format-standard","hentry","category-centos","category-django","category-gradle","category-python"],"veu_head_title_object":{"title":"","add_site_title":""},"_links":{"self":[{"href":"https:\/\/www.typea.info\/blog\/index.php\/wp-json\/wp\/v2\/posts\/504","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.typea.info\/blog\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.typea.info\/blog\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.typea.info\/blog\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.typea.info\/blog\/index.php\/wp-json\/wp\/v2\/comments?post=504"}],"version-history":[{"count":0,"href":"https:\/\/www.typea.info\/blog\/index.php\/wp-json\/wp\/v2\/posts\/504\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.typea.info\/blog\/index.php\/wp-json\/wp\/v2\/media?parent=504"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.typea.info\/blog\/index.php\/wp-json\/wp\/v2\/categories?post=504"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.typea.info\/blog\/index.php\/wp-json\/wp\/v2\/tags?post=504"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}