博客部署教程

博客地址:https://gitee.com/kalashok-pan/zhi-blog-plus

1:安装Docker

  • yum install -y yum-utils device-mapper-persistent-data lvm2 //安装必要工具
  • yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo //设置yum源
  • yum install -y docker-ce //下载docker
  • systemctl start docker //启动docker

2:docker安装mysql

2.1:docker pull mysql //下载MySQL镜像

在这里插入图片描述

2.2:设置密码并启动mysql:docker run --name mysql --restart=always -p 3306:3306 -e MYSQL_ROOT_PASSWORD=密码 -d mysql

2.3:这里提示一下后续我们这里下载的mysql要和dockerfile中的FROM对应,一定要下载jdk8的镜像,这里可以首先docker search java8

在这里插入图片描述

2.4:然后docker pull williamyeh/java8,跟后续讲到dockerfile我会详细讲解

2.5:我门打开本地电脑上面的navicat或其他工具。远程连接到服务器数据库,新建一个ry-vue-blog或者自己喜欢的其他名字都可,然后运行sql文件,一定要先创数据库后运行sql文件。连接不上的可能是没有开通端口,在下面rabbitmq说到了具体开哪些端口

在这里插入图片描述

3:docker安装Redis

1:

在这里插入图片描述

2:设置密码并启动redisdocker run --name redis --restart=always -p 6379:6379 -d redis --requirepass "密码"

4:安装RabbitMQ

在这里插入图片描述

4.1:执行命令:docker run --name rabbit --restart=always -p 15672:15672 -p 5672:5672 -d rabbitmq:management 启动rabbitmq默认账号密码都是guest

4.2:下载完后打开自己购买服务器的地方,将安全组端口打开,开放端口实例:

在这里插入图片描述

4.3:安装完rabbitmq后需要手动登录创建队列和交换机:这里队列就是直接在下面名字输入对应的就好,Durability就是默认的Durable,如果选项还有type就默认的就好不用管

在这里插入图片描述

4.4 手动创建交换机:自己创建的交换机Type这里换成fanout,名字与上面圈主的一一对应

在这里插入图片描述

在这里插入图片描述

4.5:绑定队列与交换机:点进去队列:然后输出交换机名字绑定

在这里插入图片描述
在这里插入图片描述

4.6:绑定关系

artile:maxwell
email:send
email_queue: email_exchange
maxwell_quene:maxwell_exchange

5:以上基本上除了nginx,其余环境安装完成,接下来进入后端项目配置:

5.1:拉git地址后,用idea打开项目,首先修改配置:dev是本地环境,prod是部署环境,prod要改成你自己购买服务器的地址

在这里插入图片描述
在这里插入图片描述

这里同理:将prod改成自己服务器的地址,devlocalhost就自己本地就可

在这里插入图片描述

将配置加载切换成prod打包:dev换成prod

在这里插入图片描述

打包:先clean后package,会在zhi-admin下面生成target文件,里面会有zhi-admin.jar,只需要这个jar包即可,然后下面后续会说放到哪里

在这里插入图片描述

6:前端打包:自动生成dist文件

6.1前端后台:

在这里插入图片描述

6.2前端前台:同理在这里插入图片描述

6.3使用远程连接工具连接服务器,我这里使用xftp+xshell:在usr/local下面新建vue文件夹:

在这里插入图片描述

6.4:新建admin+blog文件夹,将之前打包的两个dist里面的文件分别放入对应的文件夹中,admin:后台 blog:前台,记得是吧dist里面的文件传进去,不是整个dist文件夹

在这里插入图片描述
在这里插入图片描述

7:dockerfile的填写:

7.1:新建docker文件夹:里面有三个文件,第一个就放前面打包好的zhi-admin.jar,第二个是Dockerfile,第三个是blog-start.sh:

在这里插入图片描述

7.2:Dockerfile文件:这个文件不要后缀,全部名字就是Dockerfile(这里FROM的后面写的这个要和上面docker下载的mysql镜像对应!)

