拾壹博客拆解,docker环境部署加自动化发布(一)

这篇具有很好参考价值的文章主要介绍了拾壹博客拆解,docker环境部署加自动化发布(一)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

一直想搭建一个属于自己的博客,之前使用过Wordpress,但是觉得太笨重了,很多功能都不是自己需要的,然后有一天摸鱼摸到了拾壹博客。感觉这个项目虽然功能少,但是基本上架子都有了,自己想要的功能可以一边学习一边实践,就想从头部署并且改造一下这个项目。同时,顺便的,也把改造的过程记录成博客沉淀下来。
后续的想法是:

  1. spring boot改造成spring cloud alibaba的分布式服务;
  2. 使用netty + webrtc搭建视频聊天室;
  3. 结合kubernets进行集群管理;
  4. 爬虫 + hadoop集群进行数据统计分析展示;
  5. more
    以及,欢迎光临安心小站~

环境分析

1、需求软件

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

2、部署环境

服务器名称 系统 配置 安装软件 说明
web服务器 centos7.6 2核2G nginx 部署前端页面
服务端服务器 centos7.6 2核8G jdk1.8、redis、mysql、elasticsearch 部署后端服务

拾壹博客拆解,docker环境部署加自动化发布(一)

配置部署环境

所有相关的工具暂时先放置到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 授权
chmod +x docker compose

#查看版本号
docker-compose -version

2、安装mysql-5.7

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

#正常情况下执行
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下发现容器未启动,执行docker logs mysql后发现报错。

[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!

网上试了几个方法不行,那么只能用魔法打败魔法了,使用docker-compose启动mysql。

#创建文件docker-compose-mysql.yml
vim docker-compose-mysql.yml

#文件内容
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 #设置root帐号密码
    ports:
      - 3306:3306
    volumes:
      - /mydata/mysql/data/db:/var/lib/mysql #数据文件挂载
      - /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环境部署加自动化发布(一)

#开启账号远程访问权限
#查看所有用户
SELECT * FROM USER;

#如果不存在 'root'@'%' 账号则添加远程登录用户
CREATE USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';

#授权远程连接
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'

# 网桥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守护进程启动时就已经停止了的容器
    volumes:                                  # 数据卷挂载路径设置,将本机目录映射到容器目录
      - "./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:                              # 设置环境变量,相当于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

执行docker-compose -f docker-compose-elasticsearch.yml up -d启动
访问:http://192.168.2.30:9200/ 查看es版本信息
拾壹博客拆解,docker环境部署加自动化发布(一)

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
监听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协议的类型。
    ssl_prefer_server_ciphers  on;
    
    location ^~/ {
        proxy_pass http://dinganwang.top/;
    }
}

证书放在cert映射的文件夹下
PS:原来是没有SSL证书的,配置好之后调试一直没有反应,包括log也没有打印,最后发现是443端口没有映射!!!

7、安装jenkins

发布需要,先装个jenkins

#首先要有java环境
#拉取镜像
docker pull jenkins/jenkins:lts

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

#给ID为1000的用户添加操作权限
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/
在弹出页面输入初始密码,选择推荐的插件安装后等待插件安装完成,最后注册一个管理用户就完成。正式发布jenkins的配置在下文再介绍。

8、端口总览

端口号 说明
3306 mysql访问端口
6379 redis访问端口
9000 minio访问端口
9001 minio管理页面
9200 elasticsearch外部访问端口
9300 elasticsearch集群通讯端口
5601 kibana管理页面
80、443 nginx监听端口
9090 jenkins管理页面(从8080映射)
50000 jenkins JNLP服务端口

启动项目

1、后端项目

先通过jar包启动,确定配置无误。

编写docker-compose启动文件
  1. docker-compose.yml
version: '3'

services:
  blog-server:
    image: blog-server:latest # 指定基础镜像
    container_name: blog-server # 容器名称
    privileged: true
    restart: always # 自动启动服务器炸了也没事,重启服务器自动启动
    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授权。

启动jar包
  1. 先修改application.yml文件中各个工具的连接地址。
  2. 使用maven打包jar文件。
  3. jar包与docker-compose启动文件放在同一文件夹下。
  4. 执行 ./deploy.sh。

访问http://192.168.2.30:1216/dingx/doc.html查看是否启动成功
拾壹博客拆解,docker环境部署加自动化发布(一)

配置jenkins启动
  1. 点击系统管理,再点击插件管理。在打开的页面中点击可选插件,安装Maven Integration、Publish Over SSH,插件安装后需重启jenkins。

拾壹博客拆解,docker环境部署加自动化发布(一)

  1. 系统配置:一直下拉直到SSH Servers,配置目标服务器。因为jenkins是部署在docker中,虽然都是在 **192.168.2.30 **机器上,但是容器跟外部环境是隔离的,所以不能直接执行Shell命令。

拾壹博客拆解,docker环境部署加自动化发布(一)
全局工具配置:自动安装MavenNodeJS(尽量在17以下,不然有插件会报错)

拾壹博客拆解,docker环境部署加自动化发布(一)

  1. 点击新建任务后,输入任务名称,选择构建一个maven项目,点击确定。

拾壹博客拆解,docker环境部署加自动化发布(一)

  1. jenkins配置

拾壹博客拆解,docker环境部署加自动化发布(一)

源码管理必然是git,Credentials凭据自行添加,类型使用 **Username with password **配置好gitee的用户名密码即可,当然也可以配置SSH登录。
拾壹博客拆解,docker环境部署加自动化发布(一)

