<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Posts on 静夜思己过 - 猿资猿味 - 高波的博客</title><link>https://gaoboy.com/post/</link><description>Recent content in Posts on 静夜思己过 - 猿资猿味 - 高波的博客</description><generator>Hugo</generator><language>zh-cn</language><copyright>&lt;a rel="license noopener" href="https://beian.miit.gov.cn/" target="_blank">浙ICP备14043338号-2&lt;/a>~&lt;a rel="license noopener" href="http://www.beian.gov.cn/portal/registerSystemInfo?recordcode=33010802003111" target="_blank">浙公网安备 33010802003111号&lt;/a></copyright><lastBuildDate>Wed, 18 Mar 2026 16:00:00 +0800</lastBuildDate><atom:link href="https://gaoboy.com/post/index.xml" rel="self" type="application/rss+xml"/><item><title>Hugo 博客双仓库部署方案：GitHub Pages + Vercel</title><link>https://gaoboy.com/post/hugo-dual-repo-deploy-github-pages-vercel/</link><pubDate>Wed, 18 Mar 2026 15:00:00 +0800</pubDate><guid>https://gaoboy.com/post/hugo-dual-repo-deploy-github-pages-vercel/</guid><description>&lt;p>本文介绍如何用两个 GitHub 仓库实现 Hugo 博客的自动化构建和部署，同时接入 Vercel 作为免费 CDN 加速方案。&lt;/p></description></item><item><title>xurl OAuth2 授权配置指南</title><link>https://gaoboy.com/post/xurl-oauth2-authorization-guide/</link><pubDate>Wed, 18 Mar 2026 10:20:00 +0800</pubDate><guid>https://gaoboy.com/post/xurl-oauth2-authorization-guide/</guid><description>&lt;h2 id="问题">问题&lt;/h2>
&lt;p>使用 &lt;code>xurl auth oauth2&lt;/code> 进行 OAuth2 授权时，浏览器跳转到 X 授权页面后提示：&lt;/p>
&lt;blockquote>
&lt;p>你无法获得该应用的访问权限。请返回并尝试重新登录。&lt;/p>
&lt;/blockquote></description></item><item><title>AWS Bedrock Claude模型的OpenAI兼容API代理服务实现</title><link>https://gaoboy.com/post/aws-claude-api-proxy-openai-service/</link><pubDate>Mon, 17 Mar 2025 13:40:11 +0800</pubDate><guid>https://gaoboy.com/post/aws-claude-api-proxy-openai-service/</guid><description/></item><item><title>Go Antlr4 Plsql Sql Parser Demo</title><link>https://gaoboy.com/post/go-antlr4-plsql-sql-parser-demo/</link><pubDate>Fri, 20 Jan 2023 20:47:53 +0800</pubDate><guid>https://gaoboy.com/post/go-antlr4-plsql-sql-parser-demo/</guid><description>&lt;h1 id="准备">准备&lt;/h1>
&lt;h2 id="一-antlrgrammars-v4-下载plsql">一. antlr/grammars-v4 下载plsql&lt;/h2>
&lt;p>&lt;a href="https://github.com/antlr/grammars-v4/tree/master/sql/plsql">https://github.com/antlr/grammars-v4/tree/master/sql/plsql&lt;/a>&lt;/p>
&lt;p>下载2个&lt;code>.g4&lt;/code>的文件&lt;/p>
&lt;p>&lt;a href="https://github.com/antlr/grammars-v4/blob/master/sql/plsql/PlSqlLexer.g4">PlSqlLexer.g4&lt;/a>&lt;/p>
&lt;p>&lt;a href="https://github.com/antlr/grammars-v4/blob/master/sql/plsql/PlSqlParser.g4">PlSqlParser.g4&lt;/a>&lt;/p>
&lt;h2 id="二-下载antlr-4101-completejarhttpswwwantlrorgdownloadantlr-4101-completejar">二. 下载&lt;a href="https://www.antlr.org/download/antlr-4.10.1-complete.jar">antlr-4.10.1-complete.jar&lt;/a>&lt;/h2>
&lt;p>注意运行此&lt;code>jar&lt;/code>包需要&lt;code>jdk11&lt;/code>。&lt;/p>
&lt;p>&lt;strong>截至2023-01-20，antlr-4.11.0-complete.jar及以上版本生成出的parser本人未能修改并成功跑通，多次降低版本至4.10.1才勉强改动后跑起来了，如有纰漏请指正。&lt;/strong>&lt;/p></description></item><item><title>Docker Compose单机安装elasticsearch7.16.3</title><link>https://gaoboy.com/post/docker-compose-install-elasticsearch-cluster-kibana-cerebro/</link><pubDate>Tue, 08 Mar 2022 21:02:53 +0800</pubDate><guid>https://gaoboy.com/post/docker-compose-install-elasticsearch-cluster-kibana-cerebro/</guid><description>&lt;p>&lt;a href="https://www.elastic.co/guide/en/elasticsearch/reference/7.16/docker.html">https://www.elastic.co/guide/en/elasticsearch/reference/7.16/docker.html&lt;/a>&lt;/p>
&lt;h2 id="文件结构">文件结构&lt;/h2>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>└── elasticsearch
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ├── node-00
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> │ ├── config
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> │ │ └── elasticsearch.yml
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> │ ├── data
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> │ ├── docker-compose.yml
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> │ ├── logs
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> │ └── plugins
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> │ └── ik
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ├── node-01
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> │ ├── config
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> │ │ └── elasticsearch.yml
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> │ ├── data
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> │ ├── docker-compose.yml
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> │ ├── logs
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> │ └── plugins
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> │ └── ik
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> └── node-02
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ├── config
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> │ └── elasticsearch.yml
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ├── data
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ├── docker-compose.yml
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ├── logs
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> └── plugins
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> └── ik
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>chown 1000:1000 data
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>chown 1000:1000 logs
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="配置">配置&lt;/h2>
&lt;ol>
&lt;li>创建公用docker network&lt;/li>
&lt;/ol>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>docker network ls
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>docker network create --driver bridge elastic
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ol start="2">
&lt;li>创建各个node的docker-compose.yml&lt;/li>
&lt;/ol>
&lt;ul>
&lt;li>node-00&lt;/li>
&lt;/ul>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">version&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;3&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">services&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">es-node-00&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">image&lt;/span>: &lt;span style="color:#ae81ff">docker.elastic.co/elasticsearch/elasticsearch:7.16.3&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">container_name&lt;/span>: &lt;span style="color:#ae81ff">es-node-00&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">environment&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#e6db74">&amp;#34;TZ=Asia/Shanghai&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#e6db74">&amp;#34;ES_JAVA_OPTS=-Xms1g -Xmx1g&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">restart&lt;/span>: &lt;span style="color:#ae81ff">always&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">ulimits&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">memlock&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">soft&lt;/span>: -&lt;span style="color:#ae81ff">1&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">hard&lt;/span>: -&lt;span style="color:#ae81ff">1&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">nofile&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">soft&lt;/span>: &lt;span style="color:#ae81ff">65536&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">hard&lt;/span>: &lt;span style="color:#ae81ff">65536&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">ports&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#ae81ff">9200&lt;/span>:&lt;span style="color:#ae81ff">9200&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#ae81ff">9300&lt;/span>:&lt;span style="color:#ae81ff">9300&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">networks&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#ae81ff">elastic&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">volumes&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#ae81ff">./config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#ae81ff">./data:/usr/share/elasticsearch/data&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#ae81ff">./plugins:/usr/share/elasticsearch/plugins&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#ae81ff">./logs:/usr/share/elasticsearch/logs&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">networks&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">elastic&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">external&lt;/span>: &lt;span style="color:#66d9ef">true&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ul>
&lt;li>node-01&lt;/li>
&lt;/ul>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">version&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;3&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">services&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">es-node-01&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">image&lt;/span>: &lt;span style="color:#ae81ff">docker.elastic.co/elasticsearch/elasticsearch:7.16.3&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">container_name&lt;/span>: &lt;span style="color:#ae81ff">es-node-01&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">environment&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#e6db74">&amp;#34;TZ=Asia/Shanghai&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#e6db74">&amp;#34;ES_JAVA_OPTS=-Xms1g -Xmx1g&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">restart&lt;/span>: &lt;span style="color:#ae81ff">always&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">ulimits&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">memlock&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">soft&lt;/span>: -&lt;span style="color:#ae81ff">1&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">hard&lt;/span>: -&lt;span style="color:#ae81ff">1&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">nofile&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">soft&lt;/span>: &lt;span style="color:#ae81ff">65536&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">hard&lt;/span>: &lt;span style="color:#ae81ff">65536&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">ports&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#ae81ff">9201&lt;/span>:&lt;span style="color:#ae81ff">9200&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#ae81ff">9301&lt;/span>:&lt;span style="color:#ae81ff">9300&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">networks&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#ae81ff">elastic&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">volumes&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#ae81ff">./config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#ae81ff">./data:/usr/share/elasticsearch/data&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#ae81ff">./plugins:/usr/share/elasticsearch/plugins&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#ae81ff">./logs:/usr/share/elasticsearch/logs&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">networks&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">elastic&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">external&lt;/span>: &lt;span style="color:#66d9ef">true&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ul>
&lt;li>node-02&lt;/li>
&lt;/ul>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">version&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;3&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">services&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">es-node-02&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">image&lt;/span>: &lt;span style="color:#ae81ff">docker.elastic.co/elasticsearch/elasticsearch:7.16.3&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">container_name&lt;/span>: &lt;span style="color:#ae81ff">es-node-02&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">environment&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#e6db74">&amp;#34;TZ=Asia/Shanghai&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#e6db74">&amp;#34;ES_JAVA_OPTS=-Xms1g -Xmx1g&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">restart&lt;/span>: &lt;span style="color:#ae81ff">always&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">ulimits&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">memlock&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">soft&lt;/span>: -&lt;span style="color:#ae81ff">1&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">hard&lt;/span>: -&lt;span style="color:#ae81ff">1&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">nofile&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">soft&lt;/span>: &lt;span style="color:#ae81ff">65536&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">hard&lt;/span>: &lt;span style="color:#ae81ff">65536&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">ports&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#ae81ff">9202&lt;/span>:&lt;span style="color:#ae81ff">9200&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#ae81ff">9302&lt;/span>:&lt;span style="color:#ae81ff">9300&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">networks&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#ae81ff">elastic&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">volumes&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#ae81ff">./config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#ae81ff">./data:/usr/share/elasticsearch/data&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#ae81ff">./plugins:/usr/share/elasticsearch/plugins&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#ae81ff">./logs:/usr/share/elasticsearch/logs&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">networks&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">elastic&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">external&lt;/span>: &lt;span style="color:#66d9ef">true&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ol start="3">
&lt;li>config/elasticsearch.yml&lt;/li>
&lt;/ol>
&lt;ul>
&lt;li>node-00&lt;/li>
&lt;/ul>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">cluster.name&lt;/span>: &lt;span style="color:#ae81ff">my-es-cluster&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">node.name&lt;/span>: &lt;span style="color:#ae81ff">es-node-00&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">network.host&lt;/span>: &lt;span style="color:#ae81ff">es-node-00&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">http.port&lt;/span>: &lt;span style="color:#ae81ff">9200&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">transport.port&lt;/span>: &lt;span style="color:#ae81ff">9300&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">http.cors.enabled&lt;/span>: &lt;span style="color:#66d9ef">true&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">http.cors.allow-origin&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;*&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">discovery.seed_hosts&lt;/span>: [&lt;span style="color:#e6db74">&amp;#34;es-node-01&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;es-node-02&amp;#34;&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">bootstrap.memory_lock&lt;/span>: &lt;span style="color:#66d9ef">true&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">cluster.initial_master_nodes&lt;/span>: [&lt;span style="color:#e6db74">&amp;#34;es-node-00&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;es-node-01&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;es-node-02&amp;#34;&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">#disable the usage of geoip functionality&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">ingest.geoip.downloader.enabled&lt;/span>: &lt;span style="color:#66d9ef">false&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ul>
&lt;li>node-01&lt;/li>
&lt;/ul>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">cluster.name&lt;/span>: &lt;span style="color:#ae81ff">my-es-cluster&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">node.name&lt;/span>: &lt;span style="color:#ae81ff">es-node-01&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">network.host&lt;/span>: &lt;span style="color:#ae81ff">es-node-01&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">http.port&lt;/span>: &lt;span style="color:#ae81ff">9200&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">transport.port&lt;/span>: &lt;span style="color:#ae81ff">9300&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">http.cors.enabled&lt;/span>: &lt;span style="color:#66d9ef">true&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">http.cors.allow-origin&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;*&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">discovery.seed_hosts&lt;/span>: [&lt;span style="color:#e6db74">&amp;#34;es-node-00&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;es-node-02&amp;#34;&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">bootstrap.memory_lock&lt;/span>: &lt;span style="color:#66d9ef">true&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">cluster.initial_master_nodes&lt;/span>: [&lt;span style="color:#e6db74">&amp;#34;es-node-00&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;es-node-01&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;es-node-02&amp;#34;&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">#disable the usage of geoip functionality&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">ingest.geoip.downloader.enabled&lt;/span>: &lt;span style="color:#66d9ef">false&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ul>
&lt;li>node-02&lt;/li>
&lt;/ul>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">cluster.name&lt;/span>: &lt;span style="color:#ae81ff">my-es-cluster&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">node.name&lt;/span>: &lt;span style="color:#ae81ff">es-node-02&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">network.host&lt;/span>: &lt;span style="color:#ae81ff">es-node-02&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">http.port&lt;/span>: &lt;span style="color:#ae81ff">9200&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">transport.port&lt;/span>: &lt;span style="color:#ae81ff">9300&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">http.cors.enabled&lt;/span>: &lt;span style="color:#66d9ef">true&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">http.cors.allow-origin&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;*&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">discovery.seed_hosts&lt;/span>: [&lt;span style="color:#e6db74">&amp;#34;es-node-00&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;es-node-01&amp;#34;&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">bootstrap.memory_lock&lt;/span>: &lt;span style="color:#66d9ef">true&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">cluster.initial_master_nodes&lt;/span>: [&lt;span style="color:#e6db74">&amp;#34;es-node-00&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;es-node-01&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;es-node-02&amp;#34;&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">#disable the usage of geoip functionality&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">ingest.geoip.downloader.enabled&lt;/span>: &lt;span style="color:#66d9ef">false&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="kibana">kibana&lt;/h2>
&lt;p>&lt;a href="https://www.elastic.co/guide/en/kibana/7.16/docker.html">https://www.elastic.co/guide/en/kibana/7.16/docker.html&lt;/a>&lt;/p></description></item><item><title>后端服务器安全检查清单</title><link>https://gaoboy.com/post/backend-server-security/</link><pubDate>Sat, 23 Oct 2021 14:58:47 +0800</pubDate><guid>https://gaoboy.com/post/backend-server-security/</guid><description/></item><item><title>Nacos多配置文件加载刷新、共享配置</title><link>https://gaoboy.com/post/nacos-extension-config-and-refresh/</link><pubDate>Sat, 28 Aug 2021 11:31:25 +0800</pubDate><guid>https://gaoboy.com/post/nacos-extension-config-and-refresh/</guid><description/></item><item><title>欧创新：深度解析DDD中台和微服务设计</title><link>https://gaoboy.com/post/ddd-msa/</link><pubDate>Fri, 09 Apr 2021 15:42:22 +0800</pubDate><guid>https://gaoboy.com/post/ddd-msa/</guid><description/></item><item><title>HikariCP 数据库连接池原理解析</title><link>https://gaoboy.com/post/hikaricp-database-connection-pooling-theory-analysis/</link><pubDate>Thu, 08 Apr 2021 16:59:12 +0800</pubDate><guid>https://gaoboy.com/post/hikaricp-database-connection-pooling-theory-analysis/</guid><description/></item><item><title>Unraid下Docker部署Nextcloud网盘</title><link>https://gaoboy.com/post/unraid-docker-nextcloud-setting-ddns-proxy/</link><pubDate>Wed, 24 Feb 2021 16:19:40 +0800</pubDate><guid>https://gaoboy.com/post/unraid-docker-nextcloud-setting-ddns-proxy/</guid><description/></item><item><title>M73 Tiny 黑苹果小记</title><link>https://gaoboy.com/post/m73-4k60hz-hackintosh/</link><pubDate>Sun, 14 Feb 2021 15:14:54 +0800</pubDate><guid>https://gaoboy.com/post/m73-4k60hz-hackintosh/</guid><description/></item><item><title>微服务架构设计模式</title><link>https://gaoboy.com/post/microservices-design-pattern/</link><pubDate>Sun, 15 Dec 2019 10:28:45 +0800</pubDate><guid>https://gaoboy.com/post/microservices-design-pattern/</guid><description>&lt;h1 id="概述">概述&lt;/h1>
&lt;p>微服务能在企业中发挥积极作用。因此了解微服务架构（MSA）设计的一般目标或原则，以及一些微服务的设计模式，都是是很有意义的&lt;/p>
&lt;ul>
&lt;li>&lt;strong>降低成本&lt;/strong>：MSA 降低了 IT 服务的设计、实现和管理的总体成本&lt;/li>
&lt;li>&lt;strong>提高交付速度&lt;/strong>：MSA 能够提高服务的实现速度&lt;/li>
&lt;li>&lt;strong>增强健壮性&lt;/strong>：MSA 能够增强我们服务网络的健壮性&lt;/li>
&lt;li>&lt;strong>提供可视化支持&lt;/strong>：MSA 能够为服务和网络提供更好的可视化支持&lt;/li>
&lt;/ul>
&lt;h1 id="微服务架构的构建原则">微服务架构的构建原则&lt;/h1>
&lt;ul>
&lt;li>伸缩能力&lt;/li>
&lt;li>可用性&lt;/li>
&lt;li>健壮性&lt;/li>
&lt;li>弹性&lt;/li>
&lt;li>独立的匿名服务&lt;/li>
&lt;li>去中心化的治理&lt;/li>
&lt;li>故障隔离&lt;/li>
&lt;li>自动供给&lt;/li>
&lt;li>通过 DevOps 实现持续交付&lt;/li>
&lt;/ul>
&lt;p>在系统建设中，坚持上述原则会遭遇很多挑战和问题。这些问题在很多解决方案中都会出现。如果能够正确的使用合适的设计模式，就能够克服这些问题。微服务的设计模式可以分为五大类，每个大类中都包含一些设计模式&lt;/p></description></item><item><title>重构单体为微服务</title><link>https://gaoboy.com/post/refactoring-a-monolith-into-microservices/</link><pubDate>Thu, 22 Nov 2018 17:50:02 +0800</pubDate><guid>https://gaoboy.com/post/refactoring-a-monolith-into-microservices/</guid><description>&lt;p>©️&lt;a href="https://www.nginx.com/blog/refactoring-a-monolith-into-microservices/">Refactoring a Monolith into Microservices&lt;/a>&lt;/p>
&lt;h1 id="微服务重构概述">微服务重构概述&lt;/h1>
&lt;p>单体应用程序转换为微服务的过程是应用程序现代化的一种形式。这是几十年来开发人员一直在做的事情。因此，在将应用程序重构为微服务时，有一些想法是可以重用的。&lt;/p></description></item><item><title>选择微服务部署策略</title><link>https://gaoboy.com/post/deploying-microservices/</link><pubDate>Thu, 22 Nov 2018 17:45:58 +0800</pubDate><guid>https://gaoboy.com/post/deploying-microservices/</guid><description>&lt;p>©️&lt;a href="https://www.nginx.com/blog/deploying-microservices/">Choosing a Microservices Deployment Strategy&lt;/a>&lt;/p>
&lt;h1 id="动机">动机&lt;/h1>
&lt;p>部署单体应用程序意味着运行一个或多个相同副本的单个较大的应用程序。您通常会在每台服务器上配置 N 个服务器（物理或虚拟）并运行 M 个应用程序实例。单体应用程序的部署并不总是非常简单，但它比部署微服务应用程序要简单得多。&lt;/p></description></item><item><title>事件驱动数据管理</title><link>https://gaoboy.com/post/event-driven-data-management-microservices/</link><pubDate>Thu, 22 Nov 2018 17:34:35 +0800</pubDate><guid>https://gaoboy.com/post/event-driven-data-management-microservices/</guid><description>&lt;p>©️&lt;a href="https://www.nginx.com/blog/event-driven-data-management-microservices/">Event-Driven Data Management for Microservices&lt;/a>&lt;/p>
&lt;h1 id="微服务和分布式数据">微服务和分布式数据&lt;/h1>
&lt;p>管理问题&lt;/p>
&lt;p>单体应用程序通常具有一个单一的关系型数据库。使用关系型数据库的一个主要优点是您的应用程序可以使用 ACID 事务，这些事务提供了以下重要保障：&lt;/p></description></item><item><title>服务发现</title><link>https://gaoboy.com/post/service-discovery-in-a-microservices-architecture/</link><pubDate>Thu, 22 Nov 2018 17:05:59 +0800</pubDate><guid>https://gaoboy.com/post/service-discovery-in-a-microservices-architecture/</guid><description>&lt;p>©️&lt;a href="https://www.nginx.com/blog/service-discovery-in-a-microservices-architecture/">Service Discovery in a Microservices Architecture&lt;/a>&lt;/p>
&lt;h1 id="为何使用服务发现">为何使用服务发现&lt;/h1>
&lt;p>我们假设您正在编写某些代码，这些代码调用了有 REST API 或 Thrift API 的服务。为了发送一个请求，您的代码需要知道服务实例的网络位置（ IP 地址与端口）。在运行于物理硬件上的传统应用中，服务实例的网络位置是相对静态的。例如，您的代码可以从偶尔更新的配置文件中读取网络位置。&lt;/p></description></item><item><title>进程间通信</title><link>https://gaoboy.com/post/building-microservices-inter-process-communication/</link><pubDate>Thu, 22 Nov 2018 16:52:33 +0800</pubDate><guid>https://gaoboy.com/post/building-microservices-inter-process-communication/</guid><description>&lt;p>©️&lt;a href="https://www.nginx.com/blog/building-microservices-inter-process-communication/">Building Microservices: Inter-Process Communication in a Microservices Architecture&lt;/a>&lt;/p>
&lt;h1 id="简介">简介&lt;/h1>
&lt;p>在单体应用程序中，组件可通过语言级方法或者函数相互调用。相比之下，基于微服务的应用程序是一个运行在多台机器上的分布式系统。通常，每个服务实例都是一个进程。&lt;/p></description></item><item><title>使用 API 网关</title><link>https://gaoboy.com/post/building-microservices-using-an-api-gateway/</link><pubDate>Thu, 22 Nov 2018 16:46:47 +0800</pubDate><guid>https://gaoboy.com/post/building-microservices-using-an-api-gateway/</guid><description>&lt;p>©️&lt;a href="https://www.nginx.com/blog/building-microservices-using-an-api-gateway/">Building Microservices: Using an API Gateway&lt;/a>&lt;/p>
&lt;h1 id="简介">简介&lt;/h1>
&lt;p>我们假设您正在为一个购物应用开发一个原生移动客户端。您可能需要实现一个产品详细信息页面，用于展示给定商品的信息。&lt;/p>
&lt;p>例如，图 2-1 展示了在 Amazon 的 Android 移动应用中滚动产品信息时所看的内容。&lt;/p></description></item><item><title>微服务简介</title><link>https://gaoboy.com/post/introduction-to-microservices/</link><pubDate>Thu, 22 Nov 2018 16:34:27 +0800</pubDate><guid>https://gaoboy.com/post/introduction-to-microservices/</guid><description>&lt;p>©️&lt;a href="https://www.nginx.com/blog/introduction-to-microservices/">Introduction to Microservices&lt;/a>&lt;/p>
&lt;h1 id="构建单体应用">构建单体应用&lt;/h1>
&lt;p>我们假设，您开始开发一个打车应用，打算与 Uber 和 Hailo 竞争。经过初步交流和需求收集，您开始手动或者使用类似 Rails、 Spring Boot、 Play 或者 Maven 等平台来生成一个新项目。&lt;/p></description></item><item><title>如何应对高并发</title><link>https://gaoboy.com/post/how-to-handle-high-concurrency/</link><pubDate>Thu, 22 Nov 2018 09:53:55 +0800</pubDate><guid>https://gaoboy.com/post/how-to-handle-high-concurrency/</guid><description>&lt;h1 id="什么是高并发">什么是高并发&lt;/h1>
&lt;p>高并发(High Concurrency)是互联网分布式系统架构设计中必须考虑的因素之一，它通常是指，通过设计保证系统能够同时并行处理很多请求。高并发相关常用的一些指标有 &lt;strong>响应时间(Response Time)&lt;/strong>，&lt;strong>吞吐量(Throughput)&lt;/strong>，&lt;strong>每秒查询率 QPS(Query Per Second)&lt;/strong>，&lt;strong>并发用户数&lt;/strong> 等。&lt;/p></description></item><item><title>CAP 定理和 BASE 理论</title><link>https://gaoboy.com/post/cap-base/</link><pubDate>Wed, 21 Nov 2018 18:05:44 +0800</pubDate><guid>https://gaoboy.com/post/cap-base/</guid><description>&lt;h1 id="cap-定理cap-theorem">CAP 定理（CAP theorem）&lt;/h1>
&lt;p>在计算机科学中，CAP 定理（CAP theorem）, 又被称作 布鲁尔定理（Brewer&amp;rsquo;s theorem）, 它指出对于一个分布式计算系统来说，不可能同时满足以下三点:&lt;/p></description></item><item><title>Docker Compose介绍</title><link>https://gaoboy.com/post/docker-compose/</link><pubDate>Tue, 01 Mar 2016 14:56:59 +0800</pubDate><guid>https://gaoboy.com/post/docker-compose/</guid><description>&lt;h1 id="yaml-配置文件语言">YAML 配置文件语言&lt;/h1>
&lt;p>YAML 是专门用来写配置文件的语言，非常简洁和强大，远比 JSON 格式方便。YAML 语言的设计目标，就是方便人类读写。它实质上是一种通用的数据串行化格式。它的基本语法规则如下：&lt;/p></description></item><item><title>Docker 安全介绍</title><link>https://gaoboy.com/post/docker-safety/</link><pubDate>Tue, 01 Mar 2016 14:33:34 +0800</pubDate><guid>https://gaoboy.com/post/docker-safety/</guid><description>&lt;h1 id="docker-内核命名空间">Docker 内核命名空间&lt;/h1>
&lt;p>Docker 容器和 LXC 容器很相似，所提供的安全特性也差不多。当用 &lt;code>docker run&lt;/code> 启动一个容器时，在后台 Docker 为容器创建了一个独立的命名空间和控制组集合。&lt;/p>
&lt;p>命名空间提供了最基础也是最直接的隔离，在容器中运行的进程不会被运行在主机上的进程和其它容器发现和作用。&lt;/p></description></item><item><title>Docker Network介绍</title><link>https://gaoboy.com/post/docker-network/</link><pubDate>Tue, 01 Mar 2016 14:18:33 +0800</pubDate><guid>https://gaoboy.com/post/docker-network/</guid><description>&lt;p>容器的连接（linking）系统是除了端口映射外，另一种跟容器中应用交互的方式。&lt;/p>
&lt;p>该系统会在源和接收容器之间创建一个隧道，接收容器可以看到源容器指定的信息。&lt;/p></description></item><item><title>Docker 数据卷介绍</title><link>https://gaoboy.com/post/docker-volume/</link><pubDate>Tue, 01 Mar 2016 14:13:08 +0800</pubDate><guid>https://gaoboy.com/post/docker-volume/</guid><description>&lt;p>数据卷是一个可供一个或多个容器使用的特殊目录，它绕过 UFS，可以提供很多有用的特性：&lt;/p>
&lt;ul>
&lt;li>数据卷可以在容器之间共享和重用&lt;/li>
&lt;li>对数据卷的修改会立马生效&lt;/li>
&lt;li>对数据卷的更新，不会影响镜像&lt;/li>
&lt;li>卷会一直存在，直到没有容器使用&lt;/li>
&lt;/ul>
&lt;blockquote>
&lt;p>数据卷的使用，类似于 Linux 下对目录或文件进行 mount。&lt;/p></description></item><item><title>Docker 仓库介绍</title><link>https://gaoboy.com/post/docker-hub/</link><pubDate>Tue, 01 Mar 2016 14:08:24 +0800</pubDate><guid>https://gaoboy.com/post/docker-hub/</guid><description>&lt;p>目前 Docker 官方维护了一个公共仓库 &lt;a href="https://hub.docker.com/">Docker Hub&lt;/a>，其中已经包括了超过 15,000 的镜像。大部分需求，都可以通过在 Docker Hub 中直接下载镜像来实现。&lt;/p>
&lt;h1 id="登录">登录&lt;/h1>
&lt;p>可以通过执行 &lt;code>docker login&lt;/code> 命令来输入用户名、密码和邮箱来完成注册和登录。 注册成功后，本地用户目录的 &lt;code>.dockercfg&lt;/code> 中将保存用户的认证信息。&lt;/p></description></item><item><title>Docker 容器介绍</title><link>https://gaoboy.com/post/docker-container/</link><pubDate>Tue, 01 Mar 2016 13:06:25 +0800</pubDate><guid>https://gaoboy.com/post/docker-container/</guid><description>&lt;h1 id="docker-进入容器">Docker 进入容器&lt;/h1>
&lt;p>在使用 &lt;code>-d&lt;/code> 参数时，容器启动后会进入后台。 某些时候需要进入容器进行操作，有很多种方法，包括使用 &lt;code>docker attach&lt;/code> 命令或 &lt;code>nsenter&lt;/code> 工具等。&lt;/p>
&lt;h2 id="attach-命令">attach 命令&lt;/h2>
&lt;p>&lt;code>docker attach&lt;/code> 是 Docker 自带的命令。下面示例如何使用该命令。&lt;/p></description></item><item><title>Docker 镜像介绍</title><link>https://gaoboy.com/post/docker-image/</link><pubDate>Tue, 01 Mar 2016 12:16:59 +0800</pubDate><guid>https://gaoboy.com/post/docker-image/</guid><description>&lt;h1 id="docker-镜像的实现原理">Docker 镜像的实现原理&lt;/h1>
&lt;p>Docker 镜像是怎么实现增量的修改和维护的？ 每个镜像都由很多层次构成，Docker 使用 &lt;a href="http://en.wikipedia.org/wiki/UnionFS">Union FS&lt;/a> 将这些不同的层结合到一个镜像中去。&lt;/p>
&lt;p>通常 Union FS 有两个用途，一方面可以实现不借助 LVM、RAID 将多个 disk 挂到同一个目录下，另一个更常用的就是将一个只读的分支和一个可写的分支联合在一起，Live CD 正是基于此方法可以允许在镜像不变的基础上允许用户在其上进行一些写操作。 Docker 在 AUFS 上构建的容器也是利用了类似的原理。&lt;/p></description></item><item><title>Docker 简介和安装</title><link>https://gaoboy.com/post/docker-introduction/</link><pubDate>Tue, 01 Mar 2016 11:30:51 +0800</pubDate><guid>https://gaoboy.com/post/docker-introduction/</guid><description>&lt;h1 id="什么是-docker">什么是 Docker&lt;/h1>
&lt;p>官网地址：https://www.docker.com/&lt;/p>
&lt;p>Docker 最初是 dotCloud 公司创始人 Solomon Hykes 在法国期间发起的一个公司内部项目，它是基于 dotCloud 公司多年云服务技术的一次革新，并于 [2013 年 3 月以 Apache 2.0 授权协议开源][docker-soft]，主要项目代码在 &lt;a href="https://github.com/moby/moby">GitHub&lt;/a> 上进行维护。Docker 项目后来还加入了 Linux 基金会，并成立推动 &lt;a href="https://www.opencontainers.org/">开放容器联盟（OCI）&lt;/a>。&lt;/p></description></item><item><title>Ubuntu Lvm 扩容教程</title><link>https://gaoboy.com/post/ubuntu-lvm-expansion/</link><pubDate>Thu, 25 Feb 2016 09:40:26 +0800</pubDate><guid>https://gaoboy.com/post/ubuntu-lvm-expansion/</guid><description/></item><item><title>SpringBoot 入门指引</title><link>https://gaoboy.com/post/springboot-introduction/</link><pubDate>Sat, 21 Mar 2015 14:25:40 +0800</pubDate><guid>https://gaoboy.com/post/springboot-introduction/</guid><description/></item><item><title>Java 异常处理</title><link>https://gaoboy.com/post/java-exception-handle/</link><pubDate>Sun, 25 Jan 2015 14:58:53 +0800</pubDate><guid>https://gaoboy.com/post/java-exception-handle/</guid><description>&lt;h1 id="概述">概述&lt;/h1>
&lt;p>异常是程序中的一些错误，但并不是所有的错误都是异常，并且错误有时候是可以避免的。&lt;/p>
&lt;p>比如说，你的代码少了一个分号，那么运行出来结果是提示是错误 java.lang.Error；如果你用 System.out.println (11/0)，那么你是因为你用 0 做了除数，会抛出 java.lang.ArithmeticException 的异常。&lt;/p></description></item><item><title>Java Scanner 类</title><link>https://gaoboy.com/post/java-scanner/</link><pubDate>Sun, 25 Jan 2015 14:56:23 +0800</pubDate><guid>https://gaoboy.com/post/java-scanner/</guid><description>&lt;h1 id="概述">概述&lt;/h1>
&lt;p>java.util.Scanner 是 Java5 的新特征，我们可以通过 Scanner 类来获取用户的输入。&lt;/p>
&lt;p>下面是创建 Scanner 对象的基本语法：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-java" data-lang="java">&lt;span style="display:flex;">&lt;span>Scanner s &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#66d9ef">new&lt;/span> Scanner(System.&lt;span style="color:#a6e22e">in&lt;/span>);
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>接下来我们演示一个最简单的的数据输入，并通过 Scanner 类的 next() 与 nextLine() 方法获取输入的字符串，在读取前我们一般需要 使用 hasNext 与 hasNextLine 判断是否还有输入的数据：&lt;/p></description></item><item><title>Java 流(Stream)、文件(File)和IO</title><link>https://gaoboy.com/post/java-stream-file-io/</link><pubDate>Sun, 25 Jan 2015 14:56:23 +0800</pubDate><guid>https://gaoboy.com/post/java-stream-file-io/</guid><description>&lt;h1 id="概述">概述&lt;/h1>
&lt;p>&lt;code>Java.io&lt;/code> 包几乎包含了所有操作输入、输出需要的类。所有这些流类代表了输入源和输出目标。&lt;/p>
&lt;p>&lt;code>Java.io&lt;/code> 包中的流支持很多种格式，比如：基本类型、对象、本地化字符集等等。&lt;/p></description></item><item><title>Java 方法</title><link>https://gaoboy.com/post/java-function/</link><pubDate>Sun, 25 Jan 2015 14:53:33 +0800</pubDate><guid>https://gaoboy.com/post/java-function/</guid><description>&lt;h1 id="概述">概述&lt;/h1>
&lt;p>在前面几个章节中我们经常使用到&lt;code>System.out.println()&lt;/code>，那么它是什么呢？&lt;/p>
&lt;p>&lt;code>println()&lt;/code>是一个方法 (Method)，而&lt;code>System&lt;/code>是系统类 (Class)，&lt;code>out&lt;/code>是标准输出对象 (Object)。这句话的用法是调用系统类&lt;code>System&lt;/code> 中的标准输出对象&lt;code>out&lt;/code>中的方法&lt;code>println()&lt;/code>。&lt;/p></description></item><item><title>Java 正则表达式</title><link>https://gaoboy.com/post/java-regex/</link><pubDate>Sun, 25 Jan 2015 14:43:23 +0800</pubDate><guid>https://gaoboy.com/post/java-regex/</guid><description/></item><item><title>Java 日期时间</title><link>https://gaoboy.com/post/java-date/</link><pubDate>Sun, 25 Jan 2015 14:42:23 +0800</pubDate><guid>https://gaoboy.com/post/java-date/</guid><description/></item><item><title>Java 数组</title><link>https://gaoboy.com/post/java-array/</link><pubDate>Sun, 25 Jan 2015 14:38:23 +0800</pubDate><guid>https://gaoboy.com/post/java-array/</guid><description/></item><item><title>Java StringBuffer &amp; StringBuilder 类</title><link>https://gaoboy.com/post/java-stringbuffer-and-stringbuilder-class/</link><pubDate>Sun, 25 Jan 2015 14:33:15 +0800</pubDate><guid>https://gaoboy.com/post/java-stringbuffer-and-stringbuilder-class/</guid><description/></item><item><title>Java String 类</title><link>https://gaoboy.com/post/java-string-class/</link><pubDate>Sun, 25 Jan 2015 14:30:15 +0800</pubDate><guid>https://gaoboy.com/post/java-string-class/</guid><description/></item><item><title>Java Character 类</title><link>https://gaoboy.com/post/java-character-class/</link><pubDate>Sun, 25 Jan 2015 14:28:25 +0800</pubDate><guid>https://gaoboy.com/post/java-character-class/</guid><description/></item><item><title>Java Number &amp; Math 类</title><link>https://gaoboy.com/post/java-number-and-math-class/</link><pubDate>Sun, 25 Jan 2015 14:26:25 +0800</pubDate><guid>https://gaoboy.com/post/java-number-and-math-class/</guid><description/></item><item><title>Java 分支结构</title><link>https://gaoboy.com/post/java-branching-structure/</link><pubDate>Sun, 25 Jan 2015 14:22:21 +0800</pubDate><guid>https://gaoboy.com/post/java-branching-structure/</guid><description/></item><item><title>Java 循环结构</title><link>https://gaoboy.com/post/java-loop-structure/</link><pubDate>Sun, 25 Jan 2015 14:19:23 +0800</pubDate><guid>https://gaoboy.com/post/java-loop-structure/</guid><description/></item><item><title>Java 运算符</title><link>https://gaoboy.com/post/java-operator/</link><pubDate>Sun, 25 Jan 2015 14:18:23 +0800</pubDate><guid>https://gaoboy.com/post/java-operator/</guid><description/></item><item><title>Java 修饰符</title><link>https://gaoboy.com/post/java-specifier/</link><pubDate>Sun, 25 Jan 2015 13:58:21 +0800</pubDate><guid>https://gaoboy.com/post/java-specifier/</guid><description/></item><item><title>Java 变量类型</title><link>https://gaoboy.com/post/java-variable-type/</link><pubDate>Sun, 25 Jan 2015 13:50:11 +0800</pubDate><guid>https://gaoboy.com/post/java-variable-type/</guid><description/></item><item><title>Java 基本数据类型</title><link>https://gaoboy.com/post/java-basic-data-type/</link><pubDate>Sun, 25 Jan 2015 13:40:11 +0800</pubDate><guid>https://gaoboy.com/post/java-basic-data-type/</guid><description/></item><item><title>Java 对象和类</title><link>https://gaoboy.com/post/java-object-class/</link><pubDate>Sun, 25 Jan 2015 13:30:10 +0800</pubDate><guid>https://gaoboy.com/post/java-object-class/</guid><description/></item><item><title>Java 基础语法</title><link>https://gaoboy.com/post/java-basic-grammar/</link><pubDate>Sun, 25 Jan 2015 13:25:10 +0800</pubDate><guid>https://gaoboy.com/post/java-basic-grammar/</guid><description/></item><item><title>计算机语言的发展史</title><link>https://gaoboy.com/post/computer-language-introduction/</link><pubDate>Sat, 24 Jan 2015 16:25:10 +0800</pubDate><guid>https://gaoboy.com/post/computer-language-introduction/</guid><description/></item><item><title>计算机的发展历程</title><link>https://gaoboy.com/post/computer-introduction/</link><pubDate>Fri, 23 Jan 2015 13:25:40 +0800</pubDate><guid>https://gaoboy.com/post/computer-introduction/</guid><description/></item><item><title>虚拟机安装ubuntu及其配置</title><link>https://gaoboy.com/post/vm-ubuntu-install-setting/</link><pubDate>Sun, 26 Jan 2014 10:20:32 +0800</pubDate><guid>https://gaoboy.com/post/vm-ubuntu-install-setting/</guid><description/></item><item><title>Linux 简介</title><link>https://gaoboy.com/post/linux-introduction/</link><pubDate>Sat, 25 Jan 2014 10:05:00 +0800</pubDate><guid>https://gaoboy.com/post/linux-introduction/</guid><description/></item><item><title>Hello World</title><link>https://gaoboy.com/post/hello-world/</link><pubDate>Tue, 12 Feb 2013 23:00:38 +0800</pubDate><guid>https://gaoboy.com/post/hello-world/</guid><description/></item></channel></rss>