FROM williamyeh/java8:latest
VOLUME /tmp
ADD zhi-admin.jar zhi-admin.jar       
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/zhi-admin.jar"] 
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone


7.3:blog-start.sh:

#源jar路径  
SOURCE_PATH=/usr/local/docker
#docker 镜像/容器名字或者jar名字 这里都命名为这个
SERVER_NAME=zhi-admin.jar
TAG=latest
SERVER_PORT=8080
#容器id
CID=$(docker ps | grep "$SERVER_NAME" | awk '{print $1}')
#镜像id
IID=$(docker images | grep "$SERVER_NAME:$TAG" | awk '{print $3}')
if [ -n "$CID" ]; then
  echo "存在容器$SERVER_NAME, CID-$CID"
  docker stop $CID
  docker rm $CID
fi
# 构建docker镜像
if [ -n "$IID" ]; then
  echo "存在$SERVER_NAME:$TAG镜像,IID=$IID"
  docker rmi $IID
else
  echo "不存在$SERVER_NAME:$TAG镜像,开始构建镜像"
  cd $SOURCE_PATH
  docker build -t $SERVER_NAME:$TAG .
fi
# 运行docker容器
docker run --name $SERVER_NAME -v /usr/local/upload:/usr/local/upload -d -p $SERVER_PORT:$SERVER_PORT $SERVER_NAME:$TAG
echo "$SERVER_NAME容器创建完成"

7.4然后在docker目录下运行命令: sh ./blog-start.sh 开始自动构建镜像

在这里插入图片描述

注意:如果无法构建报错syntax error: unexpected end of file 27有可能是编码错误,也就是linux支持unix编码,不支持doc数据:

(1):首先vim blog-start.sh

(2):然后输入:“ : set ff ”

在这里插入图片描述

(3)::看到如果是dos就输入“:set ff =unix”

在这里插入图片描述

(4):然后就可以了 “:wq”退出继续执行sh ./blog-start.sh

在这里插入图片描述

7.5docker ps查看:先忽略这里的nginx,后续会说到,首先看这里有没有出现zhi-admin.jar,如果没有出现,走下面的操作:

在这里插入图片描述

7.6没有出现则首先docker images:

在这里插入图片描述

7.7看到zhi-admin.jar后,我们运行:docker run -p 8080:8080 -d zhi-admin.jar

7.8然后再次docker ps就可以看到有了

8:下载与配置nginx:

8.1:执行命令:docker pull nginx

8.2:在上面下载的同时,在usr/local下新建nginx文件夹,里面新建nginx.conf:

在这里插入图片描述

在这里插入图片描述

8.3:nginx.conf:里面 “你的服务器ip”改成自己的ip(无域名,有域名见下方)

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;

    client_max_body_size     50m;
    client_body_buffer_size  10m; 
    client_header_timeout    1m;
    client_body_timeout      1m;

    gzip on;
    gzip_min_length  1k;
    gzip_buffers     4 16k;
    gzip_comp_level  4;
    gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;
    gzip_vary on;

server {
        listen       80;
        server_name  你的服务器ip;
     
        location / {		
            root   /usr/local/vue/blog;
            index  index.html index.htm; 
            try_files $uri $uri/ /index.html;	
        }
			
	location ^~ /api/ {		
            proxy_pass http://你的服务器ip:8080/;
	    proxy_set_header   Host             $host;
            proxy_set_header   X-Real-IP        $remote_addr;						
            proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
        }
		
    }
	
server {
        listen       81;
        server_name   你的服务器ip;
     
        location / {		
            root   /usr/local/vue/admin;
            index  index.html index.htm; 
            try_files $uri $uri/ /index.html;	
        }
			
	location ^~ /prod-api/ {		
            proxy_pass http://你的服务器ip:8080/;
	    proxy_set_header   Host             $host;
            proxy_set_header   X-Real-IP        $remote_addr;						
            proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
        }
		
    }

