国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

拾壹博客拆解,docker環(huán)境部署加自動化發(fā)布(一)

這篇具有很好參考價值的文章主要介紹了拾壹博客拆解,docker環(huán)境部署加自動化發(fā)布(一)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

前言

一直想搭建一個屬于自己的博客,之前使用過Wordpress,但是覺得太笨重了,很多功能都不是自己需要的,然后有一天摸魚摸到了拾壹博客。感覺這個項目雖然功能少,但是基本上架子都有了,自己想要的功能可以一邊學習一邊實踐,就想從頭部署并且改造一下這個項目。同時,順便的,也把改造的過程記錄成博客沉淀下來。
后續(xù)的想法是:

  1. spring boot改造成spring cloud alibaba的分布式服務(wù);
  2. 使用netty + webrtc搭建視頻聊天室;
  3. 結(jié)合kubernets進行集群管理;
  4. 爬蟲 + hadoop集群進行數(shù)據(jù)統(tǒng)計分析展示;
  5. more
    以及,歡迎光臨安心小站~

環(huán)境分析

1、需求軟件

  • jdk1.8
  • redis
  • mysql
  • elasticsearch
  • nginx
  • minio:作者使用的文件存儲方式有本地、七牛云、阿里云,但是個人更喜歡minio,本地管理并且可以搭建集群。

2、部署環(huán)境

服務(wù)器名稱 系統(tǒng) 配置 安裝軟件 說明
web服務(wù)器 centos7.6 2核2G nginx 部署前端頁面
服務(wù)端服務(wù)器 centos7.6 2核8G jdk1.8、redis、mysql、elasticsearch 部署后端服務(wù)

拾壹博客拆解,docker環(huán)境部署加自動化發(fā)布(一)

配置部署環(huán)境

所有相關(guān)的工具暫時先放置到docker中,所以首先安裝docker與docker-compose

1、安裝docker

#自動化腳本安裝docker
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun

systemctl daemon-reload

systemctl restart docker.service

#查看版本號
docker -v

#docker compose安裝
curl -L https://get.daocloud.io/docker/compose/releases/download/v2.4.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose

#docker compose 授權(quán)
chmod +x docker compose

#查看版本號
docker-compose -version

2、安裝mysql-5.7

#docker鏡像拉取mysql
docker pull mysql:5.7

#正常情況下執(zhí)行
docker run -p 3306:3306 --name mysql \
-v /mydata/mysql/log:/var/log/mysql \
-v /mydata/mysql/data:/var/lib/mysql \
-v /mydata/mysql/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
-d mysql:5.7

說真的,mysql裝了N次第一次遇到啟動失敗的情況。docker ps下發(fā)現(xiàn)容器未啟動,執(zhí)行docker logs mysql后發(fā)現(xiàn)報錯。

[root@centos30 mysql]# docker logs mysql
2022-11-14 02:52:54+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 5.7.40-1.el7 started.
2022-11-14 02:52:54+00:00 [ERROR] [Entrypoint]: mysqld failed while attempting to check config
        command was: mysqld --verbose --help --log-bin-index=/tmp/tmp.sZu8ONKkC5
        mysqld: Can't read dir of '/etc/mysql/conf.d/' (Errcode: 2 - No such file or directory)
mysqld: [ERROR] Fatal error in defaults handling. Program aborted!

網(wǎng)上試了幾個方法不行,那么只能用魔法打敗魔法了,使用docker-compose啟動mysql。

#創(chuàng)建文件docker-compose-mysql.yml
vim docker-compose-mysql.yml

#文件內(nèi)容
version: '3'
services:
  mysql:
    image: mysql:5.7
    container_name: mysql
    command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: root #設(shè)置root帳號密碼
    ports:
      - 3306:3306
    volumes:
      - /mydata/mysql/data/db:/var/lib/mysql #數(shù)據(jù)文件掛載
      - /mydata/mysql/data/conf:/etc/mysql/conf.d #配置文件掛載
      - /mydata/mysql/log:/var/log/mysql #日志文件掛載


