{"id":33249,"date":"2023-05-07T03:39:20","date_gmt":"2024-01-04T23:42:27","guid":{"rendered":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%9c%a8-vultr-vps-%e4%b8%8a%e5%ae%89%e8%a3%85-centos9rails-7mysql8nginx%ef%bc%8c%e5%b9%b6%e4%bd%bf%e7%94%a8-capistrano3-%e8%bf%9b%e8%a1%8c%e9%83%a8%e7%bd%b2%e3%80%82\/"},"modified":"2024-04-30T02:59:33","modified_gmt":"2024-04-29T18:59:33","slug":"%e5%9c%a8-vultr-vps-%e4%b8%8a%e5%ae%89%e8%a3%85-centos9rails-7mysql8nginx%ef%bc%8c%e5%b9%b6%e4%bd%bf%e7%94%a8-capistrano3-%e8%bf%9b%e8%a1%8c%e9%83%a8%e7%bd%b2%e3%80%82","status":"publish","type":"post","link":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%9c%a8-vultr-vps-%e4%b8%8a%e5%ae%89%e8%a3%85-centos9rails-7mysql8nginx%ef%bc%8c%e5%b9%b6%e4%bd%bf%e7%94%a8-capistrano3-%e8%bf%9b%e8%a1%8c%e9%83%a8%e7%bd%b2%e3%80%82\/","title":{"rendered":"\u5728 Vultr VPS \u4e0a\u5b89\u88c5 CentOS9+Rails 7+MySQL8+nginx\uff0c\u5e76\u4f7f\u7528 Capistrano3 \u8fdb\u884c\u90e8\u7f72"},"content":{"rendered":"<h1>\u9996\u5148<\/h1>\n<p>\u7531\u4e8e CentOS Stream 9 \u7684\u53d1\u5e03\uff0c\u6211\u642d\u5efa\u4e86 Rails 7 \u5f00\u53d1\u73af\u5883\uff0c\u5e76\u8fdb\u884c\u4e86\u73b0\u6709\u5e94\u7528\u7684 Rails\u3001Ruby \u7248\u672c\u5347\u7ea7\u548c\u8fc1\u79fb\uff0c\u56e0\u6b64\u8bb0\u5f55\u4e86\u76f8\u5173\u6b65\u9aa4\u3002\u4ee5\u4e0b\u662f CentOS8 \u6587\u7ae0\u7684 CentOS9 \u7248\u672c\u3002<\/p>\n<p>\u5efa\u8bae\u9009\u62e9Vultr\u7684\u6700\u4fbf\u5b9c\u768410GB SSD\u5957\u9910\u65f6\uff0c\u5982\u679c\u5728CentOS9\u4e0a\u4f7f\u7528\uff0c\u53ef\u80fd\u4f1a\u51fa\u73b0\u5b58\u50a8\u7a7a\u95f4\u4e0d\u8db3\u7684\u95ee\u9898\uff0c\u5efa\u8bae\u9009\u62e925GB\u6216\u4ee5\u4e0a\u7684\u5957\u9910\u3002<\/p>\n<p>\u5728\u6fc0\u5b89VPS\u63d0\u4f9b\u5546Vultr\u4e0a\uff0c\u5982\u679c\u60a8\u901a\u8fc7\u6211\u7684\u63a8\u8350\u94fe\u63a5\u6ce8\u518c\u8d26\u6237\uff0c\u53ef\u4ee5\u83b7\u5f97100\u7f8e\u5143\u7684\u79ef\u5206\u3002\u56e0\u6b64\uff0c\u6211\u5c1d\u8bd5\u4e86\u5404\u79cd\u7ec4\u5408\uff0c\u5982CentOS7\u30018\u3001MySQL 5.7\u30018\u7b49\u3002\u7531\u4e8e\u6211\u4e0d\u77e5\u9053\u8fd9\u4e2a\u6d3b\u52a8\u4f55\u65f6\u7ed3\u675f\uff0c\u6240\u4ee5\u5982\u679c\u60a8\u5bf9\u6b64\u611f\u5174\u8da3\uff0c\u8bf7\u901a\u8fc7\u4ee5\u4e0b\u94fe\u63a5\u6ce8\u518c\u8d26\u6237\u3002\u60a8\u5c06\u83b7\u5f97\u79ef\u5206\uff0c\u800c\u4e14\u4f3c\u4e4e\u6211\u4e5f\u4f1a\u5f97\u5230\u4e00\u4e9b\u79ef\u5206\uff0c\u8fd9\u662f\u4e92\u60e0\u4e92\u5229\u7684\u3002<\/p>\n<h3>\u901a\u8fc7\u8fd9\u4e2a\u94fe\u63a5\u60a8\u53ef\u4ee5\u83b7\u5f97100\u7f8e\u5143\u3002<\/h3>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d166837434c4406c01184\/5-0.png\" alt=\"\u30b9\u30af\u30ea\u30fc\u30f3\u30b7\u30e7\u30c3\u30c8 2020-03-09 \u5348\u5f8c7.03.25.png\" \/><\/div>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d166837434c4406c01184\/6-0.png\" alt=\"\u30b9\u30af\u30ea\u30fc\u30f3\u30b7\u30e7\u30c3\u30c8 2020-03-09 \u5348\u5f8c7.17.41.png\" \/><\/div>\n<h1>\u4f7f\u7528\u7684\u73af\u5883<\/h1>\n<p>\u670d\u52a1\u5668\u64cd\u4f5c\u7cfb\u7edf\uff1aCentOS Stream 9<br \/>\n\u672c\u5730\u64cd\u4f5c\u7cfb\u7edf\uff1amacOS Monterey\u7248\u672c12.5.1\uff08\u82f9\u679cM1\uff09<\/p>\n<p>Ruby 3.1.2 \u4f7f\u7528 rbenv<br \/>\nRails 7.0.3.1<br \/>\npuma 4.3.12<br \/>\nbundler 2.3.21<br \/>\nCapistrano 3.17.1<br \/>\nMySQL 8.0.28<\/p>\n<p>\u7531\u4e8e\u5728Puma 5\u4e2d\u5220\u9664\u4e86&#8211;daemon\u9009\u9879\u5e76\u4e14\u91cd\u65b0\u542f\u52a8Puma\u5728\u90e8\u7f72\u65f6\u53d8\u5f97\u9ebb\u70e6\uff0c\u6240\u4ee5\u6211\u6545\u610f\u4f7f\u7528Puma 4\u3002\u4f46\u6211\u6253\u7b97\u5728\u6709\u65f6\u95f4\u7684\u65f6\u5019\u8fdb\u884cPuma 5\u7684\u8fc1\u79fb\uff0c\u56e0\u4e3a\u6709\u89e3\u51b3\u65b9\u6848\u53ef\u4f9b\u9009\u62e9\u3002\uff08\u5982\u679c\u4f60\u60f3\u7acb\u5373\u8fdb\u884c\u8fc1\u79fb\uff0c\u8bf7\u53c2\u8003\u76f8\u5173\u6587\u7ae0\u3002\uff09<\/p>\n<h1>1. \u521b\u5efa\u4e00\u4e2aVultr VPS\u5b9e\u4f8b<\/h1>\n<p>\u6211\u6253\u7b97\u4ece\u5934\u5f00\u59cb\u91cd\u65b0\u5efa\u7acb\uff0c\u6240\u4ee5\u521b\u5efa\u4e86\u4e00\u4e2a\u65b0\u7684\u5b9e\u4f8b\u3002\u4ee5\u524d\u4e1c\u4eac\u670d\u52a1\u5668\u7684\u4ef7\u683c\u7565\u9ad8\uff0c\u4f46\u73b0\u5728\u4e0eNJ\u7684\u4ef7\u683c\u76f8\u540c\uff0c\u6240\u4ee5\u6211\u9009\u62e9\u4e86\u4e1c\u4eac\u3002<\/p>\n<p>\u8bf7\u53c2\u8003\u4e4b\u524d\u7684\u6587\u7ae0\u300aVultr VPS\u4e0aCentOS7\u3001Ruby on Rails 6\u3001Puma\u3001Capistrano3\u90e8\u7f72\u751f\u4ea7\u73af\u5883\u7684\u7b2c1-(5)\u6b65\u300b\u6765\u83b7\u53d6Startup Script\u548cSSH Keys\u7684\u76f8\u5173\u4fe1\u606f\u3002<\/p>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d166837434c4406c01184\/14-0.png\" alt=\"NewInstance001.png\" \/><\/div>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d166837434c4406c01184\/15-0.png\" alt=\"NewInstance002.png\" \/><\/div>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d166837434c4406c01184\/16-0.png\" alt=\"NewInstance003.png\" \/><\/div>\n<h1>2. \u521b\u5efa\u767b\u5f55\u8d26\u6237<\/h1>\n<p>\u901a\u8fc7\u7528\u7ea2\u8272\u6846\u6807\u6ce8\u7684\u56fe\u6807\u53ef\u4ee5\u8bbf\u95ee\u63a7\u5236\u53f0\uff0c\u4f7f\u7528\u81ea\u52a8\u914d\u7f6e\u7684root\u7528\u6237\u5bc6\u7801\u8fdb\u884c\u767b\u5f55\u3002\u57fa\u672c\u4e0a\uff0c\u56e0\u4e3a\u5df2\u8fde\u63a5\u5230\u4e92\u8054\u7f51\uff0c\u6240\u4ee5\u5728\u64cd\u4f5c\u7cfb\u7edf\u5b89\u88c5\u5b8c\u6210\u540e\uff0c\u5c31\u4f1a\u5f00\u59cb\u8bd5\u56fe\u5229\u7528\u9ed8\u8ba4\u5b89\u5168\u6f0f\u6d1e\u8fdb\u884c\u7f51\u7edc\u653b\u51fb\uff0c\u56e0\u6b64\u9996\u5148\u8981\u8fdb\u884c\u5b89\u5168\u914d\u7f6e\uff0c\u7136\u540e\u518d\u8fdb\u884c\u5176\u4ed6\u64cd\u4f5c\u3002<\/p>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d166837434c4406c01184\/19-0.png\" alt=\"NewInstance004.png\" \/><\/div>\n<h2>(1) \u63a7\u5236\u53f0\u767b\u5f55<\/h2>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d166837434c4406c01184\/21-0.png\" alt=\"NewInstance005.png\" \/><\/div>\n<h2>(2) \u53ef\u4ee5\u5728\u7a0d\u540e\u4f7f\u7528Capistrano\u6dfb\u52a0\u5e10\u6237\u3002<\/h2>\n<pre class=\"post-pre\"><code><span class=\"c1\"># adduser deploy<\/span>\r\n<span class=\"c1\"># passwd deploy<\/span>\r\n<span class=\"c1\"># gpasswd -a deploy wheel<\/span>\r\n<span class=\"c1\"># mkdir \/home\/deploy\/.ssh<\/span>\r\n<span class=\"c1\"># chmod 700 \/home\/deploy\/.ssh<\/span>\r\n<span class=\"c1\"># vi \/home\/deploy\/.ssh\/authorized_keys<\/span>\r\n<span class=\"o\">&gt;<\/span> <span class=\"err\">\u516c\u958b\u9375\u3092\u8cbc\u308a\u4ed8\u3051\u308b\uff08<\/span><span class=\"no\">Mac<\/span><span class=\"err\">\u3067\u4f5c\u3063\u305f<\/span><span class=\"o\">\/<\/span><span class=\"no\">Users<\/span><span class=\"o\">\/<\/span><span class=\"err\">\u3042\u306a\u305f<\/span><span class=\"o\">\/<\/span><span class=\"p\">.<\/span><span class=\"nf\">ssh<\/span><span class=\"o\">\/<\/span><span class=\"n\">vultr<\/span><span class=\"p\">.<\/span><span class=\"nf\">pub<\/span><span class=\"err\">\u306e\u4e2d\u8eab\u3092\u8cbc\u308a\u4ed8\u3051\u307e\u3059\u3002\uff09<\/span>\r\n\r\n<span class=\"c1\"># chmod 600 \/home\/deploy\/.ssh\/authorized_keys<\/span>\r\n<span class=\"c1\"># chown -R deploy:deploy \/home\/deploy\/.ssh\/<\/span>\r\n<\/code><\/pre>\n<h2>(3) \u786e\u8ba4\u662f\u5426\u80fd\u591f\u901a\u8fc7SSH\u767b\u5f55\u3002<\/h2>\n<p>\u53ea\u6709\u5728\u7b2c\u4e00\u6b21\u8f93\u5165\u65f6\u4f1a\u51fa\u9519\uff0c\u4f46\u53ea\u8981\u6309\u7167\u4ee5\u4e0b\u65b9\u5f0f\u8f93\u5165&#8221;yes&#8221;\uff0c\u7b2c\u4e8c\u6b21\u4ee5\u540e\u5c31\u4e0d\u4f1a\u51fa\u9519\u4e86\u3002\u7531\u4e8eWeb\u63a7\u5236\u53f0\u672a\u542f\u7528HTTPS\uff0c\u5bc6\u7801\u4f1a\u4ee5\u660e\u6587\u5f62\u5f0f\u4f20\u8f93\uff0c\u56e0\u6b64\u4e0d\u4f7f\u7528\u8be5\u529f\u80fd\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"err\">$<\/span> <span class=\"n\">ssh<\/span> <span class=\"o\">-<\/span><span class=\"n\">i<\/span> <span class=\"o\">~<\/span><span class=\"sr\">\/.ssh\/<\/span><span class=\"n\">vultr2<\/span> <span class=\"n\">deploy<\/span><span class=\"err\">@<\/span><span class=\"mi\">1<\/span><span class=\"err\">\u3042\u306a\u305f\u306e<\/span><span class=\"no\">VPS<\/span><span class=\"err\">\u306e<\/span><span class=\"no\">IP<\/span><span class=\"err\">\u30a2\u30c9\u30ec\u30b9<\/span>\r\n<span class=\"no\">The<\/span> <span class=\"n\">authenticity<\/span> <span class=\"n\">of<\/span> <span class=\"n\">host<\/span> <span class=\"s1\">'\u3042\u306a\u305f\u306eVPS\u306eIP\u30a2\u30c9\u30ec\u30b9 (\u3042\u306a\u305f\u306eVPS\u306eIP\u30a2\u30c9\u30ec\u30b9)'<\/span> <span class=\"n\">can<\/span><span class=\"s1\">'t be established.\r\nED25519 key fingerprint is SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxx\r\nThis key is not known by any other names\r\nAre you sure you want to continue connecting (yes\/no\/[fingerprint])? yes\r\nWarning: Permanently added '<\/span><span class=\"err\">\u3042\u306a\u305f\u306e<\/span><span class=\"no\">VPS<\/span><span class=\"err\">\u306e<\/span><span class=\"no\">IP<\/span><span class=\"err\">\u30a2\u30c9\u30ec\u30b9'<\/span> <span class=\"p\">(<\/span><span class=\"no\">ED25519<\/span><span class=\"p\">)<\/span> <span class=\"n\">to<\/span> <span class=\"n\">the<\/span> <span class=\"n\">list<\/span> <span class=\"n\">of<\/span> <span class=\"n\">known<\/span> <span class=\"n\">hosts<\/span><span class=\"o\">.<\/span>\r\n<span class=\"no\">Activate<\/span> <span class=\"n\">the<\/span> <span class=\"n\">web<\/span> <span class=\"n\">console<\/span> <span class=\"ss\">with: <\/span><span class=\"n\">systemctl<\/span> <span class=\"n\">enable<\/span> <span class=\"o\">--<\/span><span class=\"n\">now<\/span> <span class=\"n\">cockpit<\/span><span class=\"p\">.<\/span><span class=\"nf\">socket<\/span>\r\n\r\n<span class=\"p\">[<\/span><span class=\"n\">deploy<\/span><span class=\"vi\">@hogehoge<\/span> <span class=\"o\">~<\/span><span class=\"p\">]<\/span><span class=\"err\">$<\/span> \r\n<\/code><\/pre>\n<h1>2. \u64cd\u4f5c\u7cfb\u7edf\u7684\u8bbe\u7f6e<\/h1>\n<h2>(1) SSHD\u7684\u914d\u7f6e<\/h2>\n<pre class=\"post-pre\"><code><span class=\"err\">$<\/span> <span class=\"n\">sudo<\/span> <span class=\"n\">vi<\/span> <span class=\"sr\">\/etc\/ss<\/span><span class=\"n\">h<\/span><span class=\"o\">\/<\/span><span class=\"n\">sshd_config<\/span>\r\n\r\n<span class=\"o\">&gt;<\/span> <span class=\"err\">\u4ee5\u4e0b\u3092\u5909\u66f4<\/span>\r\n<span class=\"no\">PermitRootLogin<\/span> <span class=\"n\">no<\/span>         <span class=\"c1\"># root\u306e\u30ea\u30e2\u30fc\u30c8\u30ed\u30b0\u30a4\u30f3\u3092\u4e0d\u8a31\u53ef<\/span>\r\n<span class=\"no\">PasswordAuthentication<\/span> <span class=\"n\">no<\/span>  <span class=\"c1\"># \u30d1\u30b9\u30ef\u30fc\u30c9\u7121\u3057\u3067SSH\u30ed\u30b0\u30a4\u30f3<\/span>\r\n<span class=\"no\">ClientAliveInterval<\/span> <span class=\"mi\">10<\/span>     <span class=\"c1\"># SSH\u304c\u30bf\u30a4\u30e0\u30a2\u30a6\u30c8\u3057\u306a\u3044\u3088\u3046\u306b10\u79d2\u6bce\u306bAlive\u78ba\u8a8d<\/span>\r\n<span class=\"no\">ClientAliveCountMax<\/span> <span class=\"mi\">6<\/span>      <span class=\"c1\"># \u4e0a\u8a18\u3092\u6700\u59276\u56de\uff08\u3064\u307e\u308a60\u79d2\uff09\u7e70\u308a\u8fd4\u3059<\/span>\r\n\r\n<span class=\"o\">&gt;<\/span> <span class=\"err\">\u5909\u66f4\u3092\u53cd\u6620<\/span>\r\n<span class=\"err\">$<\/span> <span class=\"n\">sudo<\/span> <span class=\"n\">systemctl<\/span> <span class=\"n\">reload<\/span> <span class=\"n\">sshd<\/span>\r\n<\/code><\/pre>\n<p>\u65e0\u9700\u5bc6\u7801\uff0c\u4ece\u672c\u5730\u8ba1\u7b97\u673a\u8fdb\u884cSSH\u767b\u5f55<\/p>\n<pre class=\"post-pre\"><code><span class=\"err\">$<\/span> <span class=\"n\">ssh<\/span> <span class=\"o\">-<\/span><span class=\"n\">i<\/span> <span class=\"o\">~<\/span><span class=\"sr\">\/.ssh\/<\/span><span class=\"n\">vultr<\/span> <span class=\"n\">deploy<\/span><span class=\"err\">@\u3042\u306a\u305f\u306e<\/span><span class=\"no\">VPS<\/span><span class=\"err\">\u306e<\/span><span class=\"no\">IP<\/span><span class=\"err\">\u30a2\u30c9\u30ec\u30b9<\/span>\r\n<\/code><\/pre>\n<p>\u786e\u8ba4\u65e0\u6cd5\u5728 root \u4e0a\u8fdb\u884c\u8fdc\u7a0b\u767b\u5f55\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"err\">$<\/span> <span class=\"n\">ssh<\/span> <span class=\"o\">-<\/span><span class=\"n\">i<\/span> <span class=\"o\">~<\/span><span class=\"sr\">\/.ssh\/<\/span><span class=\"n\">vultr<\/span> <span class=\"n\">root<\/span><span class=\"err\">@\u3042\u306a\u305f\u306e<\/span><span class=\"no\">VPS<\/span><span class=\"err\">\u306e<\/span><span class=\"no\">IP<\/span><span class=\"err\">\u30a2\u30c9\u30ec\u30b9<\/span>\r\n<span class=\"n\">root<\/span><span class=\"err\">@\u3042\u306a\u305f\u306e<\/span><span class=\"no\">VPS<\/span><span class=\"err\">\u306e<\/span><span class=\"no\">IP<\/span><span class=\"err\">\u30a2\u30c9\u30ec\u30b9<\/span><span class=\"p\">:<\/span> <span class=\"no\">Permission<\/span> <span class=\"n\">denied<\/span> <span class=\"p\">(<\/span><span class=\"n\">publickey<\/span><span class=\"p\">,<\/span><span class=\"n\">gssapi<\/span><span class=\"o\">-<\/span><span class=\"n\">keyex<\/span><span class=\"p\">,<\/span><span class=\"n\">gssapi<\/span><span class=\"o\">-<\/span><span class=\"n\">with<\/span><span class=\"o\">-<\/span><span class=\"n\">mic<\/span><span class=\"p\">)<\/span><span class=\"o\">.<\/span>\r\n<\/code><\/pre>\n<p>\u5982\u679c\u65e0\u6cd5\u6b63\u786e\u8fde\u63a5\u5230\u8fdc\u7a0bSSH\u800c\u65e0\u6cd5\u6267\u884c\u64cd\u4f5c\u65f6\uff0c\u70b9\u51fb\u201c\u67e5\u770b\u63a7\u5236\u53f0\u201d\u56fe\u6807\uff0c\u6253\u5f00\u63a7\u5236\u53f0\u5e76\u4f7f\u7528root\u8d26\u53f7\u767b\u5f55\u6765\u6062\u590d\u8fde\u63a5\u3002<\/p>\n<h2>(2) sudo\u914d\u7f6e<\/h2>\n<p>\u6211\u5df2\u7ecf\u914d\u7f6e\u4f7f\u5f97deploy\u7528\u6237\u53ef\u4ee5\u65e0\u9700\u4f7f\u7528\u5bc6\u7801\u6267\u884csudo\u547d\u4ee4\u3002\u4f60\u53ef\u4ee5\u9009\u62e9\u662f\u5426\u8fdb\u884c\u6b64\u8bbe\u7f6e\uff0c\u4e0d\u8fdb\u884c\u8bbe\u7f6e\u4e5f\u662f\u53ef\u4ee5\u7684\u3002<\/p>\n<p>(1) \u4f7f\u7528visudo\u547d\u4ee4\u6388\u4e88sudo\u6743\u9650\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"err\">$<\/span> <span class=\"n\">sudo<\/span> <span class=\"n\">visudo<\/span>\r\n<\/code><\/pre>\n<pre class=\"post-pre\"><code><span class=\"c1\">## Allow root to run any commands anywhere<\/span>\r\n<span class=\"n\">root<\/span>    <span class=\"no\">ALL<\/span><span class=\"o\">=<\/span><span class=\"p\">(<\/span><span class=\"no\">ALL<\/span><span class=\"p\">)<\/span>       <span class=\"no\">ALL<\/span>\r\n<span class=\"n\">deploy<\/span>  <span class=\"no\">ALL<\/span><span class=\"o\">=<\/span><span class=\"p\">(<\/span><span class=\"no\">ALL<\/span><span class=\"p\">)<\/span>       <span class=\"no\">ALL<\/span>  <span class=\"o\">&lt;=<\/span><span class=\"err\">\u3053\u306e\u884c\u3092\u8ffd\u52a0<\/span>\r\n\r\n<span class=\"c1\">## Same thing without a password<\/span>\r\n<span class=\"c1\"># %wheel        ALL=(ALL)       NOPASSWD: ALL<\/span>\r\n<span class=\"o\">%<\/span><span class=\"n\">deploy<\/span>         <span class=\"no\">ALL<\/span><span class=\"o\">=<\/span><span class=\"p\">(<\/span><span class=\"no\">ALL<\/span><span class=\"p\">)<\/span>       <span class=\"no\">NOPASSWD<\/span><span class=\"p\">:<\/span> <span class=\"no\">ALL<\/span>  <span class=\"o\">&lt;=<\/span><span class=\"err\">\u3053\u306e\u884c\u3092\u8ffd\u52a0<\/span>\r\n<\/code><\/pre>\n<p>deploy\u7ec4\u7684\u7528\u6237\u53ef\u4ee5\u4f7f\u7528sudo\u547d\u4ee4\u800c\u65e0\u9700\u5bc6\u7801\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"p\">[<\/span><span class=\"n\">deploy<\/span><span class=\"vi\">@vultr<\/span> <span class=\"o\">~<\/span><span class=\"p\">]<\/span><span class=\"err\">$<\/span> <span class=\"n\">sudo<\/span> <span class=\"n\">whoami<\/span>\r\n<span class=\"n\">root<\/span>\r\n<\/code><\/pre>\n<p>\u6211\u80fd\u4f7f\u7528whoami\u547d\u4ee4\u800c\u65e0\u9700\u8f93\u5165\u5bc6\u7801\u3002<\/p>\n<h2>(3) \u9632\u706b\u5899\u7684\u8bbe\u7f6e<\/h2>\n<pre class=\"post-pre\"><code><span class=\"err\">$<\/span> <span class=\"n\">sudo<\/span> <span class=\"n\">yum<\/span> <span class=\"n\">remove<\/span> <span class=\"o\">-<\/span><span class=\"n\">y<\/span> <span class=\"n\">firewalld<\/span>\r\n<span class=\"err\">$<\/span> <span class=\"n\">sudo<\/span> <span class=\"n\">yum<\/span> <span class=\"n\">install<\/span> <span class=\"o\">-<\/span><span class=\"n\">y<\/span> <span class=\"n\">iptables<\/span><span class=\"o\">-<\/span><span class=\"n\">services<\/span>\r\n<span class=\"err\">$<\/span> <span class=\"n\">sudo<\/span> <span class=\"n\">systemctl<\/span> <span class=\"n\">start<\/span> <span class=\"n\">iptables<\/span>\r\n<span class=\"err\">$<\/span> <span class=\"n\">sudo<\/span> <span class=\"n\">systemctl<\/span> <span class=\"n\">enable<\/span> <span class=\"n\">iptables<\/span>\r\n<span class=\"err\">$<\/span> <span class=\"n\">sudo<\/span> <span class=\"sr\">\/usr\/<\/span><span class=\"n\">libexec<\/span><span class=\"o\">\/<\/span><span class=\"n\">iptables<\/span><span class=\"o\">\/<\/span><span class=\"n\">iptables<\/span><span class=\"p\">.<\/span><span class=\"nf\">init<\/span> <span class=\"n\">save<\/span>\r\n<span class=\"err\">$<\/span> <span class=\"n\">sudo<\/span> <span class=\"n\">vi<\/span> <span class=\"sr\">\/etc\/s<\/span><span class=\"n\">ysconfig<\/span><span class=\"o\">\/<\/span><span class=\"n\">iptables<\/span>\r\n\r\n<span class=\"o\">&gt;<\/span> <span class=\"no\">Web<\/span><span class=\"err\">\u7528\u306b\uff18\uff10\u3068<\/span><span class=\"mi\">433<\/span><span class=\"err\">\u3092\u3042\u3051\u308b\u3002<\/span>\r\n<span class=\"c1\"># Generated by iptables-save v1.4.21 on Tue Mar 10 01:44:41 2020<\/span>\r\n<span class=\"o\">*<\/span><span class=\"n\">filter<\/span>\r\n<span class=\"ss\">:INPUT<\/span> <span class=\"no\">ACCEPT<\/span> <span class=\"p\">[<\/span><span class=\"mi\">0<\/span><span class=\"p\">:<\/span><span class=\"mi\">0<\/span><span class=\"p\">]<\/span>\r\n<span class=\"ss\">:FORWARD<\/span> <span class=\"no\">ACCEPT<\/span> <span class=\"p\">[<\/span><span class=\"mi\">0<\/span><span class=\"p\">:<\/span><span class=\"mi\">0<\/span><span class=\"p\">]<\/span>\r\n<span class=\"ss\">:OUTPUT<\/span> <span class=\"no\">ACCEPT<\/span> <span class=\"p\">[<\/span><span class=\"mi\">17<\/span><span class=\"p\">:<\/span><span class=\"mi\">1954<\/span><span class=\"p\">]<\/span>\r\n<span class=\"o\">-<\/span><span class=\"no\">A<\/span> <span class=\"no\">INPUT<\/span> <span class=\"o\">-<\/span><span class=\"n\">m<\/span> <span class=\"n\">state<\/span> <span class=\"o\">--<\/span><span class=\"n\">state<\/span> <span class=\"no\">RELATED<\/span><span class=\"p\">,<\/span><span class=\"no\">ESTABLISHED<\/span> <span class=\"o\">-<\/span><span class=\"n\">j<\/span> <span class=\"no\">ACCEPT<\/span>\r\n<span class=\"o\">-<\/span><span class=\"no\">A<\/span> <span class=\"no\">INPUT<\/span> <span class=\"o\">-<\/span><span class=\"nb\">p<\/span> <span class=\"n\">icmp<\/span> <span class=\"o\">-<\/span><span class=\"n\">j<\/span> <span class=\"no\">ACCEPT<\/span>\r\n<span class=\"o\">-<\/span><span class=\"no\">A<\/span> <span class=\"no\">INPUT<\/span> <span class=\"o\">-<\/span><span class=\"n\">i<\/span> <span class=\"n\">lo<\/span> <span class=\"o\">-<\/span><span class=\"n\">j<\/span> <span class=\"no\">ACCEPT<\/span>\r\n<span class=\"o\">-<\/span><span class=\"no\">A<\/span> <span class=\"no\">INPUT<\/span> <span class=\"o\">-<\/span><span class=\"nb\">p<\/span> <span class=\"n\">tcp<\/span> <span class=\"o\">-<\/span><span class=\"n\">m<\/span> <span class=\"n\">state<\/span> <span class=\"o\">--<\/span><span class=\"n\">state<\/span> <span class=\"no\">NEW<\/span> <span class=\"o\">-<\/span><span class=\"n\">m<\/span> <span class=\"n\">tcp<\/span> <span class=\"o\">--<\/span><span class=\"n\">dport<\/span> <span class=\"mi\">22<\/span> <span class=\"o\">-<\/span><span class=\"n\">j<\/span> <span class=\"no\">ACCEPT<\/span>\r\n<span class=\"o\">-<\/span><span class=\"no\">A<\/span> <span class=\"no\">INPUT<\/span> <span class=\"o\">-<\/span><span class=\"nb\">p<\/span> <span class=\"n\">tcp<\/span> <span class=\"o\">-<\/span><span class=\"n\">m<\/span> <span class=\"n\">state<\/span> <span class=\"o\">--<\/span><span class=\"n\">state<\/span> <span class=\"no\">NEW<\/span> <span class=\"o\">-<\/span><span class=\"n\">m<\/span> <span class=\"n\">tcp<\/span> <span class=\"o\">--<\/span><span class=\"n\">dport<\/span> <span class=\"mi\">80<\/span> <span class=\"o\">-<\/span><span class=\"n\">j<\/span> <span class=\"no\">ACCEPT<\/span>  <span class=\"o\">&lt;=<\/span><span class=\"err\">\u3053\u306e\u884c\u3092\u8ffd\u52a0<\/span>\r\n<span class=\"o\">-<\/span><span class=\"no\">A<\/span> <span class=\"no\">INPUT<\/span> <span class=\"o\">-<\/span><span class=\"nb\">p<\/span> <span class=\"n\">tcp<\/span> <span class=\"o\">-<\/span><span class=\"n\">m<\/span> <span class=\"n\">state<\/span> <span class=\"o\">--<\/span><span class=\"n\">state<\/span> <span class=\"no\">NEW<\/span> <span class=\"o\">-<\/span><span class=\"n\">m<\/span> <span class=\"n\">tcp<\/span> <span class=\"o\">--<\/span><span class=\"n\">dport<\/span> <span class=\"mi\">443<\/span> <span class=\"o\">-<\/span><span class=\"n\">j<\/span> <span class=\"no\">ACCEPT<\/span>  <span class=\"o\">&lt;=<\/span><span class=\"err\">\u3053\u306e\u884c\u3092\u8ffd\u52a0<\/span>\r\n<span class=\"o\">-<\/span><span class=\"no\">A<\/span> <span class=\"no\">INPUT<\/span> <span class=\"o\">-<\/span><span class=\"n\">j<\/span> <span class=\"no\">REJECT<\/span> <span class=\"o\">--<\/span><span class=\"n\">reject<\/span><span class=\"o\">-<\/span><span class=\"n\">with<\/span> <span class=\"n\">icmp<\/span><span class=\"o\">-<\/span><span class=\"n\">host<\/span><span class=\"o\">-<\/span><span class=\"n\">prohibited<\/span>\r\n<span class=\"o\">-<\/span><span class=\"no\">A<\/span> <span class=\"no\">FORWARD<\/span> <span class=\"o\">-<\/span><span class=\"n\">j<\/span> <span class=\"no\">REJECT<\/span> <span class=\"o\">--<\/span><span class=\"n\">reject<\/span><span class=\"o\">-<\/span><span class=\"n\">with<\/span> <span class=\"n\">icmp<\/span><span class=\"o\">-<\/span><span class=\"n\">host<\/span><span class=\"o\">-<\/span><span class=\"n\">prohibited<\/span>\r\n<span class=\"no\">COMMIT<\/span>\r\n<span class=\"c1\"># Completed on Tue Mar 10 01:44:41 2020<\/span>\r\n\r\n<span class=\"o\">&gt;<\/span> <span class=\"err\">\u4e0a\u8a18\u306e\u5909\u66f4\u3092\u53cd\u6620\u3055\u305b\u307e\u3059\u3002<\/span>\r\n<span class=\"err\">$<\/span> <span class=\"n\">sudo<\/span> <span class=\"n\">systemctl<\/span> <span class=\"n\">reload<\/span> <span class=\"n\">iptables<\/span>\r\n<\/code><\/pre>\n<h2>(4) \u4ea4\u6362\u9886\u57df\u7684\u8bbe\u5b9a<\/h2>\n<p>\u9019\u6b21\u5275\u5efa\u7684\u5be6\u4f8b\u53ea\u67091GB\u8a18\u61b6\u9ad4\uff0c\u800cRails\u9700\u8981\u66f4\u591a\u8a18\u61b6\u9ad4\uff0c\u6240\u4ee5\u53ef\u80fd\u6703\u51fa\u73fe\u8a18\u61b6\u9ad4\u4e0d\u8db3\u7684\u554f\u984c\uff0c\u56e0\u6b64\u6211\u5011\u6703\u8a2d\u5b9aSwap\u5340\u57df\u3002\u5982\u679c\u767c\u751f\u983b\u7e41\u5206\u9801\u5c0e\u81f4\u6027\u80fd\u4e0b\u964d\u7684\u60c5\u6cc1\uff0c\u53ea\u9700\u5347\u7d1aVultr\u7684\u8a08\u5283\u5373\u53ef\u3002\uff08\u8acb\u6ce8\u610f\uff0c\u5347\u7d1a\u5f8c\u7121\u6cd5\u964d\u7d1a\u3002\uff09\u9019\u6b21\u6211\u5011\u6703\u4fdd\u75594GB\u8f03\u5927\u7684Swap\u5340\u57df\u3002<\/p>\n<p>\u7531\u4e8e\u9ed8\u8ba4\u60c5\u51b5\u4e0b\u5df2\u521b\u5efa\u4e86Swap\u6587\u4ef6\uff0c\u6211\u4eec\u5c06\u6682\u65f6\u505c\u6b62Swap\u5e76\u5220\u9664\u5b83\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"p\">[<\/span><span class=\"n\">deploy<\/span><span class=\"vi\">@vultr<\/span> <span class=\"o\">~<\/span><span class=\"p\">]<\/span><span class=\"err\">$<\/span> <span class=\"n\">su<\/span>\r\n<span class=\"no\">Password<\/span><span class=\"p\">:<\/span> \r\n<span class=\"p\">[<\/span><span class=\"n\">root<\/span><span class=\"vi\">@vultr<\/span> <span class=\"n\">deploy<\/span><span class=\"p\">]<\/span><span class=\"c1\"># swapoff \/swapfile<\/span>\r\n<span class=\"p\">[<\/span><span class=\"n\">root<\/span><span class=\"vi\">@vultr<\/span> <span class=\"n\">deploy<\/span><span class=\"p\">]<\/span><span class=\"c1\"># rm \/swapfile<\/span>\r\n<span class=\"ss\">rm: <\/span><span class=\"n\">remove<\/span> <span class=\"n\">regular<\/span> <span class=\"n\">file<\/span> <span class=\"s1\">'\/swapfile'<\/span><span class=\"p\">?<\/span> <span class=\"n\">y<\/span>\r\n<\/code><\/pre>\n<p>\u521b\u5efaSwap\u6587\u4ef6\u5e76\u5c06\u5176\u5206\u914d\u7ed9Swap\u7a7a\u95f4\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"p\">[<\/span><span class=\"n\">root<\/span><span class=\"vi\">@vultr<\/span> <span class=\"n\">deploy<\/span><span class=\"p\">]<\/span><span class=\"c1\"># dd if=\/dev\/zero of=\/swapfile bs=1M count=4096<\/span>\r\n<span class=\"mi\">4096<\/span><span class=\"o\">+<\/span><span class=\"mi\">0<\/span> <span class=\"n\">records<\/span> <span class=\"k\">in<\/span>\r\n<span class=\"mi\">4096<\/span><span class=\"o\">+<\/span><span class=\"mi\">0<\/span> <span class=\"n\">records<\/span> <span class=\"n\">out<\/span>\r\n<span class=\"mi\">4294967296<\/span> <span class=\"n\">bytes<\/span> <span class=\"p\">(<\/span><span class=\"mf\">4.3<\/span> <span class=\"no\">GB<\/span><span class=\"p\">,<\/span> <span class=\"mf\">4.0<\/span> <span class=\"no\">GiB<\/span><span class=\"p\">)<\/span> <span class=\"n\">copied<\/span><span class=\"p\">,<\/span> <span class=\"mf\">12.6042<\/span> <span class=\"n\">s<\/span><span class=\"p\">,<\/span> <span class=\"mi\">341<\/span> <span class=\"no\">MB<\/span><span class=\"o\">\/<\/span><span class=\"n\">s<\/span>\r\n<span class=\"p\">[<\/span><span class=\"n\">root<\/span><span class=\"vi\">@vultr<\/span> <span class=\"n\">deploy<\/span><span class=\"p\">]<\/span><span class=\"c1\"># mkswap \/swapfile<\/span>\r\n<span class=\"ss\">mkswap: <\/span><span class=\"sr\">\/swapfile: insecure permissions 0644, fix with: chmod 0600 \/s<\/span><span class=\"n\">wapfile<\/span>\r\n<span class=\"no\">Setting<\/span> <span class=\"n\">up<\/span> <span class=\"n\">swapspace<\/span> <span class=\"n\">version<\/span> <span class=\"mi\">1<\/span><span class=\"p\">,<\/span> <span class=\"n\">size<\/span> <span class=\"o\">=<\/span> <span class=\"mi\">4<\/span> <span class=\"no\">GiB<\/span> <span class=\"p\">(<\/span><span class=\"mi\">4294963200<\/span> <span class=\"n\">bytes<\/span><span class=\"p\">)<\/span>\r\n<span class=\"n\">no<\/span> <span class=\"n\">label<\/span><span class=\"p\">,<\/span> <span class=\"no\">UUID<\/span><span class=\"o\">=<\/span><span class=\"n\">b0a8ad95<\/span><span class=\"o\">-<\/span><span class=\"mi\">0<\/span><span class=\"n\">d26<\/span><span class=\"o\">-<\/span><span class=\"mi\">4<\/span><span class=\"n\">a3f<\/span><span class=\"o\">-<\/span><span class=\"mi\">933<\/span><span class=\"n\">b<\/span><span class=\"o\">-<\/span><span class=\"mi\">911<\/span><span class=\"n\">a840d7caf<\/span>\r\n<span class=\"p\">[<\/span><span class=\"n\">root<\/span><span class=\"vi\">@vultr<\/span> <span class=\"n\">deploy<\/span><span class=\"p\">]<\/span><span class=\"c1\"># swapon \/swapfile<\/span>\r\n<span class=\"ss\">swapon: <\/span><span class=\"sr\">\/swapfile: insecure permissions 0644, 0600 suggested.\r\n[root@vultr deploy]# chmod 0600 \/s<\/span><span class=\"n\">wapfile<\/span>\r\n<span class=\"p\">[<\/span><span class=\"n\">root<\/span><span class=\"vi\">@vultr<\/span> <span class=\"n\">deploy<\/span><span class=\"p\">]<\/span><span class=\"c1\"># vi \/etc\/fstab<\/span>\r\n\r\n<span class=\"o\">&gt;<\/span> <span class=\"err\">\u4ee5\u4e0b\u304c\u4e00\u756a\u4e0b\u306b\u7121\u3044\u5834\u5408\u306f\u8ffd\u52a0\u3057\u307e\u3059\u3002<\/span>\r\n<span class=\"sr\">\/swapfile swap swap defaults 0 0\r\n\r\n&gt; \/e<\/span><span class=\"n\">tc<\/span><span class=\"o\">\/<\/span><span class=\"n\">fstab<\/span><span class=\"err\">\u306e\u5909\u66f4\u3092\u4fdd\u5b58\u3057\u305f\u3089\u3001\u81ea\u52d5\u30de\u30a6\u30f3\u30c8\u3055\u308c\u308b\u304b\u8a66\u3059\u305f\u3081\u306b\u30b5\u30fc\u30d0\u3092\u518d\u8d77\u52d5\u3059\u308b\u3002<\/span>\r\n<span class=\"p\">[<\/span><span class=\"n\">root<\/span><span class=\"vi\">@vultr<\/span> <span class=\"n\">deploy<\/span><span class=\"p\">]<\/span><span class=\"c1\"># reboot<\/span>\r\n<\/code><\/pre>\n<p>\u91cd\u65b0\u542f\u52a8\u540e\uff0c\u4f7f\u7528top\u547d\u4ee4\u68c0\u67e5Swap\u533a\u57df\u3002<\/p>\n<pre class=\"post-pre\"><code>[deploy@vultr ~]$ top\r\n\r\ntop - 02:08:14 up 0 min,  1 user,  load average: 0.07, 0.03, 0.01\r\nTasks: 117 total,   1 running, 116 sleeping,   0 stopped,   0 zombie\r\n%Cpu(s):  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st\r\nMiB Mem :    956.5 total,    674.2 free,    267.8 used,    157.1 buff\/cache\r\nMiB Swap:   4096.0 total,   4096.0 free,      0.0 used.    688.7 avail Mem \r\n<\/code><\/pre>\n<h1>3. \u5b89\u88c5MySQL8.0<\/h1>\n<p>\u6211\u8ba4\u4e3a\u60a8\u53ef\u4ee5\u9009\u62e9\u4f7f\u7528\u60a8\u559c\u6b22\u7684\u4efb\u4f55\u6570\u636e\u5e93\uff0c\u4f46\u662f\u56e0\u4e3a\u636e\u8bf4MySQL 8.0\u6bd45.7\u5feb\u4e24\u500d\uff0c\u6240\u4ee5\u6211\u4f1a\u9009\u62e9\u4f7f\u75288.0\u7248\u672c\u3002<\/p>\n<h2>(1) \u5b89\u88c5MySQL<\/h2>\n<p>\u5982\u679c\u9ed8\u8ba4\u5b89\u88c5\u4e86MariaDB\uff0c\u5219\u9700\u8981\u5148\u5378\u8f7d\u5b83\uff0c\u7136\u540e\u518d\u5b89\u88c5MySQL\u3002\u5728\u4e1c\u4eac\u7684Vultr\u7684CentOS 9\u4e0a\u5e76\u6ca1\u6709\u9884\u88c5MariaDB\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"p\">[<\/span><span class=\"n\">root<\/span><span class=\"vi\">@vultr<\/span> <span class=\"n\">deploy<\/span><span class=\"p\">]<\/span><span class=\"c1\"># yum list installed | grep maria<\/span>\r\n<span class=\"p\">[<\/span><span class=\"n\">root<\/span><span class=\"vi\">@vultr<\/span> <span class=\"n\">deploy<\/span><span class=\"p\">]<\/span><span class=\"c1\"># yum list installed | grep Maria<\/span>\r\n<\/code><\/pre>\n<pre class=\"post-pre\"><code><span class=\"p\">[<\/span><span class=\"n\">root<\/span><span class=\"vi\">@vultr<\/span> <span class=\"n\">deploy<\/span><span class=\"p\">]<\/span><span class=\"c1\"># yum install mysql<\/span>\r\n<span class=\"no\">Last<\/span> <span class=\"n\">metadata<\/span> <span class=\"n\">expiration<\/span> <span class=\"ss\">check: <\/span><span class=\"mi\">1<\/span><span class=\"p\">:<\/span><span class=\"mi\">34<\/span><span class=\"p\">:<\/span><span class=\"mo\">06<\/span> <span class=\"n\">ago<\/span> <span class=\"n\">on<\/span> <span class=\"no\">Mon<\/span> <span class=\"mo\">05<\/span> <span class=\"no\">Sep<\/span> <span class=\"mi\">2022<\/span> <span class=\"mo\">01<\/span><span class=\"p\">:<\/span><span class=\"mi\">09<\/span><span class=\"p\">:<\/span><span class=\"mi\">18<\/span> <span class=\"no\">AM<\/span> <span class=\"no\">UTC<\/span><span class=\"o\">.<\/span>\r\n<span class=\"no\">Dependencies<\/span> <span class=\"n\">resolved<\/span><span class=\"p\">.<\/span>\r\n<span class=\"nf\">=<\/span><span class=\"o\">======================================================================================================================================================================<\/span>\r\n <span class=\"no\">Package<\/span>                                             <span class=\"no\">Architecture<\/span>                    <span class=\"no\">Version<\/span>                                  <span class=\"no\">Repository<\/span>                          <span class=\"no\">Size<\/span>\r\n<span class=\"o\">=======================================================================================================================================================================<\/span>\r\n<span class=\"no\">Installing<\/span><span class=\"p\">:<\/span>\r\n <span class=\"n\">mysql<\/span>                                               <span class=\"n\">x86_64<\/span>                          <span class=\"mf\">8.0<\/span><span class=\"o\">.<\/span><span class=\"mi\">28<\/span><span class=\"o\">-<\/span><span class=\"mi\">1<\/span><span class=\"p\">.<\/span><span class=\"nf\">el9<\/span>                             <span class=\"n\">appstream<\/span>                          <span class=\"mf\">2.6<\/span> <span class=\"no\">M<\/span>\r\n<span class=\"no\">Installing<\/span> <span class=\"ss\">dependencies:\r\n <\/span><span class=\"n\">mariadb<\/span><span class=\"o\">-<\/span><span class=\"n\">connector<\/span><span class=\"o\">-<\/span><span class=\"n\">c<\/span><span class=\"o\">-<\/span><span class=\"n\">config<\/span>                          <span class=\"n\">noarch<\/span>                          <span class=\"mf\">3.2<\/span><span class=\"o\">.<\/span><span class=\"mi\">6<\/span><span class=\"o\">-<\/span><span class=\"mi\">1<\/span><span class=\"p\">.<\/span><span class=\"nf\">el9<\/span>                              <span class=\"n\">appstream<\/span>                           <span class=\"mi\">11<\/span> <span class=\"n\">k<\/span>\r\n <span class=\"n\">mysql<\/span><span class=\"o\">-<\/span><span class=\"n\">common<\/span>                                        <span class=\"n\">x86_64<\/span>                          <span class=\"mf\">8.0<\/span><span class=\"o\">.<\/span><span class=\"mi\">28<\/span><span class=\"o\">-<\/span><span class=\"mi\">1<\/span><span class=\"p\">.<\/span><span class=\"nf\">el9<\/span>                             <span class=\"n\">appstream<\/span>                           <span class=\"mi\">75<\/span> <span class=\"n\">k<\/span>\r\n\r\n<span class=\"no\">Transaction<\/span> <span class=\"no\">Summary<\/span>\r\n<span class=\"o\">=======================================================================================================================================================================<\/span>\r\n<span class=\"no\">Install<\/span>  <span class=\"mi\">3<\/span> <span class=\"no\">Packages<\/span>\r\n\r\n<span class=\"no\">Total<\/span> <span class=\"n\">download<\/span> <span class=\"ss\">size: <\/span><span class=\"mf\">2.7<\/span> <span class=\"no\">M<\/span>\r\n<span class=\"no\">Installed<\/span> <span class=\"ss\">size: <\/span><span class=\"mi\">59<\/span> <span class=\"no\">M<\/span>\r\n<span class=\"no\">Is<\/span> <span class=\"n\">this<\/span> <span class=\"n\">ok<\/span> <span class=\"p\">[<\/span><span class=\"n\">y<\/span><span class=\"o\">\/<\/span><span class=\"no\">N<\/span><span class=\"p\">]:<\/span> <span class=\"n\">y<\/span>\r\n<span class=\"no\">Downloading<\/span> <span class=\"no\">Packages<\/span><span class=\"p\">:<\/span>\r\n<span class=\"p\">(<\/span><span class=\"mi\">1<\/span><span class=\"o\">\/<\/span><span class=\"mi\">3<\/span><span class=\"p\">):<\/span> <span class=\"n\">mariadb<\/span><span class=\"o\">-<\/span><span class=\"n\">connector<\/span><span class=\"o\">-<\/span><span class=\"n\">c<\/span><span class=\"o\">-<\/span><span class=\"n\">config<\/span><span class=\"o\">-<\/span><span class=\"mf\">3.2<\/span><span class=\"o\">.<\/span><span class=\"mi\">6<\/span><span class=\"o\">-<\/span><span class=\"mi\">1<\/span><span class=\"p\">.<\/span><span class=\"nf\">el9<\/span><span class=\"p\">.<\/span><span class=\"nf\">noarch<\/span><span class=\"p\">.<\/span><span class=\"nf\">rpm<\/span>                                                                               <span class=\"mi\">466<\/span> <span class=\"n\">kB<\/span><span class=\"o\">\/<\/span><span class=\"n\">s<\/span> <span class=\"o\">|<\/span>  <span class=\"mi\">11<\/span> <span class=\"n\">kB<\/span>     <span class=\"mo\">00<\/span><span class=\"p\">:<\/span><span class=\"mo\">00<\/span>    \r\n<span class=\"p\">(<\/span><span class=\"mi\">2<\/span><span class=\"o\">\/<\/span><span class=\"mi\">3<\/span><span class=\"p\">):<\/span> <span class=\"n\">mysql<\/span><span class=\"o\">-<\/span><span class=\"n\">common<\/span><span class=\"o\">-<\/span><span class=\"mf\">8.0<\/span><span class=\"o\">.<\/span><span class=\"mi\">28<\/span><span class=\"o\">-<\/span><span class=\"mi\">1<\/span><span class=\"p\">.<\/span><span class=\"nf\">el9<\/span><span class=\"p\">.<\/span><span class=\"nf\">x86_64<\/span><span class=\"p\">.<\/span><span class=\"nf\">rpm<\/span>                                                                                            <span class=\"mf\">1.5<\/span> <span class=\"no\">MB<\/span><span class=\"o\">\/<\/span><span class=\"n\">s<\/span> <span class=\"o\">|<\/span>  <span class=\"mi\">75<\/span> <span class=\"n\">kB<\/span>     <span class=\"mo\">00<\/span><span class=\"p\">:<\/span><span class=\"mo\">00<\/span>    \r\n<span class=\"p\">(<\/span><span class=\"mi\">3<\/span><span class=\"o\">\/<\/span><span class=\"mi\">3<\/span><span class=\"p\">):<\/span> <span class=\"n\">mysql<\/span><span class=\"o\">-<\/span><span class=\"mf\">8.0<\/span><span class=\"o\">.<\/span><span class=\"mi\">28<\/span><span class=\"o\">-<\/span><span class=\"mi\">1<\/span><span class=\"p\">.<\/span><span class=\"nf\">el9<\/span><span class=\"p\">.<\/span><span class=\"nf\">x86_64<\/span><span class=\"p\">.<\/span><span class=\"nf\">rpm<\/span>                                                                                                    <span class=\"mi\">13<\/span> <span class=\"no\">MB<\/span><span class=\"o\">\/<\/span><span class=\"n\">s<\/span> <span class=\"o\">|<\/span> <span class=\"mf\">2.6<\/span> <span class=\"no\">MB<\/span>     <span class=\"mo\">00<\/span><span class=\"p\">:<\/span><span class=\"mo\">00<\/span>    \r\n<span class=\"o\">-----------------------------------------------------------------------------------------------------------------------------------------------------------------------<\/span>\r\n<span class=\"no\">Total<\/span>                                                                                                                                  <span class=\"mf\">5.0<\/span> <span class=\"no\">MB<\/span><span class=\"o\">\/<\/span><span class=\"n\">s<\/span> <span class=\"o\">|<\/span> <span class=\"mf\">2.7<\/span> <span class=\"no\">MB<\/span>     <span class=\"mo\">00<\/span><span class=\"p\">:<\/span><span class=\"mo\">00<\/span>     \r\n<span class=\"no\">Running<\/span> <span class=\"n\">transaction<\/span> <span class=\"n\">check<\/span>\r\n<span class=\"no\">Transaction<\/span> <span class=\"n\">check<\/span> <span class=\"n\">succeeded<\/span><span class=\"o\">.<\/span>\r\n<span class=\"no\">Running<\/span> <span class=\"n\">transaction<\/span> <span class=\"nb\">test<\/span>\r\n<span class=\"no\">Transaction<\/span> <span class=\"nb\">test<\/span> <span class=\"n\">succeeded<\/span><span class=\"o\">.<\/span>\r\n<span class=\"no\">Running<\/span> <span class=\"n\">transaction<\/span>\r\n  <span class=\"no\">Preparing<\/span>        <span class=\"p\">:<\/span>                                                                                                                                               <span class=\"mi\">1<\/span><span class=\"o\">\/<\/span><span class=\"mi\">1<\/span> \r\n  <span class=\"no\">Installing<\/span>       <span class=\"p\">:<\/span> <span class=\"n\">mariadb<\/span><span class=\"o\">-<\/span><span class=\"n\">connector<\/span><span class=\"o\">-<\/span><span class=\"n\">c<\/span><span class=\"o\">-<\/span><span class=\"n\">config<\/span><span class=\"o\">-<\/span><span class=\"mf\">3.2<\/span><span class=\"o\">.<\/span><span class=\"mi\">6<\/span><span class=\"o\">-<\/span><span class=\"mi\">1<\/span><span class=\"p\">.<\/span><span class=\"nf\">el9<\/span><span class=\"p\">.<\/span><span class=\"nf\">noarch<\/span>                                                                                                 <span class=\"mi\">1<\/span><span class=\"o\">\/<\/span><span class=\"mi\">3<\/span> \r\n  <span class=\"no\">Installing<\/span>       <span class=\"p\">:<\/span> <span class=\"n\">mysql<\/span><span class=\"o\">-<\/span><span class=\"n\">common<\/span><span class=\"o\">-<\/span><span class=\"mf\">8.0<\/span><span class=\"o\">.<\/span><span class=\"mi\">28<\/span><span class=\"o\">-<\/span><span class=\"mi\">1<\/span><span class=\"p\">.<\/span><span class=\"nf\">el9<\/span><span class=\"p\">.<\/span><span class=\"nf\">x86_64<\/span>                                                                                                              <span class=\"mi\">2<\/span><span class=\"o\">\/<\/span><span class=\"mi\">3<\/span> \r\n  <span class=\"no\">Installing<\/span>       <span class=\"p\">:<\/span> <span class=\"n\">mysql<\/span><span class=\"o\">-<\/span><span class=\"mf\">8.0<\/span><span class=\"o\">.<\/span><span class=\"mi\">28<\/span><span class=\"o\">-<\/span><span class=\"mi\">1<\/span><span class=\"p\">.<\/span><span class=\"nf\">el9<\/span><span class=\"p\">.<\/span><span class=\"nf\">x86_64<\/span>                                                                                                                     <span class=\"mi\">3<\/span><span class=\"o\">\/<\/span><span class=\"mi\">3<\/span> \r\n  <span class=\"no\">Running<\/span> <span class=\"ss\">scriptlet: <\/span><span class=\"n\">mysql<\/span><span class=\"o\">-<\/span><span class=\"mf\">8.0<\/span><span class=\"o\">.<\/span><span class=\"mi\">28<\/span><span class=\"o\">-<\/span><span class=\"mi\">1<\/span><span class=\"p\">.<\/span><span class=\"nf\">el9<\/span><span class=\"p\">.<\/span><span class=\"nf\">x86_64<\/span>                                                                                                                     <span class=\"mi\">3<\/span><span class=\"o\">\/<\/span><span class=\"mi\">3<\/span> \r\n  <span class=\"no\">Verifying<\/span>        <span class=\"p\">:<\/span> <span class=\"n\">mariadb<\/span><span class=\"o\">-<\/span><span class=\"n\">connector<\/span><span class=\"o\">-<\/span><span class=\"n\">c<\/span><span class=\"o\">-<\/span><span class=\"n\">config<\/span><span class=\"o\">-<\/span><span class=\"mf\">3.2<\/span><span class=\"o\">.<\/span><span class=\"mi\">6<\/span><span class=\"o\">-<\/span><span class=\"mi\">1<\/span><span class=\"p\">.<\/span><span class=\"nf\">el9<\/span><span class=\"p\">.<\/span><span class=\"nf\">noarch<\/span>                                                                                                 <span class=\"mi\">1<\/span><span class=\"o\">\/<\/span><span class=\"mi\">3<\/span> \r\n  <span class=\"no\">Verifying<\/span>        <span class=\"p\">:<\/span> <span class=\"n\">mysql<\/span><span class=\"o\">-<\/span><span class=\"mf\">8.0<\/span><span class=\"o\">.<\/span><span class=\"mi\">28<\/span><span class=\"o\">-<\/span><span class=\"mi\">1<\/span><span class=\"p\">.<\/span><span class=\"nf\">el9<\/span><span class=\"p\">.<\/span><span class=\"nf\">x86_64<\/span>                                                                                                                     <span class=\"mi\">2<\/span><span class=\"o\">\/<\/span><span class=\"mi\">3<\/span> \r\n  <span class=\"no\">Verifying<\/span>        <span class=\"p\">:<\/span> <span class=\"n\">mysql<\/span><span class=\"o\">-<\/span><span class=\"n\">common<\/span><span class=\"o\">-<\/span><span class=\"mf\">8.0<\/span><span class=\"o\">.<\/span><span class=\"mi\">28<\/span><span class=\"o\">-<\/span><span class=\"mi\">1<\/span><span class=\"p\">.<\/span><span class=\"nf\">el9<\/span><span class=\"p\">.<\/span><span class=\"nf\">x86_64<\/span>                                                                                                              <span class=\"mi\">3<\/span><span class=\"o\">\/<\/span><span class=\"mi\">3<\/span> \r\n\r\n<span class=\"no\">Installed<\/span><span class=\"p\">:<\/span>\r\n  <span class=\"n\">mariadb<\/span><span class=\"o\">-<\/span><span class=\"n\">connector<\/span><span class=\"o\">-<\/span><span class=\"n\">c<\/span><span class=\"o\">-<\/span><span class=\"n\">config<\/span><span class=\"o\">-<\/span><span class=\"mf\">3.2<\/span><span class=\"o\">.<\/span><span class=\"mi\">6<\/span><span class=\"o\">-<\/span><span class=\"mi\">1<\/span><span class=\"p\">.<\/span><span class=\"nf\">el9<\/span><span class=\"p\">.<\/span><span class=\"nf\">noarch<\/span>                     <span class=\"n\">mysql<\/span><span class=\"o\">-<\/span><span class=\"mf\">8.0<\/span><span class=\"o\">.<\/span><span class=\"mi\">28<\/span><span class=\"o\">-<\/span><span class=\"mi\">1<\/span><span class=\"p\">.<\/span><span class=\"nf\">el9<\/span><span class=\"p\">.<\/span><span class=\"nf\">x86_64<\/span>                     <span class=\"n\">mysql<\/span><span class=\"o\">-<\/span><span class=\"n\">common<\/span><span class=\"o\">-<\/span><span class=\"mf\">8.0<\/span><span class=\"o\">.<\/span><span class=\"mi\">28<\/span><span class=\"o\">-<\/span><span class=\"mi\">1<\/span><span class=\"p\">.<\/span><span class=\"nf\">el9<\/span><span class=\"p\">.<\/span><span class=\"nf\">x86_64<\/span>                    \r\n\r\n<span class=\"no\">Complete<\/span><span class=\"o\">!<\/span>\r\n<\/code><\/pre>\n<pre class=\"post-pre\"><code><span class=\"p\">[<\/span><span class=\"n\">root<\/span><span class=\"vi\">@vultr<\/span> <span class=\"n\">deploy<\/span><span class=\"p\">]<\/span><span class=\"c1\"># yum install mysql-server<\/span>\r\n<span class=\"no\">Last<\/span> <span class=\"n\">metadata<\/span> <span class=\"n\">expiration<\/span> <span class=\"ss\">check: <\/span><span class=\"mi\">1<\/span><span class=\"p\">:<\/span><span class=\"mi\">42<\/span><span class=\"p\">:<\/span><span class=\"mi\">23<\/span> <span class=\"n\">ago<\/span> <span class=\"n\">on<\/span> <span class=\"no\">Mon<\/span> <span class=\"mo\">05<\/span> <span class=\"no\">Sep<\/span> <span class=\"mi\">2022<\/span> <span class=\"mo\">01<\/span><span class=\"p\">:<\/span><span class=\"mi\">09<\/span><span class=\"p\">:<\/span><span class=\"mi\">18<\/span> <span class=\"no\">AM<\/span> <span class=\"no\">UTC<\/span><span class=\"o\">.<\/span>\r\n<span class=\"no\">Dependencies<\/span> <span class=\"n\">resolved<\/span><span class=\"p\">.<\/span>\r\n<span class=\"nf\">=<\/span><span class=\"o\">======================================================================================================================================================================<\/span>\r\n <span class=\"no\">Package<\/span>                                   <span class=\"no\">Architecture<\/span>                       <span class=\"no\">Version<\/span>                                      <span class=\"no\">Repository<\/span>                             <span class=\"no\">Size<\/span>\r\n<span class=\"o\">=======================================================================================================================================================================<\/span>\r\n<span class=\"no\">Installing<\/span><span class=\"p\">:<\/span>\r\n <span class=\"n\">mysql<\/span><span class=\"o\">-<\/span><span class=\"n\">server<\/span>                              <span class=\"n\">x86_64<\/span>                             <span class=\"mf\">8.0<\/span><span class=\"o\">.<\/span><span class=\"mi\">28<\/span><span class=\"o\">-<\/span><span class=\"mi\">1<\/span><span class=\"p\">.<\/span><span class=\"nf\">el9<\/span>                                 <span class=\"n\">appstream<\/span>                              <span class=\"mi\">16<\/span> <span class=\"no\">M<\/span>\r\n<span class=\"no\">Installing<\/span> <span class=\"ss\">dependencies:\r\n <\/span><span class=\"n\">mecab<\/span>                                     <span class=\"n\">x86_64<\/span>                             <span class=\"mf\">0.996<\/span><span class=\"o\">-<\/span><span class=\"mi\">3<\/span><span class=\"p\">.<\/span><span class=\"nf\">el9<\/span><span class=\"o\">.<\/span><span class=\"mi\">3<\/span>                                <span class=\"n\">appstream<\/span>                             <span class=\"mi\">356<\/span> <span class=\"n\">k<\/span>\r\n <span class=\"n\">mysql<\/span><span class=\"o\">-<\/span><span class=\"n\">errmsg<\/span>                              <span class=\"n\">x86_64<\/span>                             <span class=\"mf\">8.0<\/span><span class=\"o\">.<\/span><span class=\"mi\">28<\/span><span class=\"o\">-<\/span><span class=\"mi\">1<\/span><span class=\"p\">.<\/span><span class=\"nf\">el9<\/span>                                 <span class=\"n\">appstream<\/span>                             <span class=\"mi\">473<\/span> <span class=\"n\">k<\/span>\r\n <span class=\"n\">mysql<\/span><span class=\"o\">-<\/span><span class=\"n\">selinux<\/span>                             <span class=\"n\">noarch<\/span>                             <span class=\"mf\">1.0<\/span><span class=\"o\">.<\/span><span class=\"mi\">5<\/span><span class=\"o\">-<\/span><span class=\"mi\">1<\/span><span class=\"p\">.<\/span><span class=\"nf\">el9<\/span>                                  <span class=\"n\">appstream<\/span>                              <span class=\"mi\">36<\/span> <span class=\"n\">k<\/span>\r\n <span class=\"n\">protobuf<\/span><span class=\"o\">-<\/span><span class=\"n\">lite<\/span>                             <span class=\"n\">x86_64<\/span>                             <span class=\"mf\">3.14<\/span><span class=\"o\">.<\/span><span class=\"mi\">0<\/span><span class=\"o\">-<\/span><span class=\"mi\">13<\/span><span class=\"p\">.<\/span><span class=\"nf\">el9<\/span>                                <span class=\"n\">appstream<\/span>                             <span class=\"mi\">232<\/span> <span class=\"n\">k<\/span>\r\n\r\n<span class=\"no\">Transaction<\/span> <span class=\"no\">Summary<\/span>\r\n<span class=\"o\">=======================================================================================================================================================================<\/span>\r\n<span class=\"no\">Install<\/span>  <span class=\"mi\">5<\/span> <span class=\"no\">Packages<\/span>\r\n\r\n<span class=\"no\">Total<\/span> <span class=\"n\">download<\/span> <span class=\"ss\">size: <\/span><span class=\"mi\">17<\/span> <span class=\"no\">M<\/span>\r\n<span class=\"no\">Installed<\/span> <span class=\"ss\">size: <\/span><span class=\"mi\">116<\/span> <span class=\"no\">M<\/span>\r\n<span class=\"no\">Is<\/span> <span class=\"n\">this<\/span> <span class=\"n\">ok<\/span> <span class=\"p\">[<\/span><span class=\"n\">y<\/span><span class=\"o\">\/<\/span><span class=\"no\">N<\/span><span class=\"p\">]:<\/span> <span class=\"n\">y<\/span>\r\n<\/code><\/pre>\n<h2>\uff082\uff09\u914d\u7f6eMySQL<\/h2>\n<pre class=\"post-pre\"><code><span class=\"p\">[<\/span><span class=\"n\">root<\/span><span class=\"vi\">@vultr<\/span> <span class=\"n\">deploy<\/span><span class=\"p\">]<\/span><span class=\"c1\"># systemctl start mysqld<\/span>\r\n<span class=\"p\">[<\/span><span class=\"n\">root<\/span><span class=\"vi\">@vultr<\/span> <span class=\"n\">deploy<\/span><span class=\"p\">]<\/span><span class=\"c1\"># systemctl enable --now mysqld<\/span>\r\n<span class=\"no\">Created<\/span> <span class=\"n\">symlink<\/span> <span class=\"sr\">\/etc\/s<\/span><span class=\"n\">ystemd<\/span><span class=\"o\">\/<\/span><span class=\"nb\">system<\/span><span class=\"o\">\/<\/span><span class=\"n\">multi<\/span><span class=\"o\">-<\/span><span class=\"n\">user<\/span><span class=\"p\">.<\/span><span class=\"nf\">target<\/span><span class=\"p\">.<\/span><span class=\"nf\">wants<\/span><span class=\"o\">\/<\/span><span class=\"n\">mysqld<\/span><span class=\"p\">.<\/span><span class=\"nf\">service<\/span> <span class=\"err\">\u2192<\/span> <span class=\"o\">\/<\/span><span class=\"n\">usr<\/span><span class=\"o\">\/<\/span><span class=\"n\">lib<\/span><span class=\"o\">\/<\/span><span class=\"n\">systemd<\/span><span class=\"o\">\/<\/span><span class=\"nb\">system<\/span><span class=\"o\">\/<\/span><span class=\"n\">mysqld<\/span><span class=\"p\">.<\/span><span class=\"nf\">service<\/span><span class=\"p\">.<\/span>\r\n<span class=\"nf\">[<\/span><span class=\"n\">root<\/span><span class=\"vi\">@vultr<\/span> <span class=\"n\">deploy<\/span><span class=\"p\">]<\/span><span class=\"c1\"># systemctl status mysqld<\/span>\r\n<span class=\"err\">\u25cf<\/span> <span class=\"n\">mysqld<\/span><span class=\"p\">.<\/span><span class=\"nf\">service<\/span> <span class=\"o\">-<\/span> <span class=\"no\">MySQL<\/span> <span class=\"mf\">8.0<\/span> <span class=\"n\">database<\/span> <span class=\"n\">server<\/span>\r\n     <span class=\"no\">Loaded<\/span><span class=\"p\">:<\/span> <span class=\"n\">loaded<\/span> <span class=\"p\">(<\/span><span class=\"sr\">\/usr\/<\/span><span class=\"n\">lib<\/span><span class=\"o\">\/<\/span><span class=\"n\">systemd<\/span><span class=\"o\">\/<\/span><span class=\"nb\">system<\/span><span class=\"o\">\/<\/span><span class=\"n\">mysqld<\/span><span class=\"p\">.<\/span><span class=\"nf\">service<\/span><span class=\"p\">;<\/span> <span class=\"n\">enabled<\/span><span class=\"p\">;<\/span> <span class=\"n\">vendor<\/span> <span class=\"ss\">preset: <\/span><span class=\"n\">disabled<\/span><span class=\"p\">)<\/span>\r\n     <span class=\"no\">Active<\/span><span class=\"p\">:<\/span> <span class=\"n\">active<\/span> <span class=\"p\">(<\/span><span class=\"n\">running<\/span><span class=\"p\">)<\/span> <span class=\"n\">since<\/span> <span class=\"no\">Mon<\/span> <span class=\"mi\">2022<\/span><span class=\"o\">-<\/span><span class=\"mi\">09<\/span><span class=\"o\">-<\/span><span class=\"mo\">05<\/span> <span class=\"mo\">02<\/span><span class=\"p\">:<\/span><span class=\"mi\">52<\/span><span class=\"p\">:<\/span><span class=\"mi\">25<\/span> <span class=\"no\">UTC<\/span><span class=\"p\">;<\/span> <span class=\"mi\">2<\/span><span class=\"n\">min<\/span> <span class=\"mi\">9<\/span><span class=\"n\">s<\/span> <span class=\"n\">ago<\/span>\r\n   <span class=\"no\">Main<\/span> <span class=\"no\">PID<\/span><span class=\"p\">:<\/span> <span class=\"mi\">2636<\/span> <span class=\"p\">(<\/span><span class=\"n\">mysqld<\/span><span class=\"p\">)<\/span>\r\n     <span class=\"no\">Status<\/span><span class=\"p\">:<\/span> <span class=\"s2\">\"Server is operational\"<\/span>\r\n      <span class=\"no\">Tasks<\/span><span class=\"p\">:<\/span> <span class=\"mi\">37<\/span> <span class=\"p\">(<\/span><span class=\"ss\">limit: <\/span><span class=\"mi\">5877<\/span><span class=\"p\">)<\/span>\r\n     <span class=\"no\">Memory<\/span><span class=\"p\">:<\/span> <span class=\"mf\">430.5<\/span><span class=\"no\">M<\/span>\r\n        <span class=\"no\">CPU<\/span><span class=\"p\">:<\/span> <span class=\"mf\">5.562<\/span><span class=\"n\">s<\/span>\r\n     <span class=\"no\">CGroup<\/span><span class=\"p\">:<\/span> <span class=\"sr\">\/system.slice\/m<\/span><span class=\"n\">ysqld<\/span><span class=\"p\">.<\/span><span class=\"nf\">service<\/span>\r\n             <span class=\"err\">\u2514\u2500<\/span><span class=\"mi\">2636<\/span> <span class=\"o\">\/<\/span><span class=\"n\">usr<\/span><span class=\"o\">\/<\/span><span class=\"n\">libexec<\/span><span class=\"o\">\/<\/span><span class=\"n\">mysqld<\/span> <span class=\"o\">--<\/span><span class=\"n\">basedir<\/span><span class=\"o\">=<\/span><span class=\"sr\">\/usr\r\n\r\nSep 05 02:52:17 vultr systemd[1]: Starting MySQL 8.0 database server...\r\nSep 05 02:52:17 vultr mysql-prepare-db-dir[2559]: Initializing MySQL database\r\nSep 05 02:52:25 vultr systemd[1]: Started MySQL 8.0 database server.\r\n<\/span><\/code><\/pre>\n<pre class=\"post-pre\"><code><span class=\"p\">[<\/span><span class=\"n\">root<\/span><span class=\"vi\">@vultr<\/span> <span class=\"n\">deploy<\/span><span class=\"p\">]<\/span><span class=\"c1\"># mysql_secure_installation<\/span>\r\n\r\n<span class=\"no\">Securing<\/span> <span class=\"n\">the<\/span> <span class=\"no\">MySQL<\/span> <span class=\"n\">server<\/span> <span class=\"n\">deployment<\/span><span class=\"o\">.<\/span>\r\n\r\n<span class=\"no\">Connecting<\/span> <span class=\"n\">to<\/span> <span class=\"no\">MySQL<\/span> <span class=\"n\">using<\/span> <span class=\"n\">a<\/span> <span class=\"n\">blank<\/span> <span class=\"n\">password<\/span><span class=\"o\">.<\/span>\r\n\r\n<span class=\"no\">VALIDATE<\/span> <span class=\"no\">PASSWORD<\/span> <span class=\"no\">COMPONENT<\/span> <span class=\"n\">can<\/span> <span class=\"n\">be<\/span> <span class=\"n\">used<\/span> <span class=\"n\">to<\/span> <span class=\"nb\">test<\/span> <span class=\"n\">passwords<\/span>\r\n<span class=\"ow\">and<\/span> <span class=\"n\">improve<\/span> <span class=\"n\">security<\/span><span class=\"o\">.<\/span> <span class=\"no\">It<\/span> <span class=\"n\">checks<\/span> <span class=\"n\">the<\/span> <span class=\"n\">strength<\/span> <span class=\"n\">of<\/span> <span class=\"n\">password<\/span>\r\n<span class=\"ow\">and<\/span> <span class=\"n\">allows<\/span> <span class=\"n\">the<\/span> <span class=\"n\">users<\/span> <span class=\"n\">to<\/span> <span class=\"n\">set<\/span> <span class=\"n\">only<\/span> <span class=\"n\">those<\/span> <span class=\"n\">passwords<\/span> <span class=\"n\">which<\/span> <span class=\"n\">are<\/span>\r\n<span class=\"n\">secure<\/span> <span class=\"n\">enough<\/span><span class=\"o\">.<\/span> <span class=\"no\">Would<\/span> <span class=\"n\">you<\/span> <span class=\"n\">like<\/span> <span class=\"n\">to<\/span> <span class=\"n\">setup<\/span> <span class=\"no\">VALIDATE<\/span> <span class=\"no\">PASSWORD<\/span> <span class=\"n\">component?<\/span>\r\n\r\n<span class=\"no\">Press<\/span> <span class=\"n\">y<\/span><span class=\"o\">|<\/span><span class=\"no\">Y<\/span> <span class=\"k\">for<\/span> <span class=\"no\">Yes<\/span><span class=\"p\">,<\/span> <span class=\"n\">any<\/span> <span class=\"n\">other<\/span> <span class=\"n\">key<\/span> <span class=\"k\">for<\/span> <span class=\"no\">No<\/span><span class=\"p\">:<\/span> <span class=\"n\">y<\/span>\r\n\r\n<span class=\"no\">There<\/span> <span class=\"n\">are<\/span> <span class=\"n\">three<\/span> <span class=\"n\">levels<\/span> <span class=\"n\">of<\/span> <span class=\"n\">password<\/span> <span class=\"n\">validation<\/span> <span class=\"ss\">policy:\r\n\r\n<\/span><span class=\"no\">LOW<\/span>    <span class=\"no\">Length<\/span> <span class=\"o\">&gt;=<\/span> <span class=\"mi\">8<\/span>\r\n<span class=\"no\">MEDIUM<\/span> <span class=\"no\">Length<\/span> <span class=\"o\">&gt;=<\/span> <span class=\"mi\">8<\/span><span class=\"p\">,<\/span> <span class=\"n\">numeric<\/span><span class=\"p\">,<\/span> <span class=\"n\">mixed<\/span> <span class=\"k\">case<\/span><span class=\"p\">,<\/span> <span class=\"ow\">and<\/span> <span class=\"n\">special<\/span> <span class=\"n\">characters<\/span>\r\n<span class=\"no\">STRONG<\/span> <span class=\"no\">Length<\/span> <span class=\"o\">&gt;=<\/span> <span class=\"mi\">8<\/span><span class=\"p\">,<\/span> <span class=\"n\">numeric<\/span><span class=\"p\">,<\/span> <span class=\"n\">mixed<\/span> <span class=\"k\">case<\/span><span class=\"p\">,<\/span> <span class=\"n\">special<\/span> <span class=\"n\">characters<\/span> <span class=\"ow\">and<\/span> <span class=\"n\">dictionary<\/span>                  <span class=\"n\">file<\/span>\r\n\r\n<span class=\"no\">Please<\/span> <span class=\"n\">enter<\/span> <span class=\"mi\">0<\/span> <span class=\"o\">=<\/span> <span class=\"no\">LOW<\/span><span class=\"p\">,<\/span> <span class=\"mi\">1<\/span> <span class=\"o\">=<\/span> <span class=\"no\">MEDIUM<\/span> <span class=\"ow\">and<\/span> <span class=\"mi\">2<\/span> <span class=\"o\">=<\/span> <span class=\"no\">STRONG<\/span><span class=\"p\">:<\/span> <span class=\"mi\">0<\/span>\r\n<span class=\"no\">Please<\/span> <span class=\"n\">set<\/span> <span class=\"n\">the<\/span> <span class=\"n\">password<\/span> <span class=\"k\">for<\/span> <span class=\"n\">root<\/span> <span class=\"n\">here<\/span><span class=\"o\">.<\/span>\r\n\r\n<span class=\"no\">New<\/span> <span class=\"ss\">password: \r\n\r\n<\/span><span class=\"no\">Re<\/span><span class=\"o\">-<\/span><span class=\"n\">enter<\/span> <span class=\"n\">new<\/span> <span class=\"ss\">password: \r\n\r\n<\/span><span class=\"no\">Estimated<\/span> <span class=\"n\">strength<\/span> <span class=\"n\">of<\/span> <span class=\"n\">the<\/span> <span class=\"ss\">password: <\/span><span class=\"mi\">100<\/span> \r\n<span class=\"no\">Do<\/span> <span class=\"n\">you<\/span> <span class=\"n\">wish<\/span> <span class=\"n\">to<\/span> <span class=\"n\">continue<\/span> <span class=\"n\">with<\/span> <span class=\"n\">the<\/span> <span class=\"n\">password<\/span> <span class=\"n\">provided?<\/span><span class=\"p\">(<\/span><span class=\"no\">Press<\/span> <span class=\"n\">y<\/span><span class=\"o\">|<\/span><span class=\"no\">Y<\/span> <span class=\"k\">for<\/span> <span class=\"no\">Yes<\/span><span class=\"p\">,<\/span> <span class=\"n\">any<\/span> <span class=\"n\">other<\/span> <span class=\"n\">key<\/span> <span class=\"k\">for<\/span> <span class=\"no\">No<\/span><span class=\"p\">)<\/span> <span class=\"p\">:<\/span> <span class=\"n\">y<\/span>\r\n<span class=\"no\">By<\/span> <span class=\"n\">default<\/span><span class=\"p\">,<\/span> <span class=\"n\">a<\/span> <span class=\"no\">MySQL<\/span> <span class=\"n\">installation<\/span> <span class=\"n\">has<\/span> <span class=\"n\">an<\/span> <span class=\"n\">anonymous<\/span> <span class=\"n\">user<\/span><span class=\"p\">,<\/span>\r\n<span class=\"n\">allowing<\/span> <span class=\"n\">anyone<\/span> <span class=\"n\">to<\/span> <span class=\"n\">log<\/span> <span class=\"n\">into<\/span> <span class=\"no\">MySQL<\/span> <span class=\"n\">without<\/span> <span class=\"n\">having<\/span> <span class=\"n\">to<\/span> <span class=\"n\">have<\/span>\r\n<span class=\"n\">a<\/span> <span class=\"n\">user<\/span> <span class=\"n\">account<\/span> <span class=\"n\">created<\/span> <span class=\"k\">for<\/span> <span class=\"n\">them<\/span><span class=\"o\">.<\/span> <span class=\"no\">This<\/span> <span class=\"n\">is<\/span> <span class=\"n\">intended<\/span> <span class=\"n\">only<\/span> <span class=\"k\">for<\/span>\r\n<span class=\"n\">testing<\/span><span class=\"p\">,<\/span> <span class=\"ow\">and<\/span> <span class=\"n\">to<\/span> <span class=\"n\">make<\/span> <span class=\"n\">the<\/span> <span class=\"n\">installation<\/span> <span class=\"n\">go<\/span> <span class=\"n\">a<\/span> <span class=\"n\">bit<\/span> <span class=\"n\">smoother<\/span><span class=\"o\">.<\/span>\r\n<span class=\"no\">You<\/span> <span class=\"n\">should<\/span> <span class=\"n\">remove<\/span> <span class=\"n\">them<\/span> <span class=\"n\">before<\/span> <span class=\"n\">moving<\/span> <span class=\"n\">into<\/span> <span class=\"n\">a<\/span> <span class=\"n\">production<\/span>\r\n<span class=\"n\">environment<\/span><span class=\"o\">.<\/span>\r\n\r\n<span class=\"no\">Remove<\/span> <span class=\"n\">anonymous<\/span> <span class=\"n\">users?<\/span> <span class=\"p\">(<\/span><span class=\"no\">Press<\/span> <span class=\"n\">y<\/span><span class=\"o\">|<\/span><span class=\"no\">Y<\/span> <span class=\"k\">for<\/span> <span class=\"no\">Yes<\/span><span class=\"p\">,<\/span> <span class=\"n\">any<\/span> <span class=\"n\">other<\/span> <span class=\"n\">key<\/span> <span class=\"k\">for<\/span> <span class=\"no\">No<\/span><span class=\"p\">)<\/span> <span class=\"p\">:<\/span> <span class=\"n\">y<\/span>\r\n<span class=\"no\">Success<\/span><span class=\"o\">.<\/span>\r\n\r\n\r\n<span class=\"no\">Normally<\/span><span class=\"p\">,<\/span> <span class=\"n\">root<\/span> <span class=\"n\">should<\/span> <span class=\"n\">only<\/span> <span class=\"n\">be<\/span> <span class=\"n\">allowed<\/span> <span class=\"n\">to<\/span> <span class=\"n\">connect<\/span> <span class=\"n\">from<\/span>\r\n<span class=\"s1\">'localhost'<\/span><span class=\"o\">.<\/span> <span class=\"no\">This<\/span> <span class=\"n\">ensures<\/span> <span class=\"n\">that<\/span> <span class=\"n\">someone<\/span> <span class=\"n\">cannot<\/span> <span class=\"n\">guess<\/span> <span class=\"n\">at<\/span>\r\n<span class=\"n\">the<\/span> <span class=\"n\">root<\/span> <span class=\"n\">password<\/span> <span class=\"n\">from<\/span> <span class=\"n\">the<\/span> <span class=\"n\">network<\/span><span class=\"o\">.<\/span>\r\n\r\n<span class=\"no\">Disallow<\/span> <span class=\"n\">root<\/span> <span class=\"n\">login<\/span> <span class=\"n\">remotely?<\/span> <span class=\"p\">(<\/span><span class=\"no\">Press<\/span> <span class=\"n\">y<\/span><span class=\"o\">|<\/span><span class=\"no\">Y<\/span> <span class=\"k\">for<\/span> <span class=\"no\">Yes<\/span><span class=\"p\">,<\/span> <span class=\"n\">any<\/span> <span class=\"n\">other<\/span> <span class=\"n\">key<\/span> <span class=\"k\">for<\/span> <span class=\"no\">No<\/span><span class=\"p\">)<\/span> <span class=\"p\">:<\/span> <span class=\"n\">y<\/span>\r\n<span class=\"no\">Success<\/span><span class=\"o\">.<\/span>\r\n\r\n<span class=\"no\">By<\/span> <span class=\"n\">default<\/span><span class=\"p\">,<\/span> <span class=\"no\">MySQL<\/span> <span class=\"n\">comes<\/span> <span class=\"n\">with<\/span> <span class=\"n\">a<\/span> <span class=\"n\">database<\/span> <span class=\"n\">named<\/span> <span class=\"s1\">'test'<\/span> <span class=\"n\">that<\/span>\r\n<span class=\"n\">anyone<\/span> <span class=\"n\">can<\/span> <span class=\"n\">access<\/span><span class=\"o\">.<\/span> <span class=\"no\">This<\/span> <span class=\"n\">is<\/span> <span class=\"n\">also<\/span> <span class=\"n\">intended<\/span> <span class=\"n\">only<\/span> <span class=\"k\">for<\/span> <span class=\"n\">testing<\/span><span class=\"p\">,<\/span>\r\n<span class=\"ow\">and<\/span> <span class=\"n\">should<\/span> <span class=\"n\">be<\/span> <span class=\"n\">removed<\/span> <span class=\"n\">before<\/span> <span class=\"n\">moving<\/span> <span class=\"n\">into<\/span> <span class=\"n\">a<\/span> <span class=\"n\">production<\/span>\r\n<span class=\"n\">environment<\/span><span class=\"o\">.<\/span>\r\n\r\n\r\n<span class=\"no\">Remove<\/span> <span class=\"nb\">test<\/span> <span class=\"n\">database<\/span> <span class=\"ow\">and<\/span> <span class=\"n\">access<\/span> <span class=\"n\">to<\/span> <span class=\"n\">it?<\/span> <span class=\"p\">(<\/span><span class=\"no\">Press<\/span> <span class=\"n\">y<\/span><span class=\"o\">|<\/span><span class=\"no\">Y<\/span> <span class=\"k\">for<\/span> <span class=\"no\">Yes<\/span><span class=\"p\">,<\/span> <span class=\"n\">any<\/span> <span class=\"n\">other<\/span> <span class=\"n\">key<\/span> <span class=\"k\">for<\/span> <span class=\"no\">No<\/span><span class=\"p\">)<\/span> <span class=\"p\">:<\/span> <span class=\"n\">y<\/span>\r\n <span class=\"o\">-<\/span> <span class=\"no\">Dropping<\/span> <span class=\"nb\">test<\/span> <span class=\"n\">database<\/span><span class=\"o\">...<\/span>\r\n<span class=\"no\">Success<\/span><span class=\"p\">.<\/span>\r\n\r\n <span class=\"nf\">-<\/span> <span class=\"no\">Removing<\/span> <span class=\"n\">privileges<\/span> <span class=\"n\">on<\/span> <span class=\"nb\">test<\/span> <span class=\"n\">database<\/span><span class=\"o\">...<\/span>\r\n<span class=\"no\">Success<\/span><span class=\"o\">.<\/span>\r\n\r\n<span class=\"no\">Reloading<\/span> <span class=\"n\">the<\/span> <span class=\"n\">privilege<\/span> <span class=\"n\">tables<\/span> <span class=\"n\">will<\/span> <span class=\"k\">ensure<\/span> <span class=\"n\">that<\/span> <span class=\"n\">all<\/span> <span class=\"n\">changes<\/span>\r\n<span class=\"n\">made<\/span> <span class=\"n\">so<\/span> <span class=\"n\">far<\/span> <span class=\"n\">will<\/span> <span class=\"n\">take<\/span> <span class=\"n\">effect<\/span> <span class=\"n\">immediately<\/span><span class=\"o\">.<\/span>\r\n\r\n<span class=\"no\">Reload<\/span> <span class=\"n\">privilege<\/span> <span class=\"n\">tables<\/span> <span class=\"n\">now?<\/span> <span class=\"p\">(<\/span><span class=\"no\">Press<\/span> <span class=\"n\">y<\/span><span class=\"o\">|<\/span><span class=\"no\">Y<\/span> <span class=\"k\">for<\/span> <span class=\"no\">Yes<\/span><span class=\"p\">,<\/span> <span class=\"n\">any<\/span> <span class=\"n\">other<\/span> <span class=\"n\">key<\/span> <span class=\"k\">for<\/span> <span class=\"no\">No<\/span><span class=\"p\">)<\/span> <span class=\"p\">:<\/span> <span class=\"n\">y<\/span>\r\n<span class=\"no\">Success<\/span><span class=\"o\">.<\/span>\r\n\r\n<span class=\"no\">All<\/span> <span class=\"n\">done!<\/span> \r\n<\/code><\/pre>\n<pre class=\"post-pre\"><code><span class=\"c1\"># vi \/etc\/my.cnf<\/span>\r\n\r\n<span class=\"o\">&gt;<\/span> <span class=\"err\">\u4ee5\u4e0b\u8ffd\u8a18<\/span>\r\n<span class=\"n\">character<\/span><span class=\"o\">-<\/span><span class=\"n\">set<\/span><span class=\"o\">-<\/span><span class=\"n\">server<\/span> <span class=\"o\">=<\/span> <span class=\"n\">utf8<\/span>\r\n<span class=\"n\">default_password_lifetime<\/span> <span class=\"o\">=<\/span> <span class=\"mi\">0<\/span>\r\n<\/code><\/pre>\n<h2>\u521b\u5efa\u4e00\u4e2a\u7528\u4e8eRails\u5e94\u7528\u7a0b\u5e8f\u7684MySQL\u7528\u6237\u3002<\/h2>\n<p>\u521b\u5efa\u7528\u4e8eRails\u7684\u6570\u636e\u5e93\uff0c\u5e76\u521b\u5efa\u6570\u636e\u5e93\u7528\u6237\u5e76\u6388\u4e88\u6743\u9650\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"c1\"># mysql -u root -p<\/span>\r\n\r\n<span class=\"n\">mysql<\/span><span class=\"o\">&gt;<\/span> <span class=\"no\">CREATE<\/span> <span class=\"no\">DATABASE<\/span> <span class=\"err\">\u3042\u306a\u305f\u306e\u30a2\u30d7\u30ea\u540d<\/span><span class=\"n\">_production<\/span><span class=\"p\">;<\/span>\r\n<span class=\"n\">mysql<\/span><span class=\"o\">&gt;<\/span> <span class=\"no\">CREATE<\/span> <span class=\"no\">USER<\/span> <span class=\"s1\">'DB\u30e6\u30fc\u30b6\u540d'<\/span><span class=\"err\">@<\/span><span class=\"s1\">'localhost'<\/span> <span class=\"no\">IDENTIFIED<\/span> <span class=\"no\">BY<\/span> <span class=\"s1\">'\u30d1\u30b9\u30ef\u30fc\u30c9'<\/span><span class=\"p\">;<\/span>\r\n<span class=\"n\">mysql<\/span><span class=\"o\">&gt;<\/span> <span class=\"no\">GRANT<\/span> <span class=\"no\">ALL<\/span> <span class=\"no\">PRIVILEGES<\/span> <span class=\"no\">ON<\/span> <span class=\"err\">\u3042\u306a\u305f\u306e\u30a2\u30d7\u30ea\u540d<\/span><span class=\"n\">_production<\/span><span class=\"p\">.<\/span><span class=\"nf\">*<\/span> <span class=\"no\">TO<\/span> <span class=\"s1\">'DB\u30e6\u30fc\u30b6\u540d'<\/span><span class=\"err\">@<\/span><span class=\"s1\">'localhost'<\/span><span class=\"p\">;<\/span>\r\n<span class=\"n\">mysql<\/span><span class=\"o\">&gt;<\/span> <span class=\"no\">FLUSH<\/span> <span class=\"no\">PRIVILEGES<\/span><span class=\"p\">;<\/span>\r\n<span class=\"n\">mysql<\/span><span class=\"o\">&gt;<\/span> <span class=\"nb\">exit<\/span><span class=\"p\">;<\/span>\r\n<\/code><\/pre>\n<h1>4. \u73af\u5883\u5efa\u8bbe<\/h1>\n<p>\u5b89\u88c5Ruby\u3001Bundler\u548c\u5176\u4ed6\u5fc5\u8981\u7684\u8f6f\u4ef6\u5305\u3002<\/p>\n<h2>\uff081\uff09\u5b89\u88c5 Ruby 3.1.2\u7248\u672c<\/h2>\n<pre class=\"post-pre\"><code><span class=\"p\">[<\/span><span class=\"n\">root<\/span><span class=\"vi\">@vultr<\/span> <span class=\"n\">deploy<\/span><span class=\"p\">]<\/span><span class=\"c1\"># yum groupinstall \"Development Tools\"<\/span>\r\n<span class=\"p\">[<\/span><span class=\"n\">root<\/span><span class=\"vi\">@vultr<\/span> <span class=\"n\">deploy<\/span><span class=\"p\">]<\/span><span class=\"c1\"># yum -y install libyaml-devel<\/span>\r\n<span class=\"p\">[<\/span><span class=\"n\">root<\/span><span class=\"vi\">@vultr<\/span> <span class=\"n\">deploy<\/span><span class=\"p\">]<\/span><span class=\"c1\"># yum install -y openssl-devel readline-devel zlib-devel<\/span>\r\n<span class=\"p\">[<\/span><span class=\"n\">root<\/span><span class=\"vi\">@vultr<\/span> <span class=\"n\">deploy<\/span><span class=\"p\">]<\/span><span class=\"c1\"># cd \/usr\/local<\/span>\r\n<span class=\"p\">[<\/span><span class=\"n\">root<\/span><span class=\"vi\">@vultr<\/span> <span class=\"n\">deploy<\/span><span class=\"p\">]<\/span><span class=\"c1\"># git clone https:\/\/github.com\/sstephenson\/rbenv.git rbenv<\/span>\r\n<span class=\"p\">[<\/span><span class=\"n\">root<\/span><span class=\"vi\">@vultr<\/span> <span class=\"n\">deploy<\/span><span class=\"p\">]<\/span><span class=\"c1\"># git clone https:\/\/github.com\/sstephenson\/ruby-build.git rbenv\/plugins\/ruby-build<\/span>\r\n\r\n\r\n<span class=\"p\">[<\/span><span class=\"n\">root<\/span><span class=\"vi\">@vultr<\/span> <span class=\"n\">deploy<\/span><span class=\"p\">]<\/span><span class=\"c1\"># vi \/etc\/profile.d\/rbenv.sh<\/span>\r\n\r\n<span class=\"o\">&gt;<\/span> <span class=\"err\">\u4ee5\u4e0b\u3092\u8a18\u8ff0\u3057\u3066\u30d1\u30b9\u3092\u901a\u3057\u3066\u304a\u304f\u3002<\/span>\r\n<span class=\"n\">export<\/span> <span class=\"no\">RBENV_ROOT<\/span><span class=\"o\">=<\/span><span class=\"s2\">\"\/usr\/local\/rbenv\"<\/span>\r\n<span class=\"n\">export<\/span> <span class=\"no\">PATH<\/span><span class=\"o\">=<\/span><span class=\"s2\">\"${RBENV_ROOT}\/bin:${PATH}\"<\/span>\r\n<span class=\"nb\">eval<\/span> <span class=\"s2\">\"$(rbenv init --no-rehash -)\"<\/span>\r\n\r\n<span class=\"p\">[<\/span><span class=\"n\">root<\/span><span class=\"vi\">@vultr<\/span> <span class=\"n\">deploy<\/span><span class=\"p\">]<\/span><span class=\"c1\"># source \/etc\/profile.d\/rbenv.sh<\/span>\r\n<span class=\"p\">[<\/span><span class=\"n\">root<\/span><span class=\"vi\">@vultr<\/span> <span class=\"n\">deploy<\/span><span class=\"p\">]<\/span><span class=\"c1\"># rbenv install 3.1.2  &lt;=\u3053\u308c\u304c\u6642\u9593\u304c\u304b\u304b\u308b\u3002<\/span>\r\n<span class=\"p\">[<\/span><span class=\"n\">root<\/span><span class=\"vi\">@vultr<\/span> <span class=\"n\">deploy<\/span><span class=\"p\">]<\/span><span class=\"c1\"># rbenv global 3.1.2<\/span>\r\n<span class=\"p\">[<\/span><span class=\"n\">root<\/span><span class=\"vi\">@vultr<\/span> <span class=\"n\">deploy<\/span><span class=\"p\">]<\/span><span class=\"c1\"># rbenv rehash<\/span>\r\n<\/code><\/pre>\n<h2>(2) \u5b89\u88c5Bundler 2<\/h2>\n<pre class=\"post-pre\"><code>[root@vultr local]# gem install bundler\r\nFetching bundler-2.3.21.gem\r\nSuccessfully installed bundler-2.3.21\r\nParsing documentation for bundler-2.3.21\r\nInstalling ri documentation for bundler-2.3.21\r\nDone installing documentation for bundler after 0 seconds\r\n1 gem installed\r\n<\/code><\/pre>\n<h2>\u5b89\u88c5 Node.js<\/h2>\n<pre class=\"post-pre\"><code>[root@vultr local]# yum install -y nodejs\r\n[root@vultr local]# node --version\r\nv16.14.0\r\n<\/code><\/pre>\n<h2>\u5b89\u88c5 yarn<\/h2>\n<pre class=\"post-pre\"><code>[root@vultr local]# npm install -g yarn\r\n<\/code><\/pre>\n<h1>5. \u5b89\u88c5Nginx<\/h1>\n<h2>(1) \u901a\u8fc7yum\u8fdb\u884c\u5b89\u88c5<\/h2>\n<pre class=\"post-pre\"><code>[root@vultr local]# yum update\r\nLast metadata expiration check: 2:12:25 ago on Mon 05 Sep 2022 01:09:18 AM UTC.\r\nDependencies resolved.\r\nNothing to do.\r\nComplete!\r\n[root@vultr local]# yum info nginx\r\nLast metadata expiration check: 2:12:43 ago on Mon 05 Sep 2022 01:09:18 AM UTC.\r\nAvailable Packages\r\nName         : nginx\r\nEpoch        : 1\r\nVersion      : 1.20.1\r\nRelease      : 13.el9\r\nArchitecture : x86_64\r\nSize         : 39 k\r\nSource       : nginx-1.20.1-13.el9.src.rpm\r\nRepository   : appstream\r\nSummary      : A high performance web server and reverse proxy server\r\nURL          : https:\/\/nginx.org\r\nLicense      : BSD\r\nDescription  : Nginx is a web server and a reverse proxy server for HTTP, SMTP, POP3 and\r\n             : IMAP protocols, with a strong focus on high concurrency, performance and low\r\n             : memory usage.\r\n\r\n[root@vultr local]# yum install yum-utils\r\n[root@vultr local]# yum install nginx\r\n<\/code><\/pre>\n<h2>\uff082\uff09\u5728Centos 8\u4e0a\u542f\u52a8Nginx\u3002<\/h2>\n<pre class=\"post-pre\"><code><span class=\"p\">[<\/span><span class=\"n\">root<\/span><span class=\"vi\">@vultr<\/span> <span class=\"n\">local<\/span><span class=\"p\">]<\/span><span class=\"c1\"># systemctl start nginx<\/span>\r\n<\/code><\/pre>\n<pre class=\"post-pre\"><code><span class=\"p\">[<\/span><span class=\"n\">root<\/span><span class=\"vi\">@vultr<\/span> <span class=\"n\">local<\/span><span class=\"p\">]<\/span><span class=\"c1\"># systemctl enable nginx<\/span>\r\n<span class=\"no\">Created<\/span> <span class=\"n\">symlink<\/span> <span class=\"sr\">\/etc\/s<\/span><span class=\"n\">ystemd<\/span><span class=\"o\">\/<\/span><span class=\"nb\">system<\/span><span class=\"o\">\/<\/span><span class=\"n\">multi<\/span><span class=\"o\">-<\/span><span class=\"n\">user<\/span><span class=\"p\">.<\/span><span class=\"nf\">target<\/span><span class=\"p\">.<\/span><span class=\"nf\">wants<\/span><span class=\"o\">\/<\/span><span class=\"n\">nginx<\/span><span class=\"p\">.<\/span><span class=\"nf\">service<\/span> <span class=\"err\">\u2192<\/span> <span class=\"o\">\/<\/span><span class=\"n\">usr<\/span><span class=\"o\">\/<\/span><span class=\"n\">lib<\/span><span class=\"o\">\/<\/span><span class=\"n\">systemd<\/span><span class=\"o\">\/<\/span><span class=\"nb\">system<\/span><span class=\"o\">\/<\/span><span class=\"n\">nginx<\/span><span class=\"p\">.<\/span><span class=\"nf\">service<\/span><span class=\"o\">.<\/span>\r\n<\/code><\/pre>\n<pre class=\"post-pre\"><code><span class=\"p\">[<\/span><span class=\"n\">root<\/span><span class=\"vi\">@vultr<\/span> <span class=\"n\">local<\/span><span class=\"p\">]<\/span><span class=\"c1\"># systemctl status nginx<\/span>\r\n<span class=\"err\">\u25cf<\/span> <span class=\"n\">nginx<\/span><span class=\"p\">.<\/span><span class=\"nf\">service<\/span> <span class=\"o\">-<\/span> <span class=\"no\">The<\/span> <span class=\"n\">nginx<\/span> <span class=\"no\">HTTP<\/span> <span class=\"ow\">and<\/span> <span class=\"n\">reverse<\/span> <span class=\"n\">proxy<\/span> <span class=\"n\">server<\/span>\r\n     <span class=\"no\">Loaded<\/span><span class=\"p\">:<\/span> <span class=\"n\">loaded<\/span> <span class=\"p\">(<\/span><span class=\"sr\">\/usr\/<\/span><span class=\"n\">lib<\/span><span class=\"o\">\/<\/span><span class=\"n\">systemd<\/span><span class=\"o\">\/<\/span><span class=\"nb\">system<\/span><span class=\"o\">\/<\/span><span class=\"n\">nginx<\/span><span class=\"p\">.<\/span><span class=\"nf\">service<\/span><span class=\"p\">;<\/span> <span class=\"n\">enabled<\/span><span class=\"p\">;<\/span> <span class=\"n\">vendor<\/span> <span class=\"ss\">preset: <\/span><span class=\"n\">disabled<\/span><span class=\"p\">)<\/span>\r\n     <span class=\"no\">Active<\/span><span class=\"p\">:<\/span> <span class=\"n\">active<\/span> <span class=\"p\">(<\/span><span class=\"n\">running<\/span><span class=\"p\">)<\/span> <span class=\"n\">since<\/span> <span class=\"no\">Mon<\/span> <span class=\"mi\">2022<\/span><span class=\"o\">-<\/span><span class=\"mi\">09<\/span><span class=\"o\">-<\/span><span class=\"mo\">05<\/span> <span class=\"mo\">03<\/span><span class=\"p\">:<\/span><span class=\"mi\">24<\/span><span class=\"p\">:<\/span><span class=\"mi\">17<\/span> <span class=\"no\">UTC<\/span><span class=\"p\">;<\/span> <span class=\"mi\">23<\/span><span class=\"n\">s<\/span> <span class=\"n\">ago<\/span>\r\n   <span class=\"no\">Main<\/span> <span class=\"no\">PID<\/span><span class=\"p\">:<\/span> <span class=\"mi\">24591<\/span> <span class=\"p\">(<\/span><span class=\"n\">nginx<\/span><span class=\"p\">)<\/span>\r\n      <span class=\"no\">Tasks<\/span><span class=\"p\">:<\/span> <span class=\"mi\">2<\/span> <span class=\"p\">(<\/span><span class=\"ss\">limit: <\/span><span class=\"mi\">5877<\/span><span class=\"p\">)<\/span>\r\n     <span class=\"no\">Memory<\/span><span class=\"p\">:<\/span> <span class=\"mf\">2.0<\/span><span class=\"no\">M<\/span>\r\n        <span class=\"no\">CPU<\/span><span class=\"p\">:<\/span> <span class=\"mi\">28<\/span><span class=\"n\">ms<\/span>\r\n     <span class=\"no\">CGroup<\/span><span class=\"p\">:<\/span> <span class=\"sr\">\/system.slice\/n<\/span><span class=\"n\">ginx<\/span><span class=\"p\">.<\/span><span class=\"nf\">service<\/span>\r\n             <span class=\"err\">\u251c\u2500<\/span><span class=\"mi\">24591<\/span> <span class=\"s2\">\"nginx: master process \/usr\/sbin\/nginx\"<\/span>\r\n             <span class=\"err\">\u2514\u2500<\/span><span class=\"mi\">24592<\/span> <span class=\"s2\">\"nginx: worker process\"<\/span>\r\n\r\n<span class=\"no\">Sep<\/span> <span class=\"mo\">05<\/span> <span class=\"mo\">03<\/span><span class=\"p\">:<\/span><span class=\"mi\">24<\/span><span class=\"p\">:<\/span><span class=\"mi\">17<\/span> <span class=\"n\">vultr<\/span> <span class=\"n\">systemd<\/span><span class=\"p\">[<\/span><span class=\"mi\">1<\/span><span class=\"p\">]:<\/span> <span class=\"no\">Starting<\/span> <span class=\"no\">The<\/span> <span class=\"n\">nginx<\/span> <span class=\"no\">HTTP<\/span> <span class=\"ow\">and<\/span> <span class=\"n\">reverse<\/span> <span class=\"n\">proxy<\/span> <span class=\"n\">server<\/span><span class=\"o\">...<\/span>\r\n<span class=\"no\">Sep<\/span> <span class=\"mo\">05<\/span> <span class=\"mo\">03<\/span><span class=\"p\">:<\/span><span class=\"mi\">24<\/span><span class=\"p\">:<\/span><span class=\"mi\">17<\/span> <span class=\"n\">vultr<\/span> <span class=\"n\">nginx<\/span><span class=\"p\">[<\/span><span class=\"mi\">24589<\/span><span class=\"p\">]:<\/span> <span class=\"ss\">nginx: <\/span><span class=\"n\">the<\/span> <span class=\"n\">configuration<\/span> <span class=\"n\">file<\/span> <span class=\"sr\">\/etc\/n<\/span><span class=\"n\">ginx<\/span><span class=\"o\">\/<\/span><span class=\"n\">nginx<\/span><span class=\"p\">.<\/span><span class=\"nf\">conf<\/span> <span class=\"n\">syntax<\/span> <span class=\"n\">is<\/span> <span class=\"n\">ok<\/span>\r\n<span class=\"no\">Sep<\/span> <span class=\"mo\">05<\/span> <span class=\"mo\">03<\/span><span class=\"p\">:<\/span><span class=\"mi\">24<\/span><span class=\"p\">:<\/span><span class=\"mi\">17<\/span> <span class=\"n\">vultr<\/span> <span class=\"n\">nginx<\/span><span class=\"p\">[<\/span><span class=\"mi\">24589<\/span><span class=\"p\">]:<\/span> <span class=\"ss\">nginx: <\/span><span class=\"n\">configuration<\/span> <span class=\"n\">file<\/span> <span class=\"sr\">\/etc\/n<\/span><span class=\"n\">ginx<\/span><span class=\"o\">\/<\/span><span class=\"n\">nginx<\/span><span class=\"p\">.<\/span><span class=\"nf\">conf<\/span> <span class=\"nb\">test<\/span> <span class=\"n\">is<\/span> <span class=\"n\">successful<\/span>\r\n<span class=\"no\">Sep<\/span> <span class=\"mo\">05<\/span> <span class=\"mo\">03<\/span><span class=\"p\">:<\/span><span class=\"mi\">24<\/span><span class=\"p\">:<\/span><span class=\"mi\">17<\/span> <span class=\"n\">vultr<\/span> <span class=\"n\">systemd<\/span><span class=\"p\">[<\/span><span class=\"mi\">1<\/span><span class=\"p\">]:<\/span> <span class=\"no\">Started<\/span> <span class=\"no\">The<\/span> <span class=\"n\">nginx<\/span> <span class=\"no\">HTTP<\/span> <span class=\"ow\">and<\/span> <span class=\"n\">reverse<\/span> <span class=\"n\">proxy<\/span> <span class=\"n\">server<\/span><span class=\"o\">.<\/span>\r\n<\/code><\/pre>\n<p>\u57fa\u672c\u7684\u6307\u4ee4\u53ef\u80fd\u56e0\u64cd\u4f5c\u7cfb\u7edf\u7248\u672c\u800c\u6709\u4e9b\u5dee\u5f02\uff0c\u6211\u5148\u5199\u4e00\u4e0b\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"c1\"># systemctl stop nginx<\/span>\r\n<\/code><\/pre>\n<pre class=\"post-pre\"><code><span class=\"c1\"># systemctl restart nginx<\/span>\r\n<\/code><\/pre>\n<pre class=\"post-pre\"><code><span class=\"c1\"># systemctl reload nginx<\/span>\r\n<\/code><\/pre>\n<p>\u56e0\u4e3aNginx\u5728\u9ed8\u8ba4\u914d\u7f6e\u4e0b\u4e5f\u53ef\u4ee5\u8fdb\u884c\u64cd\u4f5c\u9a8c\u8bc1\uff0c\u6240\u4ee5\u6211\u4eec\u5c06Vultr VPS\u7684IP\u5730\u5740\u8f93\u5165\u5230\u6d4f\u89c8\u5668\u4e2d\u8fdb\u884c\u786e\u8ba4\u3002<\/p>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d166837434c4406c01184\/89-0.png\" alt=\"\u30b9\u30af\u30ea\u30fc\u30f3\u30b7\u30e7\u30c3\u30c8 2022-09-04 \u5348\u5f8c11.27.14.png\" \/><\/div>\n<h2>(3) Nginx\u7684\u914d\u7f6e<\/h2>\n<p>\u69cb\u6210\u6587\u4ef6\u7684\u4f4d\u7f6e\u5728\u54ea\u91cc\uff1f<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">Nginx configuration directory: \/etc\/nginx<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">Nginx root directory: \/usr\/share\/nginx\/html<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">Master\/Global configuration file: \/etc\/nginx\/nginx.conf<\/ul>\n<h1>5. \u642d\u5efaRails\u73af\u5883<\/h1>\n<h2>(1) \u4e3aRails 7\u505a\u51c6\u5907\u5de5\u4f5c<\/h2>\n<pre class=\"post-pre\"><code><span class=\"c1\"># curl https:\/\/dl.yarnpkg.com\/rpm\/yarn.repo &gt; \/etc\/yum.repos.d\/yarn.repo<\/span>\r\n<span class=\"c1\"># dnf --enablerepo=crb -y install ruby-devel rpm-build make gcc gcc-c++ libxml2 libxml2-devel mariadb-devel zlib-devel libxslt-devel nodejs git yarn<\/span>\r\n<span class=\"c1\"># gem install nokogiri -- --use-system-libraries<\/span>\r\n<span class=\"c1\"># gem install webpack<\/span>\r\n<\/code><\/pre>\n<pre class=\"post-pre\"><code><span class=\"err\">$<\/span> <span class=\"n\">npm<\/span> <span class=\"n\">install<\/span> <span class=\"o\">-<\/span><span class=\"no\">D<\/span> <span class=\"n\">webpack<\/span> <span class=\"n\">webpack<\/span><span class=\"o\">-<\/span><span class=\"n\">cli<\/span>\r\n<span class=\"err\">$<\/span> <span class=\"n\">npm<\/span> <span class=\"n\">audit<\/span> <span class=\"n\">fix<\/span> <span class=\"o\">--<\/span><span class=\"n\">force<\/span>\r\n<span class=\"err\">$<\/span> <span class=\"n\">npm<\/span> <span class=\"n\">install<\/span> <span class=\"n\">css<\/span><span class=\"o\">-<\/span><span class=\"n\">loader<\/span> <span class=\"n\">style<\/span><span class=\"o\">-<\/span><span class=\"n\">loader<\/span> <span class=\"o\">-<\/span><span class=\"no\">D<\/span>\r\n<\/code><\/pre>\n<pre class=\"post-pre\"><code><span class=\"err\">$<\/span> <span class=\"n\">bundle<\/span> <span class=\"nb\">exec<\/span> <span class=\"n\">rails<\/span> <span class=\"n\">webpacker<\/span><span class=\"ss\">:install<\/span>\r\n<\/code><\/pre>\n<h2>(2) \u5b89\u88c5Rails 7.0.3.1<\/h2>\n<pre class=\"post-pre\"><code># gem install rails -v 7.0.3.1\r\n...\r\nDone installing documentation for zeitwerk, thor, method_source, concurrent-ruby, tzinfo, i18n, activesupport, nokogiri, crass, loofah, rails-html-sanitizer, rails-dom-testing, rack, rack-test, erubi, builder, actionview, actionpack, railties, mini_mime, marcel, activemodel, activerecord, globalid, activejob, activestorage, actiontext, mail, actionmailer, actionmailbox, websocket-extensions, websocket-driver, nio4r, actioncable, rails after 51 seconds\r\n35 gems installed\r\n# rails -v\r\nRails 7.0.3.1\r\n<\/code><\/pre>\n<h2>(3) \u5b89\u88c5mysql2<\/h2>\n<pre class=\"post-pre\"><code># gem install mysql2 -- --with-mysql-config=\/usr\/bin\/mysql_config\r\nBuilding native extensions with: '--with-mysql-config=\/usr\/bin\/mysql_config'\r\nThis could take a while...\r\nSuccessfully installed mysql2-0.5.4\r\nParsing documentation for mysql2-0.5.4\r\nInstalling ri documentation for mysql2-0.5.4\r\nDone installing documentation for mysql2 after 0 seconds\r\n1 gem installed\r\n\r\n<\/code><\/pre>\n<h2>(2) \u6d4b\u8bd5Rails\u5e94\u7528<\/h2>\n<p>\u5236\u4f5c\u4e00\u4e2a\u9002\u5f53\u7684\u5e94\u7528\u7a0b\u5e8f\u8fdb\u884c\u52a8\u4f5c\u9a8c\u8bc1\u3002\u7531\u4e8e\u4f7f\u7528Capistrano\u4ece\u672c\u5730\u73af\u5883\u90e8\u7f72\uff0c\u6240\u4ee5\u53ea\u9700\u8981\u9002\u5f53\u5373\u53ef\u3002<\/p>\n<h2>(1) \u76ee\u5f55\u51c6\u5907<\/h2>\n<pre class=\"post-pre\"><code>$ sudo su\r\n[root@vultrguest var]# mkdir \/var\/www\r\n[root@vultrguest var]# mkdir \/var\/www\/myapp\r\n[root@vultrguest var]# chown -R deploy.deploy \/var\/www\r\n<\/code><\/pre>\n<h2>(2) Gemfile \u51c6\u5907<\/h2>\n<pre class=\"post-pre\"><code><span class=\"err\">$<\/span> <span class=\"n\">cd<\/span> <span class=\"sr\">\/var\/<\/span><span class=\"n\">www<\/span><span class=\"o\">\/<\/span><span class=\"n\">myapp<\/span>\r\n<span class=\"err\">$<\/span> <span class=\"n\">source<\/span> <span class=\"sr\">\/etc\/<\/span><span class=\"n\">profile<\/span><span class=\"p\">.<\/span><span class=\"nf\">d<\/span><span class=\"o\">\/<\/span><span class=\"n\">rbenv<\/span><span class=\"p\">.<\/span><span class=\"nf\">sh<\/span>\r\n<span class=\"err\">$<\/span> <span class=\"n\">bundle<\/span> <span class=\"n\">init<\/span>\r\n<span class=\"no\">Writing<\/span> <span class=\"n\">new<\/span> <span class=\"no\">Gemfile<\/span> <span class=\"n\">to<\/span> <span class=\"sr\">\/var\/<\/span><span class=\"n\">www<\/span><span class=\"o\">\/<\/span><span class=\"n\">myapp<\/span><span class=\"o\">\/<\/span><span class=\"no\">Gemfile<\/span>\r\n\r\n<span class=\"err\">$<\/span> <span class=\"n\">vi<\/span> <span class=\"no\">Gemfile<\/span>\r\n<\/code><\/pre>\n<pre class=\"post-pre\"><code><span class=\"c1\"># frozen_string_literal: true<\/span>\r\n\r\n<span class=\"n\">source<\/span> <span class=\"s2\">\"https:\/\/rubygems.org\"<\/span>\r\n\r\n<span class=\"n\">git_source<\/span><span class=\"p\">(<\/span><span class=\"ss\">:github<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span><span class=\"o\">|<\/span><span class=\"n\">repo_name<\/span><span class=\"o\">|<\/span> <span class=\"s2\">\"https:\/\/github.com\/<\/span><span class=\"si\">#{<\/span><span class=\"n\">repo_name<\/span><span class=\"si\">}<\/span><span class=\"s2\">\"<\/span> <span class=\"p\">}<\/span>\r\n\r\n<span class=\"n\">gem<\/span> <span class=\"s2\">\"rails\"<\/span>  <span class=\"o\">&lt;=<\/span> <span class=\"n\">remove<\/span> <span class=\"s2\">\"#\"<\/span> <span class=\"n\">here<\/span>\r\n<\/code><\/pre>\n<h2>\uff083\uff09\u521b\u5efa\u65b0\u7684 Rails \u9879\u76ee<\/h2>\n<pre class=\"post-pre\"><code>$ bundle install --path vendor\/bundle\r\n$ bundle exec rails new . -B -d mysql --skip-test\r\n       exist  \r\n      create  README.md\r\n      create  Rakefile\r\n      create  .ruby-version\r\n      create  config.ru\r\n      create  .gitignore\r\n      create  .gitattributes\r\n    conflict  Gemfile\r\nOverwrite \/var\/www\/myapp\/Gemfile? (enter \"h\" for help) [Ynaqdhm] Y\r\n$ bundle install --path vendor\/bundle\r\n\r\n$ rails s\r\n=&gt; Booting Puma\r\n=&gt; Rails 7.0.3.1 application starting in development \r\n=&gt; Run `bin\/rails server --help` for more startup options\r\nPuma starting in single mode...\r\n* Puma version: 5.6.5 (ruby 3.1.2-p20) (\"Birdie's Version\")\r\n*  Min threads: 5\r\n*  Max threads: 5\r\n*  Environment: development\r\n*          PID: 31178\r\n* Listening on http:\/\/127.0.0.1:3000\r\n* Listening on http:\/\/[::1]:3000\r\nUse Ctrl-C to stop\r\n<\/code><\/pre>\n<h1>6. \u7528Capistrano3\u8fdb\u884c\u90e8\u7f72<\/h1>\n<p>\u6211\u4f1a\u5c1d\u8bd5\u4f7f\u7528Capistrano3\u5c06\u8fd9\u4e2a\u5728\u672c\u5730\u5f00\u53d1\u73af\u5883\u4e2d\u521b\u5efa\u7684\u5e94\u7528\u7a0b\u5e8f\u90e8\u7f72\u5230\u670d\u52a1\u5668\u4e0a\u3002<\/p>\n<h3>\u524d\u63d0\u6761\u4ef6<\/h3>\n<ul class=\"post-ul\">GitHub\u306bSSH\u516c\u958b\u9375\u3067\u30ed\u30fc\u30ab\u30eb\u304b\u3089Push\u3067\u304d\u3066\u3044\u308b\u3053\u3068\u3002<\/ul>\n<h2>(1) \u51c6\u5907\u5c06\u5e94\u7528\u7a0b\u5e8f\u90e8\u7f72\u81f3Vultr VPS\u7684\u76ee\u6807\u76ee\u5f55\u3002<\/h2>\n<pre class=\"post-pre\"><code>$ sudo su\r\n# mkdir \/var\/www\r\n# mkdir \/var\/www\/myapp\r\n# mkdir \/var\/www\/myapp\/shared\r\n# mkdir \/var\/www\/myapp\/shared\/config\r\n\r\n# adduser www\r\n# chown -R www:www \/var\/www\r\n# chown -R deploy \/var\/www\/myapp\r\n# gpasswd -a deploy www\r\n# gpasswd -a nginx www\r\n<\/code><\/pre>\n<h2>(2) \u590d\u5236\u6307\u5b9a\u4e3a\u975e\u90e8\u7f72\u76ee\u6807\u7684\u6587\u4ef6<\/h2>\n<pre class=\"post-pre\"><code>$ scp -i ~\/.ssh\/vultr config\/master.key deploy@SERVER_IP_ADDR:\/var\/www\/myapp\/shared\/config\/\r\n$ scp -i ~\/.ssh\/vultr config\/database.yml deploy@SERVER_IP_ADDR:\/var\/www\/myapp\/shared\/config\/\r\n<\/code><\/pre>\n<p>\u5728\u8fd9\u91cc\u7f16\u8f91\u590d\u5236\u7684database.yml\u6587\u4ef6\u4e2d\u7684production:\u90e8\u5206\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"ss\">production:\r\n  <\/span><span class=\"o\">&lt;&lt;<\/span><span class=\"p\">:<\/span> <span class=\"o\">*<\/span><span class=\"n\">default<\/span>\r\n  <span class=\"ss\">database: <\/span><span class=\"n\">myapp_production<\/span>\r\n  <span class=\"ss\">username: <\/span><span class=\"no\">MySQL<\/span><span class=\"err\">\u306b\u4f5c\u3063\u305f\u30a2\u30d7\u30ea\u7528\u30e6\u30fc\u30b6\u30fc\u540d<\/span>\r\n  <span class=\"ss\">password: <\/span><span class=\"no\">MySQL<\/span><span class=\"err\">\u306b\u4f5c\u3063\u305f\u30e6\u30fc\u30b6\u30fc\u306e\u30d1\u30b9\u30ef\u30fc\u30c9<\/span>\r\n<\/code><\/pre>\n<h2>(3) \u4e0eCapistrano\u76f8\u5173\u7684\u914d\u7f6e<\/h2>\n<pre class=\"post-pre\"><code><span class=\"c1\"># Use Capistrano for deployment<\/span>\r\n<span class=\"n\">group<\/span> <span class=\"ss\">:development<\/span> <span class=\"k\">do<\/span>\r\n  <span class=\"n\">gem<\/span> <span class=\"s1\">'capistrano'<\/span>\r\n  <span class=\"n\">gem<\/span> <span class=\"s1\">'ed25519'<\/span>\r\n  <span class=\"n\">gem<\/span> <span class=\"s1\">'bcrypt_pbkdf'<\/span>\r\n  <span class=\"n\">gem<\/span> <span class=\"s1\">'capistrano-rbenv'<\/span>\r\n  <span class=\"n\">gem<\/span> <span class=\"s1\">'capistrano-bundler'<\/span>\r\n  <span class=\"n\">gem<\/span> <span class=\"s1\">'capistrano-rails'<\/span>\r\n  <span class=\"n\">gem<\/span> <span class=\"s1\">'capistrano3-puma'<\/span>\r\n<span class=\"k\">end<\/span>\r\n<\/code><\/pre>\n<h4>\u751f\u6210Capfile\u548cconfig\/deploy.rb\u6587\u4ef6\u3002<\/h4>\n<pre class=\"post-pre\"><code><span class=\"err\">$<\/span> <span class=\"n\">bundle<\/span> <span class=\"nb\">exec<\/span> <span class=\"n\">cap<\/span> <span class=\"n\">install<\/span> <span class=\"no\">STAGES<\/span><span class=\"o\">=<\/span><span class=\"n\">production<\/span>\r\n<\/code><\/pre>\n<h4>\u914d\u7f6e Capfile \u548c config\/deploy.rb<\/h4>\n<pre class=\"post-pre\"><code><span class=\"c1\"># Load DSL and set up stages<\/span>\r\n<span class=\"nb\">require<\/span> <span class=\"s2\">\"capistrano\/setup\"<\/span>\r\n\r\n<span class=\"c1\"># Include default deployment tasks<\/span>\r\n<span class=\"nb\">require<\/span> <span class=\"s2\">\"capistrano\/deploy\"<\/span>\r\n\r\n<span class=\"c1\"># Load the SCM plugin appropriate to your project:<\/span>\r\n<span class=\"c1\">#<\/span>\r\n<span class=\"c1\"># require \"capistrano\/scm\/hg\"<\/span>\r\n<span class=\"c1\"># install_plugin Capistrano::SCM::Hg<\/span>\r\n<span class=\"c1\"># or<\/span>\r\n<span class=\"c1\"># require \"capistrano\/scm\/svn\"<\/span>\r\n<span class=\"c1\"># install_plugin Capistrano::SCM::Svn<\/span>\r\n<span class=\"c1\"># or<\/span>\r\n<span class=\"nb\">require<\/span> <span class=\"s2\">\"capistrano\/scm\/git\"<\/span>\r\n<span class=\"n\">install_plugin<\/span> <span class=\"no\">Capistrano<\/span><span class=\"o\">::<\/span><span class=\"no\">SCM<\/span><span class=\"o\">::<\/span><span class=\"no\">Git<\/span>\r\n\r\n<span class=\"c1\"># Include tasks from other gems included in your Gemfile<\/span>\r\n<span class=\"c1\">#<\/span>\r\n<span class=\"c1\"># For documentation on these, see for example:<\/span>\r\n<span class=\"c1\">#<\/span>\r\n<span class=\"c1\">#   https:\/\/github.com\/capistrano\/rvm<\/span>\r\n<span class=\"c1\">#   https:\/\/github.com\/capistrano\/rbenv<\/span>\r\n<span class=\"c1\">#   https:\/\/github.com\/capistrano\/chruby<\/span>\r\n<span class=\"c1\">#   https:\/\/github.com\/capistrano\/bundler<\/span>\r\n<span class=\"c1\">#   https:\/\/github.com\/capistrano\/rails<\/span>\r\n<span class=\"c1\">#   https:\/\/github.com\/capistrano\/passenger<\/span>\r\n<span class=\"c1\">#<\/span>\r\n<span class=\"c1\"># require \"capistrano\/rvm\"<\/span>\r\n<span class=\"nb\">require<\/span> <span class=\"s2\">\"capistrano\/rbenv\"<\/span>\r\n<span class=\"c1\"># require \"capistrano\/chruby\"<\/span>\r\n<span class=\"nb\">require<\/span> <span class=\"s2\">\"capistrano\/bundler\"<\/span>\r\n<span class=\"nb\">require<\/span> <span class=\"s2\">\"capistrano\/rails\/assets\"<\/span>\r\n<span class=\"nb\">require<\/span> <span class=\"s2\">\"capistrano\/rails\/migrations\"<\/span>\r\n<span class=\"c1\"># require \"capistrano\/passenger\"<\/span>\r\n<span class=\"nb\">require<\/span> <span class=\"s1\">'capistrano\/puma'<\/span>\r\n<span class=\"n\">install_plugin<\/span> <span class=\"no\">Capistrano<\/span><span class=\"o\">::<\/span><span class=\"no\">Puma<\/span>\r\n<span class=\"n\">install_plugin<\/span> <span class=\"no\">Capistrano<\/span><span class=\"o\">::<\/span><span class=\"no\">Puma<\/span><span class=\"o\">::<\/span><span class=\"no\">Daemon<\/span>\r\n<span class=\"n\">install_plugin<\/span> <span class=\"no\">Capistrano<\/span><span class=\"o\">::<\/span><span class=\"no\">Puma<\/span><span class=\"o\">::<\/span><span class=\"no\">Nginx<\/span>\r\n\r\n<span class=\"c1\"># Load custom tasks from `lib\/capistrano\/tasks` if you have any defined<\/span>\r\n<span class=\"no\">Dir<\/span><span class=\"p\">.<\/span><span class=\"nf\">glob<\/span><span class=\"p\">(<\/span><span class=\"s2\">\"lib\/capistrano\/tasks\/*.rake\"<\/span><span class=\"p\">).<\/span><span class=\"nf\">each<\/span> <span class=\"p\">{<\/span> <span class=\"o\">|<\/span><span class=\"n\">r<\/span><span class=\"o\">|<\/span> <span class=\"n\">import<\/span> <span class=\"n\">r<\/span> <span class=\"p\">}<\/span>\r\n<\/code><\/pre>\n<pre class=\"post-pre\"><code><span class=\"c1\"># config valid for current version and patch releases of Capistrano<\/span>\r\n<span class=\"n\">lock<\/span> <span class=\"s2\">\"~&gt; 3.12.1\"<\/span>\r\n\r\n<span class=\"n\">server<\/span> <span class=\"s1\">'Your Vultr IP ADDR'<\/span><span class=\"p\">,<\/span> <span class=\"ss\">port: <\/span><span class=\"mi\">22<\/span><span class=\"p\">,<\/span> <span class=\"ss\">roles: <\/span><span class=\"p\">[<\/span><span class=\"ss\">:app<\/span><span class=\"p\">,<\/span> <span class=\"ss\">:web<\/span><span class=\"p\">,<\/span> <span class=\"ss\">:db<\/span><span class=\"p\">],<\/span> <span class=\"ss\">primary: <\/span><span class=\"kp\">true<\/span>\r\n<span class=\"n\">set<\/span> <span class=\"ss\">:application<\/span><span class=\"p\">,<\/span> <span class=\"s1\">'myapp'<\/span>\r\n<span class=\"n\">set<\/span> <span class=\"ss\">:repo_url<\/span><span class=\"p\">,<\/span> <span class=\"s1\">'git@github.YOU\/myapp.git'<\/span>\r\n<span class=\"n\">set<\/span> <span class=\"ss\">:user<\/span><span class=\"p\">,<\/span>            <span class=\"s1\">'deploy'<\/span>\r\n<span class=\"n\">set<\/span> <span class=\"ss\">:ssh_options<\/span><span class=\"p\">,<\/span>     <span class=\"p\">{<\/span>\r\n  <span class=\"ss\">forward_agent: <\/span><span class=\"kp\">true<\/span><span class=\"p\">,<\/span>\r\n  <span class=\"ss\">user: <\/span><span class=\"n\">fetch<\/span><span class=\"p\">(<\/span><span class=\"ss\">:user<\/span><span class=\"p\">),<\/span>\r\n  <span class=\"ss\">keys: <\/span><span class=\"sx\">%w(~\/.ssh\/vultr)<\/span>\r\n<span class=\"p\">}<\/span>\r\n\r\n<span class=\"c1\"># Default branch is :master<\/span>\r\n<span class=\"c1\"># ask :branch, `git rev-parse --abbrev-ref HEAD`.chomp<\/span>\r\n\r\n<span class=\"c1\"># Default deploy_to directory is \/var\/www\/my_app_name<\/span>\r\n<span class=\"c1\"># set :deploy_to, \"\/var\/www\/my_app_name\"<\/span>\r\n<span class=\"n\">set<\/span> <span class=\"ss\">:deploy_to<\/span><span class=\"p\">,<\/span> <span class=\"s2\">\"\/var\/www\/myapp\"<\/span>\r\n\r\n<span class=\"c1\"># Default value for :format is :airbrussh.<\/span>\r\n<span class=\"c1\"># set :format, :airbrussh<\/span>\r\n\r\n<span class=\"c1\"># You can configure the Airbrussh format using :format_options.<\/span>\r\n<span class=\"c1\"># These are the defaults.<\/span>\r\n<span class=\"c1\"># set :format_options, command_output: true, log_file: \"log\/capistrano.log\", color: :auto, truncate: :auto<\/span>\r\n\r\n<span class=\"c1\"># Default value for :pty is false<\/span>\r\n<span class=\"c1\"># set :pty, true<\/span>\r\n\r\n<span class=\"c1\"># Default value for :linked_files is []<\/span>\r\n<span class=\"c1\"># append :linked_files, \"config\/database.yml\"<\/span>\r\n\r\n<span class=\"c1\"># Default value for linked_dirs is []<\/span>\r\n<span class=\"c1\"># append :linked_dirs, \"log\", \"tmp\/pids\", \"tmp\/cache\", \"tmp\/sockets\", \"public\/system\"<\/span>\r\n<span class=\"n\">append<\/span> <span class=\"ss\">:linked_dirs<\/span><span class=\"p\">,<\/span> <span class=\"s1\">'.bundle'<\/span>\r\n<span class=\"n\">append<\/span> <span class=\"ss\">:linked_files<\/span><span class=\"p\">,<\/span> <span class=\"s2\">\"config\/master.key\"<\/span>\r\n<span class=\"n\">append<\/span> <span class=\"ss\">:linked_files<\/span><span class=\"p\">,<\/span> <span class=\"s2\">\"config\/database.yml\"<\/span>\r\n<span class=\"n\">append<\/span> <span class=\"ss\">:linked_dirs<\/span><span class=\"p\">,<\/span> <span class=\"s2\">\"log\"<\/span><span class=\"p\">,<\/span> <span class=\"s2\">\"tmp\/pids\"<\/span><span class=\"p\">,<\/span> <span class=\"s2\">\"tmp\/cache\"<\/span><span class=\"p\">,<\/span> <span class=\"s2\">\"tmp\/sockets\"<\/span>\r\n\r\n<span class=\"c1\"># Default value for default_env is {}<\/span>\r\n<span class=\"c1\"># set :default_env, { path: \"\/opt\/ruby\/bin:$PATH\" }<\/span>\r\n\r\n<span class=\"c1\"># Default value for local_user is ENV['USER']<\/span>\r\n<span class=\"c1\"># set :local_user, -&gt; { `git config user.name`.chomp }<\/span>\r\n\r\n<span class=\"c1\"># Default value for keep_releases is 5<\/span>\r\n<span class=\"c1\"># set :keep_releases, 5<\/span>\r\n\r\n<span class=\"c1\"># Uncomment the following to require manually verifying the host key before first deploy.<\/span>\r\n<span class=\"c1\"># set :ssh_options, verify_host_key: :secure<\/span>\r\n\r\n<span class=\"c1\"># rbenv<\/span>\r\n<span class=\"n\">set<\/span> <span class=\"ss\">:rbenv_type<\/span><span class=\"p\">,<\/span> <span class=\"ss\">:system<\/span>\r\n<span class=\"n\">set<\/span> <span class=\"ss\">:rbenv_ruby<\/span><span class=\"p\">,<\/span> <span class=\"no\">File<\/span><span class=\"p\">.<\/span><span class=\"nf\">read<\/span><span class=\"p\">(<\/span><span class=\"s1\">'.ruby-version'<\/span><span class=\"p\">).<\/span><span class=\"nf\">strip<\/span>\r\n<span class=\"n\">set<\/span> <span class=\"ss\">:rbenv_prefix<\/span><span class=\"p\">,<\/span> <span class=\"s2\">\"RBENV_ROOT=<\/span><span class=\"si\">#{<\/span><span class=\"n\">fetch<\/span><span class=\"p\">(<\/span><span class=\"ss\">:rbenv_path<\/span><span class=\"p\">)<\/span><span class=\"si\">}<\/span> <span class=\"si\">#{<\/span><span class=\"n\">fetch<\/span><span class=\"p\">(<\/span><span class=\"ss\">:rbenv_path<\/span><span class=\"p\">)<\/span><span class=\"si\">}<\/span><span class=\"s2\">\/bin\/rbenv exec\"<\/span>\r\n\r\n<span class=\"n\">set<\/span> <span class=\"ss\">:bundle_jobs<\/span><span class=\"p\">,<\/span> <span class=\"mi\">2<\/span>      <span class=\"o\">&lt;=<\/span><span class=\"err\">\u5b89\u3044\u30d7\u30e9\u30f3\u306a\u306e\u3067<\/span><span class=\"mi\">2<\/span><span class=\"err\">\u3002<\/span><span class=\"no\">Default<\/span><span class=\"err\">\u306f<\/span><span class=\"mi\">4<\/span><span class=\"err\">\u3002<\/span>\r\n\r\n<span class=\"c1\"># debug log level<\/span>\r\n<span class=\"n\">set<\/span> <span class=\"ss\">:log_level<\/span><span class=\"p\">,<\/span> <span class=\"ss\">:debug<\/span>    <span class=\"o\">&lt;=<\/span><span class=\"err\">\u8a2d\u5b9a\u4f5c\u696d\u4e2d\u306f\u30c7\u30d0\u30c3\u30b0\u30e2\u30fc\u30c9\u306b\u3057\u305f\u3002<\/span>\r\n<\/code><\/pre>\n<h2>\uff084\uff09Nginx\u548cPuma\u7684\u4e8b\u5148\u90e8\u7f72\u914d\u5408<\/h2>\n<h4>\u51c6\u5907VPS\u7684\u4e8b\u9879<\/h4>\n<pre class=\"post-pre\"><code><span class=\"c1\"># mkdir \/etc\/nginx\/sites-available<\/span>\r\n<span class=\"c1\"># mkdir \/etc\/nginx\/sites-enabled<\/span>\r\n<span class=\"c1\"># \uff43\uff48\uff47\uff52\uff50 www sites-available<\/span>\r\n<span class=\"c1\"># \uff43\uff48\uff47\uff52\uff50 www sites-enabled<\/span>\r\n<\/code><\/pre>\n<h4>\u4f7f\u7528capistrano-puma\u63d2\u4ef6\u81ea\u52a8\u751f\u6210\u914d\u7f6e\u6587\u4ef6\u3002<\/h4>\n<p>\u4f7f\u7528\u8fd9\u4e9b\u547d\u4ee4\u5728\u670d\u52a1\u5668\u4e0a\u521b\u5efa\u4e86 \/etc\/nginx\/sites-available \u548c shared\/puma.rb \u4e24\u4e2a\u914d\u7f6e\u6587\u4ef6\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"err\">$<\/span> <span class=\"n\">bundle<\/span> <span class=\"nb\">exec<\/span> <span class=\"n\">cap<\/span> <span class=\"n\">production<\/span> <span class=\"n\">puma<\/span><span class=\"ss\">:nginx_config<\/span>\r\n<span class=\"mo\">00<\/span><span class=\"p\">:<\/span><span class=\"mo\">00<\/span> <span class=\"n\">puma<\/span><span class=\"ss\">:nginx_config<\/span>\r\n      <span class=\"no\">Uploading<\/span> <span class=\"sr\">\/tmp\/n<\/span><span class=\"n\">ginx_myapp_production<\/span> <span class=\"mf\">100.0<\/span><span class=\"o\">%<\/span>\r\n      <span class=\"mo\">01<\/span> <span class=\"n\">sudo<\/span> <span class=\"n\">mv<\/span> <span class=\"sr\">\/tmp\/n<\/span><span class=\"n\">ginx_myapp_production<\/span> <span class=\"sr\">\/etc\/n<\/span><span class=\"n\">ginx<\/span><span class=\"o\">\/<\/span><span class=\"n\">sites<\/span><span class=\"o\">-<\/span><span class=\"n\">available<\/span><span class=\"o\">\/<\/span><span class=\"n\">myapp_production<\/span>\r\n    <span class=\"err\">\u2714<\/span> <span class=\"mo\">01<\/span> <span class=\"n\">deploy<\/span><span class=\"vi\">@Vultr_IP_ADDR<\/span> <span class=\"mf\">0.200<\/span><span class=\"n\">s<\/span>\r\n      <span class=\"mo\">02<\/span> <span class=\"n\">sudo<\/span> <span class=\"n\">ln<\/span> <span class=\"o\">-<\/span><span class=\"n\">fs<\/span> <span class=\"sr\">\/etc\/n<\/span><span class=\"n\">ginx<\/span><span class=\"o\">\/<\/span><span class=\"n\">sites<\/span><span class=\"o\">-<\/span><span class=\"n\">available<\/span><span class=\"o\">\/<\/span><span class=\"n\">myapp_production<\/span> <span class=\"sr\">\/etc\/n<\/span><span class=\"n\">ginx<\/span><span class=\"o\">\/<\/span><span class=\"n\">sites<\/span><span class=\"o\">-<\/span><span class=\"n\">enabled<\/span><span class=\"o\">\/<\/span><span class=\"n\">myapp_production<\/span>\r\n    <span class=\"err\">\u2714<\/span> <span class=\"mo\">02<\/span> <span class=\"n\">deploy<\/span><span class=\"vi\">@Vultr_IP_ADDR<\/span> <span class=\"mf\">0.223<\/span><span class=\"n\">s<\/span>\r\n<\/code><\/pre>\n<pre class=\"post-pre\"><code>$ bundle exec cap production puma:config\r\n00:00 puma:config\r\n      Uploading \/var\/www\/myapp\/shared\/puma.rb 100.0%\r\n<\/code><\/pre>\n<h4>\u6267\u884c\u90e8\u7f72<\/h4>\n<p>\u6267\u884c\u90e8\u7f72\uff0c\u786e\u8ba4\u80fd\u6b63\u5e38\u5b8c\u6210\u76f4\u81f3puma\u542f\u52a8\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"err\">$<\/span> <span class=\"n\">bundle<\/span> <span class=\"nb\">exec<\/span> <span class=\"n\">cap<\/span> <span class=\"n\">production<\/span> <span class=\"n\">deploy<\/span>\r\n<\/code><\/pre>\n<h4>\u7b2c\u4e00\u6761\u5efa\u8bae\uff1a<\/h4>\n<p>\u5982\u679c\u65e0\u6cd5\u4eceVultr\u670d\u52a1\u5668\u52a0\u8f7dGitHub\uff0c\u53ef\u4ee5\u5c1d\u8bd5\u4f7f\u7528\u4ee5\u4e0b\u547d\u4ee4\u5c06\u5728\u672c\u5730\u5f00\u53d1\u73af\u5883\u4e2d\u4f7f\u7528\u7684SSH\u5bc6\u94a5\u6dfb\u52a0\u5230GitHub\u4ee5\u8fdb\u884cSSH\u8fde\u63a5\u3002\u5982\u679c\u5728\u91cd\u65b0\u521b\u5efaGitHub\u5b58\u50a8\u5e93\u65f6\u9047\u5230\u9519\u8bef\uff0c\u5efa\u8bae\u5c1d\u8bd5\u6b64\u65b9\u6cd5\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"n\">ssh<\/span><span class=\"o\">-<\/span><span class=\"n\">add<\/span> <span class=\"o\">~<\/span><span class=\"sr\">\/.ssh\/i<\/span><span class=\"n\">d_rsa<\/span>\r\n<\/code><\/pre>\n<h4>\u63d0\u793a2\uff1a<\/h4>\n<p>\u5982\u679c\u51fa\u73b0OpenSSL\u9519\u8bef\uff0c\u8bf7\u68c0\u67e5\u662f\u5426\u90e8\u7f72\u4e86\u7531config\/master.key\u521b\u5efa\u7684config\/credentials.yml.enc\u6587\u4ef6\u3002\u5982\u679c~\/.bash_profile\u6587\u4ef6\u4e2d\u5b58\u5728export RAILS_MASTER_KEY=&#8221;abc0123456789xyz&#8230;&#8221;\uff0c\u5b83\u5c06\u4f18\u5148\u4e8eRAILS_MASTER_KEY\uff0c\u5982\u679c\u5bc6\u94a5\u4e0d\u5339\u914d\uff0c\u5c06\u51fa\u73b0\u6b64\u9519\u8bef\u3002<\/p>\n<h4>\u7b2c\u4e09\u4e2a\u63d0\u793a\uff1a<\/h4>\n<p>\u51fa\u73b0Nginx\u9519\u8bef\uff1a\uff0813\uff1a\u62d2\u7edd\u8bbf\u95ee\uff09\uff0c\u5f53\u5c1d\u8bd5\u901a\u8fc7\u6d4f\u89c8\u5668\u8bbf\u95ee\u65f6\u51fa\u73b0502\u9519\u8bef\uff0c\u901a\u5e38\u662f\u56e0\u4e3aNginx\u7684\u6267\u884c\u7528\u6237\u4ecd\u7136\u662f\u9ed8\u8ba4\u7684nginx\u7528\u6237\uff0c\u5e76\u4e14\u65e0\u6cd5\u8bbf\u95ee\/var\/www\/myapp\/shared\/tmp\/sockets\/puma.sock\u3002\u8fd9\u79cd\u60c5\u51b5\u4e0b\u5f80\u5f80\u662f\u56e0\u4e3aNginx\u7684worker\u8fdb\u7a0b\u7684\u6267\u884c\u7528\u6237\u4e0d\u662fnginx\uff0c\u800c\u662fdeploy\u7528\u6237\u3002\u8bf7\u786e\u8ba4\u6267\u884c\u7528\u6237\u662f\u5426\u4e3adeploy\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"c1\"># For more information on configuration, see:<\/span>\r\n<span class=\"c1\">#   * Official English Documentation: http:\/\/nginx.org\/en\/docs\/<\/span>\r\n<span class=\"c1\">#   * Official Russian Documentation: http:\/\/nginx.org\/ru\/docs\/<\/span>\r\n\r\n<span class=\"n\">user<\/span> <span class=\"n\">deploy<\/span><span class=\"p\">;<\/span><span class=\"err\">\u3000\u3000\u3000\uff1c\uff1d\u3053\u3053\u3092\u78ba\u8a8d<\/span>\r\n<span class=\"n\">worker_processes<\/span> <span class=\"n\">auto<\/span><span class=\"p\">;<\/span>\r\n<span class=\"n\">error_log<\/span> <span class=\"sr\">\/var\/<\/span><span class=\"n\">log<\/span><span class=\"o\">\/<\/span><span class=\"n\">nginx<\/span><span class=\"o\">\/<\/span><span class=\"n\">error<\/span><span class=\"p\">.<\/span><span class=\"nf\">log<\/span><span class=\"p\">;<\/span>\r\n<span class=\"n\">pid<\/span> <span class=\"sr\">\/run\/n<\/span><span class=\"n\">ginx<\/span><span class=\"p\">.<\/span><span class=\"nf\">pid<\/span><span class=\"p\">;<\/span>\r\n\r\n<span class=\"c1\"># Load dynamic modules. See \/usr\/share\/doc\/nginx\/README.dynamic.<\/span>\r\n<span class=\"kp\">include<\/span> <span class=\"sr\">\/usr\/s<\/span><span class=\"n\">hare<\/span><span class=\"o\">\/<\/span><span class=\"n\">nginx<\/span><span class=\"o\">\/<\/span><span class=\"n\">modules<\/span><span class=\"o\">\/*<\/span><span class=\"p\">.<\/span><span class=\"nf\">conf<\/span><span class=\"p\">;<\/span>\r\n\r\n<span class=\"n\">events<\/span> <span class=\"p\">{<\/span>\r\n    <span class=\"n\">worker_connections<\/span> <span class=\"mi\">1024<\/span><span class=\"p\">;<\/span>\r\n<span class=\"p\">}<\/span>\r\n\r\n<span class=\"n\">http<\/span> <span class=\"p\">{<\/span>\r\n    <span class=\"n\">log_format<\/span>  <span class=\"n\">main<\/span>  <span class=\"s1\">'$remote_addr - $remote_user [$time_local] \"$request\" '<\/span>\r\n                      <span class=\"s1\">'$status $body_bytes_sent \"$http_referer\" '<\/span>\r\n                      <span class=\"s1\">'\"$http_user_agent\" \"$http_x_forwarded_for\"'<\/span><span class=\"p\">;<\/span>\r\n\r\n    <span class=\"n\">access_log<\/span>  <span class=\"sr\">\/var\/<\/span><span class=\"n\">log<\/span><span class=\"o\">\/<\/span><span class=\"n\">nginx<\/span><span class=\"o\">\/<\/span><span class=\"n\">access<\/span><span class=\"p\">.<\/span><span class=\"nf\">log<\/span>  <span class=\"n\">main<\/span><span class=\"p\">;<\/span>\r\n\r\n    <span class=\"n\">sendfile<\/span>            <span class=\"n\">on<\/span><span class=\"p\">;<\/span>\r\n    <span class=\"n\">tcp_nopush<\/span>          <span class=\"n\">on<\/span><span class=\"p\">;<\/span>\r\n    <span class=\"n\">tcp_nodelay<\/span>         <span class=\"n\">on<\/span><span class=\"p\">;<\/span>\r\n    <span class=\"n\">keepalive_timeout<\/span>   <span class=\"mi\">65<\/span><span class=\"p\">;<\/span>\r\n    <span class=\"n\">types_hash_max_size<\/span> <span class=\"mi\">4096<\/span><span class=\"p\">;<\/span>\r\n\r\n    <span class=\"kp\">include<\/span>             <span class=\"sr\">\/etc\/n<\/span><span class=\"n\">ginx<\/span><span class=\"o\">\/<\/span><span class=\"n\">mime<\/span><span class=\"p\">.<\/span><span class=\"nf\">types<\/span><span class=\"p\">;<\/span>\r\n    <span class=\"n\">default_type<\/span>        <span class=\"n\">application<\/span><span class=\"o\">\/<\/span><span class=\"n\">octet<\/span><span class=\"o\">-<\/span><span class=\"n\">stream<\/span><span class=\"p\">;<\/span>\r\n\r\n    <span class=\"c1\"># Load modular configuration files from the \/etc\/nginx\/conf.d directory.<\/span>\r\n    <span class=\"c1\"># See http:\/\/nginx.org\/en\/docs\/ngx_core_module.html#include<\/span>\r\n    <span class=\"c1\"># for more information.<\/span>\r\n    <span class=\"kp\">include<\/span> <span class=\"sr\">\/etc\/n<\/span><span class=\"n\">ginx<\/span><span class=\"o\">\/<\/span><span class=\"n\">conf<\/span><span class=\"p\">.<\/span><span class=\"nf\">d<\/span><span class=\"o\">\/*<\/span><span class=\"p\">.<\/span><span class=\"nf\">conf<\/span><span class=\"p\">;<\/span>\r\n    <span class=\"kp\">include<\/span> <span class=\"sr\">\/etc\/n<\/span><span class=\"n\">ginx<\/span><span class=\"o\">\/<\/span><span class=\"n\">sites<\/span><span class=\"o\">-<\/span><span class=\"n\">enabled<\/span><span class=\"o\">\/*<\/span><span class=\"p\">;<\/span>\r\n\r\n    <span class=\"n\">server<\/span> <span class=\"p\">{<\/span>\r\n        <span class=\"n\">listen<\/span>       <span class=\"mi\">80<\/span><span class=\"p\">;<\/span>\r\n        <span class=\"n\">listen<\/span>       <span class=\"p\">[<\/span><span class=\"o\">::<\/span><span class=\"p\">]:<\/span><span class=\"mi\">80<\/span><span class=\"p\">;<\/span>\r\n        <span class=\"n\">server_name<\/span>  <span class=\"n\">_<\/span><span class=\"p\">;<\/span>\r\n        <span class=\"n\">root<\/span>         <span class=\"sr\">\/usr\/s<\/span><span class=\"n\">hare<\/span><span class=\"o\">\/<\/span><span class=\"n\">nginx<\/span><span class=\"o\">\/<\/span><span class=\"n\">html<\/span><span class=\"p\">;<\/span>\r\n\r\n        <span class=\"c1\"># Load configuration files for the default server block.<\/span>\r\n        <span class=\"kp\">include<\/span> <span class=\"sr\">\/etc\/n<\/span><span class=\"n\">ginx<\/span><span class=\"o\">\/<\/span><span class=\"n\">default<\/span><span class=\"p\">.<\/span><span class=\"nf\">d<\/span><span class=\"o\">\/*<\/span><span class=\"p\">.<\/span><span class=\"nf\">conf<\/span><span class=\"p\">;<\/span>\r\n\r\n        <span class=\"n\">error_page<\/span> <span class=\"mi\">404<\/span> <span class=\"o\">\/<\/span><span class=\"mi\">404<\/span><span class=\"p\">.<\/span><span class=\"nf\">html<\/span><span class=\"p\">;<\/span>\r\n        <span class=\"n\">location<\/span> <span class=\"o\">=<\/span> <span class=\"sr\">\/404.html {\r\n        }\r\n\r\n        error_page 500 502 503 504 \/<\/span><span class=\"mi\">50<\/span><span class=\"n\">x<\/span><span class=\"p\">.<\/span><span class=\"nf\">html<\/span><span class=\"p\">;<\/span>\r\n        <span class=\"n\">location<\/span> <span class=\"o\">=<\/span> <span class=\"sr\">\/50x.html {\r\n        }\r\n    }\r\n\r\n# Settings for a TLS enabled server.\r\n#\r\n#    server {\r\n#        listen       443 ssl http2;\r\n#        listen       [::]:443 ssl http2;\r\n#        server_name  _;\r\n#        root         \/us<\/span><span class=\"n\">r<\/span><span class=\"o\">\/<\/span><span class=\"n\">share<\/span><span class=\"o\">\/<\/span><span class=\"n\">nginx<\/span><span class=\"o\">\/<\/span><span class=\"n\">html<\/span><span class=\"p\">;<\/span>\r\n<span class=\"c1\">#<\/span>\r\n<span class=\"c1\">#        ssl_certificate \"\/etc\/pki\/nginx\/server.crt\";<\/span>\r\n<span class=\"c1\">#        ssl_certificate_key \"\/etc\/pki\/nginx\/private\/server.key\";<\/span>\r\n<span class=\"c1\">#        ssl_session_cache shared:SSL:1m;<\/span>\r\n<span class=\"c1\">#        ssl_session_timeout  10m;<\/span>\r\n<span class=\"c1\">#        ssl_ciphers PROFILE=SYSTEM;<\/span>\r\n<span class=\"c1\">#        ssl_prefer_server_ciphers on;<\/span>\r\n<span class=\"c1\">#<\/span>\r\n<span class=\"c1\">#        # Load configuration files for the default server block.<\/span>\r\n<span class=\"c1\">#        include \/etc\/nginx\/default.d\/*.conf;<\/span>\r\n<span class=\"c1\">#<\/span>\r\n<span class=\"c1\">#        error_page 404 \/404.html;<\/span>\r\n<span class=\"c1\">#            location = \/40x.html {<\/span>\r\n<span class=\"c1\">#        }<\/span>\r\n<span class=\"c1\">#<\/span>\r\n<span class=\"c1\">#        error_page 500 502 503 504 \/50x.html;<\/span>\r\n<span class=\"c1\">#            location = \/50x.html {<\/span>\r\n<span class=\"c1\">#        }<\/span>\r\n<span class=\"c1\">#    }<\/span>\r\n\r\n<span class=\"p\">}<\/span>\r\n\r\n<\/code><\/pre>\n<p>\u5982\u679c\u6240\u6709\u7684\u6743\u9650\u8bbe\u7f6e\u90fd\u6b63\u786e\uff0c\u4f46\u4ecd\u51fa\u73b0\u6b64\u9519\u8bef\uff0c\u53ef\u80fd\u662f\u56e0\u4e3a\u88abSELinux\u9650\u5236\u4e86\u3002\u5728\u8fd9\u79cd\u60c5\u51b5\u4e0b\uff0c\u8bf7\u5c1d\u8bd5\u4ee5\u4e0b\u64cd\u4f5c\u3002<\/p>\n<pre class=\"post-pre\"><code>$ sudo setenforce Permissive\r\n<\/code><\/pre>\n<p>\u5982\u679c\u51fa\u73b0\u4e86Rails\u9875\u9762\uff0c\u9700\u8981\u8fdb\u884cSELinux\u7b56\u7565\u7684\u66f4\u6539\u3002<\/p>\n<pre class=\"post-pre\"><code>$ sudo grep nginx \/var\/log\/audit\/audit.log | audit2allow\r\n$ sudo grep nginx \/var\/log\/audit\/audit.log | audit2allow -M nginx\r\n$ sudo semodule -i nginx.pp\r\n$ sudo setenforce Enforcing\r\n<\/code><\/pre>\n<h4>\u5efa\u8bae4\uff1a<\/h4>\n<p>\u627e\u4e0d\u5230&#8221;webpack&#8221;\u547d\u4ee4\u3002\u8bf7\u8fdb\u884c\u9519\u8bef\u5904\u7406\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"n\">before<\/span> <span class=\"s2\">\"deploy:assets:precompile\"<\/span><span class=\"p\">,<\/span> <span class=\"s2\">\"deploy:yarn_install\"<\/span>\r\n\r\n<span class=\"n\">namespace<\/span> <span class=\"ss\">:deploy<\/span> <span class=\"k\">do<\/span>\r\n  <span class=\"n\">desc<\/span> <span class=\"s1\">'Run rake yarn:install'<\/span>\r\n  <span class=\"n\">task<\/span> <span class=\"ss\">:yarn_install<\/span> <span class=\"k\">do<\/span>\r\n    <span class=\"n\">on<\/span> <span class=\"n\">roles<\/span><span class=\"p\">(<\/span><span class=\"ss\">:web<\/span><span class=\"p\">)<\/span> <span class=\"k\">do<\/span>\r\n      <span class=\"n\">within<\/span> <span class=\"n\">release_path<\/span> <span class=\"k\">do<\/span>\r\n        <span class=\"n\">execute<\/span><span class=\"p\">(<\/span><span class=\"s2\">\"cd <\/span><span class=\"si\">#{<\/span><span class=\"n\">release_path<\/span><span class=\"si\">}<\/span><span class=\"s2\"> &amp;&amp; yarn install\"<\/span><span class=\"p\">)<\/span>\r\n      <span class=\"k\">end<\/span>\r\n    <span class=\"k\">end<\/span>\r\n  <span class=\"k\">end<\/span>\r\n<span class=\"k\">end<\/span>\r\n<\/code><\/pre>\n<h4>\u7b2c\u4e94\u4e2a\u63d0\u793a\uff1a<\/h4>\n<p>\u9519\u8bef\uff1a0308010C\uff1a\u6570\u5b57\u4fe1\u5c01\u4f8b\u7a0b::unsupported\u9519\u8bef\u5bfc\u81f4\u8d44\u4ea7\u9884\u7f16\u8bd1\u5931\u8d25\u7684\u539f\u56e0\u662fNode.js\u5347\u7ea7\u5230V17\u5e76\u5f00\u59cb\u4f7f\u7528OpenSSL3\u3002\u8981\u907f\u514d\u8fd9\u4e2a\u95ee\u9898\uff0c\u53ef\u4ee5\u5b89\u88c5Node Version Manager\uff08NVM\uff09\u5e76\u5c06Node.js\u914d\u7f6e\u4e3a\u4f7f\u7528LTS\u7248\u672c\u3002<br \/>\n\u503c\u5f97\u6ce8\u610f\u7684\u662f\uff0c\u5728\u6211\u7684Vultr\u73af\u5883\u4e2d\uff0cNode.js\u662fV16\uff0c\u4f46\u4ecd\u7136\u53d1\u751f\u4e86\u8fd9\u4e2a\u9519\u8bef\u3002\u4e0d\u8fc7\uff0c\u6309\u7167\u4ee5\u4e0b\u6b65\u9aa4\u5b89\u88c5\u4e86Node.js V16 LTS\u540e\uff0c\u9519\u8bef\u5f97\u5230\u4e86\u89e3\u51b3\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"p\">[<\/span><span class=\"n\">deploy<\/span><span class=\"vi\">@vultr<\/span> <span class=\"o\">~<\/span><span class=\"p\">]<\/span><span class=\"err\">$<\/span> <span class=\"n\">curl<\/span> <span class=\"o\">-<\/span><span class=\"n\">o<\/span><span class=\"o\">-<\/span> <span class=\"n\">https<\/span><span class=\"ss\">:\/<\/span><span class=\"o\">\/<\/span><span class=\"n\">raw<\/span><span class=\"p\">.<\/span><span class=\"nf\">githubusercontent<\/span><span class=\"p\">.<\/span><span class=\"nf\">com<\/span><span class=\"o\">\/<\/span><span class=\"n\">nvm<\/span><span class=\"o\">-<\/span><span class=\"n\">sh<\/span><span class=\"o\">\/<\/span><span class=\"n\">nvm<\/span><span class=\"o\">\/<\/span><span class=\"n\">v0<\/span><span class=\"o\">.<\/span><span class=\"mf\">39.1<\/span><span class=\"o\">\/<\/span><span class=\"n\">install<\/span><span class=\"p\">.<\/span><span class=\"nf\">sh<\/span> <span class=\"o\">|<\/span> <span class=\"n\">bash<\/span>\r\n<\/code><\/pre>\n<p>\u767b\u51fa\u5e76\u4f7f\u7528deploy\u7528\u6237\u767b\u5f55\u4ee5\u542f\u7528NVM\uff0c\u7136\u540e\u6267\u884c\u4ee5\u4e0b\u64cd\u4f5c\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"p\">[<\/span><span class=\"n\">deploy<\/span><span class=\"vi\">@vultr<\/span> <span class=\"o\">~<\/span><span class=\"p\">]<\/span><span class=\"err\">$\u3000<\/span><span class=\"n\">nvm<\/span> <span class=\"n\">install<\/span> <span class=\"o\">--<\/span><span class=\"n\">lts<\/span>\r\n<\/code><\/pre>\n<pre class=\"post-pre\"><code><span class=\"p\">[<\/span><span class=\"n\">deploy<\/span><span class=\"vi\">@vultr<\/span> <span class=\"o\">~<\/span><span class=\"p\">]<\/span><span class=\"err\">$\u3000<\/span><span class=\"n\">nvm<\/span> <span class=\"n\">use<\/span> <span class=\"o\">--<\/span><span class=\"n\">lts<\/span>\r\n<span class=\"p\">[<\/span><span class=\"n\">deploy<\/span><span class=\"vi\">@vultr<\/span> <span class=\"o\">~<\/span><span class=\"p\">]<\/span><span class=\"err\">$<\/span> <span class=\"n\">node<\/span> <span class=\"o\">-<\/span><span class=\"n\">v<\/span>\r\n<span class=\"n\">v16<\/span><span class=\"o\">.<\/span><span class=\"mf\">17.0<\/span>\r\n<\/code><\/pre>\n<h1>\u8bf7\u53c2\u9605\u4e0a\u8ff0\u6587\u7ae0\u3002<\/h1>\n<p>\u5728Vultr VPS\u4e0a\u5b89\u88c5CentOS 8 + Rails 6 + MySQL 8 + Nginx\uff0c\u5e76\u4f7f\u7528Capistrano 3\u8fdb\u884c\u90e8\u7f72\u3002<br \/>\n\u5728Vultr VPS\u4e0a\u4f7f\u7528CentOS 7\uff0cRuby on Rails 6\uff0cPuma\uff0c\u4ee5\u53caCapistrano 3\u8fdb\u884c\u751f\u4ea7\u73af\u5883\u90e8\u7f72\u3002<br \/>\n\u5728CentOS Stream 9\u4e0a\u5b89\u88c5Ruby on Rails 7 &#8211; Server World\u3002<br \/>\nNginx\u9519\u8bef\uff1a\uff0813\uff1a\u6743\u9650\u88ab\u62d2\u7edd\uff09\uff0c\u5c1d\u8bd5\u8fde\u63a5\u5230\u4e0a\u6e38\u3002<br \/>\n\u547d\u4ee4\u201cwebpack\u201d\u672a\u627e\u5230\u3002\uff03522<br \/>\n[\u5df2\u89e3\u51b3] \u9519\u8bef\uff1a0308010C\uff1a\u6570\u5b57\u4fe1\u5c01\u4f8b\u7a0b\uff1a\uff1a\u4e0d\u652f\u6301<br \/>\n\u4f7f\u7528systemd\u4f5c\u4e3aPuma\u7684\u7528\u6237\u670d\u52a1\u542f\u52a8\u3002<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u9996\u5148 \u7531\u4e8e CentOS Stream 9 \u7684\u53d1\u5e03\uff0c\u6211\u642d\u5efa\u4e86 Rails 7 \u5f00\u53d1\u73af\u5883\uff0c\u5e76\u8fdb\u884c\u4e86\u73b0\u6709\u5e94\u7528\u7684 R [&hellip;]<\/p>\n","protected":false},"author":12,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-33249","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v21.5 (Yoast SEO v21.5) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>\u5728 Vultr VPS \u4e0a\u5b89\u88c5 CentOS9+Rails 7+MySQL8+nginx\uff0c\u5e76\u4f7f\u7528 Capistrano3 \u8fdb\u884c\u90e8\u7f72 - Blog - Silicon Cloud<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.silicloud.com\/zh\/blog\/\u5728-vultr-vps-\u4e0a\u5b89\u88c5-centos9rails-7mysql8nginx\uff0c\u5e76\u4f7f\u7528-capistrano3-\u8fdb\u884c\u90e8\u7f72\u3002\/\" \/>\n<meta property=\"og:locale\" content=\"zh_CN\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"\u5728 Vultr VPS \u4e0a\u5b89\u88c5 CentOS9+Rails 7+MySQL8+nginx\uff0c\u5e76\u4f7f\u7528 Capistrano3 \u8fdb\u884c\u90e8\u7f72\" \/>\n<meta property=\"og:description\" content=\"\u9996\u5148 \u7531\u4e8e CentOS Stream 9 \u7684\u53d1\u5e03\uff0c\u6211\u642d\u5efa\u4e86 Rails 7 \u5f00\u53d1\u73af\u5883\uff0c\u5e76\u8fdb\u884c\u4e86\u73b0\u6709\u5e94\u7528\u7684 R [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.silicloud.com\/zh\/blog\/\u5728-vultr-vps-\u4e0a\u5b89\u88c5-centos9rails-7mysql8nginx\uff0c\u5e76\u4f7f\u7528-capistrano3-\u8fdb\u884c\u90e8\u7f72\u3002\/\" \/>\n<meta property=\"og:site_name\" content=\"Blog - Silicon Cloud\" \/>\n<meta property=\"article:published_time\" content=\"2024-01-04T23:42:27+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-04-29T18:59:33+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d166837434c4406c01184\/5-0.png\" \/>\n<meta name=\"author\" content=\"\u9038, \u79d1\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u4f5c\u8005\" \/>\n\t<meta name=\"twitter:data1\" content=\"\u9038, \u79d1\" \/>\n\t<meta name=\"twitter:label2\" content=\"\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4\" \/>\n\t<meta name=\"twitter:data2\" content=\"16 \u5206\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e5%9c%a8-vultr-vps-%e4%b8%8a%e5%ae%89%e8%a3%85-centos9rails-7mysql8nginx%ef%bc%8c%e5%b9%b6%e4%bd%bf%e7%94%a8-capistrano3-%e8%bf%9b%e8%a1%8c%e9%83%a8%e7%bd%b2%e3%80%82\/\",\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e5%9c%a8-vultr-vps-%e4%b8%8a%e5%ae%89%e8%a3%85-centos9rails-7mysql8nginx%ef%bc%8c%e5%b9%b6%e4%bd%bf%e7%94%a8-capistrano3-%e8%bf%9b%e8%a1%8c%e9%83%a8%e7%bd%b2%e3%80%82\/\",\"name\":\"\u5728 Vultr VPS \u4e0a\u5b89\u88c5 CentOS9+Rails 7+MySQL8+nginx\uff0c\u5e76\u4f7f\u7528 Capistrano3 \u8fdb\u884c\u90e8\u7f72 - Blog - Silicon Cloud\",\"isPartOf\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#website\"},\"datePublished\":\"2024-01-04T23:42:27+00:00\",\"dateModified\":\"2024-04-29T18:59:33+00:00\",\"author\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/85c1dae56e6ea1e695c73d33c684d487\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e5%9c%a8-vultr-vps-%e4%b8%8a%e5%ae%89%e8%a3%85-centos9rails-7mysql8nginx%ef%bc%8c%e5%b9%b6%e4%bd%bf%e7%94%a8-capistrano3-%e8%bf%9b%e8%a1%8c%e9%83%a8%e7%bd%b2%e3%80%82\/#breadcrumb\"},\"inLanguage\":\"zh-Hans\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.silicloud.com\/zh\/blog\/%e5%9c%a8-vultr-vps-%e4%b8%8a%e5%ae%89%e8%a3%85-centos9rails-7mysql8nginx%ef%bc%8c%e5%b9%b6%e4%bd%bf%e7%94%a8-capistrano3-%e8%bf%9b%e8%a1%8c%e9%83%a8%e7%bd%b2%e3%80%82\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e5%9c%a8-vultr-vps-%e4%b8%8a%e5%ae%89%e8%a3%85-centos9rails-7mysql8nginx%ef%bc%8c%e5%b9%b6%e4%bd%bf%e7%94%a8-capistrano3-%e8%bf%9b%e8%a1%8c%e9%83%a8%e7%bd%b2%e3%80%82\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\u9996\u9875\",\"item\":\"https:\/\/www.silicloud.com\/zh\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"\u5728 Vultr VPS \u4e0a\u5b89\u88c5 CentOS9+Rails 7+MySQL8+nginx\uff0c\u5e76\u4f7f\u7528 Capistrano3 \u8fdb\u884c\u90e8\u7f72\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#website\",\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/\",\"name\":\"Blog - Silicon Cloud\",\"description\":\"\",\"inLanguage\":\"zh-Hans\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/85c1dae56e6ea1e695c73d33c684d487\",\"name\":\"\u9038, \u79d1\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/c94f6d9cbbfbca863fab309840bd690c153c95f8490c290ad2ed54dd693dad16?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/c94f6d9cbbfbca863fab309840bd690c153c95f8490c290ad2ed54dd693dad16?s=96&d=mm&r=g\",\"caption\":\"\u9038, \u79d1\"},\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/author\/keyi\/\"},{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e5%9c%a8-vultr-vps-%e4%b8%8a%e5%ae%89%e8%a3%85-centos9rails-7mysql8nginx%ef%bc%8c%e5%b9%b6%e4%bd%bf%e7%94%a8-capistrano3-%e8%bf%9b%e8%a1%8c%e9%83%a8%e7%bd%b2%e3%80%82\/#local-main-organization-logo\",\"url\":\"\",\"contentUrl\":\"\",\"caption\":\"Blog - Silicon Cloud\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"\u5728 Vultr VPS \u4e0a\u5b89\u88c5 CentOS9+Rails 7+MySQL8+nginx\uff0c\u5e76\u4f7f\u7528 Capistrano3 \u8fdb\u884c\u90e8\u7f72 - Blog - Silicon Cloud","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.silicloud.com\/zh\/blog\/\u5728-vultr-vps-\u4e0a\u5b89\u88c5-centos9rails-7mysql8nginx\uff0c\u5e76\u4f7f\u7528-capistrano3-\u8fdb\u884c\u90e8\u7f72\u3002\/","og_locale":"zh_CN","og_type":"article","og_title":"\u5728 Vultr VPS \u4e0a\u5b89\u88c5 CentOS9+Rails 7+MySQL8+nginx\uff0c\u5e76\u4f7f\u7528 Capistrano3 \u8fdb\u884c\u90e8\u7f72","og_description":"\u9996\u5148 \u7531\u4e8e CentOS Stream 9 \u7684\u53d1\u5e03\uff0c\u6211\u642d\u5efa\u4e86 Rails 7 \u5f00\u53d1\u73af\u5883\uff0c\u5e76\u8fdb\u884c\u4e86\u73b0\u6709\u5e94\u7528\u7684 R [&hellip;]","og_url":"https:\/\/www.silicloud.com\/zh\/blog\/\u5728-vultr-vps-\u4e0a\u5b89\u88c5-centos9rails-7mysql8nginx\uff0c\u5e76\u4f7f\u7528-capistrano3-\u8fdb\u884c\u90e8\u7f72\u3002\/","og_site_name":"Blog - Silicon Cloud","article_published_time":"2024-01-04T23:42:27+00:00","article_modified_time":"2024-04-29T18:59:33+00:00","og_image":[{"url":"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d166837434c4406c01184\/5-0.png"}],"author":"\u9038, \u79d1","twitter_card":"summary_large_image","twitter_misc":{"\u4f5c\u8005":"\u9038, \u79d1","\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4":"16 \u5206"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%9c%a8-vultr-vps-%e4%b8%8a%e5%ae%89%e8%a3%85-centos9rails-7mysql8nginx%ef%bc%8c%e5%b9%b6%e4%bd%bf%e7%94%a8-capistrano3-%e8%bf%9b%e8%a1%8c%e9%83%a8%e7%bd%b2%e3%80%82\/","url":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%9c%a8-vultr-vps-%e4%b8%8a%e5%ae%89%e8%a3%85-centos9rails-7mysql8nginx%ef%bc%8c%e5%b9%b6%e4%bd%bf%e7%94%a8-capistrano3-%e8%bf%9b%e8%a1%8c%e9%83%a8%e7%bd%b2%e3%80%82\/","name":"\u5728 Vultr VPS \u4e0a\u5b89\u88c5 CentOS9+Rails 7+MySQL8+nginx\uff0c\u5e76\u4f7f\u7528 Capistrano3 \u8fdb\u884c\u90e8\u7f72 - Blog - Silicon Cloud","isPartOf":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/#website"},"datePublished":"2024-01-04T23:42:27+00:00","dateModified":"2024-04-29T18:59:33+00:00","author":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/85c1dae56e6ea1e695c73d33c684d487"},"breadcrumb":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%9c%a8-vultr-vps-%e4%b8%8a%e5%ae%89%e8%a3%85-centos9rails-7mysql8nginx%ef%bc%8c%e5%b9%b6%e4%bd%bf%e7%94%a8-capistrano3-%e8%bf%9b%e8%a1%8c%e9%83%a8%e7%bd%b2%e3%80%82\/#breadcrumb"},"inLanguage":"zh-Hans","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.silicloud.com\/zh\/blog\/%e5%9c%a8-vultr-vps-%e4%b8%8a%e5%ae%89%e8%a3%85-centos9rails-7mysql8nginx%ef%bc%8c%e5%b9%b6%e4%bd%bf%e7%94%a8-capistrano3-%e8%bf%9b%e8%a1%8c%e9%83%a8%e7%bd%b2%e3%80%82\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%9c%a8-vultr-vps-%e4%b8%8a%e5%ae%89%e8%a3%85-centos9rails-7mysql8nginx%ef%bc%8c%e5%b9%b6%e4%bd%bf%e7%94%a8-capistrano3-%e8%bf%9b%e8%a1%8c%e9%83%a8%e7%bd%b2%e3%80%82\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\u9996\u9875","item":"https:\/\/www.silicloud.com\/zh\/blog\/"},{"@type":"ListItem","position":2,"name":"\u5728 Vultr VPS \u4e0a\u5b89\u88c5 CentOS9+Rails 7+MySQL8+nginx\uff0c\u5e76\u4f7f\u7528 Capistrano3 \u8fdb\u884c\u90e8\u7f72"}]},{"@type":"WebSite","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#website","url":"https:\/\/www.silicloud.com\/zh\/blog\/","name":"Blog - Silicon Cloud","description":"","inLanguage":"zh-Hans"},{"@type":"Person","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/85c1dae56e6ea1e695c73d33c684d487","name":"\u9038, \u79d1","image":{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/c94f6d9cbbfbca863fab309840bd690c153c95f8490c290ad2ed54dd693dad16?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/c94f6d9cbbfbca863fab309840bd690c153c95f8490c290ad2ed54dd693dad16?s=96&d=mm&r=g","caption":"\u9038, \u79d1"},"url":"https:\/\/www.silicloud.com\/zh\/blog\/author\/keyi\/"},{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%9c%a8-vultr-vps-%e4%b8%8a%e5%ae%89%e8%a3%85-centos9rails-7mysql8nginx%ef%bc%8c%e5%b9%b6%e4%bd%bf%e7%94%a8-capistrano3-%e8%bf%9b%e8%a1%8c%e9%83%a8%e7%bd%b2%e3%80%82\/#local-main-organization-logo","url":"","contentUrl":"","caption":"Blog - Silicon Cloud"}]}},"_links":{"self":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/33249","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/users\/12"}],"replies":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/comments?post=33249"}],"version-history":[{"count":2,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/33249\/revisions"}],"predecessor-version":[{"id":89275,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/33249\/revisions\/89275"}],"wp:attachment":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/media?parent=33249"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/categories?post=33249"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/tags?post=33249"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}