server {
        listen       82;
        server_name  你的服务器ip;
     
        location / {
          proxy_pass http://你的服务器ip:8080/websocket;
          proxy_http_version 1.1;
          proxy_set_header Upgrade $http_upgrade;
          proxy_set_header Connection "Upgrade";
          proxy_set_header Host $host:$server_port;
          proxy_set_header X-Real-IP $remote_addr;
          proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
          proxy_set_header X-Forwarded-Proto $scheme;
       }
	
    }

server {
        listen       83;
        server_name   你的服务器ip;
     
        location / {		
          root /usr/local/upload/; 
        }		
		
    }
 
 }

有域名:示例:域名为ftzlovedsj.com

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;

    client_max_body_size     50m; 
    client_header_timeout    1m;
    client_body_timeout      1m;

    gzip on;
    gzip_min_length  1k;
    gzip_buffers     4 16k;
    gzip_comp_level  4;
    gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;
    gzip_vary on;

server {
        listen       80;
        server_name  www.ftzlovedsj.com;
     
        location / {		
            root   /usr/local/vue/blog;
            index  index.html index.htm; 
            try_files $uri $uri/ /index.html;	
        }
			
	location ^~ /api/ {		
            proxy_pass http://81.70.253.100:8080/;
	    proxy_set_header   Host             $host;
            proxy_set_header   X-Real-IP        $remote_addr;						
            proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
        }
		
    }
	
server {

        listen       80;
        server_name  www.admin.ftzlovedsj.com;
     
        location / {		
            root   /usr/local/vue/admin;
            index  index.html index.htm; 
            try_files $uri $uri/ /index.html;	
        }
			
location ^~ /prod-api/ {		

            proxy_pass http://81.70.253.100:8080/;
	    proxy_set_header   Host             $host;
            proxy_set_header   X-Real-IP        $remote_addr;						
            proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
        }

		
    }

server {
        listen       82;
        server_name  81.70.253.100;
     
        location / {		
          alias /usr/local/upload/; 
          autoindex on;
          autoindex_exact_size on;
          autoindex_localtime on;
        }		
		
    }

server {
        
        listen       80;
        server_name  www.ws.ftzlovedsj.com;
     
        location / {
          proxy_pass http://81.70.253.100:8080/websocket;
          proxy_http_version 1.1;
          proxy_set_header Upgrade $http_upgrade;
          proxy_set_header Connection "Upgrade";
          proxy_set_header Host $host:$server_port;
          proxy_set_header X-Real-IP $remote_addr;
          proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
          proxy_set_header X-Forwarded-Proto $scheme;
       }
	
    }
 
 }

8.4:docker运行nginx:这里注意里面的-p自己代理了什么端口,多少端口都要通过-p叠加,比如我这里代理了80-82 就需要 -p 80:80 -p 81:81 -p 82:82

docker run --name nginx --restart=always -p 80:80 -p 81:81 -p 82:82 -p 443:443 -d -v /usr/local/nginx/nginx.conf:/etc/nginx/nginx.conf -v /usr/local/vue:/usr/local/vue -v /usr/local/upload:/usr/local/upload nginx

然后搜索自己的IP地址就可以看到自己博客已经上线了,后台是ip地址:81

ngxin后续修改配置文件如何热更新?

//修改nginx配置,在不能重启的情况下,可以无需重新启动Docker容器即可重新加载新配置。Nginx可以hot-reload配置而不重新启动。
//查询nginx所在容器id:docker ps -a
docker ps -a
//测试nginx配置
docker exec 容器id nginx -t 
//重新加载nginx配置
docker exec 容器id  nginx -s reload 

PS附加:关于如何本地存储图标使用minio:(如果使用阿里云腾讯云则不需要看这里)

1:打开服务器输入docker search minio

2:下载第一个,命令应该是:docker pull minio/minio

3:新建挂载文件夹:创建minio文件并创建config和data文件:

在这里插入图片描述

4:docker启动minio:

docker run -p 9000:9000 -p 9090:9090      --net=host      --name minio      -d --restart=always      -e "MINIO_ACCESS_KEY=minioadmin"      -e "MINIO_SECRET_KEY=minioadmin"      -v/usr/local/minio/data:/data      -v /usr/local/minio/config:/root/.minio      minio/minio server      /data --console-address ":9090" -address ":9000"