#啟動docker-compose
docker-compose -f docker-compose-mysql.yml up -d

拾壹博客拆解,docker環(huán)境部署加自動化發(fā)布(一)

#開啟賬號遠程訪問權(quán)限
#查看所有用戶
SELECT * FROM USER;

#如果不存在 'root'@'%' 賬號則添加遠程登錄用戶
CREATE USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';

#授權(quán)遠程連接
grant all privileges on *.* to 'root'@'%' identified by '123456' with grant option;
flush privileges;

3、安裝redis

docker pull redis:6.0.6

docker run -p 6379:6379 --name redis \
-v /mydata/redis/data:/data \
-v /mydata/redis/conf/redis.conf:/etc/redis/redis.conf \
-d redis redis-server /etc/redis/redis.conf

各版本redis對應配置文件地址:http://download.redis.io/releases/
修改redis.conf

  • 注釋掉 bind 127.0.0.1
  • 修改 protected-modeno

4、安裝minio

docker pull minio/minio

#掛載本地文件再配置Access和Secret密鑰
docker run -i -t -p 9000:9000 -p 9001:9001 --name minio -e "MINIO_ROOT_USER=admin" -e "MINIO_ROOT_PASSWORD=12345678"  -v /mydata/minio/data:/data -v /mydata/minio/config:/root/.minio minio/minio server /data --console-address ":9001"

#ctrl + P + Q退出控制臺不退出應用

訪問:http://192.168.2.30:9001 查看控制臺

5、安裝elasticsearch + kibana

配置docker-compose文件

version: '3'

# 網(wǎng)橋es -> 方便相互通訊
networks:
  es:

services:
  elasticsearch:
    image: registry.cn-hangzhou.aliyuncs.com/zhengqing/elasticsearch:7.14.1      # 原鏡像`elasticsearch:7.14.1`
    container_name: elasticsearch             # 容器名為'elasticsearch'
    restart: unless-stopped                           # 指定容器退出后的重啟策略為始終重啟,但是不考慮在Docker守護進程啟動時就已經(jīng)停止了的容器
    volumes:                                  # 數(shù)據(jù)卷掛載路徑設(shè)置,將本機目錄映射到容器目錄
      - "./data:/mydata/elasticsearch/data"
      - "./logs:/mydata/elasticsearch/logs"
      - "./config/elasticsearch.yml:/mydata/elasticsearch/config/elasticsearch.yml"
#      - "./config/jvm.options:/usr/share/elasticsearch/config/jvm.options"
    environment:                              # 設(shè)置環(huán)境變量,相當于docker run命令中的-e
      TZ: Asia/Shanghai
      LANG: en_US.UTF-8
      discovery.type: single-node
      ES_JAVA_OPTS: "-Xmx512m -Xms512m"
      ELASTIC_PASSWORD: "123456" # elastic賬號密碼
    ports:
      - "9200:9200"
      - "9300:9300"
    networks:
      - es

  kibana:
    image: registry.cn-hangzhou.aliyuncs.com/zhengqing/kibana:7.14.1       # 原鏡像`kibana:7.14.1`
    container_name: kibana
    restart: unless-stopped
    volumes:
      - ./kibana/config/kibana.yml:/mydata/elasticsearch/kibana/config/kibana.yml
    ports:
      - "5601:5601"
    depends_on:
      - elasticsearch
    links:
      - elasticsearch
    networks:
      - es

執(zhí)行docker-compose -f docker-compose-elasticsearch.yml up -d啟動
訪問:http://192.168.2.30:9200/ 查看es版本信息
拾壹博客拆解,docker環(huán)境部署加自動化發(fā)布(一)

http://192.168.2.30:5601/ 查看kibana

6、安裝nginx

#拉取nginx鏡像
docker pull nginx

