Site updated: 2022-10-19 09:29:00

This commit is contained in:
qinglong committed 2022-10-19 09:29:01 +08:00
1 parent 02baf23216
commit 421090dd5c
75 files changed
+426 -403

No files matched your search

+41 -20
View File
@@ -7,15 +7,25 @@
"home_page_url": "https://blog.jingxiyuan.cn",
"items": [
{
"id": "https://blog.jingxiyuan.cn/2022/10/18/nagios%E5%AE%89%E8%A3%85%E4%B8%8E%E9%85%8D%E7%BD%AE/",
"url": "https://blog.jingxiyuan.cn/2022/10/18/nagios%E5%AE%89%E8%A3%85%E4%B8%8E%E9%85%8D%E7%BD%AE/",
"id": "https://blog.jingxiyuan.cn/2022/10/19/%E9%95%BF%E4%BA%86%E4%B8%80%E5%B2%81/",
"url": "https://blog.jingxiyuan.cn/2022/10/19/%E9%95%BF%E4%BA%86%E4%B8%80%E5%B2%81/",
"title": "又长了一岁",
"date_published": "2022-10-19T00:51:00.000Z",
"content_html": "<p>一年一次的总结时间又到了,这一年前半年平平无奇,后半年惊涛骇浪。中年危机如期而遇,人身的低谷终究还是来了。很沮丧也很无助,但还是要坚强面对。人生起起伏伏,时好时坏,终归还是会好起来的。加油!加油!加油<br />\n!</p>\n",
"tags": [
"心情",
"心情"
]
},
{
"id": "https://blog.jingxiyuan.cn/2022/10/18/%E6%90%AD%E5%BB%BAnagios%E7%9B%91%E6%8E%A7/",
"url": "https://blog.jingxiyuan.cn/2022/10/18/%E6%90%AD%E5%BB%BAnagios%E7%9B%91%E6%8E%A7/",
"title": "搭建nagios监控",
"date_published": "2022-10-18T01:39:00.000Z",
"content_html": "<h4 id=\"监控端服务安装与配置\"><a class=\"anchor\" href=\"#监控端服务安装与配置\">#</a> 监控端服务安装与配置</h4>\n<ol>\n<li>nagios 需要安装主程序和 nrpe(nagios 和各被监控主机都必须安装)。如需使用自研前端可通过安装 ndoutils (用于把 nagios 监控信息写入数据库) 和 mysql 实现。具体安装见<span class=\"exturl\" data-url=\"aHR0cHM6Ly9zdXBwb3J0Lm5hZ2lvcy5jb20va2Iv\">官网</span></li>\n<li>nagios 默认监控命令脚本放置在 libexec 中,自定义脚本也放到此处</li>\n<li>etc/objects/commands.cfg 用于保存 nagios 默认监控命令</li>\n<li>etc/nrpe.cfg 文件中需要添加用于被监控执行命令项(各被监控主机中都需要添加)<br />\n<img data-src=\"https://file.jingxiyuan.cn/images/2022/10/18/image.png\" alt=\"\" /></li>\n<li>etc/objects/hosts 目录下配置需要被监控的主机信息<br />\n<img data-src=\"https://file.jingxiyuan.cn/images/2022/10/18/image2.png\" alt=\"\" /></li>\n<li>etc/objects/servers 目录下配置需要在被监控主机上执行的监控命令(第 4 项中的命令)<br />\n<img data-src=\"https://file.jingxiyuan.cn/images/2022/10/18/image3.png\" alt=\"\" /></li>\n</ol>\n<h4 id=\"被监控端服务安装与配置\"><a class=\"anchor\" href=\"#被监控端服务安装与配置\">#</a> 被监控端服务安装与配置</h4>\n<ol>\n<li>被监控端需要安装 nrpe</li>\n<li>被监控端需要把监控端的命令写入到 nrpe 的配置文件中</li>\n<li>被监控端需要把命令执行脚本放入 libexec 目录中</li>\n<li>被监控端自动安装脚本(可借鉴)</li>\n</ol>\n<pre><code class=\"language-bash\">1、请先修改脚本中的服务端IP。\n2、如被监控端不支持let计算命令请执行sudo dpkg-reconfigure dash命令,弹出选择窗口后选择no。\n3、需要在脚本同目录下创建CentOS、Ubuntu、sh和conf目录,目录下分别放置nrpe的tar安装包、监控脚本和nrpe配置文件。\n\n#!/bin/bash\n#服务端ip\nSERVER_IP=10.10.10.121\n#安装目录\nINSTALL_HOME=`pwd`\n#安装ubuntu版本\nINSTALL_UBUNTU()\n&#123;\n\tsudo apt-get update\n\tsudo apt-get install -y autoconf automake gcc libc6 libmcrypt-dev make libssl-dev wget openssl\n\t\n\tcd /tmp\n\t#wget --no-check-certificate -O nrpe.tar.gz https://github.com/NagiosEnterprises/nrpe/archive/nrpe-4.0.3.tar.gz\n\tcp $INSTALL_HOME/Ubuntu/nrpe.tar.gz ./\n\ttar xzf nrpe.tar.gz\n\n\tcd /tmp/nrpe-nrpe-4.0.3/\n\tsudo ./configure --enable-command-args --with-ssl-lib=/usr/lib/x86_64-linux-gnu/\n\tsudo make all\n\n\tsudo make install-groups-users\n\n\tsudo make install\n\n\tsudo make install-config\n\n\tsudo sh -c &quot;echo &gt;&gt; /etc/services&quot;\n\tsudo sh -c &quot;sudo echo '# Nagios services' &gt;&gt; /etc/services&quot;\n\tsudo sh -c &quot;sudo echo 'nrpe 5666/tcp' &gt;&gt; /etc/services&quot;\n\t\n\t#判断系统是高版本还是低版本\n\tVERSION=`lsb_release -r --short`\n\tIS_LOW_VERSION=`echo &quot;$VERSION &lt; 15&quot; | bc`\n\n\tif [ $IS_LOW_VERSION = 1 ]; then\n\t\t#低版本\n\t\tsudo make install-init\n\telse\n\t\t#高版本\n\t\tsudo make install-init\n\t\tsudo systemctl enable nrpe.service\n\tfi\n\t\n\tsudo mkdir -p /etc/ufw/applications.d\n\tsudo sh -c &quot;echo '[NRPE]' &gt; /etc/ufw/applications.d/nagios&quot;\n\tsudo sh -c &quot;echo 'title=Nagios Remote Plugin Executor' &gt;&gt; /etc/ufw/applications.d/nagios&quot;\n\tsudo sh -c &quot;echo 'description=Allows remote execution of Nagios plugins' &gt;&gt; /etc/ufw/applications.d/nagios&quot;\n\tsudo sh -c &quot;echo 'ports=5666/tcp' &gt;&gt; /etc/ufw/applications.d/nagios&quot;\n\tsudo ufw allow NRPE\n\tsudo ufw reload\n\t\n\tsudo sh -c &quot;sed -i '/^allowed_hosts=/s/$/,$SERVER_IP/' /usr/local/nagios/etc/nrpe.cfg&quot;\n\tsudo sh -c &quot;sed -i 's/^dont_blame_nrpe=.*/dont_blame_nrpe=1/g' /usr/local/nagios/etc/nrpe.cfg&quot;\n\t\n\tcd $INSTALL_HOME\n\tsudo cp ./sh/* /usr/local/nagios/libexec/\n\tsudo chmod +xr /usr/local/nagios/libexec/*\n\t\n\tsudo sh -c &quot;echo 'command[check_ping]=/usr/local/nagios/libexec/check_ping -H 127.0.0.1 -w 3000.0,80% -c 5000.0,100% -p 5' &gt;&gt; /usr/local/nagios/etc/nrpe.cfg&quot;\n\tsudo sh -c &quot;echo 'command[check_cpu]=/usr/local/nagios/libexec/check_cpu.sh' &gt;&gt; /usr/local/nagios/etc/nrpe.cfg&quot;\n\tsudo sh -c &quot;echo 'command[check_mem]=/usr/local/nagios/libexec/check_mem.sh' &gt;&gt; /usr/local/nagios/etc/nrpe.cfg&quot;\n\tsudo sh -c &quot;echo 'command[check_disk]=/usr/local/nagios/libexec/check_disk.sh' &gt;&gt; /usr/local/nagios/etc/nrpe.cfg&quot;\n\tsudo sh -c &quot;echo 'command[check_my_service]=/usr/local/nagios/libexec/check_my_service.sh \\$ARG1\\$' &gt;&gt; /usr/local/nagios/etc/nrpe.cfg&quot;\n\tsudo sh -c &quot;echo 'command[check_system_info]=/usr/local/nagios/libexec/check_system_info.sh' &gt;&gt; /usr/local/nagios/etc/nrpe.cfg&quot;\n\tNETWORK_INDEX=1\n\tfor NETWORK_NAME in `cat /proc/net/devLine truncated
"tags": [
"技术分享",
"经验分享",
"心得体会",
"nagios",
"服务监控"
]
@@ -28,6 +38,7 @@
"content_html": "<h4 id=\"主服务\"><a class=\"anchor\" href=\"#主服务\">#</a> 主服务</h4>\n<ol>\n<li>基础配置</li>\n</ol>\n<pre><code class=\"language-conf\">port 6379\nrequirepass 123456(密码,建议不设置)\nvm-enabled no (虚拟内存,内存够的情况下可以不使用)\nmaxmemory 1GB(告诉Redis当使用了多少物理内存后就开始拒绝后续的写入)\nbind 127.0.0.1 (注释掉,否则不能外部连接)\nrdbchecksum no(持久化数据检查)\nlist-max-ziplist-size 1024(ziplist的最大容量,正数为自己指定的大小。负数-1到-5为对应的值4到64Kb)\nlist-compress-depth 20(quicklist的两端多少个node不压缩,0为全部不压缩)\n</code></pre>\n<pre><code class=\"language-bash\">sysctl vm.overcommit_memory=1 (立即生效)\n修改/etc/sysctl.conf添加vm.overcommit_memory=1(表示内核允许分配所有的物理内存,而不管当前的内存状态如何。Redis的RDB持久化实现是folk一个子进程,然后让子进程将内存镜像dump到RDB文件中。理论上来说是需要跟父进程一样的内存空间,但是由于linux很早就支持的copy-on-write技术,所以实际上并不需要这么多的物理内存的。)\n</code></pre>\n<ol start=\"2\">\n<li>禁用透明大页(影响性能)</li>\n</ol>\n<pre><code class=\"language-bash\">需要sudo su 切换到root身份(sudo 没用)\necho never &gt; /sys/kernel/mm/transparent_hugepage/enabled\n修改/etc/init.d/redis-server,加入/bin/echo never &gt; /sys/kernel/mm/transparent_hugepage/enabled\n</code></pre>\n<ol start=\"3\">\n<li>修复 TCP 警告</li>\n</ol>\n<pre><code class=\"language-bash\">sysctl net.core.somaxconn=1024(立即生效)\n修改/etc/sysctl.conf添加net.core.somaxconn=1024\n</code></pre>\n<ol start=\"4\">\n<li>客户端缓冲区限制</li>\n</ol>\n<pre><code class=\"language-conf\">客户端的输出缓冲区的限制,因为某种原因客户端从服务器读取数据的速度不够快,可用于强制断开连接(一个常见的原因是一个发布 / 订阅客户端消费消息的速度无法赶上生产它们的速度)。\n可以三种不同客户端的方式进行设置:\nnormal -&gt; 正常客户端\nslave -&gt; slave 和 MONITOR 客户端\npubsub -&gt; 至少订阅了一个 pubsub channel 或 pattern 的客户端\n语法 :\nclient-output-buffer-limit &lt;class&gt;&lt;hard limit&gt; &lt;soft limit&gt; &lt;soft seconds&gt;\n一旦达到硬限制客户端会立即断开,或者达到软限制并保持达成的指定秒数(连续)。\n例如,如果硬限制为 32 兆字节和软限制为 16 兆字节 /10 秒,客户端将会立即断开。如果输出缓冲区的大小达到 32 兆字节,客户端达到 16 兆字节和连续超过了限制 10 秒,也将断开连接。默认 normal 客户端不做限制,因为他们在一个请求后未要求时(以推的方式)不接收数据,\n只有异步客户端可能会出现请求数据的速度比它可以读取的速度快的场景。\n把硬限制和软限制都设置为 0 来禁用该特性\nclient-output-buffer-limit normal 0 0 0\nclient-output-buffer-limit slave 5gb 512mb 60\nclient-output-buffer-limit pubsub 32mb 8mb 60\n</code></pre>\n<ol start=\"5\">\n<li>持久化配置</li>\n</ol>\n<pre><code class=\"language-conf\">---关闭RDB持久化---\nsave &quot;&quot;\n默认配置如下:\nsave 900 1 #900秒内有1次更新就持久化\nsave 300 10 #300秒内有10次更新就持久化\nsave 60 10000 #60秒内有10000次更新就持久化\n---关闭RDB持久化---\n主从同步支持两种策略,即disk和socket方式。\n新的slave端和重连的salve端不允许去继续同步进程,这被称之为“完全同步”。\n一个RDB文件从master端传到slave端,分为两种情况:\n1、支持disk:master端将RDB file写到disk,稍后再传送到slave端;\n2、无磁盘diskless:master端直接将RDB file传到slave socket,不需要与disk进行交互。无磁盘diskless方式适合磁盘读写速度慢但网络带宽非常高的环境。\nrepl-diskless-sync no 默认不使用diskless同步方式\nrepl-diskless-sync-delay 30 无磁盘diskless方式在进行数据传递之前会有一个时间的延迟,以便slave端能够进行到待传送的目标队列中,这个时间默认是5秒\nrepl-ping-slave-period 60 slave端向server端发送pings的时间区间设置,默认为10秒\nrepl-timeout 3600 设置超时时间\nrepl-disable-tcp-nodelay no 是否启用TCP_NODELAY,如果启用则会使用少量的TCP包和带宽去进行数据传输到slave端,当然速度会比较慢;如果不启用则传输速度比较快,但是会占用比较多的带宽。\nrepl-backlog-size 1mb 设置backlog的大小,backlog是一个缓冲区,在slave端失连时存放要同步到slave的数据,因此当一个slave要重连时,经常是不需要完全同步的,执行局部同步就足够了。\nbacklog设置的越Line truncated
"tags": [
"技术分享",
"经验分享",
"redis"
]
},
@@ -39,6 +50,7 @@
"content_html": "<h4 id=\"使用场景\"><a class=\"anchor\" href=\"#使用场景\">#</a> 使用场景</h4>\n<p>  在 A 域名的页面向 B 域名提交数据时需要代入 B 域名的 cookie,否则 B 域名会跳转到登陆页面。解决方式需要使用到 nginx 反向代理,配置如下:</p>\n<pre><code class=\"language-conf\">server &#123;\n\tlisten port ssl http2;\n\tserver_name xxx.com;\n\tssl_certificate_key /xxx.key;\n\tssl_certificate /xxx.pem;\n\tproxy_cookie_path ~(.*) &quot;$1; SameSite=None; secure; httponly&quot;;\n\n\tlocation / &#123;\n\t\t#允许镶套的方式(可以同域镶套、指定域名镶套或者所有域名镶套)\n\t\tadd_header X-Frame-Options ALLOWALL; #允许被所有域名镶套\n\t\tproxy_pass http://xxx;\n\t&#125;\n&#125;\n</code></pre>\n",
"tags": [
"技术分享",
"经验分享",
"nginx",
"iframe",
"cookie"
@@ -52,6 +64,7 @@
"content_html": "<h1 id=\"简介\"><a class=\"anchor\" href=\"#简介\">#</a> 简介</h1>\n<p>PicGo 是一款开源的图床管理工具,十分流行。</p>\n<p>PicGo 官方指南:<span class=\"exturl\" data-url=\"aHR0cHM6Ly9waWNnby5naXRodWIuaW8vUGljR28tRG9jL3poL2d1aWRlLw==\">PicGo | PicGo</span></p>\n<h1 id=\"配置\"><a class=\"anchor\" href=\"#配置\">#</a> 配置</h1>\n<ol>\n<li>\n<p>安装插件(需要先安装 NodeJS)<br />\n<img data-src=\"https://file.jingxiyuan.cn/images/2022/10/12/2022-10-12-13-24-09.png\" alt=\"\" /></p>\n</li>\n<li>\n<p>图床配置  <br />\nurl 后缀必须用红线圈中的部分,key 在 chevereto 登陆后 api 配置中查找<br />\n<img data-src=\"https://file.jingxiyuan.cn/images/2022/10/12/2022-10-12-13-24-51.png\" alt=\"\" /></p>\n</li>\n</ol>\n",
"tags": [
"技术分享",
"经验分享",
"PicGo",
"chevereto"
]
@@ -64,6 +77,7 @@
"content_html": "<h4 id=\"前期准备\"><a class=\"anchor\" href=\"#前期准备\">#</a> 前期准备</h4>\n<p>  首先安装好 svn 和 git 工具。</p>\n<h4 id=\"svn转git\"><a class=\"anchor\" href=\"#svn转git\">#</a> svn 转 git</h4>\n<p>1、 到 svn 项目目录右键选中 gitbash 打开窗口,执行获取用户并映射成 git 样式账号命令如下:</p>\n<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\n</code></pre>\n<p>  然后会在目录下生成文件 users.txt 样式如:zhansan = 张三 <span class=\"exturl\" data-url=\"bWFpbHRvOnpoYW5zYW5AeHh4LmNvbQ==\">zhansan@xxx.com</span>。</p>\n<p>2、新建个文件夹,将生成的 users.txt 放入新建的文件夹,然后在新建的文件夹中右键选中 gitbash 弹出窗口后执行下面命令(https://svn_project_url/ 为 svn 库的 url),拉取 svn 代码到本地新建文件夹中。</p>\n<pre><code class=\"language-bash\">git svn clone https://svn_project_url/ --no-metadata --no-minimize-url --authors-file=users.txt\n</code></pre>\n<p>  期间可能会弹出 svn 的账户密码验证窗口,正确输入即可。</p>\n<h4 id=\"推送项目到git库\"><a class=\"anchor\" href=\"#推送项目到git库\">#</a> 推送项目到 git 库</h4>\n<p>1、在 gitbash 窗口 cd 到 git 项目文件夹中执行以下命令把 git 仓库地址加入到 remote 中(https://git_project_url/ 为 git 库的 url)。</p>\n<pre><code class=\"language-bash\">git remote add origin https://git_project_url/\n</code></pre>\n<p>2、push 项目到 git 库中。</p>\n<pre><code class=\"language-bash\">git push origin master\n</code></pre>\n",
"tags": [
"技术分享",
"经验分享",
"svn",
"git"
]
@@ -76,6 +90,7 @@
"content_html": "<h4 id=\"x-frame-options响应头配置详解\"><a class=\"anchor\" href=\"#x-frame-options响应头配置详解\">#</a> X-Frame-Options 响应头配置详解</h4>\n<p>  X-Frame-Options HTTP 响应头是用来给浏览器指示允许一个页面可否在,或者 中展现的标记。网站可以使用此功能,来确保自己网站的内容没有被嵌套到别人的网站中去,也从而避免了点击劫持 (clickjacking) 的攻击。<br />\nX-Frame-Options 三个参数:</p>\n<p>1、 DENY</p>\n<p>  表示该页面不允许在 frame 中展示,即便是在相同域名的页面中嵌套也不允许。</p>\n<p>2、SAMEORIGIN</p>\n<p>  表示该页面可以在相同域名页面的 frame 中展示。</p>\n<p>3、ALLOW-FROM uri</p>\n<p>  表示该页面可以在指定来源的 frame 中展示。</p>\n<p>4、ALLOWALL</p>\n<p>  表示该页面可以在任何来源的 frame 中展示。</p>\n<p>  换一句话说,如果设置为 DENY,不光在别人的网站 frame 嵌入时会无法加载,在同域名页面中同样会无法加载。另一方面,如果设置为 SAMEORIGIN,那么页面就可以在同域名页面的 frame 中嵌套。正常情况下我们通常使用 SAMEORIGIN 参数。</p>\n<h4 id=\"apache配置\"><a class=\"anchor\" href=\"#apache配置\">#</a> Apache 配置</h4>\n<p>  需要把下面这行添加到'site' 的配置中</p>\n<pre><code class=\"language-shell\"> Header always append X-Frame-Options SAMEORIGIN\n</code></pre>\n<h4 id=\"nginx配置\"><a class=\"anchor\" href=\"#nginx配置\">#</a> Nginx 配置</h4>\n<p>  需要添加到 ‘http’, ‘server’ 或者 ‘location’ 的配置项中,个人来讲喜欢配置在‘server’ 中</p>\n<p>  正常情况下都是使用 SAMEORIGIN 参数,允许同域嵌套</p>\n<pre><code class=\"language-shell\"> add_header X-Frame-Options SAMEORIGIN;\n</code></pre>\n<p>  允许单个域名 iframe 嵌套</p>\n<pre><code class=\"language-shell\"> add_header X-Frame-Options ALLOW-FROM http://xxx.com/;\n</code></pre>\n<p>  允许多个域名 iframe 嵌套,注意这里是用逗号分隔</p>\n<pre><code class=\"language-shell\"> add_header X-Frame-Options &quot;ALLOW-FROM http://xxx.com/,https://xxx.com/&quot;;\n</code></pre>\n<p>  允许任何域名 iframe 嵌套</p>\n<pre><code class=\"language-shell\"> add_header X-Frame-Options ALLOWALL;\n</code></pre>\n<h4 id=\"tomcat配置\"><a class=\"anchor\" href=\"#tomcat配置\">#</a> Tomcat 配置</h4>\n<p>  在‘conf/web.xml’填加以下配置</p>\n<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></preLine truncated
"tags": [
"技术分享",
"经验分享",
"nginx",
"iframe"
]
@@ -88,7 +103,8 @@
"content_html": "<p>  一个月都过去了,工作还没有着落!</p>\n",
"tags": [
"心情",
"郁闷"
"郁闷",
"心情"
]
},
{
@@ -99,6 +115,7 @@
"content_html": "<h2 id=\"nginx负载均衡配置\"><a class=\"anchor\" href=\"#nginx负载均衡配置\">#</a> nginx 负载均衡配置</h2>\n<ol>\n<li>轮询(默认)</li>\n</ol>\n<p>  <em>每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器 down 掉,能自动剔除。</em></p>\n<pre><code class=\"language-yum\">upstream my_server &#123;\n\tserver 192.168.0.2:8080;\n\tserver 192.168.0.3:8080;\n&#125;\n\nserver &#123;\n\tlisten 80;\n\tserver_name 192.168.0.1;\n\n\t# Path to the root of your installation\n\tlocation / &#123;\n\t\tproxy_pass http://my_server;\n\t&#125;\n\t\n&#125;\n</code></pre>\n<ol start=\"2\">\n<li>weight 权重策略</li>\n</ol>\n<p>  <em>weight 代表权重,默认为 1,权重越高被分配的客户端越多,指定轮询几率。weight 和访问比率成正比,用于后端服务器性能不均的情况。</em></p>\n<pre><code class=\"language-yum\">upstream my_server &#123;\n\tserver 192.168.0.2:8080 weight=1;\n\tserver 192.168.0.3:8080 weight=2;\n&#125;\n\nserver &#123;\n\tlisten 80;\n\tserver_name 192.168.0.1;\n\n\t# Path to the root of your installation\n\tlocation / &#123;\n\t\tproxy_pass http://my_server;\n\t&#125;\n\t\n&#125;\n</code></pre>\n<ol start=\"3\">\n<li>ip_hash</li>\n</ol>\n<p>  <em>每个请求按访问 ip 的 hash 结果分配,这样每个访客固定访问一个后端服务器,可以解决 session 的问题。</em></p>\n<pre><code class=\"language-yum\">upstream my_server &#123;\n\tip_hash;\n\tserver 192.168.0.2:8080;\n\tserver 192.168.0.3:8080;\n&#125;\n\nserver &#123;\n\tlisten 80;\n\tserver_name 192.168.0.1;\n\n\t# Path to the root of your installation\n\tlocation / &#123;\n\t\tproxy_pass http://my_server;\n\t&#125;\n\t\n&#125;\n</code></pre>\n<ol start=\"4\">\n<li>fair (第三方)</li>\n</ol>\n<p>  <em>按后端服务器的响应时间来分配请求,响应时间短的优先分配。</em></p>\n<pre><code class=\"language-yum\">upstream my_server &#123;\n\tserver 192.168.0.2:8080;\n\tserver 192.168.0.3:8080;\n\tfair;\n&#125;\n\nserver &#123;\n\tlisten 80;\n\tserver_name 192.168.0.1;\n\n\t# Path to the root of your installation\n\tlocation / &#123;\n\t\tproxy_pass http://my_server;\n\t&#125;\n\t\n&#125;\n</code></pre>\n<ol start=\"5\">\n<li>动静分离</li>\n</ol>\n<p>  <em>把静态的资源,比如图片,css,js 等先加载到 Nginx 的服务器里。</em></p>\n",
"tags": [
"技术分享",
"经验分享",
"nginx",
"负载均衡"
]
@@ -111,6 +128,8 @@
"content_html": "<p><em>  今天突然发现博客的音乐无法播放了。经过一顿查找,发现是因为 https://api.i-meto.com/meting/api 调用出错了。shoka 主题应该是通过这个网站提取音乐地址、图片等信息。通过断点发现网易播放列表还是能正常获取的,只是列表中的具体音乐、图片无法获取了。于是自己用获取的列表信息组装出正确的 url 问题基本解决。只针对网易播放列表,图片只能使用一张固定的。</em></p>\n<p><em>  解决方法如下:</em></p>\n<p><em>    到 themes\\shoka\\source\\js_app 目录下打开 player.js 文件,在最底部 init (config) 下加入 vendorJs ('fancybox');,然后找到 56 行用下面的代码替换即可。</em></p>\n<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>\t\t\t <span class=\"token comment\">// 自己修改 - start</span></pre></td></tr><tr><td data-num=\"12\"></td><td><pre>\t\t\t <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>\t\t\t <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>\t\t\t <span class=\"token keyword\">if</spaLine truncated
"tags": [
"技术分享",
"经验分享",
"踩坑",
"博客",
"Hexo",
"Shoka",
@@ -125,6 +144,7 @@
"content_html": "<p>  <em>今天突然发现自己的网站不能访问了。经过一顿排查,发现是家里的外网 ip 变动后 nginx 解析的域名 ip 还是旧 ip 导致的。手动重启 nginx 后恢复正常。但这不是长久之计,如果每次 ip 变动都需要重启一次 nginx,想想都头大。于是查询资料后获得了解决办法,方法如下:</em></p>\n<pre><code class=\"language-yum\">location / &#123;\t\n\tresolver 114.114.114.114 valid=60s; #自定义缓存有效时间间隔对变量中的域名进行解析\n\n\tset $my_server &quot;https://ip:port&quot;;\n\n\tproxy_pass $my_server;\n&#125;\n</code></pre>\n",
"tags": [
"技术分享",
"经验分享",
"nginx"
]
},
@@ -136,6 +156,7 @@
"content_html": "<h1 id=\"下载工具\"><a class=\"anchor\" href=\"#下载工具\">#</a> 下载工具</h1>\n<p><span class=\"exturl\" data-url=\"aHR0cHM6Ly92ZXJzYXdlYi5kbC5zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdC9wcm90b2NvbC1idWZmZXJzLm1pcnJvci92My4xOS41L3Byb3RvYy0zLjE5LjUtd2luNjQuemlw\">protoc-3.19.5-win64.zip</span></p>\n<h1 id=\"生成js文件\"><a class=\"anchor\" href=\"#生成js文件\">#</a> 生成 js 文件</h1>\n<ol>\n<li>\n<p>把 xxx.proto 文件拷贝到解压的 protoc-3.19.5-win64\\bin 目录下</p>\n</li>\n<li>\n<p>cmd 到相同的 bin 目录下</p>\n</li>\n<li>\n<p>执行 protoc.exe --js_out=import_style=commonjs,binary:. ./xxx.proto 命令,就会在 bin 目录下生成 xxx_pb.js 文件</p>\n</li>\n</ol>\n",
"tags": [
"技术分享",
"经验分享",
"protobuf",
"js"
]
@@ -155,23 +176,31 @@
]
},
{
"id": "https://blog.jingxiyuan.cn/2022/09/17/Hexo-Theme-Shoka-algolia%E6%90%9C%E7%B4%A2%E8%B8%A9%E5%9D%91-1/",
"url": "https://blog.jingxiyuan.cn/2022/09/17/Hexo-Theme-Shoka-algolia%E6%90%9C%E7%B4%A2%E8%B8%A9%E5%9D%91-1/",
"id": "https://blog.jingxiyuan.cn/2022/09/17/Hexo-Theme-Shoka-algolia%E6%90%9C%E7%B4%A2%E8%B8%A9%E5%9D%91/",
"url": "https://blog.jingxiyuan.cn/2022/09/17/Hexo-Theme-Shoka-algolia%E6%90%9C%E7%B4%A2%E8%B8%A9%E5%9D%91/",
"title": "Hexo + Theme.Shoka + algolia搜索踩坑",
"date_published": "2022-09-17T15:12:00.000Z",
"content_html": "<h1 id=\"hexo-themeshoka安装\"><a class=\"anchor\" href=\"#hexo-themeshoka安装\">#</a> Hexo + Theme.Shoka 安装</h1>\n<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>\n<h1 id=\"algolia注册\"><a class=\"anchor\" href=\"#algolia注册\">#</a> algolia 注册</h1>\n<ol>\n<li>\n<p><span class=\"exturl\" data-url=\"aHR0cHM6Ly93d3cuYWxnb2xpYS5jb20vdXNlcnMvc2lnbl9pbg==\">algolia</span> 不支持国内邮箱注册,而 google 和 github 由于国内被墙也没法使用。所以只能先注册<span class=\"exturl\" data-url=\"aHR0cHM6Ly9hcHAubmV0bGlmeS5jb20v\"> netlify</span> 然后通过 netlify 注册 algolia。</p>\n</li>\n<li>\n<p>登录 algolia 后创建一个 index,名字随意记住既可。</p>\n<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>\n</li>\n<li>\n<p>点击右上角红点,弹出窗口点 settings 按钮。</p>\n<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>\n</li>\n<li>\n<p>点击 API KEYS,获取 appId 和 adminApiKey 填入 hexo 的_config.yml 中 apiKey 暂时不填。</p>\n</li>\n</ol>\n<pre><code class=\"language-yml\">algolia:\n appId: #Your appId\n apiKey: #Your apiKey\n adminApiKey: #Your adminApiKey\n chunkSize: 5000\n indexName: blog #&quot;shoka&quot;\n fields:\n - title #必须配置\n - path #必须配置\n - categories #推荐配置\n - content:strip:truncate,0,2000\n - gallery\n - photos\n - tags\n</code></pre>\n<ol start=\"5\">\n<li>\n<p>点击 All Api Keys - New Api key 创建一个 api key,Indices 选先前让记住的 index,ACL 选下面图片中的选项。</p>\n<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>\n</li>\n<li>\n<p>把第 5 步中新建的 api key 填入到第 4 步中的配置中,到此已经完成了百分之九十,只需要重新编译发布即可。不过编译步骤多了一步,在 hexo g 后需要再执行 hexo algolia,至此搜索功能就大功告成了。</p>\n</li>\n</ol>\n",
"tags": []
"tags": [
"技术分享",
"踩坑",
"经验分享",
"博客",
"Hexo",
"Shoka",
"algolia"
]
},
{
"id": "https://blog.jingxiyuan.cn/2022/09/16/chevereto%E5%9B%BE%E5%BA%8A%E5%AE%89%E8%A3%85/",
"url": "https://blog.jingxiyuan.cn/2022/09/16/chevereto%E5%9B%BE%E5%BA%8A%E5%AE%89%E8%A3%85/",
"id": "https://blog.jingxiyuan.cn/2022/09/16/%E6%9E%81%E7%A9%BA%E9%97%B4chevereto%E5%9B%BE%E5%BA%8Adocker%E7%89%88%E5%AE%89%E8%A3%85/",
"url": "https://blog.jingxiyuan.cn/2022/09/16/%E6%9E%81%E7%A9%BA%E9%97%B4chevereto%E5%9B%BE%E5%BA%8Adocker%E7%89%88%E5%AE%89%E8%A3%85/",
"title": "极空间chevereto图床docker版安装",
"date_published": "2022-09-16T00:04:00.000Z",
"content_html": "<h1 id=\"安装准备\"><a class=\"anchor\" href=\"#安装准备\">#</a> 安装准备</h1>\n<ol>\n<li>\n<p>需要先安装好 mysql 数据库</p>\n</li>\n<li>\n<p><s>选择版本,1.5 版以前支持中文,之后被维护的团队删除只支持英文</s></p>\n</li>\n<li>\n<p><s>本文介绍使用的是<span class=\"exturl\" data-url=\"aHR0cHM6Ly9odWIuZG9ja2VyLmNvbS9yL2xpbnV4c2VydmVyL2NoZXZlcmV0bw==\"> linuxserver_chevereto</span> 的镜像</s></p>\n</li>\n<li>\n<p>需要预先创建好给 chevereto 使用的库、账户、密码</p>\n</li>\n</ol>\n<p> * 经过测试,使用<span class=\"exturl\" data-url=\"aHR0cHM6Ly9odWIuZG9ja2VyLmNvbS9yL3N1cmVua2lkL2NoZXZlcmV0bw==\"> surenkid_chevereto</span> 的镜像可以完美支持多国语言,配置同 linuxserver_chevereto 一样<br />\n<img data-src=\"https://file.jingxiyuan.cn/images/2022/10/12/2022-10-12-13-16-02.png\" alt=\"\" /><br />\n<img data-src=\"https://file.jingxiyuan.cn/images/2022/10/12/2022-10-12-13-11-10.png\" alt=\"\" /><br />\n<img data-src=\"https://file.jingxiyuan.cn/images/2022/10/12/2022-10-12-13-12-49.jpg\" alt=\"\" /></p>\n<h1 id=\"容器配置\"><a class=\"anchor\" href=\"#容器配置\">#</a> 容器配置</h1>\n<ol>\n<li>\n<p>映射路径(不要放在高速盘,否则会有权限问题)<br />\n<img data-src=\"https://file.jingxiyuan.cn/images/2022/09/16/6150d69d9a170d96e66ca69420f8c4e8.png\" alt=\"6150d69d9a170d96e66ca69420f8c4e8.png\" /></p>\n</li>\n<li>\n<p>端口<br />\n<img data-src=\"https://file.jingxiyuan.cn/images/2022/09/16/08eafb3b30a7eb9b0c0be26ea7a1502a.png\" alt=\"08eafb3b30a7eb9b0c0be26ea7a1502a.png\" /></p>\n</li>\n<li>\n<p>环境(puid 和 pgid 使用 1000,不要使用 0,否则会报错)<br />\n<img data-src=\"https://file.jingxiyuan.cn/images/2022/09/16/01567ca9f31f87f832276be35cc4554b.png\" alt=\"01567ca9f31f87f832276be35cc4554b.png\" /></p>\n</li>\n</ol>\n<h1 id=\"初始化配置\"><a class=\"anchor\" href=\"#初始化配置\">#</a> 初始化配置</h1>\n<ol>\n<li>\n<p>使用 http:// 极空间 ip:81 (端口号使用上面配置的,我配置的是 81) 进行 web 访问(数据库配置)<br />\n<img data-src=\"http://file.jingxiyuan.cn/images/2022/09/15/0.png\" alt=\"0.png\" /></p>\n</li>\n<li>\n<p>管理员配置(注意 website 配置选择个人,除非需要提供给其它人注册)<br />\n<img data-src=\"http://file.jingxiyuan.cn/images/2022/09/15/1.png\" alt=\"1.png\" /><br />\n<img data-src=\"http://file.jingxiyuan.cn/images/2022/09/15/2.png\" alt=\"2.png\" /></p>\n</li>\n<li>\n<p>默认上传大小是 2M,可通过修改 php.ini 配置提升(路径 /etc/php7/php.ini 查找 upload_max_filesize 和 post_max_size 进行修改)。之后用管理员登录通过页面 http://xxx/dashboard/settings/image-upload 修改。</p>\n</li>\n</ol>\n<h1 id=\"安装完成\"><a class=\"anchor\" href=\"#安装完成\">#</a> 安装完成</h1>\n<ol>\n<li>作为图片管理和链接分享服务完全够用。图片链接 url 支持的也很全面。<br />\n<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 />\n<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 />\n<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>\n</ol>\n",
"tags": [
"技术分享",
"心得体会",
"踩坑",
"经验分享",
"docker",
"极空间",
"图床",
@@ -182,23 +211,15 @@
"id": "https://blog.jingxiyuan.cn/2022/09/14/Hexo%E5%AE%89%E8%A3%85%E6%91%B8%E7%B4%A2/",
"url": "https://blog.jingxiyuan.cn/2022/09/14/Hexo%E5%AE%89%E8%A3%85%E6%91%B8%E7%B4%A2/",
"title": "Hexo安装摸索",
"date_published": "2022-09-14T04:23:55.000Z",
"date_published": "2022-09-14T04:23:00.000Z",
"content_html": "<h1 id=\"hexo博客安装\"><a class=\"anchor\" href=\"#hexo博客安装\">#</a> hexo 博客安装</h1>\n<ol>\n<li>\n<p><span class=\"exturl\" data-url=\"aHR0cHM6Ly9ub2RlanMub3JnL2VuLw==\">安装 nodejs</span></p>\n</li>\n<li>\n<p><span class=\"exturl\" data-url=\"aHR0cHM6Ly9naXQtc2NtLmNvbS8=\">安装 git</span></p>\n</li>\n<li>\n<p>安装 hexo(windows 需进入 git bash)</p>\n<p><code>npm install -g hexo-cli</code></p>\n</li>\n<li>\n<p>初始化博客目录</p>\n<p><code>hexo init blog</code></p>\n</li>\n<li>\n<p>进入博客目录</p>\n<p><code>cd blog</code></p>\n</li>\n<li>\n<p>初始化 hexo 到博客目录</p>\n<p><code>npm install</code></p>\n</li>\n</ol>\n<h1 id=\"shoka主题安装\"><a class=\"anchor\" href=\"#shoka主题安装\">#</a> shoka 主题安装</h1>\n<ol>\n<li>\n<p>下载主题 </p>\n<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>\n</li>\n<li>\n<p>卸载 hexo-renderer-marked 以及别的 markdown 文件渲染器 </p>\n<p><code>npm un hexo-renderer-marked --save</code></p>\n</li>\n<li>\n<p>安装(md 文件渲染器,压缩 css/js/html)</p>\n<p><code>npm i hexo-renderer-multi-markdown-it --save</code></p>\n</li>\n<li>\n<p>安装(给生成的 css 文件们添加浏览器前缀)</p>\n<p><code>npm i hexo-autoprefixer --save</code></p>\n</li>\n<li>\n<p>安装(站内搜索功能) </p>\n<p><code>npm i hexo-algoliasearch --save</code></p>\n</li>\n<li>\n<p>安装(文章或站点字数及阅读时间统计)</p>\n<p><code>npm i hexo-symbols-count-time --save</code></p>\n</li>\n<li>\n<p>安装(生成 Feed 文件)</p>\n<p><code>npm i hexo-feed --save</code></p>\n</li>\n</ol>\n<h1 id=\"hexo部分常用命令\"><a class=\"anchor\" href=\"#hexo部分常用命令\">#</a> Hexo 部分常用命令</h1>\n<ul>\n<li>\n<p>清除静态文件</p>\n<p><code>hexo clean</code></p>\n</li>\n<li>\n<p>生成静态文件</p>\n<p><code>hexo g</code></p>\n</li>\n<li>\n<p>安装 git 推送插件 </p>\n<p><code>npm install hexo-deployer-git --save</code></p>\n</li>\n<li>\n<p>推送静态文件到 git </p>\n<p><code>hexo d</code></p>\n</li>\n</ul>\n<h1 id=\"安装hexo-admin编写博客插件\"><a class=\"anchor\" href=\"#安装hexo-admin编写博客插件\">#</a> 安装 hexo-admin(编写博客插件)</h1>\n<ul>\n<li>\n<p><code>npm install hexo-admin --save</code></p>\n</li>\n<li>\n<p>hexo-admin 编辑 url</p>\n<p><a href=\"http://localhost:4000/admin\"> <code>http://localhost:4000/admin</code> </a></p>\n</li>\n<li>\n<p>settings 设置用户名、密码、Secret</p>\n<p><a href=\"http://localhost:4000/admin/#/settings\"> <code>http://localhost:4000/admin/#/settings</code> </a></p>\n</li>\n<li>\n<p>把底部生成的配置拷入 hexo 配合文件中 (_config.yml)</p>\n</li>\n</ul>\n<pre><code class=\"language-yml\">admin:\nusername: username\npassword_hash: xxxxxx\nsecret: 'my super secret phrase' #用单引号包裹\ndeployCommand: 'hexo_publish.sh' #windows用hexo_publish.bat,linux用hexo_publish.sh\n</code></pre>\n<h4 id=\"hexo_publishsh\"><a class=\"anchor\" href=\"#hexo_publishsh\">#</a> hexo_publish.sh</h4>\n<pre><code class=\"language-bash\">#!/bin/bash\n\nhexo clean\nhexo g\nhexo d\n</code></pre>\n<h4 id=\"hexo_publishbat\"><a class=\"anchor\" href=\"#hexo_publishbat\">#</a> hexo_publish.bat</h4>\n<pre><code class=\"language-bash\">@echo off\ncd D:\\blog\nd:\n@cmd /c &quot;hexo clean&amp;&amp; hexo g&amp;&amp;hexo d&amp;&amp;echo success&quot;\n</code></pre>\n",
"tags": [
"技术分享",
"心得体会",
"踩坑",
"经验分享",
"博客",
"Hexo"
]
},
{
"id": "https://blog.jingxiyuan.cn/1970/01/01/hello-world/",
"url": "https://blog.jingxiyuan.cn/1970/01/01/hello-world/",
"title": "Hello World",
"date_published": "1970-01-01T00:00:00.000Z",
"content_html": "<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>\n<h2 id=\"quick-start\"><a class=\"anchor\" href=\"#quick-start\">#</a> Quick Start</h2>\n<h3 id=\"create-a-new-post\"><a class=\"anchor\" href=\"#create-a-new-post\">#</a> Create a new post</h3>\n<pre><code class=\"language-bash\">$ hexo new &quot;My New Post&quot;\n</code></pre>\n<p>More info: <span class=\"exturl\" data-url=\"aHR0cHM6Ly9oZXhvLmlvL2RvY3Mvd3JpdGluZy5odG1s\">Writing</span></p>\n<h3 id=\"run-server\"><a class=\"anchor\" href=\"#run-server\">#</a> Run server</h3>\n<pre><code class=\"language-bash\">$ hexo server\n</code></pre>\n<p>More info: <span class=\"exturl\" data-url=\"aHR0cHM6Ly9oZXhvLmlvL2RvY3Mvc2VydmVyLmh0bWw=\">Server</span></p>\n<h3 id=\"generate-static-files\"><a class=\"anchor\" href=\"#generate-static-files\">#</a> Generate static files</h3>\n<pre><code class=\"language-bash\">$ hexo generate\n</code></pre>\n<p>More info: <span class=\"exturl\" data-url=\"aHR0cHM6Ly9oZXhvLmlvL2RvY3MvZ2VuZXJhdGluZy5odG1s\">Generating</span></p>\n<h3 id=\"deploy-to-remote-sites\"><a class=\"anchor\" href=\"#deploy-to-remote-sites\">#</a> Deploy to remote sites</h3>\n<pre><code class=\"language-bash\">$ hexo deploy\n</code></pre>\n<p>More info: <span class=\"exturl\" data-url=\"aHR0cHM6Ly9oZXhvLmlvL2RvY3Mvb25lLWNvbW1hbmQtZGVwbG95bWVudC5odG1s\">Deployment</span></p>\n",
"tags": []
}
]
}