5:记得阿里云安全组新增开放9000 9090 这两个端口,自己改了端口的自行开放

6:浏览器打开:http://你的服务器:9090/login 用户名:密码 minioadmin:minioadmin

在这里插入图片描述

7:登陆后创建用户:我这里已经创建好了root,自己的用户密码,记住下面一定勾选consoleAdmin

在这里插入图片描述

8:然后save后退出用自己刚刚创建的用户登录:

在这里插入图片描述

9:然后为自己刚刚创建的用户创建accesskey:进来点击这个用户,创建后一定要记住!一定要保存下来记住这个

请添加图片描述
请添加图片描述
请添加图片描述

10:然后创建完后创建自己的存储桶:名字与云端配置模块匹配,然后基础把桶改成public:

请添加图片描述
请添加图片描述

请添加图片描述

然后最终docker:文件存储功能已经正常

在这里插入图片描述

  • 13
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
[入门数据分析的第一堂课]这是一门为数据分析小白量身打造的课程,你从网络或者公众号收集到很多关于数据分析的知识,但是它们零散不成体系,所以第一堂课首要目标是为你介绍:Ø  什么是数据分析-知其然才知其所以然Ø  为什么要学数据分析-有目标才有动力Ø  数据分析的学习路线-有方向走得更快Ø  数据分析的模型-分析之道,快速形成分析思路Ø  应用案例及场景-分析之术,掌握分析方法[哪些同学适合学习这门课程]想要转行做数据分析师的,零基础亦可工作中需要数据分析技能的,例如运营、产品等对数据分析感兴趣,想要更多了解的[你的收获]n  会为你介绍数据分析的基本情况,为你展现数据分析的全貌。让你清楚知道自己该如何在数据分析地图上行走n  会为你介绍数据分析的分析方法和模型。这部分是讲数据分析的道,只有学会底层逻辑,能够在面对问题时有自己的想法,才能够下一步采取行动n  会为你介绍数据分析的数据处理和常用分析方法。这篇是讲数据分析的术,先有道,后而用术来实现你的想法,得出最终的结论。n  会为你介绍数据分析的应用。学到这里,你对数据分析已经有了初步的认识,并通过一些案例为你展现真实的应用。[专享增值服务]1:一对一答疑         关于课程问题可以通过微信直接询问老师,获得老师的一对一答疑2:转行问题解答         在转行的过程中的相关问题都可以询问老师,可获得一对一咨询机会3:打包资料分享         15本数据分析相关的电子书,一次获得终身学习
Django开发教程是一种指导开发人员如何使用Django框架来构建和管理网站的教程。Django是一种用于快速构建Web应用程序的高级Python开发框架。以下是我对Django开发教程的描述: Django开发教程首先会介绍Django框架的基本概念和用法。学习者将了解Django的MVT(模型-视图-模板)架构,这是Django框架的核心组成部分。他们将学会如何创建和管理Django项目,并了解如何使用Django自带的管理界面来管理内容。此外,教程还会介绍如何使用Django中的模型创建文章、标签和评论等数据模型。 在学习了Django框架的基本知识后,教程会引导学习者构建一个完整的应用。学习者将学习如何设计和实现的前端界面,包括主页、文章详情页和标签分类等。他们还将学习如何使用Django的URL映射和视图函数来处理用户请求,并在数据库中保存和管理数据。 除了基本功能外,教程还会介绍如何为应用添加其他高级功能。比如,学习者将学会如何实现用户认证(注册、登录、注销),如何实现文章的分页功能,以及如何使用静态文件管理器来上传和管理中的图片和文件等。 在教程的最后,学习者将具备使用Django构建自己网站的能力。他们将了解如何在生产环境中部署Django应用,并学会一些常用的Django开发技巧和最佳实践。 总的来说,Django开发教程通过一系列的实例和演示,向学习者展示了如何使用Django框架来构建高效、可扩展的网站。希望这个教程能够帮助开发人员快速上手和掌握Django开发技能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

water-之

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值