https://blog.jingxiyuan.cn Hito的公告栏 天下事有难易乎?为之,则难者亦易矣 https://blog.jingxiyuan.cn/images/favicon.ico Hito li 2022-10-14T09:13:00.000Z https://blog.jingxiyuan.cn/2022/10/14/%E5%85%81%E8%AE%B8%E8%B7%A8%E5%9F%9F%E8%8E%B7%E5%8F%96cookies%E6%96%B9%E6%B3%95/ 允许跨域获取cookie的方法 <h4 id="使用场景"><a class="anchor" href="#使用场景">#</a> 使用场景</h4> <p>  在 A 域名的页面向 B 域名提交数据时需要代入 B 域名的 cookie,否则 B 域名会跳转到登陆页面。解决方式需要使用到 nginx 反向代理,配置如下:</p> <pre><code class="language-conf">server &#123; listen port ssl http2; server_name xxx.com; ssl_certificate_key /xxx.key; ssl_certificate /xxx.pem; proxy_cookie_path ~(.*) &quot;$1; SameSite=None; secure; httponly&quot;; location / &#123; #允许镶套的方式(可以同域镶套、指定域名镶套或者所有域名镶套) add_header X-Frame-Options ALLOWALL; #允许被所有域名镶套 proxy_pass http://xxx; &#125; &#125; </code></pre> 2022-10-14T09:13:00.000Z https://blog.jingxiyuan.cn/2022/10/12/%E4%BD%BF%E7%94%A8picgo%E4%B8%8A%E4%BC%A0%E5%9B%BE%E7%89%87%E5%88%B0chevereto/ 使用PicGo上传图片到chevereto <h1 id="简介"><a class="anchor" href="#简介">#</a> 简介</h1> <p>PicGo 是一款开源的图床管理工具,十分流行。</p> <p>PicGo 官方指南:<span class="exturl" data-url="aHR0cHM6Ly9waWNnby5naXRodWIuaW8vUGljR28tRG9jL3poL2d1aWRlLw==">PicGo | PicGo</span></p> <h1 id="配置"><a class="anchor" href="#配置">#</a> 配置</h1> <ol> <li> <p>安装插件(需要先安装 NodeJS)<br /> <img data-src="https://file.jingxiyuan.cn/images/2022/10/12/2022-10-12-13-24-09.png" alt="" /></p> </li> <li> <p>图床配置  <br /> url 后缀必须用红线圈中的部分,key 在 chevereto 登陆后 api 配置中查找<br /> <img data-src="https://file.jingxiyuan.cn/images/2022/10/12/2022-10-12-13-24-51.png" alt="" /></p> </li> </ol> 2022-10-12T06:40:00.000Z https://blog.jingxiyuan.cn/2022/10/11/svn%E5%BA%93%E8%BD%ACgit%E5%BA%93/ svn库转git库 <h4 id="前期准备"><a class="anchor" href="#前期准备">#</a> 前期准备</h4> <p>  首先安装好 svn 和 git 工具。</p> <h4 id="svn转git"><a class="anchor" href="#svn转git">#</a> svn 转 git</h4> <p>1、 到 svn 项目目录右键选中 gitbash 打开窗口,执行获取用户并映射成 git 样式账号命令如下:</p> <pre><code class="language-bash">svn log -q | awk -F '|' '/^r/ &#123;sub(&quot;^ &quot;, &quot;&quot;, $2); sub(&quot; $&quot;, &quot;&quot;, $2); print $2&quot; = &quot;$2&quot; &lt;&quot;$2&quot;&gt;&quot;&#125;' | sort -u &gt; users.txt </code></pre> <p>  然后会在目录下生成文件 users.txt 样式如:zhansan = 张三 <span class="exturl" data-url="bWFpbHRvOnpoYW5zYW5AeHh4LmNvbQ==">zhansan@xxx.com</span>。</p> <p>2、新建个文件夹,将生成的 users.txt 放入新建的文件夹,然后在新建的文件夹中右键选中 gitbash 弹出窗口后执行下面命令(https://svn_project_url/ 为 svn 库的 url),拉取 svn 代码到本地新建文件夹中。</p> <pre><code class="language-bash">git svn clone https://svn_project_url/ --no-metadata --no-minimize-url --authors-file=users.txt </code></pre> <p>  期间可能会弹出 svn 的账户密码验证窗口,正确输入即可。</p> <h4 id="推送项目到git库"><a class="anchor" href="#推送项目到git库">#</a> 推送项目到 git 库</h4> <p>1、在 gitbash 窗口 cd 到 git 项目文件夹中执行以下命令把 git 仓库地址加入到 remote 中(https://git_project_url/ 为 git 库的 url)。</p> <pre><code class="language-bash">git remote add origin https://git_project_url/ </code></pre> <p>2、push 项目到 git 库中。</p> <pre><code class="language-bash">git push origin master </code></pre> 2022-10-11T02:40:00.000Z https://blog.jingxiyuan.cn/2022/10/06/Nginx%E9%85%8D%E7%BD%AEiframe%E8%AE%BF%E9%97%AE/ Nginx配置iframe访问 <h4 id="x-frame-options响应头配置详解"><a class="anchor" href="#x-frame-options响应头配置详解">#</a> X-Frame-Options 响应头配置详解</h4> <p>  X-Frame-Options HTTP 响应头是用来给浏览器指示允许一个页面可否在,或者 中展现的标记。网站可以使用此功能,来确保自己网站的内容没有被嵌套到别人的网站中去,也从而避免了点击劫持 (clickjacking) 的攻击。<br /> X-Frame-Options 三个参数:</p> <p>1、 DENY</p> <p>  表示该页面不允许在 frame 中展示,即便是在相同域名的页面中嵌套也不允许。</p> <p>2、SAMEORIGIN</p> <p>  表示该页面可以在相同域名页面的 frame 中展示。</p> <p>3、ALLOW-FROM uri</p> <p>  表示该页面可以在指定来源的 frame 中展示。</p> <p>4、ALLOWALL</p> <p>  表示该页面可以在任何来源的 frame 中展示。</p> <p>  换一句话说,如果设置为 DENY,不光在别人的网站 frame 嵌入时会无法加载,在同域名页面中同样会无法加载。另一方面,如果设置为 SAMEORIGIN,那么页面就可以在同域名页面的 frame 中嵌套。正常情况下我们通常使用 SAMEORIGIN 参数。</p> <h4 id="apache配置"><a class="anchor" href="#apache配置">#</a> Apache 配置</h4> <p>  需要把下面这行添加到'site' 的配置中</p> <pre><code class="language-shell"> Header always append X-Frame-Options SAMEORIGIN </code></pre> <h4 id="nginx配置"><a class="anchor" href="#nginx配置">#</a> Nginx 配置</h4> <p>  需要添加到 ‘http’, ‘server’ 或者 ‘location’ 的配置项中,个人来讲喜欢配置在‘server’ 中</p> <p>  正常情况下都是使用 SAMEORIGIN 参数,允许同域嵌套</p> <pre><code class="language-shell"> add_header X-Frame-Options SAMEORIGIN; </code></pre> <p>  允许单个域名 iframe 嵌套</p> <pre><code class="language-shell"> add_header X-Frame-Options ALLOW-FROM http://xxx.com/; </code></pre> <p>  允许多个域名 iframe 嵌套,注意这里是用逗号分隔</p> <pre><code class="language-shell"> add_header X-Frame-Options &quot;ALLOW-FROM http://xxx.com/,https://xxx.com/&quot;; </code></pre> <p>  允许任何域名 iframe 嵌套</p> <pre><code class="language-shell"> add_header X-Frame-Options ALLOWALL; </code></pre> <h4 id="tomcat配置"><a class="anchor" href="#tomcat配置">#</a> Tomcat 配置</h4> <p>  在‘conf/web.xml’填加以下配置</p> <figure class="highlight xml"><figcaption data-lang="XML"></figcaption><table><tr><td data-num="1"></td><td><pre><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>filter</span><span class="token punctuation">></span></span></pre></td></tr><tr><td data-num="2"></td><td><pre> <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>filter-name</span><span class="token punctuation">></span></span>httpHeaderSecurity<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>filter-name</span><span class="token punctuation">></span></span></pre></td></tr><tr><td data-num="3"></td><td><pre> <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>filter-class</span><span class="token punctuation">></span></span>org.apache.catalina.filters.HttpHeaderSecurityFilter<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>filter-class</span><span class="token punctuation">></span></span></pre></td></tr><tr><td data-num="4"></td><td><pre> <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>init-param</span><span class="token punctuation">></span></span></pre></td></tr><tr><td data-num="5"></td><td><pre> <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>param-name</span><span class="token punctuation">></span></span>antiClickJackingOption<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>param-name</span><span class="token punctuation">></span></span></pre></td></tr><tr><td data-num="6"></td><td><pre> <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>param-value</span><span class="token punctuation">></span></span>SAMEORIGIN<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>param-value</span><span class="token punctuation">></span></span></pre></td></tr><tr><td data-num="7"></td><td><pre> <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>init-param</span><span class="token punctuation">></span></span></pre></td></tr><tr><td data-num="8"></td><td><pre> <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>async-supported</span><span class="token punctuation">></span></span>true<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>async-supported</span><span class="token punctuation">></span></span></pre></td></tr><tr><td data-num="9"></td><td><pre> <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>filter</span><span class="token punctuation">></span></span></pre></td></tr><tr><td data-num="10"></td><td><pre><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>filter-mapping</span><span class="token punctuation">></span></span></pre></td></tr><tr><td data-num="11"></td><td><pre> <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>filter-name</span><span class="token punctuation">></span></span>httpHeaderSecurity<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>filter-name</span><span class="token punctuation">></span></span></pre></td></tr><tr><td data-num="12"></td><td><pre> <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>url-pattern</span><span class="token punctuation">></span></span>/*<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>url-pattern</span><span class="token punctuation">></span></span></pre></td></tr><tr><td data-num="13"></td><td><pre> <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>dispatcher</span><span class="token punctuation">></span></span>REQUEST<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>dispatcher</span><span class="token punctuation">></span></span></pre></td></tr><tr><td data-num="14"></td><td><pre> <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>dispatcher</span><span class="token punctuation">></span></span>FORWARD<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>dispatcher</span><span class="token punctuation">></span></span></pre></td></tr><tr><td data-num="15"></td><td><pre><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>filter-mapping</span><span class="token punctuation">></span></span></pre></td></tr></table></figure><h4 id="iis配置"><a class="anchor" href="#iis配置">#</a> IIS 配置</h4> <p>  添加下面的配置到 ‘Web.config’文件中</p> <figure class="highlight xml"><figcaption data-lang="XML"></figcaption><table><tr><td data-num="1"></td><td><pre><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>system.webServer</span><span class="token punctuation">></span></span></pre></td></tr><tr><td data-num="2"></td><td><pre> <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>httpProtocol</span><span class="token punctuation">></span></span></pre></td></tr><tr><td data-num="3"></td><td><pre> <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>customHeaders</span><span class="token punctuation">></span></span></pre></td></tr><tr><td data-num="4"></td><td><pre> <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>add</span> <span class="token attr-name">name</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>X-Frame-Options<span class="token punctuation">"</span></span> <span class="token attr-name">value</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>SAMEORIGIN<span class="token punctuation">"</span></span> <span class="token punctuation">/></span></span></pre></td></tr><tr><td data-num="5"></td><td><pre> <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>customHeaders</span><span class="token punctuation">></span></span></pre></td></tr><tr><td data-num="6"></td><td><pre> <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>httpProtocol</span><span class="token punctuation">></span></span></pre></td></tr><tr><td data-num="7"></td><td><pre><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>system.webServer</span><span class="token punctuation">></span></span></pre></td></tr></table></figure> 2022-10-06T15:46:00.000Z https://blog.jingxiyuan.cn/2022/09/28/%E6%B7%B1%E6%B7%B1%E7%9A%84%E6%8C%AB%E8%B4%A5%E5%92%8C%E6%97%A0%E5%8A%A9%E6%84%9F/ 深深的挫败和无助感 <p>  一个月都过去了,工作还没有着落!</p> 2022-09-28T08:02:00.000Z https://blog.jingxiyuan.cn/2022/09/27/nginx%E8%B4%9F%E8%BD%BD%E5%9D%87%E8%A1%A1%E9%85%8D%E7%BD%AE/ nginx负载均衡配置 <h2 id="nginx负载均衡配置"><a class="anchor" href="#nginx负载均衡配置">#</a> nginx 负载均衡配置</h2> <ol> <li>轮询(默认)</li> </ol> <p>  <em>每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器 down 掉,能自动剔除。</em></p> <pre><code class="language-yum">upstream my_server &#123; server 192.168.0.2:8080; server 192.168.0.3:8080; &#125; server &#123; listen 80; server_name 192.168.0.1; # Path to the root of your installation location / &#123; proxy_pass http://my_server; &#125; &#125; </code></pre> <ol start="2"> <li>weight 权重策略</li> </ol> <p>  <em>weight 代表权重,默认为 1,权重越高被分配的客户端越多,指定轮询几率。weight 和访问比率成正比,用于后端服务器性能不均的情况。</em></p> <pre><code class="language-yum">upstream my_server &#123; server 192.168.0.2:8080 weight=1; server 192.168.0.3:8080 weight=2; &#125; server &#123; listen 80; server_name 192.168.0.1; # Path to the root of your installation location / &#123; proxy_pass http://my_server; &#125; &#125; </code></pre> <ol start="3"> <li>ip_hash</li> </ol> <p>  <em>每个请求按访问 ip 的 hash 结果分配,这样每个访客固定访问一个后端服务器,可以解决 session 的问题。</em></p> <pre><code class="language-yum">upstream my_server &#123; ip_hash; server 192.168.0.2:8080; server 192.168.0.3:8080; &#125; server &#123; listen 80; server_name 192.168.0.1; # Path to the root of your installation location / &#123; proxy_pass http://my_server; &#125; &#125; </code></pre> <ol start="4"> <li>fair (第三方)</li> </ol> <p>  <em>按后端服务器的响应时间来分配请求,响应时间短的优先分配。</em></p> <pre><code class="language-yum">upstream my_server &#123; server 192.168.0.2:8080; server 192.168.0.3:8080; fair; &#125; server &#123; listen 80; server_name 192.168.0.1; # Path to the root of your installation location / &#123; proxy_pass http://my_server; &#125; &#125; </code></pre> <ol start="5"> <li>动静分离</li> </ol> <p>  <em>把静态的资源,比如图片,css,js 等先加载到 Nginx 的服务器里。</em></p> 2022-09-27T06:45:00.000Z https://blog.jingxiyuan.cn/2022/09/26/%E8%A7%A3%E5%86%B3Hexo-Shoka%E8%83%8C%E6%99%AF%E9%9F%B3%E4%B9%90%E6%97%A0%E6%B3%95%E6%92%AD%E6%94%BE%E7%9A%84%E9%97%AE%E9%A2%98/ 解决Hexo+Shoka背景音乐无法播放的问题 <p><em>  今天突然发现博客的音乐无法播放了。经过一顿查找,发现是因为 https://api.i-meto.com/meting/api 调用出错了。shoka 主题应该是通过这个网站提取音乐地址、图片等信息。通过断点发现网易播放列表还是能正常获取的,只是列表中的具体音乐、图片无法获取了。于是自己用获取的列表信息组装出正确的 url 问题基本解决。只针对网易播放列表,图片只能使用一张固定的。</em></p> <p><em>  解决方法如下:</em></p> <p><em>    到 themes\shoka\source\js_app 目录下打开 player.js 文件,在最底部 init (config) 下加入 vendorJs ('fancybox');,然后找到 56 行用下面的代码替换即可。</em></p> <figure class="highlight js"><figcaption data-lang="JavaScript"></figcaption><table><tr><td data-num="1"></td><td><pre><span class="token function-variable function">fetch</span><span class="token operator">:</span> <span class="token keyword">function</span><span class="token punctuation">(</span><span class="token parameter">source</span><span class="token punctuation">)</span> <span class="token punctuation">&#123;</span></pre></td></tr><tr><td data-num="2"></td><td><pre> <span class="token keyword">var</span> list <span class="token operator">=</span> <span class="token punctuation">[</span><span class="token punctuation">]</span></pre></td></tr><tr><td data-num="3"></td><td><pre></pre></td></tr><tr><td data-num="4"></td><td><pre> <span class="token keyword">return</span> <span class="token keyword">new</span> <span class="token class-name">Promise</span><span class="token punctuation">(</span><span class="token keyword">function</span><span class="token punctuation">(</span><span class="token parameter">resolve<span class="token punctuation">,</span> reject</span><span class="token punctuation">)</span> <span class="token punctuation">&#123;</span></pre></td></tr><tr><td data-num="5"></td><td><pre> source<span class="token punctuation">.</span><span class="token function">forEach</span><span class="token punctuation">(</span><span class="token keyword">function</span><span class="token punctuation">(</span><span class="token parameter">raw</span><span class="token punctuation">)</span> <span class="token punctuation">&#123;</span></pre></td></tr><tr><td data-num="6"></td><td><pre> <span class="token keyword">var</span> meta <span class="token operator">=</span> utils<span class="token punctuation">.</span><span class="token function">parse</span><span class="token punctuation">(</span>raw<span class="token punctuation">)</span></pre></td></tr><tr><td data-num="7"></td><td><pre> <span class="token keyword">if</span><span class="token punctuation">(</span>meta<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">)</span> <span class="token punctuation">&#123;</span></pre></td></tr><tr><td data-num="8"></td><td><pre> <span class="token keyword">var</span> skey <span class="token operator">=</span> <span class="token constant">JSON</span><span class="token punctuation">.</span><span class="token function">stringify</span><span class="token punctuation">(</span>meta<span class="token punctuation">)</span></pre></td></tr><tr><td data-num="9"></td><td><pre> <span class="token keyword">var</span> playlist <span class="token operator">=</span> store<span class="token punctuation">.</span><span class="token function">get</span><span class="token punctuation">(</span>skey<span class="token punctuation">)</span></pre></td></tr><tr><td data-num="10"></td><td><pre> <span class="token keyword">if</span><span class="token punctuation">(</span>playlist<span class="token punctuation">)</span> <span class="token punctuation">&#123;</span></pre></td></tr><tr><td data-num="11"></td><td><pre> <span class="token comment">// 自己修改 - start</span></pre></td></tr><tr><td data-num="12"></td><td><pre> <span class="token keyword">var</span> audioInfos <span class="token operator">=</span> <span class="token constant">JSON</span><span class="token punctuation">.</span><span class="token function">parse</span><span class="token punctuation">(</span>playlist<span class="token punctuation">)</span><span class="token punctuation">;</span></pre></td></tr><tr><td data-num="13"></td><td><pre> <span class="token keyword">var</span> neteaseStartUrl <span class="token operator">=</span> <span class="token string">"https://music.163.com/song/media/outer/url?id="</span><span class="token punctuation">;</span></pre></td></tr><tr><td data-num="14"></td><td><pre> <span class="token keyword">if</span> <span class="token punctuation">(</span>meta<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span> <span class="token operator">==</span> <span class="token string">"netease"</span> <span class="token operator">&amp;&amp;</span> audioInfos <span class="token operator">&amp;&amp;</span> audioInfos<span class="token punctuation">.</span>length<span class="token operator">></span><span class="token number">0</span> <span class="token operator">&amp;&amp;</span> <span class="token operator">!</span>audioInfos<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">.</span>url<span class="token punctuation">.</span><span class="token function">startsWith</span><span class="token punctuation">(</span>neteaseStartUrl<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">&#123;</span><span class="token comment">// 如果是网易音乐就自己构建 url</span></pre></td></tr><tr><td data-num="15"></td><td><pre> jQuery<span class="token punctuation">.</span><span class="token function">ajax</span><span class="token punctuation">(</span><span class="token punctuation">&#123;</span></pre></td></tr><tr><td data-num="16"></td><td><pre> <span class="token literal-property property">url</span><span class="token operator">:</span> audioInfos<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">.</span>url<span class="token punctuation">,</span></pre></td></tr><tr><td data-num="17"></td><td><pre> <span class="token literal-property property">type</span><span class="token operator">:</span> <span class="token string">'get'</span><span class="token punctuation">,</span></pre></td></tr><tr><td data-num="18"></td><td><pre> <span class="token literal-property property">async</span><span class="token operator">:</span> <span class="token boolean">false</span><span class="token punctuation">,</span></pre></td></tr><tr><td data-num="19"></td><td><pre> <span class="token literal-property property">timeout</span><span class="token operator">:</span> <span class="token number">5000</span><span class="token punctuation">,</span></pre></td></tr><tr><td data-num="20"></td><td><pre> <span class="token function-variable function">complete</span> <span class="token operator">:</span> <span class="token keyword">function</span><span class="token punctuation">(</span><span class="token parameter">XMLHttpRequest<span class="token punctuation">,</span> status</span><span class="token punctuation">)</span><span class="token punctuation">&#123;</span></pre></td></tr><tr><td data-num="21"></td><td><pre> <span class="token keyword">if</span> <span class="token punctuation">(</span>XMLHttpRequest<span class="token punctuation">.</span>status <span class="token operator">!=</span> <span class="token number">200</span><span class="token punctuation">)</span> <span class="token punctuation">&#123;</span></pre></td></tr><tr><td data-num="22"></td><td><pre> audioInfos<span class="token punctuation">.</span><span class="token function">forEach</span><span class="token punctuation">(</span><span class="token keyword">function</span><span class="token punctuation">(</span><span class="token parameter">audioInfo</span><span class="token punctuation">)</span> <span class="token punctuation">&#123;</span></pre></td></tr><tr><td data-num="23"></td><td><pre> <span class="token keyword">var</span> id <span class="token operator">=</span> audioInfo<span class="token punctuation">.</span>url<span class="token punctuation">.</span><span class="token function">substring</span><span class="token punctuation">(</span>audioInfo<span class="token punctuation">.</span>url<span class="token punctuation">.</span><span class="token function">indexOf</span><span class="token punctuation">(</span><span class="token string">"id="</span><span class="token punctuation">)</span><span class="token operator">+</span><span class="token number">3</span><span class="token punctuation">,</span> audioInfo<span class="token punctuation">.</span>url<span class="token punctuation">.</span><span class="token function">indexOf</span><span class="token punctuation">(</span><span class="token string">"&amp;auth="</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span></pre></td></tr><tr><td data-num="24"></td><td><pre> audioInfo<span class="token punctuation">.</span>url <span class="token operator">=</span> neteaseStartUrl <span class="token operator">+</span> id<span class="token punctuation">;</span></pre></td></tr><tr><td data-num="25"></td><td><pre> audioInfo<span class="token punctuation">.</span>pic <span class="token operator">=</span> <span class="token string">"https://p3.music.126.net/Vji3PQJAZ2C7gS_6X51NFQ==/109951164723650033.jpg?param=200y200"</span><span class="token punctuation">;</span></pre></td></tr><tr><td data-num="26"></td><td><pre> <span class="token punctuation">&#125;</span><span class="token punctuation">)</span></pre></td></tr><tr><td data-num="27"></td><td><pre> <span class="token punctuation">&#125;</span></pre></td></tr><tr><td data-num="28"></td><td><pre> list<span class="token punctuation">.</span><span class="token function">push</span><span class="token punctuation">.</span><span class="token function">apply</span><span class="token punctuation">(</span>list<span class="token punctuation">,</span> audioInfos<span class="token punctuation">)</span><span class="token punctuation">;</span></pre></td></tr><tr><td data-num="29"></td><td><pre> <span class="token function">resolve</span><span class="token punctuation">(</span>list<span class="token punctuation">)</span><span class="token punctuation">;</span></pre></td></tr><tr><td data-num="30"></td><td><pre> <span class="token punctuation">&#125;</span></pre></td></tr><tr><td data-num="31"></td><td><pre> <span class="token punctuation">&#125;</span><span class="token punctuation">)</span><span class="token punctuation">;</span></pre></td></tr><tr><td data-num="32"></td><td><pre> <span class="token punctuation">&#125;</span> <span class="token keyword">else</span> <span class="token punctuation">&#123;</span></pre></td></tr><tr><td data-num="33"></td><td><pre> list<span class="token punctuation">.</span><span class="token function">push</span><span class="token punctuation">.</span><span class="token function">apply</span><span class="token punctuation">(</span>list<span class="token punctuation">,</span> audioInfos<span class="token punctuation">)</span><span class="token punctuation">;</span></pre></td></tr><tr><td data-num="34"></td><td><pre> <span class="token function">resolve</span><span class="token punctuation">(</span>list<span class="token punctuation">)</span><span class="token punctuation">;</span></pre></td></tr><tr><td data-num="35"></td><td><pre> <span class="token punctuation">&#125;</span></pre></td></tr><tr><td data-num="36"></td><td><pre> <span class="token comment">// 自己修改 - end</span></pre></td></tr><tr><td data-num="37"></td><td><pre> <span class="token punctuation">&#125;</span> <span class="token keyword">else</span> <span class="token punctuation">&#123;</span></pre></td></tr><tr><td data-num="38"></td><td><pre> <span class="token function">fetch</span><span class="token punctuation">(</span><span class="token string">'https://api.i-meto.com/meting/api?server='</span><span class="token operator">+</span>meta<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token operator">+</span><span class="token string">'&amp;type='</span><span class="token operator">+</span>meta<span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">]</span><span class="token operator">+</span><span class="token string">'&amp;id='</span><span class="token operator">+</span>meta<span class="token punctuation">[</span><span class="token number">2</span><span class="token punctuation">]</span><span class="token operator">+</span><span class="token string">'&amp;r='</span><span class="token operator">+</span> Math<span class="token punctuation">.</span><span class="token function">random</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span></pre></td></tr><tr><td data-num="39"></td><td><pre> <span class="token punctuation">.</span><span class="token function">then</span><span class="token punctuation">(</span><span class="token keyword">function</span><span class="token punctuation">(</span><span class="token parameter">response</span><span class="token punctuation">)</span> <span class="token punctuation">&#123;</span></pre></td></tr><tr><td data-num="40"></td><td><pre> <span class="token keyword">return</span> response<span class="token punctuation">.</span><span class="token function">json</span><span class="token punctuation">(</span><span class="token punctuation">)</span></pre></td></tr><tr><td data-num="41"></td><td><pre> <span class="token punctuation">&#125;</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">then</span><span class="token punctuation">(</span><span class="token keyword">function</span><span class="token punctuation">(</span><span class="token parameter">json</span><span class="token punctuation">)</span> <span class="token punctuation">&#123;</span></pre></td></tr><tr><td data-num="42"></td><td><pre> store<span class="token punctuation">.</span><span class="token function">set</span><span class="token punctuation">(</span>skey<span class="token punctuation">,</span> <span class="token constant">JSON</span><span class="token punctuation">.</span><span class="token function">stringify</span><span class="token punctuation">(</span>json<span class="token punctuation">)</span><span class="token punctuation">)</span></pre></td></tr><tr><td data-num="43"></td><td><pre> list<span class="token punctuation">.</span><span class="token function">push</span><span class="token punctuation">.</span><span class="token function">apply</span><span class="token punctuation">(</span>list<span class="token punctuation">,</span> json<span class="token punctuation">)</span><span class="token punctuation">;</span></pre></td></tr><tr><td data-num="44"></td><td><pre> <span class="token function">resolve</span><span class="token punctuation">(</span>list<span class="token punctuation">)</span><span class="token punctuation">;</span></pre></td></tr><tr><td data-num="45"></td><td><pre> <span class="token punctuation">&#125;</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">catch</span><span class="token punctuation">(</span><span class="token keyword">function</span><span class="token punctuation">(</span><span class="token parameter">ex</span><span class="token punctuation">)</span> <span class="token punctuation">&#123;</span><span class="token punctuation">&#125;</span><span class="token punctuation">)</span></pre></td></tr><tr><td data-num="46"></td><td><pre> <span class="token punctuation">&#125;</span></pre></td></tr><tr><td data-num="47"></td><td><pre> <span class="token punctuation">&#125;</span> <span class="token keyword">else</span> <span class="token punctuation">&#123;</span></pre></td></tr><tr><td data-num="48"></td><td><pre> list<span class="token punctuation">.</span><span class="token function">push</span><span class="token punctuation">(</span>raw<span class="token punctuation">)</span><span class="token punctuation">;</span></pre></td></tr><tr><td data-num="49"></td><td><pre> <span class="token function">resolve</span><span class="token punctuation">(</span>list<span class="token punctuation">)</span><span class="token punctuation">;</span></pre></td></tr><tr><td data-num="50"></td><td><pre> <span class="token punctuation">&#125;</span></pre></td></tr><tr><td data-num="51"></td><td><pre> <span class="token punctuation">&#125;</span><span class="token punctuation">)</span></pre></td></tr><tr><td data-num="52"></td><td><pre> <span class="token punctuation">&#125;</span><span class="token punctuation">)</span></pre></td></tr><tr><td data-num="53"></td><td><pre> <span class="token punctuation">&#125;</span></pre></td></tr></table></figure> 2022-09-26T11:30:00.000Z https://blog.jingxiyuan.cn/2022/09/23/%E8%A7%A3%E5%86%B3%E5%9F%9F%E5%90%8Dip%E5%8F%98%E5%8A%A8%E5%90%8E%E9%9C%80%E8%A6%81%E9%87%8D%E5%90%AFnginx%E7%9A%84%E9%97%AE%E9%A2%98/ 解决域名ip变动后需要重启nginx的问题 <p>  <em>今天突然发现自己的网站不能访问了。经过一顿排查,发现是家里的外网 ip 变动后 nginx 解析的域名 ip 还是旧 ip 导致的。手动重启 nginx 后恢复正常。但这不是长久之计,如果每次 ip 变动都需要重启一次 nginx,想想都头大。于是查询资料后获得了解决办法,方法如下:</em></p> <pre><code class="language-yum">location / &#123; resolver 114.114.114.114 valid=60s; #自定义缓存有效时间间隔对变量中的域名进行解析 set $my_server &quot;https://ip:port&quot;; proxy_pass $my_server; &#125; </code></pre> 2022-09-23T08:17:00.000Z https://blog.jingxiyuan.cn/2022/09/22/protobuf%E7%94%9F%E6%88%90js%E6%96%87%E4%BB%B6/ protobuf生成js文件 <h1 id="下载工具"><a class="anchor" href="#下载工具">#</a> 下载工具</h1> <p><span class="exturl" data-url="aHR0cHM6Ly92ZXJzYXdlYi5kbC5zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdC9wcm90b2NvbC1idWZmZXJzLm1pcnJvci92My4xOS41L3Byb3RvYy0zLjE5LjUtd2luNjQuemlw">protoc-3.19.5-win64.zip</span></p> <h1 id="生成js文件"><a class="anchor" href="#生成js文件">#</a> 生成 js 文件</h1> <ol> <li> <p>把 xxx.proto 文件拷贝到解压的 protoc-3.19.5-win64\bin 目录下</p> </li> <li> <p>cmd 到相同的 bin 目录下</p> </li> <li> <p>执行 protoc.exe --js_out=import_style=commonjs,binary:. ./xxx.proto 命令,就会在 bin 目录下生成 xxx_pb.js 文件</p> </li> </ol> 2022-09-22T02:30:00.000Z https://blog.jingxiyuan.cn/2022/09/21/%E8%AE%B0%E4%B8%80%E6%AC%A1netty-socket-io%E6%9C%8D%E5%8A%A1%E7%AB%AF%E8%BF%9E%E6%8E%A5%E4%B8%8D%E4%B8%8A%E7%9A%84%E9%97%AE%E9%A2%98/ 记一次netty-socketio服务端连接不上的问题 <p>  <em>今天前端开发跟我反馈用 vue 的 socketio 连接不上后台服务,连接无反应无任何报错。所以不清楚是前端代码问题还是后台服务的问题。由于框架为另一同事搭建,我只负责处理后端业务逻辑部分,所以第一时间我也不清楚具体的原因。于是我找了个第三方的 socket 工具尝试连接,果然有问题。但是只是提示连接不上,无明显错误原因。到后台查看发现有提示 Unknown transport for request 错误,最后通过调试发现 netty-socketio 的库中 AuthorizeHandler 类有段处理 transport 的代码只能接受大写的 WEBSOCKET 或者 POLLING,于是我在工具中按要求填上结果还是不行。然后我在网上搜索也未发现有相关问题,只发现有网友提示需要用 socketio 的库,不要自己写 socket 连接。于是我找了 socket.io.js 来连接,结果还是一样。经过大量调试改代码,最后突发奇想,有没有可能跟 netty-socketio 的版本有关系,于是我把版本从 1.7.20 升级到 1.7.21,结果就奇迹般的好了。</em></p> <h6 id="总结就好像大力出奇迹实在找不到原因的时候不妨升级一下版本说不定问题就解决了呢o_o"><a class="anchor" href="#总结就好像大力出奇迹实在找不到原因的时候不妨升级一下版本说不定问题就解决了呢o_o">#</a> 总结:就好像大力出奇迹,实在找不到原因的时候不妨升级一下版本,说不定问题就解决了呢!O (∩_∩) O</h6> 2022-09-21T01:46:00.000Z https://blog.jingxiyuan.cn/2022/09/17/Hexo-Theme-Shoka-algolia%E6%90%9C%E7%B4%A2%E8%B8%A9%E5%9D%91-1/ Hexo + Theme.Shoka + algolia搜索踩坑 <h1 id="hexo-themeshoka安装"><a class="anchor" href="#hexo-themeshoka安装">#</a> Hexo + Theme.Shoka 安装</h1> <p>  <a href="https://blog.jingxiyuan.cn/2022/09/14/Hexo%E5%AE%89%E8%A3%85%E6%91%B8%E7%B4%A2/">安装介绍</a></p> <h1 id="algolia注册"><a class="anchor" href="#algolia注册">#</a> algolia 注册</h1> <ol> <li> <p><span class="exturl" data-url="aHR0cHM6Ly93d3cuYWxnb2xpYS5jb20vdXNlcnMvc2lnbl9pbg==">algolia</span> 不支持国内邮箱注册,而 google 和 github 由于国内被墙也没法使用。所以只能先注册<span class="exturl" data-url="aHR0cHM6Ly9hcHAubmV0bGlmeS5jb20v"> netlify</span> 然后通过 netlify 注册 algolia。</p> </li> <li> <p>登录 algolia 后创建一个 index,名字随意记住既可。</p> <p><img data-src="https://file.jingxiyuan.cn/images/2022/09/17/2022-09-17-23-32-20.png" alt="2022-09-17-23-32-20.png" /></p> </li> <li> <p>点击右上角红点,弹出窗口点 settings 按钮。</p> <p><img data-src="https://file.jingxiyuan.cn/images/2022/09/17/2022-09-17-23-35-04.png" alt="2022-09-17-23-35-04.png" /></p> </li> <li> <p>点击 API KEYS,获取 appId 和 adminApiKey 填入 hexo 的_config.yml 中 apiKey 暂时不填。</p> </li> </ol> <pre><code class="language-yml">algolia: appId: #Your appId apiKey: #Your apiKey adminApiKey: #Your adminApiKey chunkSize: 5000 indexName: blog #&quot;shoka&quot; fields: - title #必须配置 - path #必须配置 - categories #推荐配置 - content:strip:truncate,0,2000 - gallery - photos - tags </code></pre> <ol start="5"> <li> <p>点击 All Api Keys - New Api key 创建一个 api key,Indices 选先前让记住的 index,ACL 选下面图片中的选项。</p> <p><img data-src="https://file.jingxiyuan.cn/images/2022/09/17/2022-09-17-23-47-50.png" alt="2022-09-17-23-47-50.png" /></p> </li> <li> <p>把第 5 步中新建的 api key 填入到第 4 步中的配置中,到此已经完成了百分之九十,只需要重新编译发布即可。不过编译步骤多了一步,在 hexo g 后需要再执行 hexo algolia,至此搜索功能就大功告成了。</p> </li> </ol> 2022-09-17T15:12:00.000Z https://blog.jingxiyuan.cn/2022/09/16/chevereto%E5%9B%BE%E5%BA%8A%E5%AE%89%E8%A3%85/ 极空间chevereto图床docker版安装 <h1 id="安装准备"><a class="anchor" href="#安装准备">#</a> 安装准备</h1> <ol> <li> <p>需要先安装好 mysql 数据库</p> </li> <li> <p>选择版本,1.5 版以前支持中文,之后被维护的团队删除只支持英文</p> </li> <li> <p>本文介绍使用的是<span class="exturl" data-url="aHR0cHM6Ly9odWIuZG9ja2VyLmNvbS9yL2xpbnV4c2VydmVyL2NoZXZlcmV0bw=="> linuxserver_chevereto</span> 的镜像</p> </li> <li> <p>需要预先创建好给 chevereto 使用的库、账户、密码</p> </li> </ol> <p> * 经过测试,使用<span class="exturl" data-url="aHR0cHM6Ly9odWIuZG9ja2VyLmNvbS9yL3N1cmVua2lkL2NoZXZlcmV0bw=="> surenkid_chevereto</span> 的镜像可以完美支持多国语言,配置同 linuxserver_chevereto 一样<br /> <img data-src="https://file.jingxiyuan.cn/images/2022/10/12/2022-10-12-13-16-02.png" alt="" /><br /> <img data-src="https://file.jingxiyuan.cn/images/2022/10/12/2022-10-12-13-11-10.png" alt="" /><br /> <img data-src="https://file.jingxiyuan.cn/images/2022/10/12/2022-10-12-13-12-49.jpg" alt="" /></p> <h1 id="容器配置"><a class="anchor" href="#容器配置">#</a> 容器配置</h1> <ol> <li> <p>映射路径(不要放在高速盘,否则会有权限问题)<br /> <img data-src="https://file.jingxiyuan.cn/images/2022/09/16/6150d69d9a170d96e66ca69420f8c4e8.png" alt="6150d69d9a170d96e66ca69420f8c4e8.png" /></p> </li> <li> <p>端口<br /> <img data-src="https://file.jingxiyuan.cn/images/2022/09/16/08eafb3b30a7eb9b0c0be26ea7a1502a.png" alt="08eafb3b30a7eb9b0c0be26ea7a1502a.png" /></p> </li> <li> <p>环境(puid 和 pgid 使用 1000,不要使用 0,否则会报错)<br /> <img data-src="https://file.jingxiyuan.cn/images/2022/09/16/01567ca9f31f87f832276be35cc4554b.png" alt="01567ca9f31f87f832276be35cc4554b.png" /></p> </li> </ol> <h1 id="初始化配置"><a class="anchor" href="#初始化配置">#</a> 初始化配置</h1> <ol> <li> <p>使用 http:// 极空间 ip:81 (端口号使用上面配置的,我配置的是 81) 进行 web 访问(数据库配置)<br /> <img data-src="http://file.jingxiyuan.cn/images/2022/09/15/0.png" alt="0.png" /></p> </li> <li> <p>管理员配置(注意 website 配置选择个人,除非需要提供给其它人注册)<br /> <img data-src="http://file.jingxiyuan.cn/images/2022/09/15/1.png" alt="1.png" /><br /> <img data-src="http://file.jingxiyuan.cn/images/2022/09/15/2.png" alt="2.png" /></p> </li> <li> <p>默认上传大小是 2M,可通过修改 php.ini 配置提升(路径 /etc/php7/php.ini 查找 upload_max_filesize 和 post_max_size 进行修改)。之后用管理员登录通过页面 http://xxx/dashboard/settings/image-upload 修改。</p> </li> </ol> <h1 id="安装完成"><a class="anchor" href="#安装完成">#</a> 安装完成</h1> <ol> <li>作为图片管理和链接分享服务完全够用。图片链接 url 支持的也很全面。<br /> <img data-src="https://file.jingxiyuan.cn/images/2022/09/16/2022-09-16-14-52-29.png" alt="2022-09-16-14-52-29.png" /><br /> <img data-src="https://file.jingxiyuan.cn/images/2022/09/16/2022-09-16-14-54-58.png" alt="2022-09-16-14-54-58.png" /><br /> <img data-src="https://file.jingxiyuan.cn/images/2022/09/16/2022-09-16-14-56-13.png" alt="2022-09-16-14-56-13.png" /></li> </ol> 2022-09-16T00:04:00.000Z https://blog.jingxiyuan.cn/2022/09/14/Hexo%E5%AE%89%E8%A3%85%E6%91%B8%E7%B4%A2/ Hexo安装摸索 <h1 id="hexo博客安装"><a class="anchor" href="#hexo博客安装">#</a> hexo 博客安装</h1> <ol> <li> <p><span class="exturl" data-url="aHR0cHM6Ly9ub2RlanMub3JnL2VuLw==">安装 nodejs</span></p> </li> <li> <p><span class="exturl" data-url="aHR0cHM6Ly9naXQtc2NtLmNvbS8=">安装 git</span></p> </li> <li> <p>安装 hexo(windows 需进入 git bash)</p> <p><code>npm install -g hexo-cli</code></p> </li> <li> <p>初始化博客目录</p> <p><code>hexo init blog</code></p> </li> <li> <p>进入博客目录</p> <p><code>cd blog</code></p> </li> <li> <p>初始化 hexo 到博客目录</p> <p><code>npm install</code></p> </li> </ol> <h1 id="shoka主题安装"><a class="anchor" href="#shoka主题安装">#</a> shoka 主题安装</h1> <ol> <li> <p>下载主题 </p> <p><code>git clone </code> <span class="exturl" data-url="aHR0cHM6Ly9naXRodWIuY29tL2FtZWhpbWUvaGV4by10aGVtZS1zaG9rYS5naXQ=">https://github.com/amehime/hexo-theme-shoka.git</span> <code> ./themes/shoka</code></p> </li> <li> <p>卸载 hexo-renderer-marked 以及别的 markdown 文件渲染器 </p> <p><code>npm un hexo-renderer-marked --save</code></p> </li> <li> <p>安装(md 文件渲染器,压缩 css/js/html)</p> <p><code>npm i hexo-renderer-multi-markdown-it --save</code></p> </li> <li> <p>安装(给生成的 css 文件们添加浏览器前缀)</p> <p><code>npm i hexo-autoprefixer --save</code></p> </li> <li> <p>安装(站内搜索功能) </p> <p><code>npm i hexo-algoliasearch --save</code></p> </li> <li> <p>安装(文章或站点字数及阅读时间统计)</p> <p><code>npm i hexo-symbols-count-time --save</code></p> </li> <li> <p>安装(生成 Feed 文件)</p> <p><code>npm i hexo-feed --save</code></p> </li> </ol> <h1 id="hexo部分常用命令"><a class="anchor" href="#hexo部分常用命令">#</a> Hexo 部分常用命令</h1> <ul> <li> <p>清除静态文件</p> <p><code>hexo clean</code></p> </li> <li> <p>生成静态文件</p> <p><code>hexo g</code></p> </li> <li> <p>安装 git 推送插件 </p> <p><code>npm install hexo-deployer-git --save</code></p> </li> <li> <p>推送静态文件到 git </p> <p><code>hexo d</code></p> </li> </ul> <h1 id="安装hexo-admin编写博客插件"><a class="anchor" href="#安装hexo-admin编写博客插件">#</a> 安装 hexo-admin(编写博客插件)</h1> <ul> <li> <p><code>npm install hexo-admin --save</code></p> </li> <li> <p>hexo-admin 编辑 url</p> <p><a href="http://localhost:4000/admin"> <code>http://localhost:4000/admin</code> </a></p> </li> <li> <p>settings 设置用户名、密码、Secret</p> <p><a href="http://localhost:4000/admin/#/settings"> <code>http://localhost:4000/admin/#/settings</code> </a></p> </li> <li> <p>把底部生成的配置拷入 hexo 配合文件中 (_config.yml)</p> </li> </ul> <pre><code class="language-yml">admin: username: username password_hash: xxxxxx secret: 'my super secret phrase' #用单引号包裹 deployCommand: 'hexo_publish.sh' #windows用hexo_publish.bat,linux用hexo_publish.sh </code></pre> <h4 id="hexo_publishsh"><a class="anchor" href="#hexo_publishsh">#</a> hexo_publish.sh</h4> <pre><code class="language-bash">#!/bin/bash hexo clean hexo g hexo d </code></pre> <h4 id="hexo_publishbat"><a class="anchor" href="#hexo_publishbat">#</a> hexo_publish.bat</h4> <pre><code class="language-bash">@echo off cd D:\blog d: @cmd /c &quot;hexo clean&amp;&amp; hexo g&amp;&amp;hexo d&amp;&amp;echo success&quot; </code></pre> 2022-09-14T04:23:55.000Z https://blog.jingxiyuan.cn/1970/01/01/hello-world/ Hello World <p>Welcome to <span class="exturl" data-url="aHR0cHM6Ly9oZXhvLmlvLw==">Hexo</span>! This is your very first post. Check <span class="exturl" data-url="aHR0cHM6Ly9oZXhvLmlvL2RvY3Mv">documentation</span> for more info. If you get any problems when using Hexo, you can find the answer in <span class="exturl" data-url="aHR0cHM6Ly9oZXhvLmlvL2RvY3MvdHJvdWJsZXNob290aW5nLmh0bWw=">troubleshooting</span> or you can ask me on <span class="exturl" data-url="aHR0cHM6Ly9naXRodWIuY29tL2hleG9qcy9oZXhvL2lzc3Vlcw==">GitHub</span>.</p> <h2 id="quick-start"><a class="anchor" href="#quick-start">#</a> Quick Start</h2> <h3 id="create-a-new-post"><a class="anchor" href="#create-a-new-post">#</a> Create a new post</h3> <pre><code class="language-bash">$ hexo new &quot;My New Post&quot; </code></pre> <p>More info: <span class="exturl" data-url="aHR0cHM6Ly9oZXhvLmlvL2RvY3Mvd3JpdGluZy5odG1s">Writing</span></p> <h3 id="run-server"><a class="anchor" href="#run-server">#</a> Run server</h3> <pre><code class="language-bash">$ hexo server </code></pre> <p>More info: <span class="exturl" data-url="aHR0cHM6Ly9oZXhvLmlvL2RvY3Mvc2VydmVyLmh0bWw=">Server</span></p> <h3 id="generate-static-files"><a class="anchor" href="#generate-static-files">#</a> Generate static files</h3> <pre><code class="language-bash">$ hexo generate </code></pre> <p>More info: <span class="exturl" data-url="aHR0cHM6Ly9oZXhvLmlvL2RvY3MvZ2VuZXJhdGluZy5odG1s">Generating</span></p> <h3 id="deploy-to-remote-sites"><a class="anchor" href="#deploy-to-remote-sites">#</a> Deploy to remote sites</h3> <pre><code class="language-bash">$ hexo deploy </code></pre> <p>More info: <span class="exturl" data-url="aHR0cHM6Ly9oZXhvLmlvL2RvY3Mvb25lLWNvbW1hbmQtZGVwbG95bWVudC5odG1s">Deployment</span></p> 1970-01-01T00:00:00.000Z