#-v掛載到本地文件夾
docker run --name nginx -d -p 80:80 -p 443:443 -v /my/nginx/nginx.conf:/etc/nginx/nginx.conf -v /home/nginx/html:/etc/nginx/html -v /home/nginx/log:/var/log/nginx -v /home/nginx/cert:/etc/nginx/cert -v /home/nginx/conf.d:/etc/nginx/conf.d nginx
監(jiān)聽80的配置
server {
    listen       80;
    # listen  [::]:80;
    server_name  域名;

    location / {
        proxy_pass              http://ip:port;  # 本地程序代理
        proxy_redirect          off;
        proxy_set_header        Host $host;
        proxy_set_header        X-Real-IP $remote_addr;
        proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}
配置ssl證書
server {
    listen       443 ssl;
    server_name  blog.dinganwang.top;
    
    ssl_certificate      cert/dinganwang.top.pem;
    ssl_certificate_key  cert/dinganwang.top.key;
    
    ssl_session_cache    shared:SSL:1m;
    ssl_session_timeout  5m;
    
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #表示使用的TLS協(xié)議的類型。
    ssl_prefer_server_ciphers  on;
    
    location ^~/ {
        proxy_pass http://dinganwang.top/;
    }
}

證書放在cert映射的文件夾下
PS:原來是沒有SSL證書的,配置好之后調(diào)試一直沒有反應,包括log也沒有打印,最后發(fā)現(xiàn)是443端口沒有映射?。?!

7、安裝jenkins

發(fā)布需要,先裝個jenkins

#首先要有java環(huán)境
#拉取鏡像
docker pull jenkins/jenkins:lts

#新建工作目錄
mkdir /home/jenkins

#給ID為1000的用戶添加操作權(quán)限
chown -R 1000:1000 /home/jenkins

#啟動
docker run -itd -p 9090:8080 -p 50000:50000 --name jenkins --privileged=true -v /home/jenkins:/var/jenkins_home jenkins/jenkins:lts

#查看docker日志,在最下方找到初始密碼
#Please use the following password to proceed to installation:
docker logs jenkins

訪問:http://192.168.2.30:9090/
在彈出頁面輸入初始密碼,選擇推薦的插件安裝后等待插件安裝完成,最后注冊一個管理用戶就完成。正式發(fā)布jenkins的配置在下文再介紹。

8、端口總覽

端口號 說明
3306 mysql訪問端口
6379 redis訪問端口
9000 minio訪問端口
9001 minio管理頁面
9200 elasticsearch外部訪問端口
9300 elasticsearch集群通訊端口
5601 kibana管理頁面
80、443 nginx監(jiān)聽端口
9090 jenkins管理頁面(從8080映射)
50000 jenkins JNLP服務(wù)端口

啟動項目

1、后端項目

先通過jar包啟動,確定配置無誤。

編寫docker-compose啟動文件
  1. docker-compose.yml
version: '3'

services:
  blog-server:
    image: blog-server:latest # 指定基礎(chǔ)鏡像
    container_name: blog-server # 容器名稱
    privileged: true
    restart: always # 自動啟動服務(wù)器炸了也沒事,重啟服務(wù)器自動啟動
    volumes:
      - "/mydata/workspace/blog/logs:/log" #日志掛載
      - "/mydata/workspace/blog:/opt"
    environment:
      - "TZ=Asia/Shanghai"
    ports:
      - 1216:8800 #端口映射

  1. Dockerfile
FROM openjdk:8u212-jre

COPY blog-server.jar /project/blog-server.jar
ENTRYPOINT ["java", "-Xms1024m", "-Xmx2048m", "-XX:-UseGCOverheadLimit","-jar", "/opt/blog-server.jar", "--spring.profiles.active=app"]
  1. deploy.sh
#!/bin/bash
cd /mydata/workspace/blog
docker-compose down
docker rmi blog-server:latest
docker build -t blog-server .
docker-compose up -d

**chmod +x deploy.sh **給deploy.sh授權(quán)。

啟動jar包
  1. 先修改application.yml文件中各個工具的連接地址。
  2. 使用maven打包jar文件。
  3. jar包與docker-compose啟動文件放在同一文件夾下。
  4. 執(zhí)行 ./deploy.sh。

訪問http://192.168.2.30:1216/dingx/doc.html查看是否啟動成功
拾壹博客拆解,docker環(huán)境部署加自動化發(fā)布(一)

配置jenkins啟動
  1. 點擊系統(tǒng)管理,再點擊插件管理。在打開的頁面中點擊可選插件,安裝Maven Integration、Publish Over SSH,插件安裝后需重啟jenkins。

拾壹博客拆解,docker環(huán)境部署加自動化發(fā)布(一)

  1. 系統(tǒng)配置:一直下拉直到SSH Servers,配置目標服務(wù)器。因為jenkins是部署在docker中,雖然都是在 **192.168.2.30 **機器上,但是容器跟外部環(huán)境是隔離的,所以不能直接執(zhí)行Shell命令。

拾壹博客拆解,docker環(huán)境部署加自動化發(fā)布(一)
全局工具配置:自動安裝Maven、NodeJS(盡量在17以下,不然有插件會報錯)

拾壹博客拆解,docker環(huán)境部署加自動化發(fā)布(一)

  1. 點擊新建任務(wù)后,輸入任務(wù)名稱,選擇構(gòu)建一個maven項目,點擊確定。

拾壹博客拆解,docker環(huán)境部署加自動化發(fā)布(一)

  1. jenkins配置

拾壹博客拆解,docker環(huán)境部署加自動化發(fā)布(一)

源碼管理必然是git,Credentials憑據(jù)自行添加,類型使用 **Username with password **配置好gitee的用戶名密碼即可,當然也可以配置SSH登錄。
拾壹博客拆解,docker環(huán)境部署加自動化發(fā)布(一)

最后連接服務(wù)器配置。
PS:先寫在前面,遇到一個卡了兩小時的坑。Exec command內(nèi)填入:

mv /mydata/workspace/blog/shiyi-blog.jar /mydata/workspace/blog/blog-server.jar
sh /mydata/workspace/blog/deploy.sh

拾壹博客拆解,docker環(huán)境部署加自動化發(fā)布(一)

構(gòu)建成功

拾壹博客拆解,docker環(huán)境部署加自動化發(fā)布(一)

2、前端項目

本地打包發(fā)布
  1. 修改.env.production文件中訪問地址。
  2. 在項目中運行 npm run build 進行打包,打包文件放到nginx下的html文件夾中。

PS:管理端頁面運行的時候異常,修改babel.config.js文件下的presets。不保證適用于任何人,沒準都沒報錯呢。

presets: [
    [ "@vue/app", { useBuiltIns: "entry" } ] 
],
  1. 高版本nginx配置nginx.conf,直接在conf.d文件夾下新建blog.conf
server {
  	#監(jiān)聽80端口
    listen       80;
    server_name  blog.dinganwang.top;
   
    gzip on;
    gzip_comp_level 3;
    gzip_min_length 1k;
    gzip_vary on;
    gzip_types text/plain text/css text/xml text/javascript application/x-javascript application/xml image/jpeg image/gif image/png application/javascript;

    #access_log  /var/log/nginx/host.access.log  main;

    client_max_body_size 500M;

    # web端
    location / {
        root    html/web;
        index  index.html index.htm;
    }

    # 管理端
    location ^~/admin {
        alias    html/admin;
        index  index.html index.htm;
    }

    location ^~/blog {
        index doc.html;
        proxy_pass              代理的后端接口地址;  # 本地程序代理
        proxy_redirect          off;
        proxy_set_header        Host $host;
        proxy_set_header        X-Real-IP $remote_addr;
        proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

  1. 直接訪問。

拾壹博客拆解,docker環(huán)境部署加自動化發(fā)布(一)
拾壹博客拆解,docker環(huán)境部署加自動化發(fā)布(一)

配置jenkins發(fā)布
  1. 如果是初次發(fā)布請選擇構(gòu)建一個自由風格的軟件項目,否則直接復制。

拾壹博客拆解,docker環(huán)境部署加自動化發(fā)布(一)
2. 配置環(huán)境

拾壹博客拆解,docker環(huán)境部署加自動化發(fā)布(一)
拾壹博客拆解,docker環(huán)境部署加自動化發(fā)布(一)

Builds Steps的不同腳本

web

echo "----------------start install and build------------------"
rm -rf dist
npm cache clear --force
npm config set registry http://registry.npm.taobao.org
npm install
npm run build
mv dist blogweb
tar -zcvf blogweb.tar.gz blogweb
rm -rf blogweb
rm -rf node_modules
echo "----------------start send files and unpackage------------------"

admin

echo "----------------start install and build------------------"
rm -rf dist
npm config set registry http://registry.npm.taobao.org
npm config set sass_binary_site=https://npm.taobao.org/mirrors/node-sass
npm install --no-optional --no-shrinkwrap --no-package-lock
npm run build
mv dist blogadmin
tar -zcvf blogadmin.tar.gz blogadmin
rm -rf blogweb
rm -rf node_modules
echo "----------------start send files and unpackage------------------"

最終成果

拾壹博客拆解,docker環(huán)境部署加自動化發(fā)布(一)文章來源地址http://www.zghlxwxcb.cn/news/detail-401174.html

到了這里,關(guān)于拾壹博客拆解,docker環(huán)境部署加自動化發(fā)布(一)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 從零用VitePress搭建博客教程(7) -– 如何用Github Actions自動化部署到Github Pages?

    從零用VitePress搭建博客教程(7) -– 如何用Github Actions自動化部署到Github Pages?

    接上一節(jié): 從零用VitePress搭建博客教程(6) -– 第三方組件庫的使用和VitePress搭建組件庫文檔? 我們搭建完成vitePress后,那么接下來就是如何部署到線上服務(wù)器,這里使用Github Pages,免得自己購買服務(wù)器,當然你也可以自己購買服務(wù)器來部署(比如阿里云服務(wù)器)。 在部署之

    2024年02月08日
    瀏覽(37)
  • Docker 自動化部署(實踐)

    Docker 自動化部署(實踐)

    docker search jenkins查看需要的jenkins鏡像源 docker pull jenkins/jenkins 拉取jenkins鏡像 docker images查看下載的鏡像源 docker ps 查看包含啟動以及未啟動的容器 docker ps -a查看啟動的容器 docker rm 容器id/容器名稱 刪除容器 docker rm -f 容器id/容器名稱 刪除容器(強制刪除容器,運行狀態(tài)也刪除

    2024年02月07日
    瀏覽(50)
  • Jenkins的環(huán)境部署,(打包、發(fā)布、部署、自動化測試)

    Jenkins的環(huán)境部署,(打包、發(fā)布、部署、自動化測試)

    一、Tomcat環(huán)境安裝 1.安裝JDK(Java環(huán)境) JDK下載地址:Java Downloads | Oracle 安裝好后在系統(tǒng)環(huán)境變量里配置環(huán)境變量: ①添加JAVA_HOME 變量名:JAVA_HOME 變量值:C:Program FilesJavajdk1.8.0_181(根據(jù)自己的實際路徑配置) ②添加CLASSPATH 變量名:CLASSPATH 變量值:.;%JAVA_HOME%libdt.jar;%J

    2024年01月18日
    瀏覽(30)
  • Jenkins自動化部署docker

    Jenkins自動化部署docker

    準備測試服務(wù)器docker環(huán)境 準備jdk環(huán)境 將上傳jar包修改為 app.jar 對外暴露 1000 端口 啟動jar 制作鏡像 將上傳的鏡像先測試,我的jar包叫 sky-server-1.0-SNAPSHOT.jar 先將這個做成鏡像 創(chuàng)建容器 將之前做的鏡像運行 環(huán)境準備 前提需要Jenkins和Gitea這個要提前準備好。 1、配置Jenkins的M

    2024年01月17日
    瀏覽(51)
  • 基于jenkins自動化部署PHP環(huán)境

    基于jenkins自動化部署PHP環(huán)境

    操作系統(tǒng) IP 地址 主機名 角色 CentOS7.5 192.168.147.141 git git 服務(wù)器 CentOS7.5 192.168.147.142 Jenkins git客戶端 jenkins服務(wù)器 CentOS7.5 192.168.147.143 web web 服務(wù)器 具體環(huán)境配置見上一篇! 創(chuàng)建一個Freestyle project ? ? ? build Now ? ? ? ? ?基于ansible部署 修改jenkins運行用戶 添加Ansible插件? ? ?

    2024年02月11日
    瀏覽(23)
  • Docker 自動化部署(保姆級教程)

    Docker 自動化部署(保姆級教程)

    jenkins介紹 jenkins部署Vue項目 docker安裝Jenkins Jenkins:是一個開源的、提供友好操作界面的持續(xù)集成(CI)工具,主要用于持續(xù)、自動的構(gòu)建的一些定時執(zhí)行的任務(wù)。Jenkins用Java語言編寫,可在Tomcat等流行的容器中運行,也可獨立運行。 開發(fā)的步驟: 開發(fā)者會將代碼上傳到版本庫中

    2024年02月07日
    瀏覽(48)
  • docker+jenkins 實現(xiàn)自動化部署

    docker+jenkins 實現(xiàn)自動化部署

    工欲善其事必先利其器,所以前期的準備工作必須做好,那么我們要實現(xiàn)自動化部署,必須提前準備什么呢?哈哈哈,可能有一些小伙伴已經(jīng)猜到了,我們需要一臺自己的服務(wù)器,這里博主使用的自己夠買一臺騰訊云的輕量服務(wù)器,折扣完了才一百多塊錢,當然小伙伴也可以

    2024年02月06日
    瀏覽(45)
  • 基于Jenkins自動化部署PHP環(huán)境---基于rsync部署

    基于Jenkins自動化部署PHP環(huán)境---基于rsync部署

    基于基于Jenkins自動打包并部署Tomcat環(huán)境_學習新鮮事物的博客-CSDN博客環(huán)境 準備git倉庫 [root@git ~]# su - git 上一次登錄:五 8月 25 15:09:12 CST 2023從 192.168.50.53pts/2 上 [git@git ~]$ mkdir php.git [git@git ~]$ cd php.git/ [git@git php.git]$ git --bare init 初始化空的 Git 版本庫于 /home/git/php.git/ [git@git p

    2024年02月11日
    瀏覽(50)
  • Web自動化測試-【Selenium環(huán)境部署Edge】

    Web自動化測試-【Selenium環(huán)境部署Edge】

    之前寫過一篇關(guān)于自動化測試的博客,里面是有的chrome驅(qū)動,由于不適配緣故,更新以下Edge驅(qū)動。 自動化測試 準備 Edge 瀏覽器 準備 Edge 驅(qū)動包 a .查看自己的Edge瀏覽器版本(瀏覽器版本和驅(qū)動版本一定要對應) b .下載對應的驅(qū)動包,下載路徑:https://www.selenium.dev/documentat

    2024年02月16日
    瀏覽(40)
  • docker+jenkins+dockerfile 自動化部署發(fā)布

    docker+jenkins+dockerfile 自動化部署發(fā)布

    提示: 文章如有錯誤的地方請指出,以免誤人子弟! 提示:以下是本篇文章正文內(nèi)容,下面案例可供參考 下載鏡像 下載maven maven 官網(wǎng)下載地址 或者使用命令下載 通過軟件放到 linux 的目錄下,這邊放到Home目錄下 解壓 進到解壓的目錄下,創(chuàng)建項目的本地倉庫文件夾并賦予讀

    2024年02月05日
    瀏覽(23)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包