{"id":33104,"date":"2024-01-04T06:56:14","date_gmt":"2023-07-19T09:09:52","guid":{"rendered":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%9c%a8vultr-vps%e4%b8%8a%e5%ae%89%e8%a3%85centos8rails-6mysql8nginx%ef%bc%8c%e5%b9%b6%e4%bd%bf%e7%94%a8capistrano3%e8%bf%9b%e8%a1%8c%e9%83%a8%e7%bd%b2%e3%80%82\/"},"modified":"2024-05-04T16:47:13","modified_gmt":"2024-05-04T08:47:13","slug":"%e5%9c%a8vultr-vps%e4%b8%8a%e5%ae%89%e8%a3%85centos8rails-6mysql8nginx%ef%bc%8c%e5%b9%b6%e4%bd%bf%e7%94%a8capistrano3%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%a8vultr-vps%e4%b8%8a%e5%ae%89%e8%a3%85centos8rails-6mysql8nginx%ef%bc%8c%e5%b9%b6%e4%bd%bf%e7%94%a8capistrano3%e8%bf%9b%e8%a1%8c%e9%83%a8%e7%bd%b2%e3%80%82\/","title":{"rendered":"\u5728Vultr VPS\u4e0a\u5b89\u88c5CentOS8+Rails 6+MySQL8+nginx\uff0c\u5e76\u4f7f\u7528Capistrano3\u8fdb\u884c\u90e8\u7f72"},"content":{"rendered":"<h1>\u9996\u5148<\/h1>\n<p>\u5728 CentOS7 \u6587\u7ae0\u4e4b\u540e\uff0c\u6211\u4e5f\u5c1d\u8bd5\u4e86 CentOS8\uff0c\u5e76\u8bb0\u5f55\u4e0b\u6765\u3002<\/p>\n<p>Vultr\u6700\u4fbf\u5b9c\u768410GB SSD\u8ba1\u5212\u5728\u4f7f\u7528CentOS8\u65f6\uff0c\u78c1\u76d8\u7a7a\u95f4\u4f1a\u4e0d\u8db3\uff0c\u5efa\u8bae\u4f7f\u752825GB\u4ee5\u4e0a\u7684\u7a7a\u95f4\u3002\u4ee5\u4e0b\u6b65\u9aa4\u4e2d\uff0c\u867d\u7136\u53ea\u6709Ruby\u7248\u672c\u8f83\u65e7\uff0c\u4f46\u8fd9\u662f\u56e0\u4e3a\u672c\u5730\u5e94\u7528\u7a0b\u5e8f\u5728ruby 2.5.3\u4e0a\u8fd0\u884c\u3002\u6211\u8ba4\u4e3a\u57282.7\u4e0a\u6b65\u9aa4\u662f\u76f8\u540c\u7684\uff08\u672a\u9a8c\u8bc1\uff09\u3002<\/p>\n<p>\u5728\u6fc0\u5b89VPS\u63d0\u4f9b\u5546Vultr\u4e0a\u901a\u8fc7\u4ecb\u7ecd\u4eba\u7684\u94fe\u63a5\u6ce8\u518c\u8d26\u6237\uff0c\u60a8\u5c06\u83b7\u5f97100\u7f8e\u5143\u7684\u4fe1\u7528\u989d\u5ea6\u3002\u6211\u5c1d\u8bd5\u4e86\u5404\u79cd\u7ec4\u5408\uff0c\u5982CentOS7\u30018\uff0cMySQL 5.7\u30018\u7b49\u3002\u7531\u4e8e\u4e0d\u77e5\u9053\u8fd9\u4e2a\u6d3b\u52a8\u4f55\u65f6\u7ed3\u675f\uff0c\u6240\u4ee5\u5982\u679c\u60a8\u6709\u5174\u8da3\uff0c\u8bf7\u901a\u8fc7\u4ee5\u4e0b\u94fe\u63a5\u6ce8\u518c\u8d26\u6237\u3002\u60a8\u5c06\u83b7\u5f97\u4fe1\u7528\u989d\u5ea6\uff0c\u800c\u6211\u4e5f\u4f1a\u83b7\u5f97\u4e00\u4e9b\u4fe1\u7528\u989d\u5ea6\uff0c\u8fd9\u662f\u53cc\u8d62\u7684\u5c40\u9762\u3002<\/p>\n<h3>\u53ea\u9700\u70b9\u51fb\u6b64\u94fe\u63a5\uff0c\u5373\u53ef\u6536\u5230100\u7f8e\u5143\u3002<\/h3>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d158837434c4406bfeb39\/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\/657d158837434c4406bfeb39\/6-0.png\" alt=\"\u30b9\u30af\u30ea\u30fc\u30f3\u30b7\u30e7\u30c3\u30c8 2020-03-09 \u5348\u5f8c7.17.41.png\" \/><\/div>\n<h1>0. \u64cd\u4f5c\u7cfb\u7edf\u7684\u57fa\u672c\u914d\u7f6e<\/h1>\n<p>\u5b8c\u6210\u4e86\u5728\u4e0a\u4e00\u7bc7CentOS7\u6587\u7ae0\u4e2d\u76841\u81f36\u6b65\u9aa4\uff0c\u5305\u62ec\u521b\u5efa\u7528\u6237\u548c\u8bbe\u7f6e\u4ea4\u6362\u7a7a\u95f4\u7b49\u51c6\u5907\u5de5\u4f5c\u3002<\/p>\n<h1>\u5b89\u88c5 MySQL 8<\/h1>\n<pre class=\"post-pre\"><code>$ sudo su\r\n\r\nUnistall MariaDB\r\n# yum -y remove mariadb-libs\r\n# rm -rf \/var\/lib\/mysql\/\r\n\r\nInstall MySQL 8\r\n# yum -y install @mysql\r\n# systemctl start mysqld\r\n# systemctl enable --now mysqld\r\n# systemctl status mysqld\r\n<\/code><\/pre>\n<pre class=\"post-pre\"><code># mysql_secure_installation\r\n\r\nSecuring the MySQL server deployment.\r\n\r\nConnecting to MySQL using a blank password.\r\n\r\nVALIDATE PASSWORD COMPONENT can be used to test passwords\r\nand improve security. It checks the strength of password\r\nand allows the users to set only those passwords which are\r\nsecure enough. Would you like to setup VALIDATE PASSWORD component?\r\n\r\nPress y|Y for Yes, any other key for No: y\r\n\r\nThere are three levels of password validation policy:\r\n\r\nLOW    Length &gt;= 8\r\nMEDIUM Length &gt;= 8, numeric, mixed case, and special characters\r\nSTRONG Length &gt;= 8, numeric, mixed case, special characters and dictionary                  file\r\n\r\nPlease enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 2\r\nPlease set the password for root here.\r\n\r\nNew password: \r\n\r\nRe-enter new password: \r\n\r\nEstimated strength of the password: 100 \r\nDo you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) : y\r\nBy default, a MySQL installation has an anonymous user,\r\nallowing anyone to log into MySQL without having to have\r\na user account created for them. This is intended only for\r\ntesting, and to make the installation go a bit smoother.\r\nYou should remove them before moving into a production\r\nenvironment.\r\n\r\nRemove anonymous users? (Press y|Y for Yes, any other key for No) : y\r\nSuccess.\r\n\r\n\r\nNormally, root should only be allowed to connect from\r\n'localhost'. This ensures that someone cannot guess at\r\nthe root password from the network.\r\n\r\nDisallow root login remotely? (Press y|Y for Yes, any other key for No) : y\r\nSuccess.\r\n\r\nBy default, MySQL comes with a database named 'test' that\r\nanyone can access. This is also intended only for testing,\r\nand should be removed before moving into a production\r\nenvironment.\r\n\r\n\r\nRemove test database and access to it? (Press y|Y for Yes, any other key for No) : y\r\n - Dropping test database...\r\nSuccess.\r\n\r\n - Removing privileges on test database...\r\nSuccess.\r\n\r\nReloading the privilege tables will ensure that all changes\r\nmade so far will take effect immediately.\r\n\r\nReload privilege tables now? (Press y|Y for Yes, any other key for No) : y\r\nSuccess.\r\n\r\nAll done! \r\n<\/code><\/pre>\n<h1>\u5b89\u88c5 Ruby V2.5.3<\/h1>\n<pre class=\"post-pre\"><code># yum groupinstall \"Development Tools\"\r\n# yum -y install libyaml-devel\r\n# yum install -y openssl-devel readline-devel zlib-devel\r\n# cd \/usr\/local\r\n# git clone git:\/\/github.com\/sstephenson\/rbenv.git rbenv\r\n# git clone git:\/\/github.com\/sstephenson\/ruby-build.git rbenv\/plugins\/ruby-build\r\n\r\n\r\n# vi \/etc\/profile.d\/rbenv.sh\r\n\r\n&gt; \u4ee5\u4e0b\u3092\u8a18\u8ff0\u3057\u3066\u30d1\u30b9\u3092\u901a\u3057\u3066\u304a\u304f\u3002\r\nexport RBENV_ROOT=\"\/usr\/local\/rbenv\"\r\nexport PATH=\"${RBENV_ROOT}\/bin:${PATH}\"\r\neval \"$(rbenv init --no-rehash -)\"\r\n\r\n# source \/etc\/profile.d\/rbenv.sh\r\n# rbenv install 2.5.3  &lt;=\u3053\u308c\u304c\u6642\u9593\u304c\u304b\u304b\u308b\u3002\r\n# rbenv global 2.5.3\r\n# rbenv rehash\r\n<\/code><\/pre>\n<h1>3. \u5b89\u88c5 bundler 2.1.2<\/h1>\n<p>\u56e0\u4e3a\u6211\u7684\u5f00\u53d1\u73af\u5883\u7684Bundler\u662f2.1.2\uff0c\u6240\u4ee5\u8981\u4e0e\u4e4b\u5339\u914d\uff0c\u4f46\u7248\u672c\u5e94\u6839\u636e\u5f00\u53d1\u73af\u5883\u8fdb\u884c\u8c03\u6574\u3002<\/p>\n<pre class=\"post-pre\"><code># gem install bundler -v 2.1.2\r\n<\/code><\/pre>\n<h1>4. \u5b89\u88c5 Node.js<\/h1>\n<pre class=\"post-pre\"><code># yum install -y nodejs\r\n# node --version\r\nv10.19.0\r\n<\/code><\/pre>\n<h1>5. \u5b89\u88c5 yarn<\/h1>\n<pre class=\"post-pre\"><code># npm install -g yarn\r\n<\/code><\/pre>\n<h1>6. \u5b89\u88c5Nginx\u7a33\u5b9a\u7248\u672c\u7684\u6700\u65b0\u7248<\/h1>\n<h2>\u5b89\u88c5yum-utils\u3002<\/h2>\n<pre class=\"post-pre\"><code># yum install yum-utils\r\n<\/code><\/pre>\n<pre class=\"post-pre\"><code><span class=\"p\">[<\/span><span class=\"n\">nginx<\/span><span class=\"o\">-<\/span><span class=\"n\">stable<\/span><span class=\"p\">]<\/span>\r\n<span class=\"nb\">name<\/span><span class=\"o\">=<\/span><span class=\"n\">nginx<\/span> <span class=\"n\">stable<\/span> <span class=\"n\">repo<\/span>\r\n<span class=\"n\">baseurl<\/span><span class=\"o\">=<\/span><span class=\"n\">http<\/span><span class=\"ss\">:\/<\/span><span class=\"o\">\/<\/span><span class=\"n\">nginx<\/span><span class=\"p\">.<\/span><span class=\"nf\">org<\/span><span class=\"o\">\/<\/span><span class=\"n\">packages<\/span><span class=\"o\">\/<\/span><span class=\"n\">centos<\/span><span class=\"o\">\/<\/span><span class=\"vg\">$releasever<\/span><span class=\"o\">\/<\/span><span class=\"vg\">$basearch<\/span><span class=\"o\">\/<\/span>\r\n<span class=\"n\">gpgcheck<\/span><span class=\"o\">=<\/span><span class=\"mi\">1<\/span>\r\n<span class=\"n\">enabled<\/span><span class=\"o\">=<\/span><span class=\"mi\">1<\/span>\r\n<span class=\"n\">gpgkey<\/span><span class=\"o\">=<\/span><span class=\"n\">https<\/span><span class=\"ss\">:\/<\/span><span class=\"o\">\/<\/span><span class=\"n\">nginx<\/span><span class=\"p\">.<\/span><span class=\"nf\">org<\/span><span class=\"o\">\/<\/span><span class=\"n\">keys<\/span><span class=\"o\">\/<\/span><span class=\"n\">nginx_signing<\/span><span class=\"p\">.<\/span><span class=\"nf\">key<\/span>\r\n\r\n<span class=\"p\">[<\/span><span class=\"n\">nginx<\/span><span class=\"o\">-<\/span><span class=\"n\">mainline<\/span><span class=\"p\">]<\/span>\r\n<span class=\"nb\">name<\/span><span class=\"o\">=<\/span><span class=\"n\">nginx<\/span> <span class=\"n\">mainline<\/span> <span class=\"n\">repo<\/span>\r\n<span class=\"n\">baseurl<\/span><span class=\"o\">=<\/span><span class=\"n\">http<\/span><span class=\"ss\">:\/<\/span><span class=\"o\">\/<\/span><span class=\"n\">nginx<\/span><span class=\"p\">.<\/span><span class=\"nf\">org<\/span><span class=\"o\">\/<\/span><span class=\"n\">packages<\/span><span class=\"o\">\/<\/span><span class=\"n\">mainline<\/span><span class=\"o\">\/<\/span><span class=\"n\">centos<\/span><span class=\"o\">\/<\/span><span class=\"vg\">$releasever<\/span><span class=\"o\">\/<\/span><span class=\"vg\">$basearch<\/span><span class=\"o\">\/<\/span>\r\n<span class=\"n\">gpgcheck<\/span><span class=\"o\">=<\/span><span class=\"mi\">1<\/span>\r\n<span class=\"n\">enabled<\/span><span class=\"o\">=<\/span><span class=\"mi\">0<\/span>\r\n<span class=\"n\">gpgkey<\/span><span class=\"o\">=<\/span><span class=\"n\">https<\/span><span class=\"ss\">:\/<\/span><span class=\"o\">\/<\/span><span class=\"n\">nginx<\/span><span class=\"p\">.<\/span><span class=\"nf\">org<\/span><span class=\"o\">\/<\/span><span class=\"n\">keys<\/span><span class=\"o\">\/<\/span><span class=\"n\">nginx_signing<\/span><span class=\"p\">.<\/span><span class=\"nf\">key<\/span>\r\n<\/code><\/pre>\n<h2>(2) \u5b89\u88c5<\/h2>\n<pre class=\"post-pre\"><code># cat \/etc\/redhat-release\r\nCentOS Linux release 8.1.1911 (Core) \r\n\r\n# yum --disablerepo=AppStream install -y nginx\r\n\r\nBasic\u8a8d\u8a3c\u3092\u4f7f\u3044\u305f\u3044\u306e\u3067httpd-tools\u3082\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\r\n# yum install httpd-tools\r\n\r\n<\/code><\/pre>\n<h2>\u786e\u8ba4\u884c\u52a8<\/h2>\n<pre class=\"post-pre\"><code>nginx\u8d77\u52d5\r\n$ sudo nginx\r\n\r\nnginx\u81ea\u52d5\u8d77\u52d5\u8a2d\u5b9a\r\n# systemctl enable nginx\r\nCreated symlink \/etc\/systemd\/system\/multi-user.target.wants\/nginx.service \u2192 \/usr\/lib\/systemd\/system\/nginx.service.\r\n\r\n\u52d5\u4f5c\u72b6\u614b\u78ba\u8a8d\r\n# systemctl status nginx\r\n\u25cf nginx.service - nginx - high performance web server\r\n   Loaded: loaded (\/usr\/lib\/systemd\/system\/nginx.service; disabled; vendor preset: disabled)\r\n   Active: active (running) since Sun 2020-03-15 17:14:15 UTC; 5s ago\r\n     Docs: http:\/\/nginx.org\/en\/docs\/\r\n  Process: 3413 ExecStart=\/usr\/sbin\/nginx -c \/etc\/nginx\/nginx.conf (code=exited, status=0\/SUCCESS)\r\n Main PID: 3414 (nginx)\r\n    Tasks: 2 (limit: 5066)\r\n   Memory: 2.0M\r\n   CGroup: \/system.slice\/nginx.service\r\n           \u251c\u25003414 nginx: master process \/usr\/sbin\/nginx -c \/etc\/nginx\/nginx.conf\r\n           \u2514\u25003415 nginx: worker process\r\n\r\nMar 15 17:14:14 vultrguest systemd[1]: Starting nginx - high performance web server...\r\nMar 15 17:14:15 vultrguest systemd[1]: nginx.service: Can't open PID file \/var\/run\/nginx.pid (yet?) after start: No such file or directory\r\nMar 15 17:14:15 vultrguest systemd[1]: Started nginx - high performance web server.\r\n<\/code><\/pre>\n<h2>\u5728\u6d4f\u89c8\u5668\u4e2d\u8bbf\u95ee\u3002<\/h2>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d158837434c4406bfeb39\/30-0.png\" alt=\"\u30b9\u30af\u30ea\u30fc\u30f3\u30b7\u30e7\u30c3\u30c8 2020-03-15 \u5348\u5f8c1.17.53.png\" \/><\/div>\n<h1>7. \u5feb\u7167<\/h1>\n<p>\u56e0\u4e3a\u5df2\u7ecf\u5b8c\u6210\u4e86\u5e72\u51c0\u5b89\u88c5\u5230\u8fd9\u91cc\uff0c\u6240\u4ee5\u5728\u8fdb\u884c\u5176\u4ed6\u4efb\u52a1\u4e4b\u524d\u5148\u8fdb\u884c\u5feb\u7167\u62cd\u6444\u3002<\/p>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d158837434c4406bfeb39\/33-0.png\" alt=\"\u30b9\u30af\u30ea\u30fc\u30f3\u30b7\u30e7\u30c3\u30c8 2020-03-15 \u5348\u5f8c1.21.40.png\" \/><\/div>\n<h1>\u5b89\u88c5 Rails 6<\/h1>\n<h2>(1) \u4e3a\u4e86Rails6\u7684\u51c6\u5907\u5de5\u4f5c<\/h2>\n<pre class=\"post-pre\"><code># yum install mysql-devel\r\n# gem install mysql2 -v '0.5.3' --source 'https:\/\/rubygems.org\/'\r\n# gem install msgpack\r\n\r\n<\/code><\/pre>\n<h2>\u5b89\u88c5Rails 6<\/h2>\n<pre class=\"post-pre\"><code># gem install rails -v 6.0.2.1\r\n...\r\nDone installing documentation for concurrent-ruby, i18n, thread_safe, tzinfo, zeitwerk, activesupport, rack, rack-test, mini_portile2, nokogiri, crass, loofah, rails-html-sanitizer, rails-dom-testing, builder, erubi, actionview, actionpack, activemodel, activerecord, globalid, activejob, mini_mime, mail, actionmailer, nio4r, websocket-extensions, websocket-driver, actioncable, mimemagic, marcel, activestorage, actionmailbox, actiontext, thor, method_source, railties, sprockets, sprockets-rails, rails after 87 seconds\r\n40 gems installed\r\n<\/code><\/pre>\n<h1>9. \u6d4b\u8bd5Rails\u5e94\u7528\u7a0b\u5e8f<\/h1>\n<p>\u521b\u5efa\u4e00\u4e2a\u9002\u5f53\u7684\u5e94\u7528\u7a0b\u5e8f\u7528\u4e8e\u64cd\u4f5c\u9a8c\u8bc1\u3002\u5982\u679c\u4f7f\u7528Capistrano\u4ece\u672c\u5730\u73af\u5883\u8fdb\u884c\u90e8\u7f72\uff0c\u53ef\u4ee5\u8df3\u8fc7\u6b64\u64cd\u4f5c\u9a8c\u8bc1\u800c\u4e0d\u8981\u7d27\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\u5de5\u4f5c<\/h2>\n<pre class=\"post-pre\"><code>$ bundle init\r\nWriting new Gemfile to \/var\/www\/myapp\/Gemfile\r\n\r\n$ vi Gemfile\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>(3) \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$ bundle install --path vendor\/bundle\r\n$ rails webpacker:install\r\n...\r\nWebpacker successfully installed ? ?\r\n\r\n$ rails s\r\n=&gt; Booting Puma\r\n=&gt; Rails 6.0.2.1 application starting in development \r\n=&gt; Run `rails server --help` for more startup options\r\nPuma starting in single mode...\r\n* Version 4.3.3 (ruby 2.5.3-p105), codename: Mysterious Traveller\r\n* Min threads: 5, max threads: 5\r\n* Environment: development\r\n* Listening on tcp:\/\/127.0.0.1:3000\r\n* Listening on tcp:\/\/[::1]:3000\r\nUse Ctrl-C to stop\r\n<\/code><\/pre>\n<h2>(4) \u4f7f\u7528telnet\u8fdb\u884c\u786e\u8ba4<\/h2>\n<p>\u524d\u63d0\u6761\u4ef6\uff1a\u786e\u4fdd\u7aef\u53e33000\u5df2\u7ecf\u6253\u5f00\u3002<\/p>\n<pre class=\"post-pre\"><code>$ yum list installed | grep telnet\r\n\r\n\u3082\u3057telnet\u304c\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3055\u308c\u3066\u3044\u306a\u3051\u308c\u3070\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\r\n$ sudo yum -y install telnet telnet-server\r\n<\/code><\/pre>\n<pre class=\"post-pre\"><code>$ telnet 127.0.0.1 3000\r\nTrying 127.0.0.1...\r\nConnected to 127.0.0.1.\r\nEscape character is '^]'.\r\nGET \/ HTTP\/1.1   &lt;=Enter\u30922\u56de\u62bc\u3059\u4e8b\u3002\r\n\r\nHTTP\/1.1 403 Forbidden\r\nContent-Type: text\/html; charset=UTF-8\r\nContent-Length: 3102\r\n\r\n&lt;!DOCTYPE html&gt;\r\n&lt;html lang=\"en\"&gt;\r\n&lt;head&gt;\r\n  &lt;meta charset=\"utf-8\" \/&gt;\r\n  &lt;title&gt;Action Controller: Exception caught&lt;\/title&gt;\r\n  &lt;style&gt;\r\n    body {\r\n      background-color: #FAFAFA;\r\n....\r\n&lt;\/body&gt;\r\n&lt;\/html&gt;\r\nConnection closed by foreign host.\r\n<\/code><\/pre>\n<p>\u901a\u8fc7\u8fd9\u4e2a\u53ef\u4ee5\u786e\u8ba4Puma\u5df2\u7ecf\u5728\u8fd0\u884c\u4e86\u3002\u5982\u679c\u8981\u4ece\u5916\u90e8\u901a\u8fc7\u6d4f\u89c8\u5668\u8bbf\u95ee\uff0c\u9700\u8981\u8fdb\u884c\u4e0enginx\u7684\u96c6\u6210\u914d\u7f6e\u3002<\/p>\n<h2>(5) \u5feb\u7167<\/h2>\n<p>\u4e00\u65e6\u5230\u8fd9\u4e2a\u9636\u6bb5\uff0c\u6211\u4eec\u5c06\u8fdb\u884c\u5feb\u7167\u4fdd\u5b58\u3002<\/p>\n<h1>10. \u4f7f\u7528Capistrano3\u8fdb\u884c\u90e8\u7f72\u3002<\/h1>\n<p>\u6211\u6253\u7b97\u4f7f\u7528Capistrano3\u5728\u672c\u5730\u5f00\u53d1\u73af\u5883\u90e8\u7f72\u6211\u5f00\u53d1\u7684\u5e94\u7528\u7a0b\u5e8f\u3002<\/p>\n<h3>\u524d\u63d0\u6761\u4ef6 (Native Chinese)<br \/>\n\u524d\u63d0 (Simplified Chinese)<\/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) \u6e96\u5099\u5728 Vultr VPS \u4e0a\u61c9\u7528\u7a0b\u5f0f\u90e8\u7f72\u7684\u76ee\u9304\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\u5bf9\u8c61\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<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>\u8a2d\u5b9a Capfile\u548cconfig\/deploy.rb\u3002<\/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\"># 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\">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>(4) \u9884\u5148\u90e8\u7f72 nginx-puma \u7684\u534f\u4f5c\u3002<\/h2>\n<h4>VPS\u9884\u5907\u5de5\u4f5c<\/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\u53ef\u4ee5\u5728\u670d\u52a1\u5668\u4e0a\u521b\u5efa\/etc\/nginx\/sites-available\u548cshared\/puma.rb\u7684\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\u3002<\/h4>\n<p>\u6267\u884c\u90e8\u7f72\uff0c\u786e\u4fdd\u6210\u529f\u542f\u52a8 puma \u76f4\u5230\u6b63\u5e38\u7ed3\u675f\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<p>\u63d0\u793a1\uff1a<br \/>\n\u5982\u679c\u65e0\u6cd5\u4eceVultr\u670d\u52a1\u5668\u52a0\u8f7dGitHub\uff0c\u8bf7\u5c1d\u8bd5\u4f7f\u7528\u4ee5\u4e0b\u547d\u4ee4\u5c06\u60a8\u5728\u672c\u5730\u5f00\u53d1\u73af\u5883\u4e2d\u7528\u4e8eGitHub\u7684SSH\u5bc6\u94a5\u6dfb\u52a0\u5230SSH\u8fde\u63a5\u4e2d\uff0c\u5373\u53ef\u89e3\u51b3\u95ee\u9898\u3002\u5982\u679c\u5728\u91cd\u65b0\u521b\u5efaGitHub\u5b58\u50a8\u5e93\u65f6\u51fa\u73b0\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<p>\u63d0\u793a2\uff1a<br \/>\n\u5982\u679c\u51fa\u73b0OpenSSL\u9519\u8bef\uff0c\u8bf7\u68c0\u67e5\u662f\u5426\u90e8\u7f72\u4e86\u7531config\/master.key\u521b\u5efa\u7684config\/credentials.yml.enc\u3002\u5982\u679c\u5728~\/.bash_profile\u4e2d\u5b58\u5728export RAILS_MASTER_KEY=&#8221;abc0123456789xyz&#8230;&#8221;\uff0c\u5c06\u4f18\u5148\u4f7f\u7528RAILS_MASTER_KEY\uff0c\u56e0\u6b64\u5982\u679c\u5bc6\u94a5\u4e0d\u5339\u914d\uff0c\u5c31\u4f1a\u5bfc\u81f4\u6b64\u9519\u8bef\u3002<\/p>\n<pre class=\"post-pre\"><code> <span class=\"no\">DEBUG<\/span> <span class=\"p\">[<\/span><span class=\"mi\">3<\/span><span class=\"n\">b3d9306<\/span><span class=\"p\">]<\/span> \t<span class=\"n\">rake<\/span> <span class=\"n\">aborted!<\/span>\r\n<span class=\"no\">ActiveSupport<\/span><span class=\"o\">::<\/span><span class=\"no\">MessageEncryptor<\/span><span class=\"o\">::<\/span><span class=\"no\">InvalidMessage<\/span><span class=\"p\">:<\/span> <span class=\"no\">ActiveSupport<\/span><span class=\"o\">::<\/span><span class=\"no\">MessageEncryptor<\/span><span class=\"o\">::<\/span><span class=\"no\">InvalidMessage<\/span>\r\n<span class=\"o\">...<\/span>\r\n<span class=\"no\">Caused<\/span> <span class=\"ss\">by:\r\n<\/span><span class=\"no\">OpenSSL<\/span><span class=\"o\">::<\/span><span class=\"no\">Cipher<\/span><span class=\"o\">::<\/span><span class=\"no\">CipherError<\/span><span class=\"p\">:<\/span> \r\n<\/code><\/pre>\n<h2>(5) Nginx\u548cPuma\u7684\u914d\u7f6e\u96c6\u6210<\/h2>\n<p>\u8fdb\u884cNginx\u548cPuma\u901a\u8fc7\u5957\u63a5\u5b57\u8fdb\u884c\u534f\u4f5c\u7684\u914d\u7f6e\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"c1\">#user  nginx;<\/span>\r\n<span class=\"n\">user<\/span>  <span class=\"n\">deploy<\/span><span class=\"p\">;<\/span> <span class=\"o\">&lt;=<\/span><span class=\"err\">\u91cd\u8981\u3002<\/span><span class=\"no\">Nginx<\/span><span class=\"err\">\u3068<\/span><span class=\"no\">Puma<\/span><span class=\"err\">\u306f\u540c\u3058\u30e6\u30fc\u30b6\u30fc\u3067\u30d7\u30ed\u30bb\u30b9\u3092\u8d77\u52d5\u3059\u308b\u3002<\/span>\r\n<span class=\"n\">worker_processes<\/span>  <span class=\"mi\">1<\/span><span class=\"p\">;<\/span>\r\n\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=\"nb\">warn<\/span><span class=\"p\">;<\/span>\r\n<span class=\"n\">pid<\/span>        <span class=\"sr\">\/var\/<\/span><span class=\"n\">run<\/span><span class=\"o\">\/<\/span><span class=\"n\">nginx<\/span><span class=\"p\">.<\/span><span class=\"nf\">pid<\/span><span class=\"p\">;<\/span>\r\n\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\r\n<span class=\"n\">http<\/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\">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=\"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=\"c1\">#tcp_nopush     on;<\/span>\r\n\r\n    <span class=\"n\">keepalive_timeout<\/span>  <span class=\"mi\">65<\/span><span class=\"p\">;<\/span>\r\n\r\n    <span class=\"c1\">#gzip  on;<\/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\">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> <span class=\"o\">&lt;=<\/span><span class=\"no\">Rails<\/span><span class=\"err\">\u30a2\u30d7\u30ea\u306e<\/span><span class=\"no\">Config<\/span><span class=\"err\">\u3092\u3053\u3053\u3067\u30a4\u30f3\u30af\u30eb\u30fc\u30c9\u3057\u3066\u3044\u308b\u3002<\/span>\r\n<span class=\"p\">}<\/span>\r\n<\/code><\/pre>\n<pre class=\"post-pre\"><code><span class=\"n\">upstream<\/span> <span class=\"n\">puma_myapp<\/span> <span class=\"p\">{<\/span> \r\n  <span class=\"n\">server<\/span> <span class=\"n\">unix<\/span><span class=\"ss\">:\/<\/span><span class=\"n\">var<\/span><span class=\"o\">\/<\/span><span class=\"n\">www<\/span><span class=\"o\">\/<\/span><span class=\"n\">myapp<\/span><span class=\"o\">\/<\/span><span class=\"n\">shared<\/span><span class=\"o\">\/<\/span><span class=\"n\">tmp<\/span><span class=\"o\">\/<\/span><span class=\"n\">sockets<\/span><span class=\"o\">\/<\/span><span class=\"n\">puma<\/span><span class=\"p\">.<\/span><span class=\"nf\">sock<\/span> <span class=\"n\">fail_timeout<\/span><span class=\"o\">=<\/span><span class=\"mi\">0<\/span><span class=\"p\">;<\/span>\r\n<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\">server_name<\/span> <span class=\"err\">\u3042\u306a\u305f\u306e<\/span><span class=\"no\">Vultr<\/span><span class=\"err\">\u30b5\u30fc\u30d0\u30fc\u306e<\/span><span class=\"no\">IP<\/span><span class=\"err\">\u30a2\u30c9\u30ec\u30b9<\/span><span class=\"p\">;<\/span>\r\n  <span class=\"n\">root<\/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=\"n\">current<\/span><span class=\"o\">\/<\/span><span class=\"kp\">public<\/span><span class=\"p\">;<\/span>\r\n  <span class=\"n\">try_files<\/span> <span class=\"vg\">$uri<\/span><span class=\"o\">\/<\/span><span class=\"n\">index<\/span><span class=\"p\">.<\/span><span class=\"nf\">html<\/span> <span class=\"vg\">$uri<\/span> <span class=\"vi\">@puma_myapp_production<\/span><span class=\"p\">;<\/span>\r\n\r\n  <span class=\"n\">client_max_body_size<\/span> <span class=\"mi\">4<\/span><span class=\"no\">G<\/span><span class=\"p\">;<\/span>\r\n  <span class=\"n\">keepalive_timeout<\/span> <span class=\"mi\">10<\/span><span class=\"p\">;<\/span>\r\n\r\n  <span class=\"n\">error_page<\/span> <span class=\"mi\">500<\/span> <span class=\"mi\">502<\/span> <span class=\"mi\">504<\/span> <span class=\"o\">\/<\/span><span class=\"mi\">500<\/span><span class=\"p\">.<\/span><span class=\"nf\">html<\/span><span class=\"p\">;<\/span>\r\n  <span class=\"n\">error_page<\/span> <span class=\"mi\">503<\/span> <span class=\"err\">@<\/span><span class=\"mi\">503<\/span><span class=\"p\">;<\/span>\r\n\r\n  <span class=\"n\">location<\/span> <span class=\"vi\">@puma_myapp_production<\/span> <span class=\"p\">{<\/span>\r\n    <span class=\"n\">proxy_http_version<\/span> <span class=\"mf\">1.1<\/span><span class=\"p\">;<\/span>\r\n    <span class=\"n\">proxy_set_header<\/span> <span class=\"no\">X<\/span><span class=\"o\">-<\/span><span class=\"no\">Forwarded<\/span><span class=\"o\">-<\/span><span class=\"no\">For<\/span> <span class=\"vg\">$proxy_add_x_forwarded_for<\/span><span class=\"p\">;<\/span>\r\n    <span class=\"n\">proxy_set_header<\/span> <span class=\"no\">Host<\/span> <span class=\"vg\">$host<\/span><span class=\"p\">;<\/span>\r\n    <span class=\"n\">proxy_redirect<\/span> <span class=\"n\">off<\/span><span class=\"p\">;<\/span>\r\n    <span class=\"n\">proxy_set_header<\/span> <span class=\"no\">Upgrade<\/span> <span class=\"vg\">$http_upgrade<\/span><span class=\"p\">;<\/span>\r\n    <span class=\"n\">proxy_set_header<\/span> <span class=\"no\">Connection<\/span> <span class=\"s2\">\"Upgrade\"<\/span><span class=\"p\">;<\/span>\r\n    <span class=\"n\">proxy_set_header<\/span> <span class=\"no\">X<\/span><span class=\"o\">-<\/span><span class=\"no\">Forwarded<\/span><span class=\"o\">-<\/span><span class=\"no\">Proto<\/span> <span class=\"n\">http<\/span><span class=\"p\">;<\/span>\r\n    <span class=\"n\">proxy_pass<\/span> <span class=\"n\">http<\/span><span class=\"ss\">:\/<\/span><span class=\"o\">\/<\/span><span class=\"n\">puma_myapp_production<\/span><span class=\"p\">;<\/span>\r\n    <span class=\"c1\"># limit_req zone=one;<\/span>\r\n    <span class=\"n\">access_log<\/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=\"n\">shared<\/span><span class=\"o\">\/<\/span><span class=\"n\">log<\/span><span class=\"o\">\/<\/span><span class=\"n\">nginx<\/span><span class=\"p\">.<\/span><span class=\"nf\">access<\/span><span class=\"p\">.<\/span><span class=\"nf\">log<\/span><span class=\"p\">;<\/span>\r\n    <span class=\"n\">error_log<\/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=\"n\">shared<\/span><span class=\"o\">\/<\/span><span class=\"n\">log<\/span><span class=\"o\">\/<\/span><span class=\"n\">nginx<\/span><span class=\"p\">.<\/span><span class=\"nf\">error<\/span><span class=\"p\">.<\/span><span class=\"nf\">log<\/span><span class=\"p\">;<\/span>\r\n\r\n    <span class=\"c1\"># Basic\u8a8d\u8a3c<\/span>\r\n    <span class=\"n\">auth_basic<\/span> <span class=\"s2\">\"Restricted\"<\/span><span class=\"p\">;<\/span> <span class=\"o\">&lt;=<\/span><span class=\"err\">\u30c6\u30b9\u30c8\u7528\u306e\u30b5\u30fc\u30d0\u30fc\u306a\u306e\u3067<\/span><span class=\"no\">Basic<\/span><span class=\"err\">\u8a8d\u8a3c\u3092\u4ed8\u3051\u305f<\/span>\r\n    <span class=\"n\">auth_basic_user_file<\/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=\"p\">.<\/span><span class=\"nf\">htpasswd<\/span><span class=\"p\">;<\/span><span class=\"err\">\u3000<\/span><span class=\"o\">&lt;=<\/span><span class=\"err\">\u30c6\u30b9\u30c8\u7528\u306e\u30b5\u30fc\u30d0\u30fc\u306a\u306e\u3067<\/span><span class=\"no\">Basic<\/span><span class=\"err\">\u8a8d\u8a3c\u3092\u4ed8\u3051\u305f<\/span>\r\n  <span class=\"p\">}<\/span>\r\n\r\n  <span class=\"n\">location<\/span> <span class=\"o\">^~<\/span> <span class=\"sr\">\/assets\/<\/span> <span class=\"p\">{<\/span>\r\n    <span class=\"n\">gzip_static<\/span> <span class=\"n\">on<\/span><span class=\"p\">;<\/span>\r\n    <span class=\"n\">expires<\/span> <span class=\"n\">max<\/span><span class=\"p\">;<\/span>\r\n    <span class=\"n\">add_header<\/span> <span class=\"no\">Cache<\/span><span class=\"o\">-<\/span><span class=\"no\">Control<\/span> <span class=\"kp\">public<\/span><span class=\"p\">;<\/span>\r\n  <span class=\"p\">}<\/span>\r\n\r\n  <span class=\"n\">location<\/span> <span class=\"o\">=<\/span> <span class=\"sr\">\/50x.html {\r\n    root html;\r\n  }\r\n\r\n  location = \/<\/span><span class=\"mi\">404<\/span><span class=\"p\">.<\/span><span class=\"nf\">html<\/span> <span class=\"p\">{<\/span>\r\n    <span class=\"n\">root<\/span> <span class=\"n\">html<\/span><span class=\"p\">;<\/span>\r\n  <span class=\"p\">}<\/span>\r\n\r\n  <span class=\"n\">location<\/span> <span class=\"err\">@<\/span><span class=\"mi\">503<\/span> <span class=\"p\">{<\/span>\r\n    <span class=\"n\">error_page<\/span> <span class=\"mi\">405<\/span> <span class=\"o\">=<\/span> <span class=\"sr\">\/system\/m<\/span><span class=\"n\">aintenance<\/span><span class=\"p\">.<\/span><span class=\"nf\">html<\/span><span class=\"p\">;<\/span>\r\n    <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"o\">-<\/span><span class=\"n\">f<\/span> <span class=\"vg\">$document_root<\/span><span class=\"o\">\/<\/span><span class=\"nb\">system<\/span><span class=\"o\">\/<\/span><span class=\"n\">maintenance<\/span><span class=\"p\">.<\/span><span class=\"nf\">html<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\r\n      <span class=\"n\">rewrite<\/span> <span class=\"o\">^<\/span><span class=\"p\">(.<\/span><span class=\"nf\">*<\/span><span class=\"p\">)<\/span><span class=\"err\">$<\/span> <span class=\"o\">\/<\/span><span class=\"nb\">system<\/span><span class=\"o\">\/<\/span><span class=\"n\">maintenance<\/span><span class=\"p\">.<\/span><span class=\"nf\">html<\/span> <span class=\"k\">break<\/span><span class=\"p\">;<\/span>\r\n    <span class=\"p\">}<\/span>\r\n    <span class=\"n\">rewrite<\/span> <span class=\"o\">^<\/span><span class=\"p\">(.<\/span><span class=\"nf\">*<\/span><span class=\"p\">)<\/span><span class=\"err\">$<\/span> <span class=\"o\">\/<\/span><span class=\"mi\">503<\/span><span class=\"p\">.<\/span><span class=\"nf\">html<\/span> <span class=\"k\">break<\/span><span class=\"p\">;<\/span>\r\n  <span class=\"p\">}<\/span>\r\n\r\n  <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"vg\">$request_method<\/span> <span class=\"o\">!~<\/span> <span class=\"o\">^<\/span><span class=\"p\">(<\/span><span class=\"no\">GET<\/span><span class=\"o\">|<\/span><span class=\"no\">HEAD<\/span><span class=\"o\">|<\/span><span class=\"no\">PUT<\/span><span class=\"o\">|<\/span><span class=\"no\">PATCH<\/span><span class=\"o\">|<\/span><span class=\"no\">POST<\/span><span class=\"o\">|<\/span><span class=\"no\">DELETE<\/span><span class=\"o\">|<\/span><span class=\"no\">OPTIONS<\/span><span class=\"p\">)<\/span><span class=\"err\">$<\/span> <span class=\"p\">){<\/span>\r\n    <span class=\"k\">return<\/span> <span class=\"mi\">405<\/span><span class=\"p\">;<\/span>\r\n  <span class=\"p\">}<\/span>\r\n\r\n  <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"o\">-<\/span><span class=\"n\">f<\/span> <span class=\"vg\">$document_root<\/span><span class=\"o\">\/<\/span><span class=\"nb\">system<\/span><span class=\"o\">\/<\/span><span class=\"n\">maintenance<\/span><span class=\"p\">.<\/span><span class=\"nf\">html<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\r\n    <span class=\"k\">return<\/span> <span class=\"mi\">503<\/span><span class=\"p\">;<\/span>\r\n  <span class=\"p\">}<\/span>\r\n<span class=\"p\">}<\/span>\r\n<\/code><\/pre>\n<h4>\u68c0\u67e5\u548c\u52a0\u8f7dnginx\u914d\u7f6e\u3002<\/h4>\n<p>\u7531\u4e8e\u6709\u5f88\u591a\u5173\u4e8eNginx\u7684\u89e3\u91ca\u6587\u7ae0\uff0c\u6240\u4ee5\u6211\u4e0d\u4f1a\u8be6\u7ec6\u8ba8\u8bba\u3002<\/p>\n<pre class=\"post-pre\"><code>$ sudo nginx -t\r\nnginx: the configuration file \/etc\/nginx\/nginx.conf syntax is ok\r\nnginx: configuration file \/etc\/nginx\/nginx.conf test is successful\r\n\r\n\u8d77\u52d5\r\n$ sudo nginx\r\n\r\n\u505c\u6b62\r\n$ sudo nginx -s stop\r\n\r\n\u8a2d\u5b9a\u306e\u518d\u8aad\u307f\u8fbc\u307f\r\n$ sudo nginx -s reload\r\n<\/code><\/pre>\n<h4>\u57fa\u672c\u8ba4\u8bc1<\/h4>\n<pre class=\"post-pre\"><code>$ sudo htpasswd -c \/etc\/nginx\/sites-available\/.htpasswd username\r\nNew password: password\r\nRe-type new password: password\r\nAdding password for user username\r\n<\/code><\/pre>\n<h4>\u5f6a\u9a6c\u7684\u64cd\u4f5c<\/h4>\n<pre class=\"post-pre\"><code><span class=\"err\">\u8d77\u52d5<\/span>\r\n<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\">:start<\/span>\r\n\r\n<span class=\"err\">\u505c\u6b62<\/span>\r\n<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\">:stop<\/span>\r\n\r\n<span class=\"err\">\u72b6\u614b\u78ba\u8a8d<\/span>\r\n<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\">:status<\/span>\r\n<\/code><\/pre>\n<h4>\u8bf7\u4f7f\u7528\u6d4f\u89c8\u5668\u786e\u8ba4<\/h4>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d158837434c4406bfeb39\/96-0.png\" alt=\"\u30b9\u30af\u30ea\u30fc\u30f3\u30b7\u30e7\u30c3\u30c8 2020-03-14 \u5348\u5f8c5.58.51.png\" \/><\/div>\n<h1>\u8bf7\u53c2\u9605\u76f8\u5173\u6587\u7ae0\u3002<\/h1>\n<p>\u5982\u4f55\u5728CentOS 8 \/ RHEL 8\u4e0a\u5b89\u88c5MySQL 8.0<br \/>\n\u5728CentOS 8\u4e0a\u5b89\u88c5\u548c\u66f4\u65b0\u6700\u65b0\u7248\u7684Git\u7684\u65b9\u6cd5<br \/>\n\u5728CentOS 8\u4e0a\u5b89\u88c5\u6700\u65b0\u7248\u672c\u7684Nginx stable\uff08\u5b98\u65b9\u8f6f\u4ef6\u6e90\uff09<br \/>\n\u65b0\u5efaRails\u9879\u76ee\u7684\u6b65\u9aa4\u603b\u7ed3<br \/>\n\u5173\u4e8e\u9047\u5230capistrano\u65e0\u6cd5\u8fde\u63a5\u5230GitHub\u7684\u89e3\u51b3\u65b9\u6848<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u9996\u5148 \u5728 CentOS7 \u6587\u7ae0\u4e4b\u540e\uff0c\u6211\u4e5f\u5c1d\u8bd5\u4e86 CentOS8\uff0c\u5e76\u8bb0\u5f55\u4e0b\u6765\u3002 Vultr\u6700\u4fbf\u5b9c\u768410GB SS [&hellip;]<\/p>\n","protected":false},"author":6,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-33104","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>\u5728Vultr VPS\u4e0a\u5b89\u88c5CentOS8+Rails 6+MySQL8+nginx\uff0c\u5e76\u4f7f\u7528Capistrano3\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\/\u5728vultr-vps\u4e0a\u5b89\u88c5centos8rails-6mysql8nginx\uff0c\u5e76\u4f7f\u7528capistrano3\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=\"\u5728Vultr VPS\u4e0a\u5b89\u88c5CentOS8+Rails 6+MySQL8+nginx\uff0c\u5e76\u4f7f\u7528Capistrano3\u8fdb\u884c\u90e8\u7f72\" \/>\n<meta property=\"og:description\" content=\"\u9996\u5148 \u5728 CentOS7 \u6587\u7ae0\u4e4b\u540e\uff0c\u6211\u4e5f\u5c1d\u8bd5\u4e86 CentOS8\uff0c\u5e76\u8bb0\u5f55\u4e0b\u6765\u3002 Vultr\u6700\u4fbf\u5b9c\u768410GB SS [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.silicloud.com\/zh\/blog\/\u5728vultr-vps\u4e0a\u5b89\u88c5centos8rails-6mysql8nginx\uff0c\u5e76\u4f7f\u7528capistrano3\u8fdb\u884c\u90e8\u7f72\u3002\/\" \/>\n<meta property=\"og:site_name\" content=\"Blog - Silicon Cloud\" \/>\n<meta property=\"article:published_time\" content=\"2023-07-19T09:09:52+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-05-04T08:47:13+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d158837434c4406bfeb39\/5-0.png\" \/>\n<meta name=\"author\" content=\"\u6587, \u7fd4\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u4f5c\u8005\" \/>\n\t<meta name=\"twitter:data1\" content=\"\u6587, \u7fd4\" \/>\n\t<meta name=\"twitter:label2\" content=\"\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4\" \/>\n\t<meta name=\"twitter:data2\" content=\"10 \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%a8vultr-vps%e4%b8%8a%e5%ae%89%e8%a3%85centos8rails-6mysql8nginx%ef%bc%8c%e5%b9%b6%e4%bd%bf%e7%94%a8capistrano3%e8%bf%9b%e8%a1%8c%e9%83%a8%e7%bd%b2%e3%80%82\/\",\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e5%9c%a8vultr-vps%e4%b8%8a%e5%ae%89%e8%a3%85centos8rails-6mysql8nginx%ef%bc%8c%e5%b9%b6%e4%bd%bf%e7%94%a8capistrano3%e8%bf%9b%e8%a1%8c%e9%83%a8%e7%bd%b2%e3%80%82\/\",\"name\":\"\u5728Vultr VPS\u4e0a\u5b89\u88c5CentOS8+Rails 6+MySQL8+nginx\uff0c\u5e76\u4f7f\u7528Capistrano3\u8fdb\u884c\u90e8\u7f72 - Blog - Silicon Cloud\",\"isPartOf\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#website\"},\"datePublished\":\"2023-07-19T09:09:52+00:00\",\"dateModified\":\"2024-05-04T08:47:13+00:00\",\"author\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/64d5cc7727fffbff2f9a2a8da1de3e5c\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e5%9c%a8vultr-vps%e4%b8%8a%e5%ae%89%e8%a3%85centos8rails-6mysql8nginx%ef%bc%8c%e5%b9%b6%e4%bd%bf%e7%94%a8capistrano3%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%a8vultr-vps%e4%b8%8a%e5%ae%89%e8%a3%85centos8rails-6mysql8nginx%ef%bc%8c%e5%b9%b6%e4%bd%bf%e7%94%a8capistrano3%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%a8vultr-vps%e4%b8%8a%e5%ae%89%e8%a3%85centos8rails-6mysql8nginx%ef%bc%8c%e5%b9%b6%e4%bd%bf%e7%94%a8capistrano3%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\":\"\u5728Vultr VPS\u4e0a\u5b89\u88c5CentOS8+Rails 6+MySQL8+nginx\uff0c\u5e76\u4f7f\u7528Capistrano3\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\/64d5cc7727fffbff2f9a2a8da1de3e5c\",\"name\":\"\u6587, \u7fd4\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/920c3d673e0bccacc98e5e6b7149bb3c22edd8d39cb753e5d7d7e471498118a1?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/920c3d673e0bccacc98e5e6b7149bb3c22edd8d39cb753e5d7d7e471498118a1?s=96&d=mm&r=g\",\"caption\":\"\u6587, \u7fd4\"},\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/author\/wenxiang\/\"},{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e5%9c%a8vultr-vps%e4%b8%8a%e5%ae%89%e8%a3%85centos8rails-6mysql8nginx%ef%bc%8c%e5%b9%b6%e4%bd%bf%e7%94%a8capistrano3%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":"\u5728Vultr VPS\u4e0a\u5b89\u88c5CentOS8+Rails 6+MySQL8+nginx\uff0c\u5e76\u4f7f\u7528Capistrano3\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\/\u5728vultr-vps\u4e0a\u5b89\u88c5centos8rails-6mysql8nginx\uff0c\u5e76\u4f7f\u7528capistrano3\u8fdb\u884c\u90e8\u7f72\u3002\/","og_locale":"zh_CN","og_type":"article","og_title":"\u5728Vultr VPS\u4e0a\u5b89\u88c5CentOS8+Rails 6+MySQL8+nginx\uff0c\u5e76\u4f7f\u7528Capistrano3\u8fdb\u884c\u90e8\u7f72","og_description":"\u9996\u5148 \u5728 CentOS7 \u6587\u7ae0\u4e4b\u540e\uff0c\u6211\u4e5f\u5c1d\u8bd5\u4e86 CentOS8\uff0c\u5e76\u8bb0\u5f55\u4e0b\u6765\u3002 Vultr\u6700\u4fbf\u5b9c\u768410GB SS [&hellip;]","og_url":"https:\/\/www.silicloud.com\/zh\/blog\/\u5728vultr-vps\u4e0a\u5b89\u88c5centos8rails-6mysql8nginx\uff0c\u5e76\u4f7f\u7528capistrano3\u8fdb\u884c\u90e8\u7f72\u3002\/","og_site_name":"Blog - Silicon Cloud","article_published_time":"2023-07-19T09:09:52+00:00","article_modified_time":"2024-05-04T08:47:13+00:00","og_image":[{"url":"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d158837434c4406bfeb39\/5-0.png"}],"author":"\u6587, \u7fd4","twitter_card":"summary_large_image","twitter_misc":{"\u4f5c\u8005":"\u6587, \u7fd4","\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4":"10 \u5206"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%9c%a8vultr-vps%e4%b8%8a%e5%ae%89%e8%a3%85centos8rails-6mysql8nginx%ef%bc%8c%e5%b9%b6%e4%bd%bf%e7%94%a8capistrano3%e8%bf%9b%e8%a1%8c%e9%83%a8%e7%bd%b2%e3%80%82\/","url":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%9c%a8vultr-vps%e4%b8%8a%e5%ae%89%e8%a3%85centos8rails-6mysql8nginx%ef%bc%8c%e5%b9%b6%e4%bd%bf%e7%94%a8capistrano3%e8%bf%9b%e8%a1%8c%e9%83%a8%e7%bd%b2%e3%80%82\/","name":"\u5728Vultr VPS\u4e0a\u5b89\u88c5CentOS8+Rails 6+MySQL8+nginx\uff0c\u5e76\u4f7f\u7528Capistrano3\u8fdb\u884c\u90e8\u7f72 - Blog - Silicon Cloud","isPartOf":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/#website"},"datePublished":"2023-07-19T09:09:52+00:00","dateModified":"2024-05-04T08:47:13+00:00","author":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/64d5cc7727fffbff2f9a2a8da1de3e5c"},"breadcrumb":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%9c%a8vultr-vps%e4%b8%8a%e5%ae%89%e8%a3%85centos8rails-6mysql8nginx%ef%bc%8c%e5%b9%b6%e4%bd%bf%e7%94%a8capistrano3%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%a8vultr-vps%e4%b8%8a%e5%ae%89%e8%a3%85centos8rails-6mysql8nginx%ef%bc%8c%e5%b9%b6%e4%bd%bf%e7%94%a8capistrano3%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%a8vultr-vps%e4%b8%8a%e5%ae%89%e8%a3%85centos8rails-6mysql8nginx%ef%bc%8c%e5%b9%b6%e4%bd%bf%e7%94%a8capistrano3%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":"\u5728Vultr VPS\u4e0a\u5b89\u88c5CentOS8+Rails 6+MySQL8+nginx\uff0c\u5e76\u4f7f\u7528Capistrano3\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\/64d5cc7727fffbff2f9a2a8da1de3e5c","name":"\u6587, \u7fd4","image":{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/920c3d673e0bccacc98e5e6b7149bb3c22edd8d39cb753e5d7d7e471498118a1?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/920c3d673e0bccacc98e5e6b7149bb3c22edd8d39cb753e5d7d7e471498118a1?s=96&d=mm&r=g","caption":"\u6587, \u7fd4"},"url":"https:\/\/www.silicloud.com\/zh\/blog\/author\/wenxiang\/"},{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%9c%a8vultr-vps%e4%b8%8a%e5%ae%89%e8%a3%85centos8rails-6mysql8nginx%ef%bc%8c%e5%b9%b6%e4%bd%bf%e7%94%a8capistrano3%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\/33104","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\/6"}],"replies":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/comments?post=33104"}],"version-history":[{"count":2,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/33104\/revisions"}],"predecessor-version":[{"id":99504,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/33104\/revisions\/99504"}],"wp:attachment":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/media?parent=33104"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/categories?post=33104"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/tags?post=33104"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}