<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Docker 归档 - Liao&#039;s blog</title>
	<atom:link href="https://www.laobaiblog.top/category/%e8%bd%bb%e9%87%8f%e7%ba%a7%e5%ae%b9%e5%99%a8/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.laobaiblog.top/category/轻量级容器/</link>
	<description>路漫漫其修远兮，吾将上下而求索</description>
	<lastBuildDate>Fri, 13 Jun 2025 02:12:11 +0000</lastBuildDate>
	<language>zh-Hans</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>https://www.laobaiblog.top/wp-content/uploads/2022/01/cropped-tyuu-32x32.png</url>
	<title>Docker 归档 - Liao&#039;s blog</title>
	<link>https://www.laobaiblog.top/category/轻量级容器/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>R.I.P Alist部署文档备份</title>
		<link>https://www.laobaiblog.top/2025/06/12/r-i-p-alist%e9%83%a8%e7%bd%b2%e6%96%87%e6%a1%a3%e5%a4%87%e4%bb%bd/</link>
		
		<dc:creator><![CDATA[大白]]></dc:creator>
		<pubDate>Thu, 12 Jun 2025 03:30:17 +0000</pubDate>
				<category><![CDATA[Docker]]></category>
		<category><![CDATA[分享]]></category>
		<category><![CDATA[alist]]></category>
		<category><![CDATA[docker]]></category>
		<category><![CDATA[github]]></category>
		<category><![CDATA[开源]]></category>
		<category><![CDATA[收购]]></category>
		<category><![CDATA[隐私]]></category>
		<guid isPermaLink="false">https://www.laobaiblog.top/?p=558</guid>

					<description><![CDATA[<p>因为alist被收购在开源社区引发的波动，该开源项目被“贵州不够科技”公司收购，文档和下载链接被修改 &#8230;</p>
<p><a href="https://www.laobaiblog.top/2025/06/12/r-i-p-alist%e9%83%a8%e7%bd%b2%e6%96%87%e6%a1%a3%e5%a4%87%e4%bb%bd/">R.I.P Alist部署文档备份</a>最先出现在<a href="https://www.laobaiblog.top">Liao&#039;s blog</a>。</p>
]]></description>
										<content:encoded><![CDATA[<blockquote><p>
  因为alist被收购在开源社区引发的波动，该开源项目被“贵州不够科技”公司收购，文档和下载链接被修改：中文文档被大幅修改，加入了微信链接，更大范围的收集用户信息等非技术内容。有鉴于此，打算自行写一个备份文档，文中镜像已备份到我自己的仓库，备份来自未收购前的版本。
</p></blockquote>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2025/06/wp_editor_md_1a6e67e00424d38f2aad9a1a374956f7.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2025/06/wp_editor_md_1a6e67e00424d38f2aad9a1a374956f7.jpg" alt="" /></a></p>
<h1>Docker安装</h1>
<h3>AList镜像</h3>
<p><a class="wp-editor-md-post-content-link" href="https://openlistteam.github.io/docs/zh/guide/">旧版WiKi文档</a>：端口建议更改成另一个复杂端口，避免扫描攻击。</p>
<pre><code class="language-shell line-numbers">#未收购前版本(推荐)
docker run -d --restart=always -v /etc/alist:/opt/alist/data -p 5244:5244 -e PUID=0 -e PGID=0 -e UMASK=022 --name="alist" opslaobai/alist:v3.39.4

#3.45当前最新版本（2025-06-12）
docker run -d --restart=always -v /etc/alist:/opt/alist/data -p 5244:5244 -e PUID=0 -e PGID=0 -e UMASK=022 --name="alist" opslaobai/alist:latest

#初始密码指首次启动时的登录凭证。若后续忘记管理员用户名或密码，您可执行以下命令以随机生成新密码:
docker exec -it alist ./alist admin random

#或者您也可以手动设置新密码，​​NEW_PASSWORD​​ 表示您需要设置的密码:
docker exec -it alist ./alist admin set NEW_PASSWORD
</code></pre>
<p>我最新的镜像仓库地址：<a class="wp-editor-md-post-content-link" href="https://hub.docker.com/r/opslaobai/alist/tags">laobai</a>，更换相应的docker镜像即可拉取2025-06-12最新上传版本。（有兴趣再更新版本）</p>
<h3>Docker compose</h3>
<pre><code class="language-shell line-numbers">version: '3.3'
services:
  alist:
    image: 'opslaobai/alist:v3.39.4'
    container_name: alist
    volumes:
      - '/etc/alist:/opt/alist/data'
    ports:
      - '5244:5244'
    environment:
      - PUID=0
      - PGID=0
      - UMASK=022
    restart: unless-stopped

</code></pre>
<h5>环境变量参数</h5>
<table>
<thead>
<tr>
<th>名称</th>
<th>默认值</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td>PUID</td>
<td>0</td>
<td>运行身份 UID</td>
</tr>
<tr>
<td>PGID</td>
<td>0</td>
<td>运行身份 GID</td>
</tr>
<tr>
<td>UMASK</td>
<td>022</td>
<td><a class="wp-editor-md-post-content-link" href="https://en.wikipedia.org/wiki/Umask">防止新创建的文件/目录被组或其他用户意外修改</a></td>
</tr>
<tr>
<td>RUN_ARIA2</td>
<td></td>
<td>是否同时运行 ARIA2，当镜像含有 aria2 环境时默认为 true，否则为 false</td>
</tr>
<tr>
<td>TZ</td>
<td></td>
<td>默认为 UTC 时区，如果你想指定时区，则可以设置此变量，例如：Asia/Shanghai</td>
</tr>
</tbody>
</table>
<hr />
<h4>投毒风险引担忧</h4>
<p>社区最关心的是潜在的供应链投毒风险。据报道，此前金华某公司收购Oneinstack和LNMP后曾尝试进行投毒，但被安全公司发现。</p>
<p>贵州不够科技此前还收购了Java工具库Hutool。有用户指出，该公司收购的开源软件都出现了异常情况。目前最大的风险在于，Alist使用了私有API服务，如果原开发者不再提供相关API支持，用户可能面临无法使用的困境。</p>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2025/06/wp_editor_md_61e9a03ffdfd6d541d06bda3c2462b3d.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2025/06/wp_editor_md_61e9a03ffdfd6d541d06bda3c2462b3d.jpg" alt="" /></a></p>
<p><a href="https://www.laobaiblog.top/2025/06/12/r-i-p-alist%e9%83%a8%e7%bd%b2%e6%96%87%e6%a1%a3%e5%a4%87%e4%bb%bd/">R.I.P Alist部署文档备份</a>最先出现在<a href="https://www.laobaiblog.top">Liao&#039;s blog</a>。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Docker compose安装配置向量数据库Milvus，配置可视化Attu</title>
		<link>https://www.laobaiblog.top/2025/04/01/docker-compose%e5%ae%89%e8%a3%85%e9%85%8d%e7%bd%ae%e5%90%91%e9%87%8f%e6%95%b0%e6%8d%ae%e5%ba%93milvus%ef%bc%8c%e9%85%8d%e7%bd%ae%e5%8f%af%e8%a7%86%e5%8c%96attu/</link>
		
		<dc:creator><![CDATA[大白]]></dc:creator>
		<pubDate>Tue, 01 Apr 2025 06:49:19 +0000</pubDate>
				<category><![CDATA[Docker]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[分享]]></category>
		<category><![CDATA[docker]]></category>
		<category><![CDATA[docker compose]]></category>
		<category><![CDATA[milvus]]></category>
		<category><![CDATA[ubuntu]]></category>
		<category><![CDATA[向量数据库]]></category>
		<category><![CDATA[开源]]></category>
		<guid isPermaLink="false">https://www.laobaiblog.top/?p=544</guid>

					<description><![CDATA[<p>介绍Milvus向量数据库的安装过程，包括创建工作目录、下载docker-compose.yml文件 &#8230;</p>
<p><a href="https://www.laobaiblog.top/2025/04/01/docker-compose%e5%ae%89%e8%a3%85%e9%85%8d%e7%bd%ae%e5%90%91%e9%87%8f%e6%95%b0%e6%8d%ae%e5%ba%93milvus%ef%bc%8c%e9%85%8d%e7%bd%ae%e5%8f%af%e8%a7%86%e5%8c%96attu/">Docker compose安装配置向量数据库Milvus，配置可视化Attu</a>最先出现在<a href="https://www.laobaiblog.top">Liao&#039;s blog</a>。</p>
]]></description>
										<content:encoded><![CDATA[<blockquote><p>
  介绍Milvus向量数据库的安装过程，包括创建工作目录、下载docker-compose.yml文件、配置attu可视化面板和修改安全设置。
</p></blockquote>
<h3>环境准备</h3>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2025/04/wp_editor_md_5f5908886322910b08bd5deb0f4862ee.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2025/04/wp_editor_md_5f5908886322910b08bd5deb0f4862ee.jpg" alt="" /></a></p>
<ul>
<li>docker版本：28.0.4</li>
<li>docker compose版本：v2.34.0</li>
</ul>
<h3>Milvus向量数据库简介</h3>
<p><strong>Milvus是一款开源的向量数据库，它专为AI应用设计，用于管理和检索海量的特征向量</strong>。Milvus的优势主要包括：</p>
<ul>
<li>高效的向量检索性能：Milvus采用了多种先进的索引算法，如IVF, HNSW, ANNOY等，能够在大规模数据集上实现高效的近似最近邻搜索。</li>
<li>易于扩展和维护：Milvus支持水平和垂直扩展，能够适应不断增长的数据规模和查询需求。它的分布式架构使得数据存储和计算能力可以灵活扩展。</li>
<li>多种数据持久化选项：Milvus支持SSD, HDD等多种存储介质，并且可以与多种持久化存储解决方案集成，如MinIO, S3等。</li>
<li>丰富的数据接口：Milvus提供了Python, Java, RESTful等多种语言的SDK，方便开发者在不同的应用场景中使用。</li>
<li>强大的可扩展性和兼容性：支持各种大小和类型的向量数据，可以与现有的数据处理和机器学习工作流程无缝集成。</li>
<li>容器化和云原生支持：支持Docker和Kubernetes，方便在云环境中部署和管理。</li>
<li>开源社区支持：作为一个开源项目，Milvus拥有活跃的社区，不断有新的功能和改进被加入。</li>
</ul>
<p>Milvus适用于各种需要高效向量检索的应用场景，如推荐系统、图像检索、自然语言处理等。由于其高效、易用和可扩展的特性，Milvus在AI应用开发中越来越受欢迎。</p>
<h3>安装Milvus</h3>
<p><strong>1. 创建工作目录（自定义）</strong></p>
<pre><code class="language-shell line-numbers"># 切换到root目录
cd /root
# 新建一个名为milvus的目录用于存放数据 目录名称可以自定义
mkdir milvus
# 进入到新建的目录
cd milvus
</code></pre>
<p><strong>2. 下载并编辑docker-compose.yml</strong></p>
<p><a class="wp-editor-md-post-content-link" href="https://github.com/milvus-io/milvus/releases/download/v2.5.7/milvus-standalone-docker-compose-gpu.yml">Github查看最新版本</a>，选择带有GPU的yml配置文件下载（<strong>nvidia显卡</strong>）。也可以借鉴<a class="wp-editor-md-post-content-link" href="https://milvus.io/docs/zh/install_standalone-docker-compose.md">官网指南</a></p>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2025/04/wp_editor_md_6f59b57bfdf0a0011b6760617fe0f3a4.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2025/04/wp_editor_md_6f59b57bfdf0a0011b6760617fe0f3a4.jpg" alt="" /></a></p>
<p><span id="more-544"></span><br />
<a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2025/04/wp_editor_md_0eeb45cac25f24508d7879025e257bfb.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2025/04/wp_editor_md_0eeb45cac25f24508d7879025e257bfb.jpg" alt="" /></a></p>
<p><strong>3. 下载milvus.yml文件</strong></p>
<p>该文件是milvus的配置文件，容器中内置，但如果要修改配置，需要单独下载，这里为了做访问控制，就需要修改配置。</p>
<pre><code class="language-shell line-numbers"># 注意改成自己对应的milvus版本号
wget https://raw.githubusercontent.com/milvus-io/milvus/v2.5.7/configs/milvus.yaml
</code></pre>
<p>下载好后，确保该文件位于milvus工作目录下，然后编辑该文件，<strong>找到其中的<code>common &gt; security &gt; authorizationEnabled</code>并将其设置为<code>true</code></strong>。</p>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2025/04/wp_editor_md_f74e87dac045cf2c7493aaa799ff253e.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2025/04/wp_editor_md_f74e87dac045cf2c7493aaa799ff253e.jpg" alt="" /></a></p>
<p><strong>3. 下载milvus-standalone-docker-compose-gpu.yml文件，在其中添加attu可视化面板的容器。并修改docker-compose.yml做资源映射</strong></p>
<pre><code class="language-shell line-numbers">version: '3.5'
services:
  etcd:
    container_name: milvus-etcd
    image: quay.io/coreos/etcd:v3.5.18
    environment:
      - ETCD_AUTO_COMPACTION_MODE=revision
      - ETCD_AUTO_COMPACTION_RETENTION=1000
      - ETCD_QUOTA_BACKEND_BYTES=4294967296
      - ETCD_SNAPSHOT_COUNT=50000
    volumes:
      - <span class="katex math inline">{DOCKER_VOLUME_DIRECTORY:-.}/volumes/etcd:/etcd
    command: etcd -advertise-client-urls=http://etcd:2379 -listen-client-urls http://0.0.0.0:2379 --data-dir /etcd
    healthcheck:
      test: ["CMD", "etcdctl", "endpoint", "health"]
      interval: 30s
      timeout: 20s
      retries: 3

  minio:
    container_name: milvus-minio
    image: minio/minio:RELEASE.2023-03-20T20-16-18Z
    environment:
      MINIO_ACCESS_KEY: minioadmin
      MINIO_SECRET_KEY: minioadmin
    ports:
      - "9001:9001"
      - "9000:9000"
    volumes:
      -</span>{DOCKER_VOLUME_DIRECTORY:-.}/volumes/minio:/minio_data
    command: minio server /minio_data --console-address ":9001"
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]
      interval: 30s
      timeout: 20s
      retries: 3

  standalone:
    container_name: milvus-standalone
    image: milvusdb/milvus:v2.5.7-gpu
    command: ["milvus", "run", "standalone"]
    security_opt:
    - seccomp:unconfined
    environment:
      ETCD_ENDPOINTS: etcd:2379
      MINIO_ADDRESS: minio:9000
    volumes:
      - <span class="katex math inline">{DOCKER_VOLUME_DIRECTORY:-.}/volumes/milvus:/var/lib/milvus
      # 新增下面这一行来实现配置文件的映射
      -</span>{DOCKER_VOLUME_DIRECTORY:-.}/milvus.yaml:/milvus/configs/milvus.yaml
    ports:
      - "19530:19530"
      - "9091:9091"
    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              capabilities: ["gpu"]
              device_ids: ["0"]
    depends_on:
      - "etcd"
      - "minio"

# 在原docker-compose文件的这个位置添加下面这个attu容器，注意版本号和行前空格。
  attu:
    container_name: attu
    image: zilliz/attu:v2.5.6
    environment:
      MILVUS_URL: milvus-standalone:19530
    ports:
      - "8000:3000"  # 外部端口8000可以自定义
    depends_on:
      - "standalone"

networks:
  default:
    name: milvus
</code></pre>
<h3>启动Mlivus</h3>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2025/04/wp_editor_md_e450eccd322cd2343c926939c6f070e3.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2025/04/wp_editor_md_e450eccd322cd2343c926939c6f070e3.jpg" alt="" /></a></p>
<pre><code class="language-shell line-numbers"># 安装目录下运行命令
# 拉取镜像
docker-compose pull
# 启动容器
docker-compose up -d
# 查看启动状态（健康状态）
docker-compose ps -a
# 停止容器
docker-compose down
</code></pre>
<p>放开端口：连接数据库需要放开19530端口，这是milvus的默认端口，可在docker-compose.yml中修改。访问可视化面板放开8000端口（刚才自己设置的）做反向代理的话可以不用放开此端口。</p>
<h3>验证效果</h3>
<p>访问可视化面板并修改密码：<strong>http://ip:8000</strong></p>
<p><strong>默认账号：root<br />
默认密码：Milvus</strong></p>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2025/04/wp_editor_md_bb1b7a1216bf2fd642e12ed929bf989c.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2025/04/wp_editor_md_bb1b7a1216bf2fd642e12ed929bf989c.jpg" alt="" /></a></p>
<p><a href="https://www.laobaiblog.top/2025/04/01/docker-compose%e5%ae%89%e8%a3%85%e9%85%8d%e7%bd%ae%e5%90%91%e9%87%8f%e6%95%b0%e6%8d%ae%e5%ba%93milvus%ef%bc%8c%e9%85%8d%e7%bd%ae%e5%8f%af%e8%a7%86%e5%8c%96attu/">Docker compose安装配置向量数据库Milvus，配置可视化Attu</a>最先出现在<a href="https://www.laobaiblog.top">Liao&#039;s blog</a>。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>使用docker部署pgsql，构建容灾高可用集群</title>
		<link>https://www.laobaiblog.top/2024/09/19/dockerpgbk/</link>
		
		<dc:creator><![CDATA[大白]]></dc:creator>
		<pubDate>Thu, 19 Sep 2024 07:04:30 +0000</pubDate>
				<category><![CDATA[Docker]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[分享]]></category>
		<category><![CDATA[docker]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[pgpool]]></category>
		<category><![CDATA[pgsql]]></category>
		<category><![CDATA[集群]]></category>
		<category><![CDATA[高可用]]></category>
		<guid isPermaLink="false">https://www.laobaiblog.top/?p=504</guid>

					<description><![CDATA[<p>postgresql + pgpool 构建容灾高可用集群(数据同步流复制/主备自动切换)，在pos &#8230;</p>
<p><a href="https://www.laobaiblog.top/2024/09/19/dockerpgbk/">使用docker部署pgsql，构建容灾高可用集群</a>最先出现在<a href="https://www.laobaiblog.top">Liao&#039;s blog</a>。</p>
]]></description>
										<content:encoded><![CDATA[<blockquote><p>
  postgresql + pgpool 构建容灾高可用集群(数据同步流复制/主备自动切换)，在postgresql官网看了<a class="wp-editor-md-post-content-link" href="https://www.pgpool.net/mediawiki/index.php/Documentation">pgpool-II的文档</a>，发现部署比较麻烦，为了方便快捷还是使用docker部署。
</p></blockquote>
<h1>一、简介</h1>
<p><code>bitnami/postgresql-repmgr</code>是<code>PostgreSQL HA</code>对应的docker镜像，<code>PostgreSQL HA</code> 是 PostgreSQL 集群解决方案，其中包括 PostgreSQL 复制管理器，这是一个用于管理 PostgreSQL 集群上的复制和故障转移的开源工具。</p>
<p><code>bitnami/pgpool</code>是<code>Pgpool-II</code> 对应的docker镜像，是 PostgreSQL 代理。它位于 PostgreSQL 服务器和它们的客户端之间，提供连接池、负载平衡、自动故障转移和复制。</p>
<h1>二、部署环境</h1>
<ul>
<li>系统：CentOS Linux release 7.9.2009 (Core)</li>
<li>postgresql Version：postgresql-repmgr:14</li>
<li>pgpool Version：latest</li>
<li>Docker Version：20.10.21</li>
</ul>
<h3>1. 拉取docker镜像</h3>
<p>稳妥起见，这里选用了postgresql 14版本，其次如果遭遇docker镜像拉取网络问题，可以参考我的这篇博文<a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/2024/07/16/docker%e4%bb%93%e5%ba%93%e9%95%9c%e5%83%8f%e4%bb%a3%e7%90%86%e6%89%93%e9%80%a0%e5%b1%9e%e4%ba%8e%e8%87%aa%e5%b7%b1%e7%9a%84docker-hub/">打造属于自己的Docker Hub镜像代理网站</a>，或者在镜像前加入私有镜像站。</p>
<pre><code class="language-shell line-numbers">docker pull bitnami/postgresql-repmgr:14
docker pull bitnami/pgpool:latest

#私有镜像站eg
docker pull hub-mirror.c.163.com/bitnami/postgresql-repmgr:14
docker pull hub-mirror.c.163.com/bitnami/pgpool:latest
</code></pre>
<h3>2. 启动pgsql数据库</h3>
<ol>
<li>创建文件夹并授权</li>
</ol>
<pre><code class="language-shell line-numbers">cd /
mkdir data
cd data
mkdir repmgr1
mkdir repmgr2
chmod 777 /data/repmgr1
chmod 777 /data/repmgr2
</code></pre>
<ol start="2">
<li>创建docker网络</li>
</ol>
<pre><code class="language-shell line-numbers">docker network create pg-network
</code></pre>
<ol start="3">
<li>启动数据库<br />
为了数据持久化，我们把/bitnami/postgresql目录挂载到/data/repmgr1目录下。以下两条命令可以自行做成bash脚本启动。</li>
</ol>
<pre><code class="language-shell line-numbers">#pg-0数据库启动
docker run -v /data/repmgr1:/bitnami/postgresql --detach --restart always --name pg-0 -p 30350:5432 --network pg-network --env REPMGR_PARTNER_NODES=pg-0,pg-1 --env REPMGR_NODE_NAME=pg-0 --env REPMGR_NODE_NETWORK_NAME=pg-0 --env REPMGR_PRIMARY_HOST=pg-0 --env REPMGR_PASSWORD=123456 --env POSTGRESQL_PASSWORD=123456 bitnami/postgresql-repmgr:14
</code></pre>
<pre><code class="language-shell line-numbers">#pg-1数据库启动
docker run -v /data/repmgr2:/bitnami/postgresql --detach --restart always --name pg-1 -p 30351:5432 --network pg-network --env REPMGR_PARTNER_NODES=pg-0,pg-1 --env REPMGR_NODE_NAME=pg-1 --env REPMGR_NODE_NETWORK_NAME=pg-1 --env REPMGR_PRIMARY_HOST=pg-0 --env REPMGR_PASSWORD=123456 --env POSTGRESQL_PASSWORD=123456 bitnami/postgresql-repmgr:14
</code></pre>
<ol start="4">
<li>查看启动状态</li>
</ol>
<pre><code class="language-shell line-numbers">docker ps
</code></pre>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2024/09/wp_editor_md_53c9eb917a6049470cd79aaad78f45c2.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2024/09/wp_editor_md_53c9eb917a6049470cd79aaad78f45c2.jpg" alt="" /></a></p>
<h3>3. 启动Pgpool</h3>
<p>注意，这里的<code>--add-host</code>参数对应的IP是你<strong>本地的宿主机IP</strong>，请自行修改。</p>
<pre><code class="language-shell line-numbers">docker run --detach --restart always --name pgpool -p 9999:5432 \
  --env PGPOOL_BACKEND_NODES=0:pg-0:30350,1:pg-1:30351 \
  --env PGPOOL_SR_CHECK_USER=postgres \
  --env PGPOOL_SR_CHECK_PASSWORD=123456 \
  --env PGPOOL_ENABLE_LDAP=no \
  --env PGPOOL_POSTGRES_USERNAME=postgres \
  --env PGPOOL_POSTGRES_PASSWORD=123456 \
  --env PGPOOL_ADMIN_USERNAME=postgres \
  --env PGPOOL_ADMIN_PASSWORD=123456 \
  --add-host=pg-0:192.168.1.204 \
  --add-host=pg-1:192.168.1.204 \
  bitnami/pgpool:latest
</code></pre>
<p>启动成功后，查看pgpool日志，通过pgpool可以实现数据库的负载均衡和读写分离。</p>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2024/09/wp_editor_md_1665dd6bb789f5d7a5650c91028b8746.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2024/09/wp_editor_md_1665dd6bb789f5d7a5650c91028b8746.jpg" alt="" /></a></p>
<h3>4. 测试验证</h3>
<ol>
<li>navicat连接pgpool，创建user表并插入数据，看看<code>pg-0</code>及<code>pg-1</code>是否同步插入。</li>
</ol>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2024/09/wp_editor_md_08857131284d85b7fd726fb0d4a5c480.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2024/09/wp_editor_md_08857131284d85b7fd726fb0d4a5c480.jpg" alt="" /></a></p>
<hr />
<p><code>pgpool</code>创建<code>user</code>表，插入数据</p>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2024/09/wp_editor_md_d61298966092bba2948e0fc3b46626da.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2024/09/wp_editor_md_d61298966092bba2948e0fc3b46626da.jpg" alt="" /></a></p>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2024/09/wp_editor_md_fb9a7662185c7a42dc7b0ed10ab8928d.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2024/09/wp_editor_md_fb9a7662185c7a42dc7b0ed10ab8928d.jpg" alt="" /></a></p>
<ol start="2">
<li>验证：<code>pg-0</code>、<code>pg-1</code>同步插入</li>
</ol>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2024/09/wp_editor_md_b71f72be299bfc3ae3136718e6abe34e.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2024/09/wp_editor_md_b71f72be299bfc3ae3136718e6abe34e.jpg" alt="" /></a></p>
<p>以上方法非常简单，最后程序直接访问9999端口即可实现读写分离。</p>
<p><strong>缺点：<br />
只能再一个宿主机上执行，不能跨主机。Pgpool和Pgsql有更多的高可用方法，后续还可以深入，多服务器部署及新增组件等。</strong></p>
<p>参考地址：<br />
<a class="wp-editor-md-post-content-link" href="https://www.pgpool.net/mediawiki/index.php/Documentation">官网WIKI</a><br />
<a class="wp-editor-md-post-content-link" href="https://www.cnblogs.com/applerosa/p/13160566.html">postgresql + pgpool 构建容灾高可用集群(数据同步流复制/主备自动切换)</a><br />
<a class="wp-editor-md-post-content-link" href="https://www.cnblogs.com/hacker-linner/p/16173012.html">pgpool-II 4.3 中文手册</a><br />
<a class="wp-editor-md-post-content-link" href="https://www.cnblogs.com/qgdtq/p/17106567.html">Postgresql通过docker进行高可用部署<br />
</a><br />
<a class="wp-editor-md-post-content-link" href="https://www.cnblogs.com/eternityCulture/p/17528840.html">使用docker部署pg集群（postgresql+postgis+pgrouting+pgpool）</a></p>
<p><a href="https://www.laobaiblog.top/2024/09/19/dockerpgbk/">使用docker部署pgsql，构建容灾高可用集群</a>最先出现在<a href="https://www.laobaiblog.top">Liao&#039;s blog</a>。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Docker仓库镜像代理打造属于自己的Docker Hub</title>
		<link>https://www.laobaiblog.top/2024/07/16/docker%e4%bb%93%e5%ba%93%e9%95%9c%e5%83%8f%e4%bb%a3%e7%90%86%e6%89%93%e9%80%a0%e5%b1%9e%e4%ba%8e%e8%87%aa%e5%b7%b1%e7%9a%84docker-hub/</link>
		
		<dc:creator><![CDATA[大白]]></dc:creator>
		<pubDate>Tue, 16 Jul 2024 07:22:31 +0000</pubDate>
				<category><![CDATA[Docker]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[分享]]></category>
		<category><![CDATA[Cldouflare]]></category>
		<category><![CDATA[docker]]></category>
		<category><![CDATA[Docker Hub]]></category>
		<category><![CDATA[Pages]]></category>
		<category><![CDATA[Workers]]></category>
		<category><![CDATA[国内访问Docker镜像]]></category>
		<category><![CDATA[镜像代理]]></category>
		<category><![CDATA[镜像加速]]></category>
		<guid isPermaLink="false">https://www.laobaiblog.top/?p=491</guid>

					<description><![CDATA[<p>本博文基于原博CMLiussss Blog编写，旨在中转对 Docker 官方镜像仓库，帮助国内用户 &#8230;</p>
<p><a href="https://www.laobaiblog.top/2024/07/16/docker%e4%bb%93%e5%ba%93%e9%95%9c%e5%83%8f%e4%bb%a3%e7%90%86%e6%89%93%e9%80%a0%e5%b1%9e%e4%ba%8e%e8%87%aa%e5%b7%b1%e7%9a%84docker-hub/">Docker仓库镜像代理打造属于自己的Docker Hub</a>最先出现在<a href="https://www.laobaiblog.top">Liao&#039;s blog</a>。</p>
]]></description>
										<content:encoded><![CDATA[<blockquote><p>
  本博文基于<a class="wp-editor-md-post-content-link" href="https://blog.090227.xyz/p/CF-Workers-docker.io/">原博CMLiussss Blog</a>编写，旨在中转对 Docker 官方镜像仓库，帮助国内用户访问被墙的Docker hub，只建议私人或公司内部使用，不推荐使用该项目搭建公共服务。使用你自己的域名搭建公共服务有可能会遭受<strong>污染、反诈或被墙</strong>，推荐小规模自用即可。
</p></blockquote>
<h3>环境准备</h3>
<ul>
<li><strong><a class="wp-editor-md-post-content-link" href="https://github.com/login">GitHub账号</a></strong></li>
<li><strong><a class="wp-editor-md-post-content-link" href="https://dash.cloudflare.com/login">Cloudflare账号</a></strong></li>
<li><strong>一个属于自己的域名</strong></li>
</ul>
<hr />
<h3>一、Docker代理工具介绍</h3>
<p><strong><a class="wp-editor-md-post-content-link" href="https://github.com/cmliu/CF-Workers-docker.io">本项目</a>是一个基于 <a class="wp-editor-md-post-content-link" href="https://github.com/cmliu/CF-Workers-docker.io">Cloudflare Workers 的 Docker 镜像代理工具</a>，旨在中转对 Docker 官方镜像仓库的请求，解决访问限制并加速访问。</strong></p>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2024/07/wp_editor_md_54e68b1d728e37cc1b057801abf85a92.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2024/07/wp_editor_md_54e68b1d728e37cc1b057801abf85a92.jpg" alt="" /></a></p>
<h4>为什么需要这个工具？</h4>
<p>由于<strong>神秘原因</strong>，国内用户逐渐无法访问Docker Hub仓库。这对于我们开发者来说是个不小的难题。<br />
<a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2024/07/wp_editor_md_c53beb24b163c998a0165abb6f568c6d.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2024/07/wp_editor_md_c53beb24b163c998a0165abb6f568c6d.jpg" alt="" /></a></p>
<hr />
<h3>二、GitHub Fork本项目</h3>
<p><strong>点击 <a class="wp-editor-md-post-content-link" href="https://github.com/cmliu/CF-Workers-docker.io">Github项目</a>中的<code>Fork</code>到本地自己的仓库即可。</strong></p>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2024/07/wp_editor_md_0e00ec03a8460fa925fa682908356f15.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2024/07/wp_editor_md_0e00ec03a8460fa925fa682908356f15.jpg" alt="" /></a></p>
<hr />
<h3>三、登录Cloudflare创建Pages自动化</h3>
<p><strong>登录 <a class="wp-editor-md-post-content-link" href="https://dash.cloudflare.com/login">cloudflare</a> ，点击<code>Works和Pages并创建</code>，选择<code>Pages</code>再连接到刚才我们Fork到Github本地仓库的项目</strong></p>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2024/07/wp_editor_md_76dad882587baf9cc54c944df2618a9e.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2024/07/wp_editor_md_76dad882587baf9cc54c944df2618a9e.jpg" alt="" /></a></p>
<hr />
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2024/07/wp_editor_md_a34eaf7dcacdd2a28d70807887cb2942.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2024/07/wp_editor_md_a34eaf7dcacdd2a28d70807887cb2942.jpg" alt="" /></a></p>
<hr />
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2024/07/wp_editor_md_86ba8012e8339c2a42b9409ddfedc8ab.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2024/07/wp_editor_md_86ba8012e8339c2a42b9409ddfedc8ab.jpg" alt="" /></a></p>
<hr />
<h3>四、开始部署设置</h3>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2024/07/wp_editor_md_e74f76e3b13e8fb90924dd6c42b6ed77.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2024/07/wp_editor_md_e74f76e3b13e8fb90924dd6c42b6ed77.jpg" alt="" /></a></p>
<p><strong>部署完成后可以进入Pages里的自动化项目，给它设置一个自定义域名。假如我有一个顶级域名：<code>laobaiblog.top</code>，那我可以再自定义域名中配置一个：<code>docker.laobaiblog.top</code>作为我的Docker代理域名。</strong></p>
<hr />
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2024/07/wp_editor_md_7bf1740f0ea23278e45d721a9670e861.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2024/07/wp_editor_md_7bf1740f0ea23278e45d721a9670e861.jpg" alt="" /></a></p>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2024/07/wp_editor_md_cbb717c6ddab71dc8f27120b9f7fb026.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2024/07/wp_editor_md_cbb717c6ddab71dc8f27120b9f7fb026.jpg" alt="" /></a></p>
<p><strong>选择DNS解析，在域名解析中添加上Cloudflare生成给你的<code>CNAME记录</code>。</strong></p>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2024/07/wp_editor_md_5f933d2a167bf8dee77028eef8dc2e44.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2024/07/wp_editor_md_5f933d2a167bf8dee77028eef8dc2e44.jpg" alt="" /></a></p>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2024/07/wp_editor_md_9b62328b1e2623cae1dd08273937c5cd.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2024/07/wp_editor_md_9b62328b1e2623cae1dd08273937c5cd.jpg" alt="" /></a></p>
<p><strong>在你自己的域名解析管理中，添加CNAME记录，填入<code>主机记录</code>及<code>记录值</code>参数，等待5分钟后检查DNS记录。完成后访问代理域名会发现自动跳转为官网Docker Hub，且无需翻墙就说明已经实现了docker镜像代理。</strong></p>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2024/07/wp_editor_md_831105c29803556dddd33044e0c27f87.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2024/07/wp_editor_md_831105c29803556dddd33044e0c27f87.jpg" alt="" /></a></p>
<h4>地址栏输入你的自定义域名搜索镜像查询，毫无压力。</h4>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2024/07/wp_editor_md_fde65cd2e8d255a3d7be1a361546fb15.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2024/07/wp_editor_md_fde65cd2e8d255a3d7be1a361546fb15.jpg" alt="" /></a></p>
<hr />
<h3>五、配置验证</h3>
<p><strong>在国内服务器上拉取镜像发现无法拉取，一直显示等待连接，各个大厂的镜像源都无法使用或仅内部使用。</strong></p>
<pre><code class="language-shell line-numbers">docker pull nginx
</code></pre>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2024/07/wp_editor_md_c42c15e2933dbf64781e4dde383a515d.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2024/07/wp_editor_md_c42c15e2933dbf64781e4dde383a515d.jpg" alt="" /></a></p>
<hr />
<p><strong>拉取镜像时加上自己代理的域名。拉取镜像仓库的命令 <code>docker pull docker.laobaiblog.top/nginx</code> 即可拉取镜像。</strong></p>
<pre><code class="language-shell line-numbers">docker pull docker.laobaiblog.top/nginx
</code></pre>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2024/07/wp_editor_md_8dfc141d01a9a43a184d395b3e677dd0.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2024/07/wp_editor_md_8dfc141d01a9a43a184d395b3e677dd0.jpg" alt="" /></a></p>
<p><strong>你甚至可以将你的域名配置在<code>daemon.json</code>中，即可直接使用<code>docker pull nginx</code>无需再加上域名的前缀。在这里也提供了一些大佬无私分享的代理域名。</strong></p>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2024/07/wp_editor_md_a3cf47fc63957e428b02f1a13124bd95.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2024/07/wp_editor_md_a3cf47fc63957e428b02f1a13124bd95.jpg" alt="" /></a></p>
<pre><code class="language-shell line-numbers">#编辑daemon.json
vim /etc/docker/daemon.json
:wq

#重启daemon配置
systemctl daemon-reload

#重启docker
systemctl restart docker.service

</code></pre>
<hr />
<table>
<thead>
<tr>
<th>DockerHub 镜像仓库</th>
<th>镜像地址</th>
</tr>
</thead>
<tbody>
<tr>
<td>bestcfipas镜像服务</td>
<td>https://docker.registry.cyou</td>
</tr>
<tr>
<td></td>
<td>https://docker-cf.registry.cyou</td>
</tr>
<tr>
<td>zero_free镜像服务</td>
<td>https://docker.jsdelivr.fyi</td>
</tr>
<tr>
<td></td>
<td>https://dockercf.jsdelivr.fyi</td>
</tr>
<tr>
<td></td>
<td>https://dockertest.jsdelivr.fyi</td>
</tr>
<tr>
<td>docker proxy</td>
<td>https://dockerpull.com</td>
</tr>
<tr>
<td></td>
<td>https://dockerproxy.cn</td>
</tr>
<tr>
<td>Docker镜像加速站</td>
<td>https://hub.uuuadc.top</td>
</tr>
<tr>
<td></td>
<td>https://docker.1panel.live</td>
</tr>
<tr>
<td></td>
<td>https://hub.rat.dev</td>
</tr>
</tbody>
</table>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/2022/01/18/centos7%e5%ae%89%e8%a3%85docker%e5%b9%b6%e6%9b%b4%e6%94%b9%e9%bb%98%e8%ae%a4%e5%ad%98%e5%82%a8%e6%96%87%e4%bb%b6%e4%bd%8d%e7%bd%ae/" title="Centos7安装Docker并更改默认存储文件位置">Centos7安装Docker并更改默认存储文件位置</a></p>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/2022/02/23/centos7%e7%a6%bb%e7%ba%bf%e5%ae%89%e8%a3%85docker-ce/" title="CentOS7离线安装docker-ce">CentOS7离线安装docker-ce</a></p>
<p><a href="https://www.laobaiblog.top/2024/07/16/docker%e4%bb%93%e5%ba%93%e9%95%9c%e5%83%8f%e4%bb%a3%e7%90%86%e6%89%93%e9%80%a0%e5%b1%9e%e4%ba%8e%e8%87%aa%e5%b7%b1%e7%9a%84docker-hub/">Docker仓库镜像代理打造属于自己的Docker Hub</a>最先出现在<a href="https://www.laobaiblog.top">Liao&#039;s blog</a>。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>使用Nginx转发代理ChatGpt接口，Java调用实现多轮对话</title>
		<link>https://www.laobaiblog.top/2024/01/15/%e4%bd%bf%e7%94%a8nginx%e8%bd%ac%e5%8f%91%e4%bb%a3%e7%90%86chatgpt%e6%8e%a5%e5%8f%a3%ef%bc%8cjava%e8%b0%83%e7%94%a8%e5%ae%9e%e7%8e%b0%e5%a4%9a%e8%bd%ae%e5%af%b9%e8%af%9d/</link>
		
		<dc:creator><![CDATA[大白]]></dc:creator>
		<pubDate>Mon, 15 Jan 2024 07:50:02 +0000</pubDate>
				<category><![CDATA[Docker]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[分享]]></category>
		<category><![CDATA[ChatGPT]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[nginx]]></category>
		<category><![CDATA[域名]]></category>
		<guid isPermaLink="false">https://www.laobaiblog.top/?p=462</guid>

					<description><![CDATA[<p>一、理论概述 ChatGpt接口目前只能在国外互联网环境中使用，国内想要使用相关服务的话可以寻求代理 &#8230;</p>
<p><a href="https://www.laobaiblog.top/2024/01/15/%e4%bd%bf%e7%94%a8nginx%e8%bd%ac%e5%8f%91%e4%bb%a3%e7%90%86chatgpt%e6%8e%a5%e5%8f%a3%ef%bc%8cjava%e8%b0%83%e7%94%a8%e5%ae%9e%e7%8e%b0%e5%a4%9a%e8%bd%ae%e5%af%b9%e8%af%9d/">使用Nginx转发代理ChatGpt接口，Java调用实现多轮对话</a>最先出现在<a href="https://www.laobaiblog.top">Liao&#039;s blog</a>。</p>
]]></description>
										<content:encoded><![CDATA[<h3>一、理论概述</h3>
<p>ChatGpt接口目前只能在国外互联网环境中使用，国内想要使用相关服务的话可以寻求代理，在这里使用的是一台国外服务器安装Nginx服务进行相关代理。</p>
<h3>二、环境要求</h3>
<ul>
<li>一台拥有公网IP的国外服务器</li>
<li>一个域名及免费ssl证书（可在腾讯云免费申请ssl证书）</li>
<li>一个ChatGpt账号及相关的<a class="wp-editor-md-post-content-link" href="https://platform.openai.com/api-keys">APIkey</a></li>
</ul>
<p>以上就是所有需要用到的环境，<strong><em>请注意，如要使用接口还需要<a class="wp-editor-md-post-content-link" href="https://platform.openai.com/account/billing/overview">充值API</a>额度</em></strong>。除此之外还需要将你的域名解析到公网IP上。完成准备工作后进行以下操作。</p>
<h3>三、Nginx转发</h3>
<ol>
<li>在服务器中安装nginx，这里使用的是docker服务，根据以往博文中可自行安装Docker服务。</li>
</ol>
<pre><code class="language-shell line-numbers">#服务器中新建一个nginx目录，下级目录新建conf.d、logs、ssl三个目录
mkdir -p nginx/conf.d
mkdir -p nginx/logs
mkdir -p nginx/ssl

#在nginx目录中新建start.sh脚本
vim start.sh

docker stop nginx
docker rm nginx
docker run  -p 80:80  -p 443:443 --name nginx --net=host  --restart=always  --privileged=true \
    -v `pwd`/conf.d/:/etc/nginx/conf.d \
    -v `pwd`/logs/:/var/log/nginx  \
    -v `pwd`/ssl/:/var/ssl \
    -e TZ="Asia/Shanghai" \
    nginx:latest

#输入 :wq 保存后授权并执行即可
chmod a+x start.sh
./start.sh
</code></pre>
<ol start="2">
<li>将域名ssl证书放置在ssl目录下后，编辑nginx转发代理，执行<code>start.sh</code>脚本重启nginx服务。</li>
</ol>
<pre><code class="language-shell line-numbers">vim conf.d/gpt.conf

#填入域名信息
server {
        listen       443 ssl;
        server_name  域名;
        ssl_certificate /var/ssl/域名.crt;     #配置证书位置
        ssl_certificate_key /var/ssl/域名.key; #配置秘钥位置】

        ssl_session_timeout 5m;
        ssl_protocols SSLv2 SSLv3 TLSv1.2;
        ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
        ssl_prefer_server_ciphers on;

        underscores_in_headers on;
        charset utf-8;

        location /v1/ {
             proxy_ssl_server_name on;
             proxy_ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
             proxy_pass https://api.openai.com;
        }
}
</code></pre>
<p>以上便完成了针对chatgpt接口地址 <strong><em><code>api.openai.com</code></em></strong> 的转发工作，转发后的地址既是你的域名。</p>
<h3>四、Java实例调用实现多轮对话</h3>
<ol>
<li>新建Maven项目ChatGPTClient，在<code>pom.xml</code>中添加后续用到的依赖，重构后拉取。</li>
</ol>
<pre data-language=XML><code class="language-markup line-numbers">&lt;dependency&gt;
            &lt;groupId&gt;com.squareup.okhttp3&lt;/groupId&gt;
            &lt;artifactId&gt;okhttp&lt;/artifactId&gt;
            &lt;version&gt;4.9.3&lt;/version&gt;
&lt;/dependency&gt;
&lt;dependency&gt;
            &lt;groupId&gt;com.google.code.gson&lt;/groupId&gt;
            &lt;artifactId&gt;gson&lt;/artifactId&gt;
            &lt;version&gt;2.8.9&lt;/version&gt; &lt;!-- 使用最新的可用版本 --&gt;
&lt;/dependency&gt;
</code></pre>
<ol start="2">
<li>java代码</li>
</ol>
<pre><code class="language-shell line-numbers">import okhttp3.*;
import com.google.gson.*;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class ChatGPTClient {
    private final String apiKey;
    private final OkHttpClient client;
    private final List&lt;Message&gt; messages;
    private final Gson gson;
    private int tokenCount = 0;
    private int inputTokenCount = 0;
    private int outputTokenCount = 0;

    public ChatGPTClient(String apiKey) {
        this.apiKey = apiKey;
        this.client = new OkHttpClient();
        this.messages = new ArrayList&lt;&gt;();
        this.gson = new Gson();
    }

    public String sendMessage(String message) throws IOException {
        updateTokenCount(message, true);

        messages.add(new Message("system", "user", message));
//model模型选择可以有gpt-3.5-turbo、gpt-4、gpt-4-turbo价格以此类推
        RequestBody body = RequestBody.create(
                MediaType.get("application/json; charset=utf-8"),
                "{\"model\": \"gpt-3.5-turbo\", \"messages\": " + gson.toJson(messages) + "}"
        );

        Request request = new Request.Builder()
                .url("https://你的域名地址/v1/chat/completions")
                .addHeader("Authorization", "Bearer " + this.apiKey)
                .addHeader("Content-Type", "application/json")
                .post(body)
                .build();

        try (Response response = client.newCall(request).execute()) {
            JsonObject respJson = JsonParser.parseString(response.body().string()).getAsJsonObject();
            JsonArray choices = respJson.getAsJsonArray("choices");
            if (choices != null &amp;&amp; choices.size() &gt; 0) {
                JsonObject firstChoice = choices.get(0).getAsJsonObject();
                String aiResponse = firstChoice.getAsJsonObject("message").get("content").getAsString();

                updateTokenCount(aiResponse, false);

                messages.add(new Message("system", "assistant", aiResponse));

                System.out.println("输入的 Token 数: " + inputTokenCount);
                System.out.println("输出的 Token 数: " + outputTokenCount);
                System.out.println("总使用的 Token 数: " + tokenCount);

                return aiResponse;
            }
        }
        return "无法获取响应。";
    }

    private void updateTokenCount(String text, boolean isInput) {
        int count = 0;
        for (char c : text.toCharArray()) {
            count += (String.valueOf(c).matches("[\\u0000-\\u00ff]") ? 1 : 4);
        }
        int tokens = (int) Math.ceil(count / 4.0);
        tokenCount += tokens;
        if (isInput) {
            inputTokenCount += tokens;
        } else {
            outputTokenCount += tokens;
        }
    }

    private static class Message {
        String role;
        String content;

        public Message(String type, String role, String content) {
            this.role = role;
            this.content = content;
        }
    }

    public static void main(String[] args) throws IOException {
        ChatGPTClient client = new ChatGPTClient("YOUR-API-KEY");

        Scanner scanner = new Scanner(System.in, "UTF-8");
        String input;
        while (true) {
            System.out.print("输入消息（输入 'bye' 结束对话）: ");
            input = scanner.nextLine();
            if ("bye".equalsIgnoreCase(input)) {
                break;
            }
            String response = client.sendMessage(input);
            System.out.println("ChatGPT 回应: " + response);
        }
    }
}

</code></pre>
<p>在以上代码中，增加了每次对话后所使用的token值，以便查询核对接口使用费。可在官网查询相关定价。</p>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2024/01/wp_editor_md_7ca6ffab890759733ec128bda9db6a20.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2024/01/wp_editor_md_7ca6ffab890759733ec128bda9db6a20.jpg" alt="" /></a></p>
<h3>五、运行结果</h3>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2024/01/wp_editor_md_86a520f2c97f583072037ca931be6455.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2024/01/wp_editor_md_86a520f2c97f583072037ca931be6455.jpg" alt="" /></a></p>
<p><a href="https://www.laobaiblog.top/2024/01/15/%e4%bd%bf%e7%94%a8nginx%e8%bd%ac%e5%8f%91%e4%bb%a3%e7%90%86chatgpt%e6%8e%a5%e5%8f%a3%ef%bc%8cjava%e8%b0%83%e7%94%a8%e5%ae%9e%e7%8e%b0%e5%a4%9a%e8%bd%ae%e5%af%b9%e8%af%9d/">使用Nginx转发代理ChatGpt接口，Java调用实现多轮对话</a>最先出现在<a href="https://www.laobaiblog.top">Liao&#039;s blog</a>。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>甲骨文云 Oracle Cloud 服务器防回收docker 命令</title>
		<link>https://www.laobaiblog.top/2023/02/06/%e7%94%b2%e9%aa%a8%e6%96%87%e4%ba%91-oracle-cloud-%e6%9c%8d%e5%8a%a1%e5%99%a8%e9%98%b2%e5%9b%9e%e6%94%b6docker-%e5%91%bd%e4%bb%a4/</link>
		
		<dc:creator><![CDATA[大白]]></dc:creator>
		<pubDate>Mon, 06 Feb 2023 06:48:45 +0000</pubDate>
				<category><![CDATA[Docker]]></category>
		<category><![CDATA[分享]]></category>
		<category><![CDATA[docker]]></category>
		<category><![CDATA[Oracle]]></category>
		<category><![CDATA[云服务器]]></category>
		<category><![CDATA[甲骨文]]></category>
		<guid isPermaLink="false">https://www.laobaiblog.top/?p=377</guid>

					<description><![CDATA[<p>转载自：ioiox博客 背景 官网政策修改：甲骨文对闲置实例的定义为在 7 天内满足以下条件的实例： &#8230;</p>
<p><a href="https://www.laobaiblog.top/2023/02/06/%e7%94%b2%e9%aa%a8%e6%96%87%e4%ba%91-oracle-cloud-%e6%9c%8d%e5%8a%a1%e5%99%a8%e9%98%b2%e5%9b%9e%e6%94%b6docker-%e5%91%bd%e4%bb%a4/">甲骨文云 Oracle Cloud 服务器防回收docker 命令</a>最先出现在<a href="https://www.laobaiblog.top">Liao&#039;s blog</a>。</p>
]]></description>
										<content:encoded><![CDATA[<p><strong><em>转载自：<a class="wp-editor-md-post-content-link" href="https://www.ioiox.com/archives/165.html">ioiox博客</a></em></strong></p>
<h4>背景</h4>
<p><strong><a class="wp-editor-md-post-content-link" href="https://docs.oracle.com/en-us/iaas/Content/FreeTier/freetier_topic-Always_Free_Resources.htm">官网政策</a>修改</strong>：甲骨文对闲置实例的定义为在 7 天内满足以下条件的实例：</p>
<ul>
<li><strong>95% 时间的 CPU 使用率不足 10%</strong></li>
<li><strong>网络利用率低于 10%</strong></li>
<li><strong>内存利用率低于 10% （仅适用于 A1 ARM 免费实例）</strong></li>
</ul>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2023/02/wp_editor_md_d36400aeea7c1348e8eea14bcc0d5737.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2023/02/wp_editor_md_d36400aeea7c1348e8eea14bcc0d5737.jpg" alt="" /></a></p>
<h4>简介</h4>
<p>为了防止服务器被删，网上各路大神也出了很多教程来让服务器高负载，不过大多数都是试用 shell 脚本循环计算，dd 复制空文件或者一些类似 lookbusy 等第三方软件来模拟高负载。</p>
<p>不过作为洁癖党，总是会避免安装一些不太了解的第三方软件，也但是一些脚本后台运行出问题，或者时间长了忘记了，所以还是觉得把脚本跑在 docker 里最合适，也最方便管理。可以做到想开就开，想关就关，还可以配合 crontab 定时开关。</p>
<h4>教程</h4>
<p>原理很简单，就是写了一段最简单的循环计算 shell 脚本，在 alpine 容器内部执行。只需要控制 docker 的启动和停止即可。</p>
<p>docker命令</p>
<pre><code class="language-shell line-numbers">#docker启动命令
docker run -d --name keeporaclealive --rm alpine sh -c "while true; do for i in {1..100000}; do j=<span class="katex math inline">((i*i)); done; done" 

#docker停止命令
docker stop keeporaclealive

#docker命令将容器常驻，即使服务器重启也会自动启动服务。
docker run -d --name keeporaclealive --restart always alpine sh -c "while true; do for i in {1..100000}; do j=</span>((i*i)); done; done"

#docker停止命令
docker stop keeporaclealive
# 停止服务，容器不会被删除。
docker start keeporaclealive
# 再次启动容器。
docker rm keeporaclealive
# 停止后彻底删除容器。
</code></pre>
<h5>效果</h5>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2023/02/wp_editor_md_336532e51f091c2cbbe9d240b648fea1.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2023/02/wp_editor_md_336532e51f091c2cbbe9d240b648fea1.jpg" alt="" /></a></p>
<p><a href="https://www.laobaiblog.top/2023/02/06/%e7%94%b2%e9%aa%a8%e6%96%87%e4%ba%91-oracle-cloud-%e6%9c%8d%e5%8a%a1%e5%99%a8%e9%98%b2%e5%9b%9e%e6%94%b6docker-%e5%91%bd%e4%bb%a4/">甲骨文云 Oracle Cloud 服务器防回收docker 命令</a>最先出现在<a href="https://www.laobaiblog.top">Liao&#039;s blog</a>。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>CentOS Docker环境部署Nessus漏洞扫描 系列一</title>
		<link>https://www.laobaiblog.top/2022/08/31/centos-docker%e7%8e%af%e5%a2%83%e9%83%a8%e7%bd%b2nessus%e6%bc%8f%e6%b4%9e%e6%89%ab%e6%8f%8f-%e7%b3%bb%e5%88%97%e4%b8%80/</link>
		
		<dc:creator><![CDATA[大白]]></dc:creator>
		<pubDate>Wed, 31 Aug 2022 04:14:00 +0000</pubDate>
				<category><![CDATA[Docker]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[分享]]></category>
		<category><![CDATA[docker]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[nessus]]></category>
		<category><![CDATA[漏洞扫描]]></category>
		<guid isPermaLink="false">https://www.laobaiblog.top/?p=271</guid>

					<description><![CDATA[<p>一、Docker部署Nessus 部署环境 操作系统版本：CentOS Linux release  &#8230;</p>
<p><a href="https://www.laobaiblog.top/2022/08/31/centos-docker%e7%8e%af%e5%a2%83%e9%83%a8%e7%bd%b2nessus%e6%bc%8f%e6%b4%9e%e6%89%ab%e6%8f%8f-%e7%b3%bb%e5%88%97%e4%b8%80/">CentOS Docker环境部署Nessus漏洞扫描 系列一</a>最先出现在<a href="https://www.laobaiblog.top">Liao&#039;s blog</a>。</p>
]]></description>
										<content:encoded><![CDATA[<h1>一、Docker部署Nessus</h1>
<h2>部署环境</h2>
<ul>
<li>操作系统版本：CentOS Linux release 7.9.2009 (Core)</li>
<li>Docker版本：Docker Server Version: 20.10.17</li>
<li>Nessus版本： 10.3.0 （#80） Linux</li>
</ul>
<h2>部署Nessus</h2>
<pre><code class="language-shell line-numbers">#搜索nessus相关镜像
docker search nessus
#pull nessus最新镜像
docker pull tenableofficial/nessus
#启动docker镜像，同时配置用户名和口令、不启动自动更新
docker run -it -d -p8834:8834 --name nessus -e USERNAME=Nessus -e AUTO_UPDATE=no -e PASSWORD=HDuUNO1XzDEq2Ls tenableofficial/nessus
</code></pre>
<pre><code class="language-shell line-numbers">#进入nessus容器
docker exec -it nessus bash
#启动nessus服务
/opt/scripts/configure_scanner.py

</code></pre>
<h2>访问nessus界面</h2>
<p><strong><code>https://localhost:8834</code></strong></p>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2022/08/wp_editor_md_48afaed8f27d566dfcd378d912ee0f8f.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2022/08/wp_editor_md_48afaed8f27d566dfcd378d912ee0f8f.jpg" alt="" /></a></p>
<p><strong>用户名和口令为创建nessus容器时配置的用户名和口令</strong></p>
<pre><code class="language-shell line-numbers">username:Nessus
password:HDuUNO1XzDEq2Ls
</code></pre>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2022/08/wp_editor_md_c582b125111664a9c6b32a7822448b6b.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2022/08/wp_editor_md_c582b125111664a9c6b32a7822448b6b.jpg" alt="" /></a></p>
<h1>二、官方注册插件库和激活码</h1>
<p><a class="wp-editor-md-post-content-link" href="https://plugins.nessus.org/v2/offline.php">官网插件库地址</a>：<br />
https://plugins.nessus.org/v2/offline.php</p>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2022/08/wp_editor_md_ada4e589a08b061fb9cc269bc159a4bd.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2022/08/wp_editor_md_ada4e589a08b061fb9cc269bc159a4bd.jpg" alt="" /></a></p>
<h4>获取第一个值Challenge code</h4>
<pre><code class="language-shell line-numbers">#进入Nessus容器
docker exec -it nessus bash
#生成匹配Challenge code
/opt/nessus/sbin/nessuscli fetch --challenge
</code></pre>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2022/08/wp_editor_md_53f7bd59813c35b6213db9c1f36f484c.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2022/08/wp_editor_md_53f7bd59813c35b6213db9c1f36f484c.jpg" alt="" /></a></p>
<p><strong>Challenge code: be86f8bde86494e544d6bad87c2ea9122f8b012d</strong></p>
<h4>获取第二个值激活码Activation Code</h4>
<p>进入<a class="wp-editor-md-post-content-link" href="https://zh-cn.tenable.com/products/nessus/nessus-essentials?tns_redirect=true">官网</a>，邮箱注册获取激活码，填写邮箱接收邮件<br />
https://zh-cn.tenable.com/products/nessus/nessus-essentials?tns_redirect=true</p>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2022/08/wp_editor_md_2e284d8c7dda8752214f442a95eb0fa8.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2022/08/wp_editor_md_2e284d8c7dda8752214f442a95eb0fa8.jpg" alt="" /></a></p>
<p>获取激活码</p>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2022/08/wp_editor_md_2dedf9fed1be758a698876ce8209394c.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2022/08/wp_editor_md_2dedf9fed1be758a698876ce8209394c.jpg" alt="" /></a></p>
<p>提交获取插件下载地址和证书内容</p>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2022/08/wp_editor_md_57e8f77cc73b6aa8c53aefb92aabfc7a.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2022/08/wp_editor_md_57e8f77cc73b6aa8c53aefb92aabfc7a.jpg" alt="" /></a></p>
<p>插件下载地址及激活码License</p>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2022/08/wp_editor_md_eb3ac519e7b116dbe71dc06b373ea579.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2022/08/wp_editor_md_eb3ac519e7b116dbe71dc06b373ea579.jpg" alt="" /></a></p>
<h2>更新docker中nessus插件库</h2>
<p>将下载的插件库上传至nessus容器中</p>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2022/08/wp_editor_md_12b65f4dbd5a4c3dc004423e6af78266.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2022/08/wp_editor_md_12b65f4dbd5a4c3dc004423e6af78266.jpg" alt="" /></a></p>
<pre><code class="language-shell line-numbers">#从Docker宿主机复制文件到Docker容器 all-2.0.tar.gz插件位置看个人上传宿主机目录
docker cp /data/middleware/nessus/all-2.0.tar.gz nessus:/usr/local/
#Docker容器中更新插件库
docker exec -it nessus /bin/bash
cd /usr/local
#更新插件库
/opt/nessus/sbin/nessuscli update all-2.0.tar.gz
</code></pre>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2022/08/wp_editor_md_78c7f20c643d7823d9d26297908c62a0.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2022/08/wp_editor_md_78c7f20c643d7823d9d26297908c62a0.jpg" alt="" /></a></p>
<h2>激活Nessus</h2>
<pre><code class="language-shell line-numbers">#进入容器
docker exec -it nessus /bin/bash
cd /usr/local
#填写刚才所获得的激活码
vi nessus.license

</code></pre>
<pre data-language=XML><code class="language-markup line-numbers">-----BEGIN TENABLE LICENSE-----
aTJZK2tGL1NQY3Fad2UrR0pWeWRobFpxdjJiY1F3d0Q0cEk0OWJtR3FuYjhmOTduOUF1OUMrY0FF
SmRVTkNJUUp5dEN6WTFiY1UrTnlsMG02VEQ0eUZBNU0yVGNDNDA4MmRMZEYyZy9VelhacWYyY3JH
aXFkY29kdnRhUzJtNytBbnJpUnprU21URjQva21kT3VwRWNVYmlHb0QzaXFUekNtZnZITnJaVldx
Wmh1eEFxYU9Pb2cwQW5GZXVRTWFsS1ZOODRBaXBGbFNJWjRrUi9XUUtGYWZZTmY1RGplZjZWVE1F
aUgzUDJnRmxSazJ2WFI4ZVcyazBPVEQ4R3JuTlpIaUZnNVZKdkZqdHJLZ1lYNlBRcU4zTWhIdzZF
Z2ZlajZqaG5QeUpWSkhSVFlTaHcvdzB3OEZUVXRZNU1TZmttRWlpT1lEOHcxejM2STlha1BCSGFB
dERETmFxN3l6SXJ4QTQ3ekRlY3FiS0lLYUhwWUMyeFpPbGNoV3VXZloxNGRvSXRySnFGVXB6MXRP
TERDUkNGQ2lHSHIrYUtjMUM1SUpqWTZKcFRiSHIrZm5wU3k2VDMrY1NzeU1JV3VyUmw1cUNFVWVs
WkJudUxXNkg4R0pwd3gvZEdHYi9TUjNpVjV2dzFoQUpGWG91K2NqM04zTktKVE5VcUp2Zi9URUth
SHNKTy9uWW9ZeXpGck9IUGtzWmxpdVdnMzR6U3V1MGpEamZZYVFsK3Y2ZkRlUHp5dU4vZjhhREdw
MUpSQTN4NGYwUTl3dzg0aXdKd0Zyb0Z1L3ltZE9ValIrbGR2cWFpemp3b0k3cnVCckpiNXlJb0tw
bXR3NDF4OWx5aXFPczM5d056bEkrUlN1UlpRV1BJNDJjUStFN2dwOVA4dUhndzVuZmNXK2RySzA9
DQp7ImFjdGl2YXRpb25fY29kZSI6IkdSQTctMkxVRC1EUENOLTg1WEQtWE1CTSIsInVwZGF0ZV9w
YXNzd29yZCI6ImY4MjM0OTFlYzExYjIxMGI0ODczYTllM2YxMzVlMDE3IiwicGVuZG9fYXBpX2tl
eSI6ImE3YzhkNWM0LWI2YWUtNDg2Ny03ZGFiLTY5YTkyYTA4NDdlMSIsIm5hbWUiOiJOZXNzdXMg
SG9tZSIsInR5cGUiOiJob21lIiwiZXhwaXJhdGlvbl9kYXRlIjoxODE5NTkzMzkwLCJjdXN0b21l
cl9pZCI6MCwiaXBzIjoxNiwidXBkYXRlX2xvZ2luIjoiMDdhOGZhNGZkYmYzNGIxNzU5NGZhNGUw
YTc1NmM2ZTAiLCJkcm0iOiJjMDUyOGZkOWQyNGIyZGQ0MDExMmZjZTNlM2I2NzY1MiJ9
-----END TENABLE LICENSE-----
</code></pre>
<h4>激活</h4>
<pre><code class="language-shell line-numbers">/opt/nessus/sbin/nessuscli fetch --register-offline nessus.license
#重启nessus
/opt/scripts/configure_scanner.py

</code></pre>
<p>等待加载插件库后访问nessus界面</p>
<p><code>https://localhost:8834</code></p>
<pre><code class="language-shell line-numbers">username:Nessus
password:HDuUNO1XzDEq2Ls
</code></pre>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2022/08/wp_editor_md_48afaed8f27d566dfcd378d912ee0f8f.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2022/08/wp_editor_md_48afaed8f27d566dfcd378d912ee0f8f.jpg" alt="" /></a></p>
<p>插件正常加载</p>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2022/08/wp_editor_md_772a469666fb869bbe65c533211c309e.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2022/08/wp_editor_md_772a469666fb869bbe65c533211c309e.jpg" alt="" /></a></p>
<h1>三、Nessus破解修改限制</h1>
<pre><code class="language-shell line-numbers">#nessus初始化完成后Hosts显示为"0 of 16 used”，修改其限制
docker exec -it nessus /bin/bash
#复制插件到容器根目录
cp -r /opt/nessus/lib/nessus/plugins/ /
#查看plugins插件库复制是否成功，若不成功则重新复制
du -h /plugins/
#删除重新复制
rm -rf /plugins
cp -r /opt/nessus/lib/nessus/plugins/ /

</code></pre>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2022/08/wp_editor_md_f1c564b79bbfc14f7b63e656daab9dcc.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2022/08/wp_editor_md_f1c564b79bbfc14f7b63e656daab9dcc.jpg" alt="" /></a></p>
<ul>
<li>查看plugin_feed_info.inc文件位置</li>
</ul>
<pre><code class="language-shell line-numbers">[root@7b287c8f02b0 /]# find / -name "plugin_feed_info.inc"
/opt/nessus/var/nessus/plugin_feed_info.inc
/opt/nessus/lib/nessus/plugins/plugin_feed_info.inc
</code></pre>
<ul>
<li>备份plugin_feed_info.inc</li>
</ul>
<pre><code class="language-shell line-numbers">mkdir /pluginsinc
cp /opt/nessus/lib/nessus/plugins/plugin_feed_info.inc /pluginsinc/plugin_feed_info.inc.libinc
cp /opt/nessus/var/nessus/plugin_feed_info.inc /pluginsinc/plugin_feed_info.inc.varinc
</code></pre>
<ul>
<li>将plugin_feed_info.inc内容修改为专业版，PLUGIN_SET序号号为Policy Template Version=202208301606或其后序号</li>
</ul>
<pre><code class="language-shell line-numbers">vi /pluginsinc/plugin_feed_info.inc
PLUGIN_SET = "202208301606";
PLUGIN_FEED = "ProfessionalFeed (Direct)";
PLUGIN_FEED_TRANSPORT = "Tenable Network Security Lightning";
</code></pre>
<ul>
<li>关闭Nessus服务</li>
</ul>
<pre><code class="language-shell line-numbers">supervisorctl stop nessusd
rm -f /opt/nessus/lib/nessus/plugins/plugin_feed_info.inc
cp /pluginsinc/plugin_feed_info.inc /opt/nessus/var/nessus/plugin_feed_info.inc
</code></pre>
<ul>
<li>重启Nessus服务</li>
</ul>
<pre><code class="language-shell line-numbers">supervisorctl start nessusd
du -h /opt/nessus/lib/nessus/plugins/
more /opt/nessus/lib/nessus/plugins/plugin_feed_info.inc
more /opt/nessus/var/nessus/plugin_feed_info.inc
</code></pre>
<ul>
<li>访问Nessus并更新规则库，此过程特慢需放置等待</li>
</ul>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2022/08/wp_editor_md_ca43e3cfd0153a5b5649895b972084a2.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2022/08/wp_editor_md_ca43e3cfd0153a5b5649895b972084a2.jpg" alt="" /></a></p>
<ul>
<li>查看状态</li>
</ul>
<pre><code class="language-shell line-numbers">du -h /opt/nessus/lib/nessus/plugins/
more /opt/nessus/lib/nessus/plugins/plugin_feed_info.inc
more /opt/nessus/var/nessus/plugin_feed_info.inc
#若状态异常，重新执行插件删除程序
rm -rf /opt/nessus/lib/nessus/plugins/
cp -r /plugins /opt/nessus/lib/nessus/
supervisorctl stop nessusd
rm -f /opt/nessus/lib/nessus/plugins/plugin_feed_info.inc
cp /pluginsinc/plugin_feed_info.inc /opt/nessus/var/nessus/plugin_feed_info.inc
supervisorctl start nessusd
</code></pre>
<h4>重置启动</h4>
<p>因服务重启时unlimited失效，根据状态异常操作步骤重新操作，编写nessus_start.sh代替service nessusd start，因为命令执行过程较长且Nessus需要重新加载插件，启动过程慢是正常现象。</p>
<pre><code class="language-shell line-numbers">vi /root/nessus_start.sh

#!/bin/bash
rm -rf /opt/nessus/lib/nessus/plugins/
cp -r /plugins /opt/nessus/lib/nessus/
supervisorctl stop nessusd
rm -f /opt/nessus/lib/nessus/plugins/plugin_feed_info.inc
cp /pluginsinc/plugin_feed_info.inc /opt/nessus/var/nessus/plugin_feed_info.inc
supervisorctl start nessusd

chmod +x /root/nessus_start.sh
</code></pre>
<p>手动执行脚本</p>
<pre><code class="language-shell line-numbers">/root/nessus_start.sh
</code></pre>
<p><a href="https://www.laobaiblog.top/2022/08/31/centos-docker%e7%8e%af%e5%a2%83%e9%83%a8%e7%bd%b2nessus%e6%bc%8f%e6%b4%9e%e6%89%ab%e6%8f%8f-%e7%b3%bb%e5%88%97%e4%b8%80/">CentOS Docker环境部署Nessus漏洞扫描 系列一</a>最先出现在<a href="https://www.laobaiblog.top">Liao&#039;s blog</a>。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Docker-compose安装部署ELK并集成SpringBoot</title>
		<link>https://www.laobaiblog.top/2022/03/30/docker-compose%e5%ae%89%e8%a3%85%e9%83%a8%e7%bd%b2elk%e5%b9%b6%e9%9b%86%e6%88%90springboot/</link>
		
		<dc:creator><![CDATA[大白]]></dc:creator>
		<pubDate>Wed, 30 Mar 2022 08:32:29 +0000</pubDate>
				<category><![CDATA[Docker]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[分享]]></category>
		<guid isPermaLink="false">https://www.laobaiblog.top/?p=164</guid>

					<description><![CDATA[<p>原文地址：https://www.cnblogs.com/zys2019/p/14816634.ht &#8230;</p>
<p><a href="https://www.laobaiblog.top/2022/03/30/docker-compose%e5%ae%89%e8%a3%85%e9%83%a8%e7%bd%b2elk%e5%b9%b6%e9%9b%86%e6%88%90springboot/">Docker-compose安装部署ELK并集成SpringBoot</a>最先出现在<a href="https://www.laobaiblog.top">Liao&#039;s blog</a>。</p>
]]></description>
										<content:encoded><![CDATA[<p><a class="wp-editor-md-post-content-link" href="https://www.cnblogs.com/zys2019/p/14816634.html">原文地址</a>：<a href="https://www.cnblogs.com/zys2019/p/14816634.html">https://www.cnblogs.com/zys2019/p/14816634.html</a></p>
<h1>一、概述</h1>
<h2>1.1 定义</h2>
<p>对于大规模的日志，需要集中化的管理。而ELK提供了一整套解决方案，并且都是开源软件，之间互相配合使用，完美衔接，高效的满足了很多场合的应用。ELK是三种技术产品的简称，包括Elasticsearch、Logstash、Kibana，可在项目中作为日志框架使用。</p>
<h2>1.2 功能说明</h2>
<ul>
<li>Elasticsearch是个开源分布式搜索引擎，提供搜集、分析、存储数据三大功能。</p>
</li>
<li>Logstash 主要是用来日志的搜集、分析、过滤日志的工具，支持大量的数据获取方式。</p>
</li>
<li>Kibana 也是一个开源和免费的工具，Kibana可以为 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面，可以帮助汇总、分析和搜索重要数据日志。</p>
</li>
</ul>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2022/03/wp_editor_md_831e7c63fb031c5a9c701ed93dd67da2.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2022/03/wp_editor_md_831e7c63fb031c5a9c701ed93dd67da2.jpg" alt="" /></a></p>
<p>简单来说，应用服务生产日志，通过Logger产生日志并输出；Logstash通过http接收应用服务产生的日志；Elasticsearch为日志提供全文检索功能；kibana为Elasticsearch提供图形化界面。</p>
<h1>二、部署ELK</h1>
<p>部署环境</p>
<ul>
<li>CentOS Linux release 7.9.2009 (Core)</li>
<li>Docker Version: 20.10.12</li>
<li>Docker Compose version v2.3.4</li>
</ul>
<h2>2.1 创建目录及配置文件</h2>
<h3>1) 创建elasticsearch数据目录及插件目录</h3>
<pre><code class="language-shell line-numbers">mkdir -p /home/middleware/elk/elasticsearch/data
mkdir -p /home/middleware/elk/elasticsearch/plugins
//elasticsearch数据文件夹授权，保障docker容器中读写权限
chmod 777 /home/middleware/elk/elasticsearch/data
</code></pre>
<h3>2) 创建kibana目录，以便后续汉化操作</h3>
<pre><code class="language-shell line-numbers">mkdir -p /home/middleware/elk/kibana/config
touch /home/middleware/elk/kibana/config/kibana.yml
</code></pre>
<p>配置kibana汉化</p>
<pre><code class="language-shell line-numbers">vim /home/middleware/elk/kibana/config/kibana.yml

#
# ** THIS IS AN AUTO-GENERATED FILE **
#

# Default Kibana configuration for docker target
server.host: "0.0.0.0"
server.shutdownTimeout: "5s"
# 注意你的本地IP
elasticsearch.hosts: [ "http://本地IP:9200" ]
monitoring.ui.container.elasticsearch.enabled: true
#汉化
i18n.locale: "zh-CN"
</code></pre>
<h3>3) 创建logstash.conf配置文件</h3>
<pre><code class="language-shell line-numbers">mkdir -p /home/middleware/elk/logstash.conf配置文件/conf.d/
touch /home/middleware/elk/logstash/conf.d/logstash.conf
</code></pre>
<p>编辑配置logstash.conf，其内容如下</p>
<pre><code class="language-shell line-numbers">vim /home/middleware/elk/logstash/conf.d/logstash.conf

input {
  tcp {
    mode => "server"
    host => "0.0.0.0"
    port => 4560
    codec => json
  }
}
output {
  elasticsearch {
    hosts => "es:9200"
    index => "logstash-%{+YYYY.MM.dd}"
  }
}

</code></pre>
<p>在这里指定了输入的日志的端口是<strong>4560，那么下面对外暴露的端口也必须是4560。</strong></p>
<h3>4) 创建docker-compose.yml文件</h3>
<pre><code class="language-shell line-numbers">touch /home/middleware/elk/docker-compose.yml
</code></pre>
<h2>2.2 配置docker-compose并启动</h2>
<pre><code class="language-shell line-numbers">cd /home/middleware/elk
vim docker-compose.yml
</code></pre>
<p>配置内容如下：</p>
<pre><code class="language-shell line-numbers">
version: '3.7'
services:
  elasticsearch:
    image: elasticsearch:7.17.1
    container_name: elasticsearch
    privileged: true
    user: root
    environment:
      #设置集群名称为elasticsearch
      - cluster.name=elasticsearch 
      #以单一节点模式启动
      - discovery.type=single-node 
      #设置使用jvm内存大小
      - ES_JAVA_OPTS=-Xms512m -Xmx512m 
    volumes:
      - /home/middleware/elk/elasticsearch/plugins:/usr/share/elasticsearch/plugins
      - /home/middleware/elk/elasticsearch/data:/usr/share/elasticsearch/data
    ports:
      - 9200:9200
      - 9300:9300

  logstash:
    image: logstash:7.17.1
    container_name: logstash
    ports:
       - 4560:4560
    privileged: true
    environment:
      - TZ=Asia/Shanghai
    volumes:
      #挂载logstash的配置文件
      - /home/middleware/elk/logstash/conf.d/logstash.conf:/usr/share/logstash/pipeline/logstash.conf
    depends_on:
      - elasticsearch 
    links:
      #可以用es这个域名访问elasticsearch服务
      - elasticsearch:es 

  kibana:
    image: kibana:7.17.1
    container_name: kibana
    ports:
        - 5601:5601
    privileged: true
    links:
      #可以用es这个域名访问elasticsearch服务
      - elasticsearch:es 
    depends_on:
      - elasticsearch 
    environment:
      #设置访问elasticsearch的地址
      - elasticsearch.hosts=http://elasticsearch:9200
    volumes:
      - /home/middleware/elk/kibana/config/kibana.yml:/usr/share/kibana/config/kibana.yml
</code></pre>
<p>这里使用privileged设置为true是赋予这个容器root权限。然后启动</p>
<h3>5) docker-compose启动elk</h3>
<p>完整目录结构如下图</p>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2022/03/wp_editor_md_697d1448cd339c91baf5ef946f3fc7b5.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2022/03/wp_editor_md_697d1448cd339c91baf5ef946f3fc7b5.jpg" alt="" /></a></p>
<pre><code class="language-shell line-numbers">cd /home/middleware/elk
docker-compose up -d
</code></pre>
<p>若启动报错，需要先关闭并删除容器后再重新启动。关闭删除命令：</p>
<pre><code class="language-shell line-numbers">docker-compose down
</code></pre>
<h2>2.3 打开kibana</h2>
<p>输入http://192.168.1.104:5601/app/home，访问Kibana web界面。点击左侧设置，进入Management界面</p>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2022/03/wp_editor_md_8c540c1591ac09e4715e0156ee8ef83a.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2022/03/wp_editor_md_8c540c1591ac09e4715e0156ee8ef83a.jpg" alt="" /></a></p>
<h1>三、日志收集</h1>
<p>本文通过SpringBoot架构把日志信息记录到logstash。</p>
<h2>3.1 环境准备</h2>
<ul>
<li>IntelliJ IDEA 2019.3.5</li>
<li>Spring-boot</li>
</ul>
<h3>3.1.1 创建springboot项目</h3>
<p>1) 打开IDEA，新建File -&gt; New -&gt; Project -&gt; Spring Initializr</p>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2022/03/wp_editor_md_6cde4d7e8db1e1940005665eed2dfd96.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2022/03/wp_editor_md_6cde4d7e8db1e1940005665eed2dfd96.jpg" alt="" /></a></p>
<p>2) 创建springelk测试项目</p>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2022/03/wp_editor_md_9f9188d9e9126b034b187397ddfacbc3.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2022/03/wp_editor_md_9f9188d9e9126b034b187397ddfacbc3.jpg" alt="" /></a></p>
<p>3) 新建一个springboot的项目，在 <strong>pom.xml</strong> 下导入以下web的依赖</p>
<pre data-language=XML><code class="language-markup line-numbers">&lt;!--集成logstash开始--&gt;
        &lt;dependency&gt;
            &lt;groupId&gt;org.springframework.boot&lt;/groupId&gt;
            &lt;artifactId&gt;spring-boot-starter-web&lt;/artifactId&gt;
        &lt;/dependency&gt;

        &lt;dependency&gt;
            &lt;groupId&gt;net.logstash.logback&lt;/groupId&gt;
            &lt;artifactId&gt;logstash-logback-encoder&lt;/artifactId&gt;
            &lt;version&gt;6.6&lt;/version&gt;
        &lt;/dependency&gt;
&lt;!--集成logstash结束--&gt;
</code></pre>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2022/03/wp_editor_md_0a07ffb6365c8ced5d856181133980f7.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2022/03/wp_editor_md_0a07ffb6365c8ced5d856181133980f7.jpg" alt="" /></a></p>
<h3>3.1.2 使用logback记录日志</h3>
<p>logback是SpringBoot自带的日志，只要导入了web的依赖即可使用。<br />
1) 在测试包下新建一个测试类和测试方法</p>
<pre><code class="language-java line-numbers">import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

/**
 *
 * @author lkh
 * date:2022-03-30
 */

@RunWith(SpringRunner.class)
@SpringBootTest(classes = SpringElkTest.class)
public class SpringElkTest {
//创建log对象

    Logger logger = LogManager.getLogger(this.getClass());

    @Test
    public void logback() {
        logger.info("这是一个logback日志Info信息");
        logger.error("这是一个logback日志Error信息");
    }

}
</code></pre>
<p>2）在resources目录新建logback-spring.xml</p>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2022/03/wp_editor_md_bb30d6ef508543d6e5656a89dccec62b.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2022/03/wp_editor_md_bb30d6ef508543d6e5656a89dccec62b.jpg" alt="" /></a></p>
<p><strong>写入以下内容</strong></p>
<pre data-language=XML><code class="language-markup line-numbers">&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;!DOCTYPE configuration&gt;
&lt;configuration&gt;
    &lt;include resource="org/springframework/boot/logging/logback/defaults.xml"/&gt;
    &lt;include resource="org/springframework/boot/logging/logback/console-appender.xml"/&gt;
    &lt;!--应用名称--&gt;
    &lt;property name="APP_NAME" value="springboot-logback-elk-demo"/&gt;
    &lt;!--日志文件保存路径--&gt;
    &lt;property name="LOG_FILE_PATH" value="<span class="katex math inline">{LOG_FILE:-</span>{LOG_PATH:-<span class="katex math inline">{LOG_TEMP:-</span>{java.io.tmpdir:-/tmp}}}/logs}"/&gt;
    &lt;contextName&gt;<span class="katex math inline">{APP_NAME}&lt;/contextName&gt;
    &lt;!--每天记录日志到文件appender--&gt;
    &lt;appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"&gt;
        &lt;rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"&gt;
            &lt;fileNamePattern&gt;</span>{LOG_FILE_PATH}/<span class="katex math inline">{APP_NAME}-%d{yyyy-MM-dd}.log&lt;/fileNamePattern&gt;
            &lt;maxHistory&gt;30&lt;/maxHistory&gt;
        &lt;/rollingPolicy&gt;
        &lt;encoder&gt;
            &lt;pattern&gt;</span>{FILE_LOG_PATTERN}&lt;/pattern&gt;
        &lt;/encoder&gt;
    &lt;/appender&gt;
    &lt;!--输出到logstash的appender--&gt;
    &lt;appender name="LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender"&gt;
        &lt;!--可以访问的logstash日志收集端口--&gt;
        &lt;destination&gt;192.168.1.104:4560&lt;/destination&gt;
        &lt;encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder"/&gt;
    &lt;/appender&gt;
    &lt;root level="INFO"&gt;
        &lt;appender-ref ref="CONSOLE"/&gt;
        &lt;appender-ref ref="FILE"/&gt;
        &lt;appender-ref ref="LOGSTASH"/&gt;
    &lt;/root&gt;
&lt;/configuration&gt;

</code></pre>
<p>3) 然后启动测试方法，查看控制台日志。</p>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2022/03/wp_editor_md_3e7061093009107d38fc59820470d5fb.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2022/03/wp_editor_md_3e7061093009107d38fc59820470d5fb.jpg" alt="" /></a></p>
<p>4) 返回kibana页面，创建索引，已自动搜索展示出来</p>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2022/03/wp_editor_md_dc2e378315f7f5fa5f3b3634cef41929.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2022/03/wp_editor_md_dc2e378315f7f5fa5f3b3634cef41929.jpg" alt="" /></a></p>
<p>5) 选择Discover,可以看到刚才打印的日志已经反馈到kibana中</p>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2022/03/wp_editor_md_122ec43f890c49e8e8d7698615723d79.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2022/03/wp_editor_md_122ec43f890c49e8e8d7698615723d79.jpg" alt="" /></a></p>
<p>查看信息时，建议在左侧Available fields中筛选出&quot;message&quot;信息，&quot;host&quot;字段可选。筛选的字段在左侧也可以看到，右侧看到的信息就比较清晰。</p>
<p>需要注意的是，在这些日志中，时间是logstash收集日志时的创建时间，并不是原始日志的记录时间。</p>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2022/03/wp_editor_md_1a8d6fc8d9d646b64088f388ef33b065.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2022/03/wp_editor_md_1a8d6fc8d9d646b64088f388ef33b065.jpg" alt="" /></a></p>
<h3>3.1.3 使用log4j2记录日志</h3>
<p>要使用log4j2，则必须排除SpringBoot自带的日志。<br />
1) pom.xml中排除logback并导入log4j2依赖</p>
<pre data-language=XML><code class="language-markup line-numbers">&lt;!--集成log4j2开始--&gt;
                &lt;dependency&gt;
                    &lt;groupId&gt;org.springframework.boot&lt;/groupId&gt;
                    &lt;artifactId&gt;spring-boot-starter&lt;/artifactId&gt;
                    &lt;exclusions&gt;
                        &lt;!-- 引入log4j日志时需去掉默认的logback --&gt;
                &lt;exclusion&gt;
                    &lt;groupId&gt;org.springframework.boot&lt;/groupId&gt;
                    &lt;artifactId&gt;spring-boot-starter-logging&lt;/artifactId&gt;
                &lt;/exclusion&gt;
            &lt;/exclusions&gt;
        &lt;/dependency&gt;

        &lt;!-- 日志管理log4j2 --&gt;
        &lt;dependency&gt;
            &lt;groupId&gt;org.springframework.boot&lt;/groupId&gt;
            &lt;artifactId&gt;spring-boot-starter-log4j2&lt;/artifactId&gt;
            &lt;version&gt;2.1.0.RELEASE&lt;/version&gt;
        &lt;/dependency&gt;
        &lt;!--集成log4j2结束 --&gt;
</code></pre>
<p>在资源目录下新建log4j2.xml</p>
<pre data-language=XML><code class="language-markup line-numbers">&lt;?xml version="1.0" encoding="UTF-8"?&gt;

&lt;configuration status="info"&gt;
    &lt;Properties&gt;
        &lt;!-- 声明日志文件存储的目录 --&gt;
        &lt;Property name="LOG_HOME"&gt;E:\logs&lt;/Property&gt;
        &lt;Property name="LOG_PATTERN"
                  value="%date{yyyy-MM-dd HH:mm:ss.SSS} %-5level [%thread][%class{36}:%line] - %msg%n"&gt;&lt;/Property&gt;
    &lt;/Properties&gt;

    &lt;Appenders&gt;
        &lt;!--输出控制台的配置--&gt;
        &lt;Console name="Console" target="SYSTEM_OUT"&gt;
            &lt;!--控制台只输出level及以上级别的信息（onMatch），其他的直接拒绝（onMismatch）--&gt;
            &lt;ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/&gt;
            &lt;!-- 输出日志的格式--&gt;
            &lt;PatternLayout pattern="<span class="katex math inline">{LOG_PATTERN}"/&gt;
        &lt;/Console&gt;

        &lt;!--这输出日志到文件的配置，每次大小超过size，则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩，作为存档--&gt;
        &lt;RollingFile name="RollingFile" fileName="</span>{LOG_HOME}\app_<span class="katex math inline">{date:yyyy-MM-dd}.log"
                     filePattern="</span>{LOG_HOME}\<span class="katex math inline">{date:yyyy-MM}\app_%d{yyyy-MM-dd}_%i.log"&gt;
            &lt;ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/&gt;
            &lt;!-- 输出日志的格式--&gt;
            &lt;PatternLayout pattern="</span>{LOG_PATTERN}"/&gt;
            &lt;!-- 日志文件大小 --&gt;
            &lt;SizeBasedTriggeringPolicy size="20MB"/&gt;
            &lt;!-- 最多保留文件数 --&gt;
            &lt;DefaultRolloverStrategy max="30"/&gt;
        &lt;/RollingFile&gt;

        &lt;!--输出到logstash的appender--&gt;
        &lt;Socket name="Socket" host="192.168.1.104" port="4560" protocol="TCP"&gt;
            &lt;!--输出到logstash的日志格式--&gt;
            &lt;PatternLayout pattern="${LOG_PATTERN}"/&gt;
        &lt;/Socket&gt;
    &lt;/Appenders&gt;

    &lt;!--然后定义Logger，只有定义了Logger并引入的Appender，Appender才会生效。Root中level配置了日志级别，可配置其他级别--&gt;
    &lt;Loggers&gt;
        &lt;Root level="info"&gt;
            &lt;AppenderRef ref="Console"/&gt;
            &lt;AppenderRef ref="RollingFile"/&gt;
            &lt;AppenderRef ref="Socket"/&gt;
        &lt;/Root&gt;
    &lt;/Loggers&gt;

&lt;/configuration&gt;
</code></pre>
<p><strong>注意需要指定logstash服务的ip和记录日志的端口。</strong></p>
<p>3) 新建测试类及方法</p>
<pre><code class="language-java line-numbers">import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

/**
 *
 * @author lkh
 * date:2022-03-30
 */

@RunWith(SpringRunner.class)
@SpringBootTest(classes = SpringElkTest.class)
public class SpringElkTest {
//创建log对象

    Logger logger = LogManager.getLogger(this.getClass());

    /*@Test
    public void logback() {
        logger.info("这是一个logback日志Info信息test1111");
        logger.error("这是一个logback日志Error信息test1111");
    }*/

    @Test
    public void log4j2() {
        logger.info("这是一个log4j2日志Info信息");
        logger.error("这是一个log4j2日志Error信息");
    }

}

</code></pre>
<p>4) 启动测试方法</p>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2022/03/wp_editor_md_83ab167ef424ca6cd2900b81541a575c.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2022/03/wp_editor_md_83ab167ef424ca6cd2900b81541a575c.jpg" alt="" /></a></p>
<p>查看kibana的日志信息</p>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2022/03/wp_editor_md_12275b9ef3163f16cefa472441d40565.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2022/03/wp_editor_md_12275b9ef3163f16cefa472441d40565.jpg" alt="" /></a></p>
<p>查看信息时，建议在左侧Available fields中筛选出&quot;message&quot;信息，&quot;thread_name&quot;，&quot;host&quot;字段可选。筛选的字段在左侧也可以看到，右侧看到的信息就比较清晰，包含了日志本身的时间，这是是配置日志配置的。</p>
<p><a href="https://www.laobaiblog.top/2022/03/30/docker-compose%e5%ae%89%e8%a3%85%e9%83%a8%e7%bd%b2elk%e5%b9%b6%e9%9b%86%e6%88%90springboot/">Docker-compose安装部署ELK并集成SpringBoot</a>最先出现在<a href="https://www.laobaiblog.top">Liao&#039;s blog</a>。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>DOCKER安装部署ELK (ELASTICSEARCH+KIBANA+LOGSTASH+FILEBEAT)</title>
		<link>https://www.laobaiblog.top/2022/03/10/docker%e5%ae%89%e8%a3%85%e9%83%a8%e7%bd%b2elk-elasticsearchkibanalogstashfilebeat/</link>
		
		<dc:creator><![CDATA[大白]]></dc:creator>
		<pubDate>Thu, 10 Mar 2022 04:25:10 +0000</pubDate>
				<category><![CDATA[Docker]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[分享]]></category>
		<guid isPermaLink="false">https://www.laobaiblog.top/?p=152</guid>

					<description><![CDATA[<p>ELK是由 Elasticsearch、Logstash和Kibana 三部分组件组成。 Elast &#8230;</p>
<p><a href="https://www.laobaiblog.top/2022/03/10/docker%e5%ae%89%e8%a3%85%e9%83%a8%e7%bd%b2elk-elasticsearchkibanalogstashfilebeat/">DOCKER安装部署ELK (ELASTICSEARCH+KIBANA+LOGSTASH+FILEBEAT)</a>最先出现在<a href="https://www.laobaiblog.top">Liao&#039;s blog</a>。</p>
]]></description>
										<content:encoded><![CDATA[<h4>ELK是由 Elasticsearch、Logstash和Kibana 三部分组件组成。</h4>
<ul>
<li>Elasticsearch 是个开源分布式搜索引擎，它的特点有：分布式，零配置，自动发现，索引自动分片，索引副本机制，restful风格接口，多数据源，自动搜索负载等。</li>
<li>Logstash 是一个完全开源的工具，它可以对你的日志进行收集、分析，并将其存储供以后使用。</li>
<li>kibana 是一个开源和免费的工具，它可以为 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面，可以帮助您汇总、分析和搜索重要数据日志。</li>
<li>Filebeat 是用于单用途数据托运人的平台。它们以轻量级代理的形式安装，并将来自成百上千台机器的数据发送到 Logstash 或 Elasticsearch。</li>
</ul>
<p>Docker 镜像统一从 <a href="https://hub.docker.com/">https://hub.docker.com/</a> 下载 （安装时请使用统一版本）。保险起见我安装的是7.17.1版本</p>
<h3>一、Docker 安装镜像</h3>
<p>官网镜像地址：<br />
<a href="https://hub.docker.com/">https://hub.docker.com/</a><em>/elasticsearch<br />
<a href="https://hub.docker.com/">https://hub.docker.com/</a></em>/kibana<br />
<a href="https://hub.docker.com/">https://hub.docker.com/</a><em>/logstash<br />
<a href="https://hub.docker.com/">https://hub.docker.com/</a></em>/filebeat</p>
<pre><code class="language-shell line-numbers"># 下载镜像 查看镜像
docker pull elasticsearch:7.17.1
docker pull kibana:7.17.1
docker pull logstash:7.17.1
docker pull store/elastic/filebeat:7.17.1
docker images
</code></pre>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2022/03/wp_editor_md_0b87e7877c7f6e544a4d015d84a66e84.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2022/03/wp_editor_md_0b87e7877c7f6e544a4d015d84a66e84.jpg" alt="" /></a></p>
<ol>
<li>Docker 安装启动 Elasticsearch</li>
</ol>
<pre><code class="language-shell line-numbers"># 创建自定义的网络(用于连接到连接到同一网络的其他服务(例如Kibana))
docker network create elknetwork

# 运行 elasticsearch
docker run -d --name elasticsearch \
--net elknetwork  -p 9200:9200 -p 9300:9300 \
-e "ES_JAVA_OPTS=-Xms2048m -Xmx2048m" \
-e "discovery.type=single-node" \
elasticsearch:7.17.1

# 查看容器状态
docker ps
</code></pre>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2022/03/wp_editor_md_506e004feda1b5266daca616b31a9d6a.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2022/03/wp_editor_md_506e004feda1b5266daca616b31a9d6a.jpg" alt="" /></a></p>
<p>访问：<a href="http://IP:9200">http://IP:9200</a>  Elasticsearch 安装启动完成</p>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2022/03/wp_editor_md_35c1e84f2e3a6a8ee12d276c7946db6e.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2022/03/wp_editor_md_35c1e84f2e3a6a8ee12d276c7946db6e.jpg" alt="" /></a></p>
<ol start="2">
<li>Docker 安装启动 Kibana</li>
</ol>
<pre><code class="language-shell line-numbers"># 汉化kibana
mkdir -p /data/dockerfile/kibana/config
cd /data/dockerfile/kibana/config
vim kibana.yml

    #
    # ** THIS IS AN AUTO-GENERATED FILE **
    #
    # Default Kibana configuration for docker target
    server.host: "0.0.0.0"
    server.shutdownTimeout: "5s"
    # 注意你的本地IP
    elasticsearch.hosts: [ "http://yourip:9200" ] 
    monitoring.ui.container.elasticsearch.enabled: true
    i18n.locale: "zh-CN"

# 启动kibana

docker run -d --name kibana --net elknetwork -p 5601:5601 \
-v /data/dockerfile/kibana/config/kibana.yml:/usr/share/kibana/config/kibana.yml \
kibana:7.17.1
</code></pre>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2022/03/wp_editor_md_3f1f856bb9ad19d054cb7c66f25f6f06.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2022/03/wp_editor_md_3f1f856bb9ad19d054cb7c66f25f6f06.jpg" alt="" /></a></p>
<ol start="3">
<li>Docker 安装启动 logstash</li>
</ol>
<pre><code class="language-shell line-numbers">mkdir -p /data/dockerfile/logstash/conf.d
cd /data/dockerfile/logstash
vim logstash.yml
    http.host: "0.0.0.0"
    #配置elasticsearch集群地址
    xpack.monitoring.elasticsearch.hosts: [ "http://yourip:9200" ]
    ##允许监控
    xpack.monitoring.enabled: true
    ##目录为挂载目录，启动命令指定的
    path.config: /usr/share/logstash/conf.d/my.conf

vim conf.d/my.conf
    input {
       beats {
         port => 5044
         client_inactivity_timeout => 36000
      }
    }
    output {
      elasticsearch {
        hosts => ["http://yourip:9200"]
        index  => "index-%{+YYYY.MM}"
      }
    }

# 启动logstash
docker run -it -d -p 5044:5044 --name logstash  \
-v /data/dockerfile/logstash/logstash.yml:/usr/share/logstash/config/logstash.yml \
-v /data/dockerfile/logstash/conf.d/:/usr/share/logstash/conf.d/ \
logstash:7.17.1

</code></pre>
<ol start="4">
<li>Docker 安装启动 filebeat</li>
</ol>
<pre><code class="language-shell line-numbers">mkdir -p /data/dockerfile/filebeat
vim /data/dockerfile/filebeat/filebeat.yml

    # 定义应用的input类型、以及存放的具体路径
    filebeat.inputs:
      #nginx
    - type: log
      enabled: true
      paths:
        - /var/log/nginx/*.log
      tags: ["nginx"]
      fields:
        index: nginx
      #systemlogs
    - type: log
      enabled: true
      paths:
        - /var/log/messages
      tags: ["messages"]
      fields:
        index: messages

    #============================= Filebeat modules ===============================
    filebeat.config.modules:
      # Glob pattern for configuration loading
      path: ${path.config}/modules.d/*.yml
      # Set to true to enable config reloading
      reload.enabled: true

    # ============================== logstash =====================================  
    output.logstash:
      hosts: ["yourip:5044"] #localhost为logstash安装的服务器ip
      enabled: true
    #============================== Kibana =====================================
    setup.kibana:
      host: "yourip:5601"

    #============================== elasticsearch =====================================
    #output.elasticsearch:
    #  hosts: ["yourip:9200"]
    #  enabled: true

# 启动 filebeat

docker run -d  -u root --name filebeat --net elknetwork \
-v /usr/local/nginx/logs:/var/log/nginx:rw \
-v /var/log/messages:/var/log/messages:rw \
-v /data/dockerfile/filebeat/filebeat.yml:/usr/share/filebeat/filebeat.yml:ro \
store/elastic/filebeat:7.17.1

</code></pre>
<h3>二、创建索引，查看ELK抓取日志</h3>
<ol>
<li>进入<strong>Stack management</strong></li>
</ol>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2022/03/wp_editor_md_40893f4c5bf13cb455576933193b1f6b.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2022/03/wp_editor_md_40893f4c5bf13cb455576933193b1f6b.jpg" alt="" /></a></p>
<ol start="2">
<li>选择 <strong>Kibana->索引模式->创建索引</strong><br />
可以看到右侧已经自动获取到我在logstash配置文件下简建立的index索引：/usr/share/logstash/conf.d/my.conf</li>
</ol>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2022/03/wp_editor_md_43f57012bcafecfd27fff5593572e41f.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2022/03/wp_editor_md_43f57012bcafecfd27fff5593572e41f.jpg" alt="" /></a></p>
<ol start="3">
<li>选择Discovre</li>
</ol>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2022/03/wp_editor_md_e85a4932d6604db164665243f0d0f806.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2022/03/wp_editor_md_e85a4932d6604db164665243f0d0f806.jpg" alt="" /></a></p>
<p>可以看到监控的/var/log/messages以及/usr/local/nginx/logs/日志文件都显示出来了。</p>
<h4>效果1</h4>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2022/03/wp_editor_md_65cb58dc4d99031b8168b6f2316f14b0.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2022/03/wp_editor_md_65cb58dc4d99031b8168b6f2316f14b0.jpg" alt="" /></a></p>
<h4>效果2</h4>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2022/03/wp_editor_md_ece26d0f42e1abd0c9d760a8f99c994f.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2022/03/wp_editor_md_ece26d0f42e1abd0c9d760a8f99c994f.jpg" alt="" /></a></p>
<p><a href="https://www.laobaiblog.top/2022/03/10/docker%e5%ae%89%e8%a3%85%e9%83%a8%e7%bd%b2elk-elasticsearchkibanalogstashfilebeat/">DOCKER安装部署ELK (ELASTICSEARCH+KIBANA+LOGSTASH+FILEBEAT)</a>最先出现在<a href="https://www.laobaiblog.top">Liao&#039;s blog</a>。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>CentOS7离线安装docker-ce</title>
		<link>https://www.laobaiblog.top/2022/02/23/centos7%e7%a6%bb%e7%ba%bf%e5%ae%89%e8%a3%85docker-ce/</link>
		
		<dc:creator><![CDATA[大白]]></dc:creator>
		<pubDate>Wed, 23 Feb 2022 01:52:19 +0000</pubDate>
				<category><![CDATA[Docker]]></category>
		<category><![CDATA[Linux]]></category>
		<guid isPermaLink="false">https://www.laobaiblog.top/?p=139</guid>

					<description><![CDATA[<p>一、下载 蓝奏云下载地址：蓝奏云地址 官网下载地址：docker.com 二、安装 1、安装环境 操 &#8230;</p>
<p><a href="https://www.laobaiblog.top/2022/02/23/centos7%e7%a6%bb%e7%ba%bf%e5%ae%89%e8%a3%85docker-ce/">CentOS7离线安装docker-ce</a>最先出现在<a href="https://www.laobaiblog.top">Liao&#039;s blog</a>。</p>
]]></description>
										<content:encoded><![CDATA[<h1>一、下载</h1>
<p>蓝奏云下载地址：<a class="wp-editor-md-post-content-link" href="https://mrliao.lanzouy.com/iIpUJ00hj2ti">蓝奏云地址</a></p>
<p>官网下载地址：<a class="wp-editor-md-post-content-link" href="https://download.docker.com/linux/centos/7/x86_64/stable/Packages/">docker.com</a></p>
<h1>二、安装</h1>
<h3>1、安装环境</h3>
<ul>
<li>操作系统：CentOS Linux release 7.9.2009 (Core)</li>
<li>Docker版本：Server Version: 18.09.8</li>
</ul>
<h3>2、安装</h3>
<pre><code class="language-shell line-numbers">rpm -ivh docker-ce-cli-18.09.8-3.el7.x86_64.rpm  --nodeps --force
rpm -ivh container-selinux-2.107-3.el7.noarch.rpm  --nodeps --force
rpm -ivh containerd.io-1.2.2-3.el7.x86_64.rpm  --nodeps --force
rpm -ivh docker-ce-18.09.8-3.el7.x86_64.rpm  --nodeps --force
</code></pre>
<h3>3、启动</h3>
<pre><code class="language-shell line-numbers"># 启动
systemctl start docker 

# 查看状态
systemctl status docker 
</code></pre>
<h3>4、更改docker存储目录</h3>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/2022/01/18/centos7%e5%ae%89%e8%a3%85docker%e5%b9%b6%e6%9b%b4%e6%94%b9%e9%bb%98%e8%ae%a4%e5%ad%98%e5%82%a8%e6%96%87%e4%bb%b6%e4%bd%8d%e7%bd%ae/">戳以往教程</a></p>
<p><a href="https://www.laobaiblog.top/2022/02/23/centos7%e7%a6%bb%e7%ba%bf%e5%ae%89%e8%a3%85docker-ce/">CentOS7离线安装docker-ce</a>最先出现在<a href="https://www.laobaiblog.top">Liao&#039;s blog</a>。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Docker搭建青龙面板</title>
		<link>https://www.laobaiblog.top/2022/02/07/docker%e6%90%ad%e5%bb%ba%e9%9d%92%e9%be%99%e9%9d%a2%e6%9d%bf/</link>
		
		<dc:creator><![CDATA[大白]]></dc:creator>
		<pubDate>Mon, 07 Feb 2022 09:01:59 +0000</pubDate>
				<category><![CDATA[Docker]]></category>
		<category><![CDATA[分享]]></category>
		<guid isPermaLink="false">https://www.laobaiblog.top/?p=104</guid>

					<description><![CDATA[<p>2022-02-16 11:39:37 星期三 更新 全自动获取CK值，在之前用的是浏览器开发工具或 &#8230;</p>
<p><a href="https://www.laobaiblog.top/2022/02/07/docker%e6%90%ad%e5%bb%ba%e9%9d%92%e9%be%99%e9%9d%a2%e6%9d%bf/">Docker搭建青龙面板</a>最先出现在<a href="https://www.laobaiblog.top">Liao&#039;s blog</a>。</p>
]]></description>
										<content:encoded><![CDATA[<p>2022-02-16 11:39:37 星期三</p>
<hr />
<h1>更新</h1>
<p><strong>全自动获取CK值，在之前用的是浏览器开发工具或插件获取。</strong></p>
<h4>网页版</h4>
<pre><code class="language-shell line-numbers">全自动ck获取服务说明
1. 安装 docker run --name service1 -p 5100:5100 -d asupc/service -restart:always
2. 云服务器放行端口 5100 ， 如需要修改端口请修改冒号前的5100。
3. 浏览器访问 http://ip:5100/api/service 正常情况浏览器返回"量子公共服务。"
4. 获取短信验证码接口 http://ip:5100/api/sms/{phone}  get 请求。如： http://192.168.2.2:5100/api/sms/1888888888
5. 验证短信验证码接口 http://ip:5100/api/sms/{phone}/{code}  get 请求，成功后返回ck信息。如： http://192.168.2.2:5100/api/sms/1888888888/123456
</code></pre>
<h5>效果</h5>
<p>1、可以看到发送了验证码</p>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2022/02/wp_editor_md_d79ea0a4eb72febbc89dd9a57650cea0.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2022/02/wp_editor_md_d79ea0a4eb72febbc89dd9a57650cea0.jpg" alt="" /></a><br />
2、获取的CK值</p>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2022/02/wp_editor_md_7921978fd94f5fa05a1f8c4128ca4d38.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2022/02/wp_editor_md_7921978fd94f5fa05a1f8c4128ca4d38.jpg" alt="" /></a></p>
<h4>Shell版</h4>
<pre><code class="language-shell line-numbers">rm -rf ck sc pt
cl(){
read -p "请输入手机号: " mobile
appid=959
qversion=1.0.0
country_code=86
}
ck(){
ts=<span class="katex math inline">(expr</span>(date +%s%N) / 1000000)
sub_cmd=1
gsign=<span class="katex math inline">(echo -n</span>appid<span class="katex math inline">qversion</span>ts"36"<span class="katex math inline">sub_cmd"sb2cwlYyaCSN1KUv5RHG3tmqxfEb8NKN" | md5sum | cut -d ' ' -f1)
d="client_ver=1.0.0&gsign=</span>gsign&appid=<span class="katex math inline">appid&return_page=https%3A%2F%2Fcrpl.jd.com%2Fn%2Fmine%3FpartnerId%3DWBTF0KYY%26ADTAG%3Dkyy_mrqd%26token%3D&cmd=36&sdk_ver=1.0.0&sub_cmd=</span>sub_cmd&qversion=<span class="katex math inline">qversion&ts=</span>ts"
l=<span class="katex math inline">{#d}
curl -s -k -i --raw -o ck --http2 -X POST -H "Host:qapplogin.m.jd.com" -H "cookie:" -H "user-agent:Mozilla/5.0 (Linux; Android 10; V1838T Build/QP1A.190711.020; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/98.0.4758.87 Mobile Safari/537.36 hap/1.9/vivo com.vivo.hybrid/1.9.6.302 com.jd.crplandroidhap/1.0.3 ({"packageName":"com.vivo.hybrid","type":"deeplink","extra":{}})" -H "accept-language:zh-CN,zh;q=0.9,en;q=0.8" -H "content-type:application/x-www-form-urlencoded; charset=utf-8" -H "content-length:</span>l" -H "accept-encoding:" -d "<span class="katex math inline">d" "https://qapplogin.m.jd.com/cgi-bin/qapp/quick"
gsalt=</span>(cat ck | grep -o "gsalt.*" | cut -d '"' -f3)
guid=<span class="katex math inline">(cat ck | grep -o "guid.*" | cut -d '"' -f3)
lsid=</span>(cat ck | grep -o "lsid.*" | cut -d '"' -f3)
rsa_modulus=<span class="katex math inline">(cat ck | grep -o "rsa_modulus.*" | cut -d '"' -f3)
ck=</span>(echo "guid=<span class="katex math inline">guid;  lsid=</span>lsid;  gsalt=<span class="katex math inline">gsalt;  rsa_modulus=</span>rsa_modulus;")
}
sc(){
ts=<span class="katex math inline">(expr</span>(date +%s%N) / 1000000)
sub_cmd=2
gsign=<span class="katex math inline">(echo -n</span>appid<span class="katex math inline">qversion</span>ts"36"<span class="katex math inline">sub_cmd</span>gsalt | md5sum | cut -d ' ' -f1)
sign=<span class="katex math inline">(echo -n</span>appid<span class="katex math inline">qversion</span>country_code<span class="katex math inline">mobile'4dtyyzKF3w6o54fJZnmeW3bVHl0</span>PbXj' | md5sum | cut -d ' ' -f1)
d="country_code=<span class="katex math inline">country_code&client_ver=1.0.0&gsign=</span>gsign&appid=<span class="katex math inline">appid&mobile=</span>mobile&sign=<span class="katex math inline">sign&cmd=36&sub_cmd=</span>sub_cmd&qversion=<span class="katex math inline">qversion&ts=</span>ts"
l=<span class="katex math inline">{#d}
curl -s -k -i --raw -o sc --http2 -X POST -H "Host:qapplogin.m.jd.com" -H "cookie:</span>ck" -H "user-agent:Mozilla/5.0 (Linux; Android 10; V1838T Build/QP1A.190711.020; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/98.0.4758.87 Mobile Safari/537.36 hap/1.9/vivo com.vivo.hybrid/1.9.6.302 com.jd.crplandroidhap/1.0.3 ({"packageName":"com.vivo.hybrid","type":"deeplink","extra":{}})" -H "accept-language:zh-CN,zh;q=0.9,en;q=0.8" -H "content-type:application/x-www-form-urlencoded; charset=utf-8" -H "content-length:<span class="katex math inline">l" -H "accept-encoding:" -d "</span>d" "https://qapplogin.m.jd.com/cgi-bin/qapp/quick"
err_msg=<span class="katex math inline">(cat sc | grep -o "err_msg.*" | cut -d '"' -f3)
[ -z</span>err_msg ] && echo 手机号为<span class="katex math inline">mobile的验证码发送成功 || echo</span>err_msg
}
pt(){
read -p "请输入验证码: " smscode
ts=<span class="katex math inline">(expr</span>(date +%s%N) / 1000000)
sub_cmd=3
gsign=<span class="katex math inline">(echo -n</span>appid<span class="katex math inline">qversion</span>ts"36"<span class="katex math inline">sub_cmd</span>gsalt | md5sum | cut -d ' ' -f1)
d="country_code=<span class="katex math inline">country_code&client_ver=1.0.0&gsign=</span>gsign&smscode=<span class="katex math inline">smscode&appid=</span>appid&mobile=<span class="katex math inline">mobile&cmd=36&sub_cmd=</span>sub_cmd&qversion=<span class="katex math inline">qversion&ts=</span>ts"
l=<span class="katex math inline">{#d}
curl -s -k -i --raw -o pt --http2 -X POST -H "Host:qapplogin.m.jd.com" -H "cookie:</span>ck" -H "user-agent:Mozilla/5.0 (Linux; Android 10; V1838T Build/QP1A.190711.020; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/98.0.4758.87 Mobile Safari/537.36 hap/1.9/vivo com.vivo.hybrid/1.9.6.302 com.jd.crplandroidhap/1.0.3 ({"packageName":"com.vivo.hybrid","type":"deeplink","extra":{}})" -H "accept-language:zh-CN,zh;q=0.9,en;q=0.8" -H "content-type:application/x-www-form-urlencoded; charset=utf-8" -H "content-length:<span class="katex math inline">l" -H "accept-encoding:" -d "country_code=</span>country_code&client_ver=1.0.0&gsign=<span class="katex math inline">gsign&smscode=</span>smscode&appid=<span class="katex math inline">appid&mobile=</span>mobile&cmd=36&sub_cmd=<span class="katex math inline">sub_cmd&qversion=</span>qversion&ts=<span class="katex math inline">ts" "https://qapplogin.m.jd.com/cgi-bin/qapp/quick"
err_msg=</span>(cat pt | grep -o "err_msg.*" | cut -d '"' -f3)
if [ -z <span class="katex math inline">err_msg ]
then pt_key=</span>(cat pt | grep -o "pt_key.*" | cut -d '"' -f3)
pt_pin=<span class="katex math inline">(cat pt | grep -o "pt_pin.*" | cut -d '"' -f3)
qlck="pt_key=</span>pt_key;pt_pin=<span class="katex math inline">pt_pin;"
echo 你的JD_COOKIE为</span>qlck 
rm -rf ck sc pt
else echo <span class="katex math inline">err_msg
fi
}
cl && ck && sc
[ -z</span>err_msg ] && pt

</code></pre>
<p>下载地址：<a class="wp-editor-md-post-content-link" href="https://mrliao.lanzouy.com/iJzea005amad">蓝奏云ptkey.zip</a></p>
<h5>效果</h5>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2022/02/wp_editor_md_845b9b4414b413d31d8701802f48bb5c.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2022/02/wp_editor_md_845b9b4414b413d31d8701802f48bb5c.jpg" alt="" /></a></p>
<p>如遇到报错信息<code>curl: option --http2: is unknown</code>，安装<code>nghttp2</code>模块<br />
教程地址：<a class="wp-editor-md-post-content-link" href="https://www.cnblogs.com/brookin/p/10713166.html">安装教程</a></p>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2022/02/wp_editor_md_b385b2013dcc31c2e9813cb7e349a7f9.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2022/02/wp_editor_md_b385b2013dcc31c2e9813cb7e349a7f9.jpg" alt="" /></a></p>
<hr />
<h1>前言</h1>
<p>支持多种脚本语言（python3、javaScript、shell、typescript）<br />
支持在线管理脚本、环境变量、配置文件<br />
支持在线查看任务日志<br />
支持秒级任务设置<br />
支持系统级通知<br />
支持暗黑模式<br />
支持手机端操作</p>
<p>其实很多人都只是拿它作为一个<strong>薅京东羊毛的管理工具，我也是。</strong></p>
<h1>搭建面板</h1>
<p>先安装docker，可参考官方文档：<a href="https://github.com/whyour/qinglong">https://github.com/whyour/qinglong</a></p>
<p>启动青龙面板，很多人都用的初始端口5700，但用多了很多人就会频繁攻击，这里换成了5888（随意）。</p>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2022/04/wp_editor_md_be8446839b51805e4bfd2df51f24f4e8.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2022/04/wp_editor_md_be8446839b51805e4bfd2df51f24f4e8.jpg" alt="" /></a></p>
<h1>访问青龙面板</h1>
<p><a href="http://IP:5888/">http://IP:5888/</a><br />
设置账号密码即可。</p>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2022/02/wp_editor_md_cd76934cc6cfbe5a2263030495eda256.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2022/02/wp_editor_md_cd76934cc6cfbe5a2263030495eda256.jpg" alt="" /></a></p>
<h1>拉取第三方库</h1>
<p><strong>1.容器内拉取</strong></p>
<ul>
<li>KingRan库</li>
</ul>
<pre><code class="language-shell line-numbers">#进入容器
docker exec -it qinglong bash
#推荐使用下方库(更新拉库命令)
#拉库命令：
#国内鸡：
ql repo https://github.com.cnpmjs.org/KingRan/JDJB.git "jd_|jx_|jdCookie" "activity|backUp" "^jd[^_]|USER|utils|function|sign|sendNotify|ql|JDJR"
#国外鸡：
ql repo ql repo https://github.com/KingRan/JDJB.git "jd_|jx_|jdCookie" "activity|backUp" "^jd[^_]|USER|utils|function|sign|sendNotify|ql|JDJR"
</code></pre>
<hr />
<ul>
<li>ccwav库</li>
</ul>
<pre><code class="language-shell line-numbers">#ccwav的资产通知增强版和CK检测
#2.10.3之前版本青龙拉库命令:
#不包含sendNotify:
ql repo https://github.com/ccwav/QLScript2.git "jd_" "NoUsed" "ql|utils"
#包含sendNotify:
ql repo https://github.com/ccwav/QLScript2.git "jd_" "NoUsed" "ql|sendNotify|utils"
2.10.3之后版本青龙拉库命令:
#不包含sendNotify:
ql repo https://github.com/ccwav/QLScript2.git "jd_" "NoUsed" "ql|utils|USER_AGENTS|jdCookie|JS_USER_AGENTS"
#包含sendNotify:
ql repo https://github.com/ccwav/QLScript2.git "jd_" "NoUsed" "ql|sendNotify|utils|USER_AGENTS|jdCookie|JS_USER_AGENTS"
</code></pre>
<p><strong>2.面板页面拉取</strong></p>
<ul>
<li>定时任务中新建即可，加上定时器</li>
</ul>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2022/02/wp_editor_md_0977ab8428573f43ce11093ab4e23dbc.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2022/02/wp_editor_md_0977ab8428573f43ce11093ab4e23dbc.jpg" alt="" /></a></p>
<p><strong>3.成功入库</strong><br />
可以看到很多定时脚本已经在面板中</p>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2022/02/wp_editor_md_6e6a3569506612c7b1f9a9623520002c.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2022/02/wp_editor_md_6e6a3569506612c7b1f9a9623520002c.jpg" alt="" /></a></p>
<h1>配置京东账号</h1>
<p>在环境变量中新增京东Cookie值，如何获取这两个值可以在网页端操作。</p>
<ul>
<li><strong>pt_key</strong></li>
<li><strong>pt_pin</strong></li>
</ul>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2022/02/wp_editor_md_395988af2fc46e5a555c262e8495ce1c.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2022/02/wp_editor_md_395988af2fc46e5a555c262e8495ce1c.jpg" alt="" /></a></p>
<h3>获取Cookie</h3>
<ul>
<li>电脑浏览器无痕模式打开京东网址 https://m.jd.com/</li>
<li>登录手机用户</li>
</ul>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2022/02/wp_editor_md_72e7069334d4f983a7aa27517da84e60.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2022/02/wp_editor_md_72e7069334d4f983a7aa27517da84e60.jpg" alt="" /></a></p>
<ul>
<li>登录之后，按F12进入开发者模式，选择<strong>网络</strong>，点击<strong>Fetch/XHR</strong></li>
</ul>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2022/02/wp_editor_md_c1b4a4b5053fdbf576d55381dc99bf2a.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2022/02/wp_editor_md_c1b4a4b5053fdbf576d55381dc99bf2a.jpg" alt="" /></a></p>
<ul>
<li>刷新页面，可以在下接口返回值中，看到cookie，从中找到 <strong>pt_key</strong>、<strong>pt_pin</strong></li>
</ul>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2022/02/wp_editor_md_8ec52ed61e69fc8e02164ee41624de58.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2022/02/wp_editor_md_8ec52ed61e69fc8e02164ee41624de58.jpg" alt="" /></a></p>
<h1>配置通知方式</h1>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2022/02/wp_editor_md_830fecdaa656e4838c8a730bc7b51826.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2022/02/wp_editor_md_830fecdaa656e4838c8a730bc7b51826.jpg" alt="" /></a></p>
<hr />
<p><strong>创建群组，创建webhook消息机器人，获取token值</strong></p>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2022/02/wp_editor_md_d946448d5abbe9c925bb06109e1bfe47.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2022/02/wp_editor_md_d946448d5abbe9c925bb06109e1bfe47.jpg" alt="" /></a></p>
<hr />
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2022/02/wp_editor_md_da504e1e84651fe49ef57d865ee77163.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2022/02/wp_editor_md_da504e1e84651fe49ef57d865ee77163.jpg" alt="" /></a></p>
<hr />
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2022/02/wp_editor_md_cd5d7cf9dc67ab7b96cab01f9044807c.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2022/02/wp_editor_md_cd5d7cf9dc67ab7b96cab01f9044807c.jpg" alt="" /></a></p>
<p>更多的玩法，可以自行摸索，低调行事。</p>
<p><a href="https://www.laobaiblog.top/2022/02/07/docker%e6%90%ad%e5%bb%ba%e9%9d%92%e9%be%99%e9%9d%a2%e6%9d%bf/">Docker搭建青龙面板</a>最先出现在<a href="https://www.laobaiblog.top">Liao&#039;s blog</a>。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>2022新春佳节，虎年~</title>
		<link>https://www.laobaiblog.top/2022/01/29/2022%e6%96%b0%e6%98%a5%e4%bd%b3%e8%8a%82%ef%bc%8c%e6%8b%9c%e4%b8%aa%e6%97%a9%e5%b9%b4%ef%bc%81/</link>
					<comments>https://www.laobaiblog.top/2022/01/29/2022%e6%96%b0%e6%98%a5%e4%bd%b3%e8%8a%82%ef%bc%8c%e6%8b%9c%e4%b8%aa%e6%97%a9%e5%b9%b4%ef%bc%81/?noamp=mobile#comments</comments>
		
		<dc:creator><![CDATA[大白]]></dc:creator>
		<pubDate>Sat, 29 Jan 2022 03:28:26 +0000</pubDate>
				<category><![CDATA[Docker]]></category>
		<guid isPermaLink="false">https://www.laobaiblog.top/?p=97</guid>

					<description><![CDATA[<p>虎年吉祥~</p>
<p><a href="https://www.laobaiblog.top/2022/01/29/2022%e6%96%b0%e6%98%a5%e4%bd%b3%e8%8a%82%ef%bc%8c%e6%8b%9c%e4%b8%aa%e6%97%a9%e5%b9%b4%ef%bc%81/">2022新春佳节，虎年~</a>最先出现在<a href="https://www.laobaiblog.top">Liao&#039;s blog</a>。</p>
]]></description>
										<content:encoded><![CDATA[<h1><strong>虎年吉祥~</strong></h1>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2022/01/wp_editor_md_c3397a25085b22e8308b9d61954f163b.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2022/01/wp_editor_md_c3397a25085b22e8308b9d61954f163b.jpg" alt="" /></a></p>
<p><a href="https://www.laobaiblog.top/2022/01/29/2022%e6%96%b0%e6%98%a5%e4%bd%b3%e8%8a%82%ef%bc%8c%e6%8b%9c%e4%b8%aa%e6%97%a9%e5%b9%b4%ef%bc%81/">2022新春佳节，虎年~</a>最先出现在<a href="https://www.laobaiblog.top">Liao&#039;s blog</a>。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.laobaiblog.top/2022/01/29/2022%e6%96%b0%e6%98%a5%e4%bd%b3%e8%8a%82%ef%bc%8c%e6%8b%9c%e4%b8%aa%e6%97%a9%e5%b9%b4%ef%bc%81/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
		<item>
		<title>Docker安装Nextcloud个人/团队网盘并配置redis优化</title>
		<link>https://www.laobaiblog.top/2022/01/21/docker%e5%ae%89%e8%a3%85nextcloud%e4%b8%aa%e4%ba%ba-%e5%9b%a2%e9%98%9f%e7%bd%91%e7%9b%98%e5%b9%b6%e9%85%8d%e7%bd%aeredis%e4%bc%98%e5%8c%96/</link>
		
		<dc:creator><![CDATA[大白]]></dc:creator>
		<pubDate>Fri, 21 Jan 2022 08:59:25 +0000</pubDate>
				<category><![CDATA[Docker]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[分享]]></category>
		<guid isPermaLink="false">https://www.laobaiblog.top/?p=83</guid>

					<description><![CDATA[<p>在服务器上搭建了一个网盘系统，对比了owncloud、seafile之后，最终还是选择了Nextcl &#8230;</p>
<p><a href="https://www.laobaiblog.top/2022/01/21/docker%e5%ae%89%e8%a3%85nextcloud%e4%b8%aa%e4%ba%ba-%e5%9b%a2%e9%98%9f%e7%bd%91%e7%9b%98%e5%b9%b6%e9%85%8d%e7%bd%aeredis%e4%bc%98%e5%8c%96/">Docker安装Nextcloud个人/团队网盘并配置redis优化</a>最先出现在<a href="https://www.laobaiblog.top">Liao&#039;s blog</a>。</p>
]]></description>
										<content:encoded><![CDATA[<p><em>在服务器上搭建了一个网盘系统，对比了owncloud、seafile之后，最终还是选择了Nextcloud,谁让它好看呢&#8230;</em></p>
<h2>环境准备</h2>
<table>
<thead>
<tr>
<th>类目</th>
<th>版本</th>
<th>备注</th>
</tr>
</thead>
<tbody>
<tr>
<td>操作系统</td>
<td>Centos7 64</td>
<td></td>
</tr>
<tr>
<td>Docker</td>
<td>20.10.12</td>
<td></td>
</tr>
<tr>
<td>nextcloud</td>
<td>latest</td>
<td></td>
</tr>
<tr>
<td>mysql</td>
<td>latest</td>
<td></td>
</tr>
<tr>
<td>redis</td>
<td>latest</td>
<td></td>
</tr>
</tbody>
</table>
<h2>拉取mysql、nextcloud、redis镜像</h2>
<pre><code class="language-shell line-numbers">docker pull mysql
docker pull nextcloud
docker pull redis
</code></pre>
<h2>安装mysql</h2>
<pre><code class="language-shell line-numbers">docker run -p 3306:3306 --restart=always --name mysql -v /usr/local/mysql/conf:/etc/mysql/conf.d -v /usr/local/mysql/logs:/logs -v /usr/local/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql
</code></pre>
<h2>配置mysql</h2>
<pre><code class="language-shell line-numbers">docker exec -it mysql容器ID /bin/bash
root@ID:/# mysql -u root -p
mysql&gt; GRANT ALL PRIVILEGES on *.* to root@'%' WITH GRANT OPTION;
mysql&gt; ALTER USER 'root'@'%' IDENTIFIED BY '123456' PASSWORD EXPIRE NEVER;
Query OK, 0 rows affected (0.02 sec)
mysql&gt; ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
 Query OK, 0 rows affected (0.01 sec)
mysql&gt; FLUSH PRIVILEGES;
mysql&gt; exit
</code></pre>
<h2>安装Nextcloud</h2>
<pre><code class="language-shell line-numbers">mkdir -p /home/nextcloud
docker run -d --name=nextcloud  -v /home/nextcloud:/var/www/html -p 8000:80 --restart=always nextcloud
</code></pre>
<h2>配置nextcloud</h2>
<ul>
<li>设置用户名、密码</li>
<li>配置连接mysql 数据库配置信息（数据库【没有时可自动创建】、用户名、密码、IP地址）</li>
</ul>
<h2>访问nextcloud</h2>
<p><em>因为我已经安装配置过了，当时没有截图，就大致写一下</em></p>
<p><strong>http://IP:8000</strong></p>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2022/01/wp_editor_md_90eed2315b8b8e5f214e643a7ece99b5.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2022/01/wp_editor_md_90eed2315b8b8e5f214e643a7ece99b5.jpg" alt="" /></a></p>
<p>安装完成，输入安装时创建的管理员账号密码登录即可。</p>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2022/01/wp_editor_md_512fde3cf8fe35f8740b785c36915a55.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2022/01/wp_editor_md_512fde3cf8fe35f8740b785c36915a55.jpg" alt="" /></a></p>
<h2>安装Redis，优化nextcloud访问</h2>
<pre><code class="language-shell line-numbers">mkdir -p /home/redis/conf
mkdir -p /home/redis/data

#新增redis配置文件
cd /home/redis/conf
touch redis.conf
</code></pre>
<p>修改redis配置文件：<strong>vim redis.conf</strong></p>
<pre><code class="language-shell line-numbers">#bind 127.0.0.1
protected-mode no
appendonly yes
requirepass 123456
</code></pre>
<h2>启动redis</h2>
<pre><code class="language-shell line-numbers">docker run --name redis -p 6379:6379 -v /home/redis/data:/data -v /home/redis/conf/redis.conf:/etc/redis/redis.conf -d redis redis-server /etc/redis/redis.conf
</code></pre>
<ul>
<li>docker run表示运行的意思</li>
<li>&#8211;name redis表示运行容器的名字叫myredis</li>
<li>-p 6379:6379表示将服务器的6379（冒号前的6379）端口映射到docker的6379（冒号后的6379）端口，这样就可以通过服务器的端口访问到docker容器的端口了</li>
<li>-d 表示以后台服务的形式运行redis</li>
<li>-v /home/redis/data:/data表示将服务器上的/home/redis/data映射为docker容器上的/data ，这样/data中产生的数据就可以持久化到本地的目录下了</li>
<li>-v /home/redis/conf/redis.conf:/etc/redis/redis.conf表示将本地/home/redis/conf/redis.conf映射为docker容器上的/etc/redis/redis.conf，这样再配合指令末尾的redis redis-server /etc/redis/redis.conf实现让docker容器运行时使用本地配置的Redis配置文件的功能了。</li>
<li>redis redis-server /etc/redis/redis.conf表示运行redis服务器程序，并且指定运行时的配置文件</li>
</ul>
<p><strong>docker ps</strong> 查看服务是否启动</p>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2022/01/wp_editor_md_4da3650a9e3246915c86b5059b99eb90.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2022/01/wp_editor_md_4da3650a9e3246915c86b5059b99eb90.jpg" alt="" /></a></p>
<h2>配置nextcloud+redis</h2>
<pre><code class="language-shell line-numbers">cd /home/nextcloud/config
</code></pre>
<p>修改 <strong>vim config.php</strong><br />
在末尾添加如下代码</p>
<pre><code class="language-shell line-numbers">'redis' =&gt; 
  array (
    'host' =&gt; '192.168.1.104',
    'port' =&gt; 6379,
    'password' =&gt; '123456',
  ),
</code></pre>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2022/01/wp_editor_md_ce07afba5cd5d1df04fdd299e27fc527.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2022/01/wp_editor_md_ce07afba5cd5d1df04fdd299e27fc527.jpg" alt="" /></a></p>
<h2>重启nextcloud</h2>
<pre><code class="language-shell line-numbers">docker restart nextcloud
</code></pre>
<p>进入redis容器查看是否已进入缓存</p>
<pre><code class="language-shell line-numbers">docker exec -it redis bash

#进入redis-cli
&gt; redis-cli
&gt; auth "123456"
&gt; keys *

</code></pre>
<p>可以看到已经有值进来了，就证明已经成功。</p>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2022/01/wp_editor_md_4565d21562301891545bd7ca1fb15702.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2022/01/wp_editor_md_4565d21562301891545bd7ca1fb15702.jpg" alt="" /></a></p>
<h2>效果</h2>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2022/01/wp_editor_md_80871d3679fa9f87664d9904f9ef8185.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2022/01/wp_editor_md_80871d3679fa9f87664d9904f9ef8185.jpg" alt="" /></a></p>
<p>颜值确实在线。</p>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2022/01/wp_editor_md_978e984c785f3bbbba03265f626a9ad6.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2022/01/wp_editor_md_978e984c785f3bbbba03265f626a9ad6.jpg" alt="" /></a></p>
<p>Nextcloud在应用市场内还有很多支持的apps，有兴趣可以多研究看看</p>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2022/01/wp_editor_md_a85a28cc58f5adf9ed2414198af83b71.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2022/01/wp_editor_md_a85a28cc58f5adf9ed2414198af83b71.jpg" alt="" /></a></p>
<p><a href="https://www.laobaiblog.top/2022/01/21/docker%e5%ae%89%e8%a3%85nextcloud%e4%b8%aa%e4%ba%ba-%e5%9b%a2%e9%98%9f%e7%bd%91%e7%9b%98%e5%b9%b6%e9%85%8d%e7%bd%aeredis%e4%bc%98%e5%8c%96/">Docker安装Nextcloud个人/团队网盘并配置redis优化</a>最先出现在<a href="https://www.laobaiblog.top">Liao&#039;s blog</a>。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>安装Protainer可视化软件管理Docker</title>
		<link>https://www.laobaiblog.top/2022/01/19/%e5%ae%89%e8%a3%85protainer%e5%8f%af%e8%a7%86%e5%8c%96%e8%bd%af%e4%bb%b6%e7%ae%a1%e7%90%86docker/</link>
		
		<dc:creator><![CDATA[大白]]></dc:creator>
		<pubDate>Wed, 19 Jan 2022 09:45:00 +0000</pubDate>
				<category><![CDATA[Docker]]></category>
		<category><![CDATA[Linux]]></category>
		<guid isPermaLink="false">https://www.laobaiblog.top/?p=80</guid>

					<description><![CDATA[<p>可视化工具Protainer 介绍 Portainer是一个可视化的容器镜像的图形管理工具，利用Po &#8230;</p>
<p><a href="https://www.laobaiblog.top/2022/01/19/%e5%ae%89%e8%a3%85protainer%e5%8f%af%e8%a7%86%e5%8c%96%e8%bd%af%e4%bb%b6%e7%ae%a1%e7%90%86docker/">安装Protainer可视化软件管理Docker</a>最先出现在<a href="https://www.laobaiblog.top">Liao&#039;s blog</a>。</p>
]]></description>
										<content:encoded><![CDATA[<h1>可视化工具Protainer 介绍</h1>
<p>Portainer是一个可视化的容器镜像的图形管理工具，利用Portainer可以轻松构建，管理和维护Docker环境。 而且完全免费，基于容器化的安装方式，方便高效部署。</p>
<p>官方网站:</p>
<pre><code class="language-shell line-numbers">https://www.portainer.io/
</code></pre>
<h1>Protainer安装说明</h1>
<p>官方安装说明：</p>
<pre><code class="language-shell line-numbers">https://www.portainer.io/installation/
</code></pre>
<h1>使用docker安装：</h1>
<p>（1）搜索镜像：</p>
<pre><code class="language-shell line-numbers">docker search Portainer
docker pull portainer/portainer
</code></pre>
<p>（2）启动Portainer</p>
<pre><code class="language-shell line-numbers">docker run -d -p 9000:9000 --restart=always -v /var/run/docker.sock:/var/run/docker.sock --name Portainer portainer/portainer
</code></pre>
<p>（3）登录Portainer</p>
<p>输入服务器地址：服务器IP:9000（如果是云服务器地址，应该登录云服务台，开放9000端口）<br />
&#8211; <strong>首次登录需要设置admin的密码</strong></p>
<ul>
<li>选择docker连接
<ul>
<li>选择Local，代表本地模式，portainer仅管理本机的docker容器</li>
<li>选择Remote，代表远程模式，名称随意，在Endpoint URL中填写docker节点的地址:docker远程端口（docker安装教程中的设置的-H 0.0.0.0:2375中的2375）</li>
</ul>
</li>
</ul>
<h1>管理docker</h1>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2022/01/wp_editor_md_d91a29f5b23a014cab83c5166f381c4a.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2022/01/wp_editor_md_d91a29f5b23a014cab83c5166f381c4a.jpg" alt="" /></a></p>
<p>进入管理台以后，可以查看本地镜像，正在运行的容器&#8230;&#8230;.</p>
<p>安装Protainer以后，包括拉取镜像，删除镜像，启动、删除容器等等命令都可以在该界面一键操作。<br />
后续自行摸索~</p>
<p><a href="https://www.laobaiblog.top/2022/01/19/%e5%ae%89%e8%a3%85protainer%e5%8f%af%e8%a7%86%e5%8c%96%e8%bd%af%e4%bb%b6%e7%ae%a1%e7%90%86docker/">安装Protainer可视化软件管理Docker</a>最先出现在<a href="https://www.laobaiblog.top">Liao&#039;s blog</a>。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Centos7安装Docker并更改默认存储文件位置</title>
		<link>https://www.laobaiblog.top/2022/01/18/centos7%e5%ae%89%e8%a3%85docker%e5%b9%b6%e6%9b%b4%e6%94%b9%e9%bb%98%e8%ae%a4%e5%ad%98%e5%82%a8%e6%96%87%e4%bb%b6%e4%bd%8d%e7%bd%ae/</link>
		
		<dc:creator><![CDATA[大白]]></dc:creator>
		<pubDate>Tue, 18 Jan 2022 08:45:22 +0000</pubDate>
				<category><![CDATA[Docker]]></category>
		<category><![CDATA[Linux]]></category>
		<guid isPermaLink="false">https://www.laobaiblog.top/?p=75</guid>

					<description><![CDATA[<p>CentOS7安装docker Docker从1.13版本之后采用时间线的方式作为版本号，分为社区版 &#8230;</p>
<p><a href="https://www.laobaiblog.top/2022/01/18/centos7%e5%ae%89%e8%a3%85docker%e5%b9%b6%e6%9b%b4%e6%94%b9%e9%bb%98%e8%ae%a4%e5%ad%98%e5%82%a8%e6%96%87%e4%bb%b6%e4%bd%8d%e7%bd%ae/">Centos7安装Docker并更改默认存储文件位置</a>最先出现在<a href="https://www.laobaiblog.top">Liao&#039;s blog</a>。</p>
]]></description>
										<content:encoded><![CDATA[<h1>CentOS7安装docker</h1>
<p>Docker从1.13版本之后采用时间线的方式作为版本号，分为社区版CE和企业版EE。</p>
<p>社区版是免费提供给个人开发者和小型团体使用的，企业版会提供额外的收费服务，比如经过官方测试认证过的基础设施、容器、插件等。</p>
<p>社区版按照stable和edge两种方式发布，每个季度更新stable版本，如17.06，17.09；每个月份更新edge版本，如17.09，17.10。</p>
<h2>一、安装docker</h2>
<p>1、Docker 要求 CentOS 系统的内核版本高于 3.10 ，查看本页面的前提条件来验证你的CentOS 版本是否支持 Docker 。</p>
<p>通过  <strong>uname -r</strong> 命令查看你当前的内核版本</p>
<pre><code class="language-shell line-numbers">uname -r
</code></pre>
<p>2、使用 root 权限登录 Centos。确保 yum 包更新到最新。</p>
<pre><code class="language-shell line-numbers">yum update
</code></pre>
<p>3、卸载旧版本(如果安装过旧版本的话)</p>
<pre><code class="language-shell line-numbers">yum remove docker  docker-common docker-selinux docker-engine
</code></pre>
<p>4、安装需要的软件包， yum-util 提供yum-config-manager功能，另外两个是devicemapper驱动依赖的</p>
<pre><code class="language-shell line-numbers">yum install -y yum-utils device-mapper-persistent-data lvm2
</code></pre>
<p>5、设置yum源</p>
<pre><code class="language-shell line-numbers">yum-config-manager --add-repo https://mirrors.ustc.edu.cn/docker-ce/linux/centos/docker-ce.repo
或
wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
或
curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo

#刷新缓存
yum makecache fast
</code></pre>
<p>6、可以查看所有仓库中所有docker版本，并选择特定版本安装</p>
<pre><code class="language-shell line-numbers">yum list docker-ce --showduplicates | sort -r
</code></pre>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2022/01/wp_editor_md_5f667595bc2650f5e7096aaec0c1cbfe.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2022/01/wp_editor_md_5f667595bc2650f5e7096aaec0c1cbfe.jpg" alt="" /></a></p>
<p>7、安装docker</p>
<pre><code class="language-shell line-numbers">yum install docker-ce 或 yum install docker-ce-18.06.3.ce
#由于repo中默认只开启stable仓库，故这里安装的是最新稳定版18.06.3.ce
yum install &lt;FQPN&gt;  # 例如：sudo yum install docker-ce-18.06.3.ce
</code></pre>
<p>8、启动并加入开机启动</p>
<pre><code class="language-shell line-numbers">systemctl start docker 
systemctl enable docker 
</code></pre>
<p>9、验证安装是否成功(有client和service两部分表示docker安装启动都成功了)</p>
<pre><code class="language-shell line-numbers">docker version 
</code></pre>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2022/01/wp_editor_md_a1e290bb56e28affb7a8547b5a0e161f.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2022/01/wp_editor_md_a1e290bb56e28affb7a8547b5a0e161f.jpg" alt="" /></a><br />
<em>（我已经自行升级到最新20版本）</em></p>
<h2>二、更改docker默认存储位置</h2>
<h3>方法一：软连接</h3>
<p>默认情况下Docker的存放位置为：/var/lib/docker<br />
可以通过下面命令查看具体位置：</p>
<pre><code class="language-shell line-numbers">docker info | grep "Docker Root Dir"
</code></pre>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2022/01/wp_editor_md_9a035a13c26c131b59720b25f17b7967.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2022/01/wp_editor_md_9a035a13c26c131b59720b25f17b7967.jpg" alt="" /></a></p>
<p>解决这个问题，最直接的方法当然是挂载分区到这个目录，但是我的数据盘还有其他东西，这肯定不好管理，所以采用修改镜像和容器的存放路径的方式达到目的。<br />
这个方法里将通过软连接来实现。<br />
首先停掉Docker服务：</p>
<pre><code class="language-shell line-numbers">systemctl stop docker
</code></pre>
<p>然后移动整个/var/lib/docker目录到目的路径：</p>
<pre><code class="language-shell line-numbers">mv /var/lib/docker  /home/docker
ln -s /home/docker  /var/lib/docker
</code></pre>
<p>这时候启动Docker时发现存储目录依旧是/var/lib/docker，但是实际上是存储在数据盘的，你可以在数据盘上看到容量变化。</p>
<h3>方法二：修改docker.service</h3>
<p>关闭docker服务</p>
<pre><code class="language-shell line-numbers">systemctl stop docker.service
</code></pre>
<p>移动数据到新的目录</p>
<pre><code class="language-shell line-numbers">mv /var/lib/docker /home/docker
</code></pre>
<p>修改docker.service文件，使用-g参数指定存储位置</p>
<pre><code class="language-shell line-numbers">vi /usr/lib/systemd/system/docker.service  
ExecStart=/usr/bin/dockerd --graph /home/docker 
</code></pre>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2022/01/wp_editor_md_12c648a2d93f432e1dc6da60f9fa6fa2.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2022/01/wp_editor_md_12c648a2d93f432e1dc6da60f9fa6fa2.jpg" alt="" /></a></p>
<p>reload配置文件</p>
<pre><code class="language-shell line-numbers">systemctl daemon-reload 
</code></pre>
<p>重启docker</p>
<pre><code class="language-shell line-numbers">systemctl restart docker.service
</code></pre>
<p>查看数据目录</p>
<pre><code class="language-shell line-numbers">docker info | grep Dir
</code></pre>
<h1>卸载docker</h1>
<pre><code class="language-shell line-numbers">yum remove docker-ce
sudo rm -rf /var/lib/docker
</code></pre>
<p><a href="https://www.laobaiblog.top/2022/01/18/centos7%e5%ae%89%e8%a3%85docker%e5%b9%b6%e6%9b%b4%e6%94%b9%e9%bb%98%e8%ae%a4%e5%ad%98%e5%82%a8%e6%96%87%e4%bb%b6%e4%bd%8d%e7%bd%ae/">Centos7安装Docker并更改默认存储文件位置</a>最先出现在<a href="https://www.laobaiblog.top">Liao&#039;s blog</a>。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Docker搭建Prometheus+grafana监控系统</title>
		<link>https://www.laobaiblog.top/2022/01/06/docker%e6%90%ad%e5%bb%baprometheusgrafana%e7%9b%91%e6%8e%a7%e7%b3%bb%e7%bb%9f/</link>
		
		<dc:creator><![CDATA[大白]]></dc:creator>
		<pubDate>Thu, 06 Jan 2022 09:55:42 +0000</pubDate>
				<category><![CDATA[Docker]]></category>
		<category><![CDATA[docker]]></category>
		<category><![CDATA[grafana]]></category>
		<category><![CDATA[Prometheus]]></category>
		<guid isPermaLink="false">https://www.laobaiblog.top/?p=47</guid>

					<description><![CDATA[<p>一、Prometheus简介 2022年5月17日更新 1、简介 Prometheus是由Sound &#8230;</p>
<p><a href="https://www.laobaiblog.top/2022/01/06/docker%e6%90%ad%e5%bb%baprometheusgrafana%e7%9b%91%e6%8e%a7%e7%b3%bb%e7%bb%9f/">Docker搭建Prometheus+grafana监控系统</a>最先出现在<a href="https://www.laobaiblog.top">Liao&#039;s blog</a>。</p>
]]></description>
										<content:encoded><![CDATA[<h1>一、Prometheus简介</h1>
<p>2022年5月17日更新</p>
<hr />
<h2>1、简介</h2>
<p>Prometheus是由SoundCloud开发的开源监控报警系统和时序列数据库(TSDB)。<br />
Prometheus使用Go语言开发，是Google BorgMon监控系统的开源版本。 2016年由Google发起Linux基金会旗下的原生云基金会(Cloud Native Computing Foundation), 将Prometheus纳入其下第二大开源项目。 Prometheus目前在开源社区相当活跃。<br />
Prometheus和Heapster(Heapster是K8S的一个子项目，用于获取集群的性能数据。)相比功能更完善、更全面。Prometheus性能也足够支撑上万台规模的集群。</p>
<h2>2、基本原理</h2>
<p>Prometheus的基本原理是通过HTTP协议周期性抓取被监控组件的状态，任意组件只要提供对应的HTTP接口就可以接入监控。不需要任何SDK或者其他的集成过程。<br />
这样做非常适合做虚拟化环境监控系统，比如VM、Docker、Kubernetes等。输出被监控组件信息的HTTP接口被叫做exporter。目前互联网公司常用的组件大部分<br />
都有exporter可以直接使用，比如Varnish、Haproxy、Nginx、MySQL、Linux系统信息(包括磁盘、内存、CPU、网络等等)。</p>
<h2>3、架构涉及</h2>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2022/01/wp_editor_md_ee176647bcd7c1faf703b7ada3c44c9e.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2022/01/wp_editor_md_ee176647bcd7c1faf703b7ada3c44c9e.jpg" alt="" /></a></p>
<h3>组件</h3>
<ul>
<li>Prometheus Sever：是Prometheus组件中的核心部分，负责实现对监控数据的获取，存储及查询。</li>
<li>Prometheus Server可以通过静态配置管理监控目标，也可以配合使用Service -Discovery的方式动态管理监控目标，并从这些监控目标中获取数据。其次Prometheus Sever需要对采集到的数据进行存储，Prometheus Server本身就是一个实时数据库，将采集到的监控数据按照时间序列的方式存储在本地磁盘当中。Prometheus Server对外提供了自定义的PromQL，实现对数据的查询以及分析。另外Prometheus Server的联邦集群能力可以使其从其他的Prometheus Server实例中获取数据。</p>
</li>
<li>Exporter：将监控数据采集的端点通过HTTP服务的形式暴露给Prometheus Server，Prometheus Server通过访问该Exporter提供的Endpoint端点，即可以获取到需要采集的监控数据。可以将Exporter分为2类：<br />
直接采集：这一类Exporter直接内置了对Prometheus监控的支持，比如cAdvisor，Kubernetes，Etcd，Gokit等，都直接内置了用于向Prometheus暴露监控数据的端点。<br />
间接采集：原有监控目标并不直接支持Prometheus，因此需要通过Prometheus提供的Client Library编写该监控目标的监控采集程序。例如：Mysql Exporter，JMX Exporter，Consul Exporter等。</p>
</li>
<li>Service Discovery：服务发现，Prometheus支持多种服务发现机制：文件，DNS，Consul,Kubernetes,OpenStack,EC2等等。基于服务发现的过程并不复杂，通过第三方提供的接口，Prometheus查询到需要监控的Target列表，然后轮询这些Target获取监控数据。</li>
<li>AlertManager：在Prometheus Server中支持基于Prom QL创建告警规则，如果满足Prom QL定义的规则，则会产生一条告警。在AlertManager从 Prometheus server 端接收到 alerts后，会进行去除重复数据，分组，并路由到对收的接受方式，发出报警。常见的接收方式有：电子邮件，pagerduty，webhook 等。</p>
</li>
<li>PushGateway：Prometheus数据采集基于Prometheus Server从Exporter pull数据，因此当网络环境不允许Prometheus Server和Exporter进行通信时，可以使用PushGateway来进行中转。通过PushGateway将内部网络的监控数据主动Push到Gateway中，Prometheus Server采用针对Exporter同样的方式，将监控数据从PushGateway pull到Prometheus Server。</p>
</li>
</ul>
<h3>工作流</h3>
<ol>
<li>Prometheus server定期从配置好的jobs或者exporters中拉取metrics，或者接收来自 Pushgateway发送过来的metrics，或者从其它的Prometheus server中拉metrics。</li>
<li>Prometheus server在本地存储收集到的metrics，并运行定义好的alerts.rules，记录新的时间序列或者向Alert manager推送警报。</li>
<li>Alertmanager根据配置文件，对接收到的警报进行处理，发出告警。</li>
<li>在图形界面中，可视化采集数据。</li>
</ol>
<h3>常用的exporter整理</h3>
<ul>
<li>node-exporter: 用来监控运算节点上的宿主机的资源信息，需要部署到所有运算节点</li>
<li>kube-state-metric：prometheus采集k8s资源数据的exporter，能够采集绝大多数k8s内置资源的相关数据，例如pod、deploy、service等等。同时它也提供自己的数据，主要是资源采集个数和采集发生的异常次数统计</li>
<li>cAdvisor （Container Advisor） ：用于监控正在运行的容器资源使用和性能信息。<br />
https://github.com/google/cadvisor</li>
<li>Blackbox_exporter：监控业务容器存活性。可以提供 http、dns、tcp、icmp 的监控数据采集</li>
</ul>
<h1>二、环境准备</h1>
<ol>
<li>docker环境3台 <strong>server: 192.168.0.219</strong>  <em>client: 192.168.0.89/192.168.0.199</em></li>
<li>监控服务器 需要安装4个服务<br />
Prometheus Server(普罗米修斯监控主服务器 )<br />
Node Exporter (收集Host硬件和操作系统信息)<br />
cAdvisor (负责收集Host上运行的容器信息)<br />
Grafana (展示普罗米修斯监控界面）</li>
<li>被监控的只需安装2个<br />
Node Exporter (收集Host硬件和操作系统信息)<br />
cAdvisor (负责收集Host上运行的容器信息)</li>
</ol>
<h1>三、部署node_exporter（server、client都安装）</h1>
<pre><code class="language-shell line-numbers">docker pull prom/node-exporter #拉取最新镜像
docker run --name=node-exporter -p 9100:9100 -itd prom/node-exporter #启动exporter
</code></pre>
<p>访问节点信息<br />
&#8211; server http://192.168.0.219:9100</p>
<ul>
<li>client http://192.168.0.89:9100</li>
<li>client http://192.168.0.199:9100<br />
<a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2022/01/wp_editor_md_1a859c769ba90f8afb4d1a5c5bce70ff.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2022/01/wp_editor_md_1a859c769ba90f8afb4d1a5c5bce70ff.jpg" alt="" /></a></li>
</ul>
<h1>四、安装prometheus server（server安装）</h1>
<pre><code class="language-shell line-numbers">mkdir -p /data/docker/prometheus/{server,client}  #根据自身服务器情况编写路径
touch /data/docker/prometheus/server/rules.yml
编辑prometheus.yml文件，添加客户端信息
</code></pre>
<p>vim /data/docker/prometheus/server/prometheus.yml</p>
<pre data-language=XML><code class="language-markup line-numbers">global:
  scrape_interval:     60s
  evaluation_interval: 60s

scrape_configs:
  - job_name: prometheus
    static_configs:
      - targets: ['localhost:9090']
        labels:
          instance: prometheus

  - job_name: 主节点
    static_configs:
      - targets: ['192.168.0.219:9100']
        labels:
          instance: 192.168.0.219

  - job_name: 副节点
    static_configs:
      - targets: ['192.168.0.89:9100']
        labels:
          instance: 192.168.0.89

  - job_name: 副节点
    static_configs:
      - targets: ['192.168.0.199:9100']
        labels:
          instance: 192.168.0.199
</code></pre>
<h2>docker启动prometheus：</h2>
<pre><code class="language-shell line-numbers">docker pull prom/prometheus

docker run --name prometheus -p 9090:9090 --restart=always \
-v /data/docker/prometheus/server/prometheus.yml:/etc/prometheus/prometheus.yml \
-v /data/docker/prometheus/server/rules.yml:/etc/prometheus/rules.yml \
-itd prom/prometheus \
--config.file=/etc/prometheus/prometheus.yml \
--web.enable-lifecycle

注：启动时加上
--web.enable-lifecycle： 启用远程热加载配置文件
--config.file：启动时加载配置文件
</code></pre>
<p><em>浏览器访问prometheus：http://192.168.0.219:9090</em></p>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2022/01/wp_editor_md_6a09ba0590416108ede20a5d768c8ab7.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2022/01/wp_editor_md_6a09ba0590416108ede20a5d768c8ab7.jpg" alt="" /></a></p>
<h1>五、安装Grafana展示（server安装）</h1>
<p>Grafana是用于可视化大型测量数据的开源程序，它提供了强大和优雅的方式去创建、共享、浏览数据。</p>
<h2>1、先启动测试grafana</h2>
<pre><code class="language-shell line-numbers">docker pull grafana/grafana
docker run --name=grafana -p 3000:3000 -itd grafana/grafana
#将配置文件复制到宿主机：
修改配置文件grafana.ini，配置smtp邮件报警信息（报警会用到）
docker cp grafana:/etc/grafana/grafana.ini /data/docker/prometheus/grafana/
docker rm -f grafana
#防止grafana生成文件权限受阻，全开放
chmod 777 /data/docker/prometheus/* 
</code></pre>
<h2>2、正式启动grafana</h2>
<pre><code class="language-shell line-numbers">docker run -p 3000:3000 --name grafana  --restart=always \
-v /data/docker/prometheus/grafana/grafana.ini:/etc/grafana/grafana.ini \
-v /data/docker/prometheus/grafana/data:/var/lib/grafana \
-e "GF_SECURITY_ADMIN_PASSWORD=XXXXX" \
-itd grafana/grafana

注：-e "GF_SECURITY_ADMIN_PASSWORD=XXXXX" 
是设置grafana登陆页面的密码,如不添加这条，默认账号密码为admin/admin
</code></pre>
<p>访问：http://192.168.0.219:3000              账号密码为：admin/XXXXX</p>
<h2>3、添加prometheus数据源</h2>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2022/01/wp_editor_md_3289481a2440244f72f5c4d1ec8bbaf7.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2022/01/wp_editor_md_3289481a2440244f72f5c4d1ec8bbaf7.jpg" alt="" /></a></p>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2022/01/wp_editor_md_4325d751d01d18bb395c7b4ebd1bf4ad.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2022/01/wp_editor_md_4325d751d01d18bb395c7b4ebd1bf4ad.jpg" alt="" /></a></p>
<h2>4、添加模板文件：（监控主机信息）</h2>
<p>官网模板地址：<a class="wp-editor-md-post-content-link" href="https://grafana.com/grafana/dashboards/">Dashboards | Grafana Labs</a><br />
根据自己需求下载网址中模板，下载到本地后，导入grafana</p>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2022/01/wp_editor_md_c39c87faaa21f885ec2c2807faefa196.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2022/01/wp_editor_md_c39c87faaa21f885ec2c2807faefa196.jpg" alt="" /></a></p>
<p>也可以导入id号</p>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2022/01/wp_editor_md_2436e45ea60c9641e6aade82592fbdf7.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2022/01/wp_editor_md_2436e45ea60c9641e6aade82592fbdf7.jpg" alt="" /></a></p>
<p>选择Prometheus</p>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2022/01/wp_editor_md_7ad12fb6aaca03807d05a9a1a9757e61.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2022/01/wp_editor_md_7ad12fb6aaca03807d05a9a1a9757e61.jpg" alt="" /></a></p>
<h2>5、展示</h2>
<p>在面板上可选择节点查看</p>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2022/01/wp_editor_md_f488320dd96cbef28e2fee391376728c.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2022/01/wp_editor_md_f488320dd96cbef28e2fee391376728c.jpg" alt="" /></a></p>
<p><strong>未完待续</strong></p>
<p><a href="https://www.laobaiblog.top/2022/01/06/docker%e6%90%ad%e5%bb%baprometheusgrafana%e7%9b%91%e6%8e%a7%e7%b3%bb%e7%bb%9f/">Docker搭建Prometheus+grafana监控系统</a>最先出现在<a href="https://www.laobaiblog.top">Liao&#039;s blog</a>。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Docker安装WordPress并添加https访问</title>
		<link>https://www.laobaiblog.top/2022/01/06/docker%e5%ae%89%e8%a3%85wordpress%e5%b9%b6%e6%b7%bb%e5%8a%a0https%e8%ae%bf%e9%97%ae/</link>
		
		<dc:creator><![CDATA[大白]]></dc:creator>
		<pubDate>Thu, 06 Jan 2022 07:15:52 +0000</pubDate>
				<category><![CDATA[Docker]]></category>
		<guid isPermaLink="false">https://www.laobaiblog.top/?p=41</guid>

					<description><![CDATA[<p>搭建个人博客 一、安装WordPress 安装docker-compose 以二进制方式进行安装，首 &#8230;</p>
<p><a href="https://www.laobaiblog.top/2022/01/06/docker%e5%ae%89%e8%a3%85wordpress%e5%b9%b6%e6%b7%bb%e5%8a%a0https%e8%ae%bf%e9%97%ae/">Docker安装WordPress并添加https访问</a>最先出现在<a href="https://www.laobaiblog.top">Liao&#039;s blog</a>。</p>
]]></description>
										<content:encoded><![CDATA[<p><em>搭建个人博客</em></p>
<h1>一、安装WordPress</h1>
<h2>安装docker-compose</h2>
<p>以二进制方式进行安装，首先在<a class="wp-editor-md-post-content-link" href="https://github.com/docker/compose/releases">github</a>中查看当前最新版本为<strong>1.29.2</strong>，如需更改版本，在下列代码中更改对应版号。<br />
<a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2022/01/wp_editor_md_0bf34159c6bbd36e7dcd9123182819f9.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2022/01/wp_editor_md_0bf34159c6bbd36e7dcd9123182819f9.jpg" alt="" /></a></p>
<pre><code class="language-shell line-numbers">[root@instance]# curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-<span class="katex math inline">(uname -s)-</span>(uname -m)" -o /usr/local/bin/docker-compose
[root@instance]# chmod +x /usr/local/bin/docker-compose
[root@instance]# ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
[root@instance]# docker-compose --version
</code></pre>
<p>安装好之后 <strong>docker-compose &#8211;version</strong> 查看信息<br />
<a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2022/01/wp_editor_md_3911c4eb1e5bd15785e4170618dbd7db.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2022/01/wp_editor_md_3911c4eb1e5bd15785e4170618dbd7db.jpg" alt="" /></a></p>
<h2>安装docker</h2>
<p>1、<a class="wp-editor-md-post-content-link" href="https://download.docker.com/linux/static/stable/x86_64/">官网下载</a>，创建对应目录，下载docker最新包解压。</p>
<pre><code class="language-shell line-numbers">[root@insta]# mkdir -p /root/download
[root@insta]# cd /root/download
[root@insta]# wget https://download.docker.com/linux/static/stable/x86_64/docker-20.10.6.tgz
[root@insta]# tar -xvf docker-20.10.6.tgz
</code></pre>
<p>2、分发二进制文件到所有 worker 节点：</p>
<pre><code class="language-shell line-numbers">[root@insta]# mkdir -p /opt/docker/bin
[root@insta]# cp docker/*  /opt/docker/bin/
[root@insta]# chmod +x /opt/docker/bin/*
</code></pre>
<p>编辑环境变量：</p>
<pre><code class="language-shell line-numbers">[root@insta]# vim /etc/profile
 #添加变量   export PATH=/opt/docker/bin:$PATH
[root@insta]# source /etc/profile
</code></pre>
<p>3、创建和分发 systemd unit 文件</p>
<p>注意更改<strong>WorkingDirectory</strong>目录，自行定义</p>
<pre><code class="language-shell line-numbers">[root@insta]# cd /root/download
[root@insta]# cat &gt; docker.service &lt;&lt;"EOF"
[Unit]
Description=Docker Application Container Engine
Documentation=http://docs.docker.io

[Service]
WorkingDirectory=/data/docker
Environment="PATH=/opt/docker/bin:/bin:/sbin:/usr/bin:/usr/sbin"
ExecStart=/opt/docker/bin/dockerd 
ExecReload=/bin/kill -s HUP $MAINPID
Restart=on-failure
RestartSec=5
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
Delegate=yes
KillMode=process

[Install]
WantedBy=multi-user.target
EOF
</code></pre>
<ul>
<li>EOF 前后有双引号，这样 bash 不会替换文档中的变量，如$DOCKER_NETWORK_OPTIONS；</li>
<li>dockerd 运行时会调用其它 docker 命令，如 docker-proxy，所以需要将 docker 命令所在的目录加到 PATH 环境变量中；</li>
<li>docker 需要以 root 用于运行；</li>
<li>docker 从 1.13 版本开始，可能将 iptables FORWARD chain的默认策略设置为DROP，从而导致 ping 其它 Node 上的 Pod IP 失败，遇到这种情况时，需要手动设置策略为 ACCEPT：</li>
</ul>
<pre><code class="language-shell line-numbers">[root@insta]# sudo iptables -P FORWARD ACCEPT
</code></pre>
<p>并且把以下命令写入 /etc/rc.local 文件中，防止节点重启<strong>iptables FORWARD chain的默认策略又还原为DROP</strong></p>
<pre><code class="language-shell line-numbers">[root@insta]# vim /etc/rc.local
/sbin/iptables -P FORWARD ACCEPT
:wq
</code></pre>
<p>分发 systemd unit 文件到宿主机器:</p>
<pre><code class="language-shell line-numbers">[root@insta]# cp docker.service  /etc/systemd/system/
</code></pre>
<p>4、使用国内的仓库镜像服务器以加快 pull image 的速度，同时增加下载的并发数 (需要重启 dockerd 生效，目录自行定义)：</p>
<pre><code class="language-shell line-numbers">[root@insta]# cd /root/download
[root@insta]# mkdir -p /data/docker/data
[root@insta]# mkdir -p /data/docker/exec
[root@insta]# cat &gt; daemon.json &lt;&lt;EOF
{
    "registry-mirrors": [ "https://477njxek.mirror.aliyuncs.com", "https://registry.docker-cn.com/", "https://hub-mirror.c.163.com", "https://docker.mirrors.ustc.edu.cn"],
    "insecure-registries": [],
    "max-concurrent-downloads": 20,
    "live-restore": true,
    "max-concurrent-uploads": 10,
    "debug": true,
    "data-root": "/data/docker/data",
    "exec-root": "/data/docker/exec",
    "log-opts": {
      "max-size": "100m",
      "max-file": "5"
    }
}
EOF
</code></pre>
<p>分发 docker 配置文件到所有宿主机节点：</p>
<pre><code class="language-shell line-numbers">[root@insta]# cd /root/download
[root@insta]# mkdir -p  /etc/docker/
[root@insta]# cp daemon.json /etc/docker/
</code></pre>
<p>5、启动docker服务</p>
<pre><code class="language-shell line-numbers">[root@insta]# systemctl stop firewalld &amp;&amp; systemctl disable firewalld
[root@insta]# /usr/sbin/iptables -F &amp;&amp; /usr/sbin/iptables -X &amp;&amp; /usr/sbin/iptables -F -t nat &amp;&amp; /usr/sbin/iptables -X -t nat
[root@insta]# /usr/sbin/iptables -P FORWARD ACCEPT
[root@insta]# systemctl daemon-reload &amp;&amp; systemctl enable docker &amp;&amp; systemctl restart docker
</code></pre>
<ul>
<li>关闭 firewalld(centos7)/ufw(ubuntu16.04)，否则可能会重复创建 iptables 规则；</li>
<li>清理旧的 iptables rules 和 chains 规则；</li>
<li>开启 docker0 网桥下虚拟网卡的 hairpin 模式;</li>
</ul>
<p>6、添加软连接</p>
<pre><code class="language-shell line-numbers">[root@insta]# ln -s /opt/docker/bin/docker /usr/bin/docker
</code></pre>
<p>7、检查docker服务状态：<strong>docker info</strong><br />
<a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2022/01/wp_editor_md_467cd4e307260d77ba3a8efc2d92d6bf.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2022/01/wp_editor_md_467cd4e307260d77ba3a8efc2d92d6bf.jpg" alt="" /></a></p>
<h2>安装mysql、WordPress</h2>
<pre><code class="language-shell line-numbers">[root@instance]# docker pull mysql:5.7
[root@instance]# docker pull wordpress:latest
</code></pre>
<h2>使用yml启动</h2>
<p>1、编写docker-wordpress.yml，部分参数解释，注意创建的数据库用户密码，<strong>数据库账户密码前都有空格符</strong>。</p>
<pre><code class="language-shell line-numbers">[root@instance]# vim docker-wordpress.yml
version: '3.3'
services:
  db:
     image: mysql:5.7
     container_name: "wordpress_mysql"
     ports:
       - "3307:3306"
     volumes:
       - <span class="katex math inline">PWD/data:/var/lib/mysql
     restart: always
     environment:
       MYSQL_ROOT_PASSWORD: 自定义数据库root密码
       MYSQL_DATABASE: wordpress
       MYSQL_USER: laobai
       MYSQL_PASSWORD: 自定义laobai用户密码
  wordpress:
     depends_on:
       - db
     image: wordpress:latest
     container_name: "wordpress"
     ports:
       - "80:80"       - "443:443"
     restart: always
     environment:
       WORDPRESS_DB_HOST: db:3306
       WORDPRESS_DB_USER: laobai
       WORDPRESS_DB_PASSWORD: 与上面相通的laobai用户密码
       WORDPRESS_DB_NAME: wordpress
       WORDPRESS_WPLANG: zh-CN
     volumes:
       -</span>PWD/wp-content:/var/www/html/wp-content
       - $PWD/ssl:/ssl
</code></pre>
<ul>
<li>ports：映射端口</li>
<li>volumes：映射容器目录</li>
<li>restart: always 自动重启</li>
<li>– $PWD/ssl:/ssl 方便再容器外添加ssl证书</li>
</ul>
<p>2、启动yml</p>
<pre><code class="language-shell line-numbers">[root@instance]# docker-compose -f docker-wordpress.yml up -d   #后台启动
</code></pre>
<p><strong>访问IP+80</strong>即可访问到博客，请注意服务器是否开放80/443端口。<br />
<a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2022/01/wp_editor_md_aec369849ad34cbef9ea01c07c459b6c.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2022/01/wp_editor_md_aec369849ad34cbef9ea01c07c459b6c.jpg" alt="" /></a></p>
<h1>二、添加https协议</h1>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2022/01/wp_editor_md_4e9c92084625c2902b5c487e4840e5ae.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2022/01/wp_editor_md_4e9c92084625c2902b5c487e4840e5ae.jpg" alt="" /></a></p>
<p>1、进入wordpress容器，加载apache的ssl模块，修改证书和私钥路径。因为我已经按照过ssl模块，这里显示已存在。</p>
<pre><code class="language-shell line-numbers">[root@instance]# docker exec -it wordpress bash
root@cd5205193f22:/var/www/html# a2enmod ssl
</code></pre>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2022/01/wp_editor_md_358f7481157b2b8d837c5ea308523cbd.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2022/01/wp_editor_md_358f7481157b2b8d837c5ea308523cbd.jpg" alt="" /></a></p>
<p><strong>编辑容器中的ssl文件</strong></p>
<pre><code class="language-shell line-numbers">root@cd5205193f22:/var/www/html# vim /etc/apache2/sites-available/default-ssl.conf
</code></pre>
<p>找到<strong>SSLCertificateFile和SSLCertificateKeyFile</strong>这两个配置项，改成把私钥和证书（ssl证书我是在腾讯云申请的一年免费域名证书）挂载进容器里面后的路径，这里都在/ssl/目录下。修改后为：<br />
(<strong>这是以前的域名</strong>)<br />
<a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2022/01/wp_editor_md_f499b677ffa928063033e12a44de7e90.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2022/01/wp_editor_md_f499b677ffa928063033e12a44de7e90.jpg" alt="" /></a><br />
在容器中或许不能使用vi/vim，可以将文件从容器中拷贝出来改，再拷贝进去（docker cp…….）<br />
让ssl配置被apache加载</p>
<pre><code class="language-shell line-numbers">root@cd5205193f22:/var/www/html# ln -s /etc/apache2/sites-available/default-ssl.conf /etc/apache2/sites-enabled/default-ssl.conf
</code></pre>
<p>退出容器，并重启。</p>
<pre><code class="language-shell line-numbers">[root@instance]# docker restart wordpress
</code></pre>
<p>强制http请求转到https<br />
编辑 <strong>/etc/apache2/sites-available/000-default.conf</strong>，找到<VirtualHost *:80> </VirtualHost>标签中增加下面的配置：</p>
<pre><code class="language-shell line-numbers">&lt;Directory "/var/www/html"&gt; 
    RewriteEngine   on
    RewriteBase /
    # FORCE HTTPS
    RewriteCond %{HTTPS} !=on
    RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R,L]
&lt;/Directory&gt;
</code></pre>
<p><a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2022/01/wp_editor_md_0fff96538ca350591ab3f7a62932571a.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2022/01/wp_editor_md_0fff96538ca350591ab3f7a62932571a.jpg" alt="" /></a></p>
<p>退出容器，并重启。</p>
<pre><code class="language-shell line-numbers">[root@instance]# docker restart wordpress
</code></pre>
<p>最后，查看是否已更换成https协议访问。<br />
<a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/wp-content/uploads/2022/01/wp_editor_md_98c877ef8ce915160857418634899bc2.jpg"><img decoding="async" src="https://www.laobaiblog.top/wp-content/uploads/2022/01/wp_editor_md_98c877ef8ce915160857418634899bc2.jpg" alt="" /></a></p>
<p>本篇文章篇幅较长，主要是设计到docker、docker-compose、ssl等安装配置。<br />
更多内容可进入<a class="wp-editor-md-post-content-link" href="https://www.laobaiblog.top/">我的博客</a>，文章可转载，需标明原博地址。</p>
<h2>Docker小知识持续更新</h2>
<pre><code class="language-shell line-numbers">docker inspect container_name/id | grep Mounts -A 20 #查看docker容器挂载目录
docker inspect NAMES # 查看容器所有状态信息；
docker inspect --format='{{.NetworkSettings.IPAddress}}' ID/NAMES # 查看 容器ip 地址
docker inspect --format '{{.Name}} {{.State.Running}}' NAMES # 容器运行状态
docker top NAMES #查看进程

</code></pre>
<p><a href="https://www.laobaiblog.top/2022/01/06/docker%e5%ae%89%e8%a3%85wordpress%e5%b9%b6%e6%b7%bb%e5%8a%a0https%e8%ae%bf%e9%97%ae/">Docker安装WordPress并添加https访问</a>最先出现在<a href="https://www.laobaiblog.top">Liao&#039;s blog</a>。</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