最后连接服务器配置。
PS:先写在前面,遇到一个卡了两小时的坑。Exec command内填入:

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

拾壹博客拆解,docker环境部署加自动化发布(一)

构建成功

拾壹博客拆解,docker环境部署加自动化发布(一)

2、前端项目

本地打包发布
  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 {
  	#监听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环境部署加自动化发布(一)
拾壹博客拆解,docker环境部署加自动化发布(一)

配置jenkins发布
  1. 如果是初次发布请选择构建一个自由风格的软件项目,否则直接复制。

拾壹博客拆解,docker环境部署加自动化发布(一)
2. 配置环境

拾壹博客拆解,docker环境部署加自动化发布(一)
拾壹博客拆解,docker环境部署加自动化发布(一)

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环境部署加自动化发布(一)文章来源地址https://www.toymoban.com/news/detail-401174.html

到了这里,关于拾壹博客拆解,docker环境部署加自动化发布(一)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

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

    接上一节: 从零用VitePress搭建博客教程(6) -– 第三方组件库的使用和VitePress搭建组件库文档  我们搭建完成vitePress后,那么接下来就是如何部署到线上服务器,这里使用Github Pages,免得自己购买服务器,当然你也可以自己购买服务器来部署(比如阿里云服务器)。 在部署之

    2024年02月08日
    浏览(62)
  • Docker 自动化部署(实践)

    docker search jenkins查看需要的jenkins镜像源 docker pull jenkins/jenkins 拉取jenkins镜像 docker images查看下载的镜像源 docker ps 查看包含启动以及未启动的容器 docker ps -a查看启动的容器 docker rm 容器id/容器名称 删除容器 docker rm -f 容器id/容器名称 删除容器(强制删除容器,运行状态也删除

    2024年02月07日
    浏览(43)
  • Jenkins的环境部署,(打包、发布、部署、自动化测试)

    一、Tomcat环境安装 1.安装JDK(Java环境) JDK下载地址:Java Downloads | Oracle 安装好后在系统环境变量里配置环境变量: ①添加JAVA_HOME 变量名:JAVA_HOME 变量值:C:Program FilesJavajdk1.8.0_181(根据自己的实际路径配置) ②添加CLASSPATH 变量名:CLASSPATH 变量值:.;%JAVA_HOME%libdt.jar;%J

    2024年01月18日
    浏览(36)
  • Jenkins自动化部署docker

    准备测试服务器docker环境 准备jdk环境 将上传jar包修改为 app.jar 对外暴露 1000 端口 启动jar 制作镜像 将上传的镜像先测试,我的jar包叫 sky-server-1.0-SNAPSHOT.jar 先将这个做成镜像 创建容器 将之前做的镜像运行 环境准备 前提需要Jenkins和Gitea这个要提前准备好。 1、配置Jenkins的M

    2024年01月17日
    浏览(48)
  • 基于jenkins自动化部署PHP环境

    操作系统 IP 地址 主机名 角色 CentOS7.5 192.168.147.141 git git 服务器 CentOS7.5 192.168.147.142 Jenkins git客户端 jenkins服务器 CentOS7.5 192.168.147.143 web web 服务器 具体环境配置见上一篇! 创建一个Freestyle project       build Now          基于ansible部署 修改jenkins运行用户 添加Ansible插件     

    2024年02月11日
    浏览(33)
  • docker+jenkins 实现自动化部署

    工欲善其事必先利其器,所以前期的准备工作必须做好,那么我们要实现自动化部署,必须提前准备什么呢?哈哈哈,可能有一些小伙伴已经猜到了,我们需要一台自己的服务器,这里博主使用的自己够买一台腾讯云的轻量服务器,折扣完了才一百多块钱,当然小伙伴也可以

    2024年02月06日
    浏览(255)
  • Docker 自动化部署(保姆级教程)

    jenkins介绍 jenkins部署Vue项目 docker安装Jenkins Jenkins:是一个开源的、提供友好操作界面的持续集成(CI)工具,主要用于持续、自动的构建的一些定时执行的任务。Jenkins用Java语言编写,可在Tomcat等流行的容器中运行,也可独立运行。 开发的步骤: 开发者会将代码上传到版本库中

    2024年02月07日
    浏览(42)
  • 基于Jenkins自动化部署PHP环境---基于rsync部署

    基于基于Jenkins自动打包并部署Tomcat环境_学习新鲜事物的博客-CSDN博客环境 准备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日
    浏览(32)
  • Web自动化测试-【Selenium环境部署Edge】

    之前写过一篇关于自动化测试的博客,里面是有的chrome驱动,由于不适配缘故,更新以下Edge驱动。 自动化测试 准备 Edge 浏览器 准备 Edge 驱动包 a .查看自己的Edge浏览器版本(浏览器版本和驱动版本一定要对应) b .下载对应的驱动包,下载路径:https://www.selenium.dev/documentat

    2024年02月16日
    浏览(36)
  • Docker 部署后端项目自动化脚本

    这里的项目位置是target同级目录 1.在项目下面新建一个bin目录 新建一个package.txt 写入下方代码后 后缀改为.bat 2.项目下新建一个deploy文件夹里面新建一个deploy.ps1脚本文件 示例 这里使用ssh 可以自己编写不太一样 上传到服务器中后自己选择一个合适的文件夹 然后旁边新建一个

    2024年02月01日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包