个人云服务器docker搭建部署前后端应用-myos

var code = "87c5235c-b551-45bb-a5e4-9593cb104663"

mysql、redis、nginx、java应用、前端应用部署
本文以单台云服务器为例:

 1. 使用腾讯云服务器


阿里或其他云服务器皆可,类似
安装系统,现在服务器系统都集成安装了docker镜像,建议直接选用即可。
    

 2. 为服务器修改别名

hostnamectl set-hostname myos
#部署新的服务器先更新以下二选一,以下两条不想更新可以跳过。
yum -y update
#升级所有包同时也升级软件和系统内核
yum -y upgrade 
#只升级所有包,不升级软件和系统内核 

 3. 安装mysql

mysql我是直接安装在linux下

#默认安装的是最新版的mysql
sudo dnf install @mysql
#安装只要一个同意y,然后就一路安装完成
#在开机启动时自动启动(now 并且现在启动):
sudo systemctl enable --now mysqld
#查看启动状态
sudo systemctl status mysqld.service
sudo systemctl start mysqld.service
sudo systemctl stop mysqld.service
#添加密码及安全设置
sudo mysql_secure_installation

设置完成。
使用root账号登录数据库,设置远程登录:

mysql -u root -p
mysql> use mysql;
mysql> update user set host='%' where user = 'root';
mysql> flush privileges;
#退出mysql
mysql> quit
#云服务器记得在防火墙新增开启3306端口,可以远程连接。

 4. 在docker中安装redis

docker run -it -P tomcat(-P自动分配端口号)
-d 后台运行 -p 主机号:docker容器端口号 -i 交互 -t 终端 -v 挂载数据卷#在云服务器中新建app文件夹以及子文件夹
#分别是nginx挂载目录、java应用目录、redis挂载目录
mkdir -p app/{nginx,java,redis}
#redis目录下(redis.conf、data目录(挂载的日志目录))
docker run -p 6379:6379 --name redis6 -d redis:6.2
#先执行下redis,然后把redis.conf复制出来挂载的文件夹
docker cp redis6:/etc/redis/redis.conf /app/redis/redis.conf
#修改/app/redis/redis.conf文件
#注释bind可以远程连接
#修改登陆密码

#修改完成后,查看现在的redis服务id,并且删除
docker ps
docker rm -f redis的id
#重新跑一个redis容器,让redis服务读取挂载上的redis.conf
docker run -p 6379:6379 --name redis6 --privileged=true \
-v /app/redis/redis.conf:/etc/redis/redis.conf \
-v /app/redis/data:/data \
-d redis:6.2 redis-server /etc/redis/redis.conf
#如果你是在不想复制docker容器配置文件那么麻烦,就直接粘贴我的配置文件,修改密码就可以了

 5. 在docker中安装nginx

#类似redis先启动一个nginx容器,复制配置文件到宿主机
docker pull nginx:1.25.3
docker run -d --name nginx nginx:1.25.3
mkdir -p nginx/{conf,html,log,cert}
docker cp nginx:/etc/nginx/conf.d /app/nginx/conf
docker cp nginx:/etc/nginx/nginx.conf /app/nginx/conf
docker cp nginx:/usr/share/nginx/html /app/nginx/html
#删除nginx容器
docker ps
docker rm -f nginx容器id
#在宿主机修改nginx配置文件

user  nginx;
worker_processes  auto;error_log  /var/log/nginx/error.log notice;
pid        /var/run/nginx.pid;events {worker_connections  1024;
}http {include       /etc/nginx/mime.types;default_type  application/octet-stream;log_format  main  '$remote_addr - $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for"';access_log  /var/log/nginx/access.log  main;sendfile        on;#tcp_nopush     on;keepalive_timeout  65;#gzip  on;include /etc/nginx/conf.d/*.conf;server {listen       80 default_server;listen       [::]:80 default_server;server_name  _;root         /usr/share/nginx/html;# Load configuration files for the default server block.include /etc/nginx/default.d/*.conf;location / {}error_page 500 502 503 504 /50x.html;location = /50x.html {}}# Settings for a TLS enabled server.
#
#    server {
#        listen       443 ssl http2 default_server;
#        listen       [::]:443 ssl http2 default_server;
#        server_name  _;
#        root         /usr/share/nginx/html;
#
#        ssl_certificate "/etc/pki/nginx/server.crt";
#        ssl_certificate_key "/etc/pki/nginx/private/server.key";
#        ssl_session_cache shared:SSL:1m;
#        ssl_session_timeout  10m;
#        ssl_ciphers HIGH:!aNULL:!MD5;
#        ssl_prefer_server_ciphers on;
#
#        # Load configuration files for the default server block.
#        include /etc/nginx/default.d/*.conf;
#
#        location / {
#        }
#
#        error_page 404 /404.html;
#            location = /40x.html {
#        }
#
#        error_page 500 502 503 504 /50x.html;
#            location = /50x.html {
#        }
#    }#打开gzip压缩gzip on;#不压缩临界值,大于1K的才压缩,一般不用改gzip_min_length 1k;#设置系统获取几个单位的缓存用于存储gzip的压缩结果数据流,这里设置以16k为单位的4倍申请内存gzip_buffers 4 16k;#默认为http 1.1,现在99.99%的浏览器基本上都支持gzip解压了,所有无需设置此项#gzip_http_version 1.0;#gzip压缩比,1 最小处理速度最快,9 最大但处理最慢(传输快但比较消耗cpu)gzip_comp_level 2;#要压缩的文件类型,注意"text/html"类型无论是否指定总是会被压缩的gzip_types text/plain application/x-javascript text/css application/xml text/javascript application/javascript application/x-httpd-php image/jpeg image/gif image/png;#on的话会在Header里增加"Vary: Accept-Encoding",给代理服务器用的,有的浏览器支持压缩,有的不支持,所以避免浪费不支持的也压缩,所以根据客户端的HTTP头来判断,是否需要压缩#我这里的浏览器肯定支持gzip压缩,所以就不开启此功能了gzip_vary on;#IE6对Gzip不怎么友好,不给它Gzip压缩了gzip_disable "MSIE [1-6]\.";# 设置缓存路径并且使用一块最大100M的共享内存,用于硬盘上的文件索引,包括文件名和请求次数,每个文件在1天内若不活跃(无请求)则从硬盘上淘汰,硬盘缓存最大10G,满了则根据LRU算法自动清除缓存。proxy_cache_path /etc/nginx/cache levels=1:2 keys_zone=imgcache:100m inactive=1d max_size=10g;
}

#nginx配置文件修改好后,重启服务(8000-8050端口为后续部署预留使用)
docker run -p 80:80 -p 443:443 -p 8000-8050:8000-8050 --name nginx \
-v /app/nginx/log:/var/log/nginx \
-v /app/nginx/cert:/etc/nginx/cert \
-v /app/nginx/html:/usr/share/nginx/html \
-v /app/nginx/conf/conf.d:/etc/nginx/conf.d \
-v /app/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
-d --restart=always nginx:latest
#重启后再云服务器开启端口访问

 6. 在docker中部署java应用

cd /app/java/
#把springboot打的jar包上传到此位置,并且把Dockerfile也放在这里
docker build -t demo:v1.0 .
#可以用服务器外网8051端口访问java应用
docker run -p 8051:8080 -d --name=demo demo:v1.0#Dockerfile
FROM openjdk:8-jdk-alpine
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
COPY *.jar demo.jar
CMD ["java", "-jar", "demo.jar"]

 7. 在docker部署前端应用

部署在/app/nginx/html中的就是你当前的目录,子目录的test1、test2是对应其他端口号,也可以使用域名指定,注意这里的路径是你服务器的路径,在nginx中要写容器中的位置。

#使用vue打包后的dist文件可以直接上传到/app/nginx/html中会自动同步到nginx
#若你想部署更多地网站,可以在/app/nginx/html下新建文件夹
#然后再nginx增加server配置这些地址
#续接nginx.confserver {listen       8001;server_name  127.0.0.1;location / {#路径要写nginx服务中的位置root        /usr/share/nginx/html/test1; index       index.html index.htm;}}server {listen       8002;server_name  127.0.0.1;location / {root        /usr/share/nginx/html/test2; index       index.html index.htm;}}
#配置

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/641958.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[ACM学习]自上而下树形dp

问题引入 设置dp状态,相比于更容易出错的贪心更...不易出错。 状态设计 如果选择父结点,就会使孩子结点不能被选择,我们会多开一维的dp,用来标记该点是否被标记过。 以1点举例,f[1][0]为不选它的状态,那么…

FOR XML PATH 函数与同一分组下的字符串拼接

FOR XML PATH 简单介绍 FOR XML PATH 语句是将查询结果集以XML形式展现,通常情况下最常见的用法就是将多行的结果,拼接展示在同一行。 首先新建一张测试表并插入数据: CREATE TABLE #Test (Name varchar(70),Hobby varchar(70) );insert #T…

芯驰E3340软件编译以及更新步骤

打开已有工程File->Open Solution: 东南项目:e3340\boards\e3_324_ref_display\proj\jetour-t1n-fl3\sf\SES 编译:build->build sf 增加头文件和宏定义: 编译完成sf后,进行编译bootloader 东南项目:e3340\boa…

IaC基础设施即代码:Terraform 创建ACK集群 与部署应用

目录 一、实验 1.环境 2.Terraform 创建网络资源 3. 阿里云给RAM添加权限 4.Terraform 创建 ACK集群 5.在ACK集群中部署应用 6.销毁资源 二、问题 1.Terraform 验证失败 2.Terraform申请资源失败 一、实验 1.环境 (1)主机 表1-1 主机 主机系…

火山引擎ByteHouse:“专用向量数据库”与“数据库+向量扩展”,怎么选?

更多技术交流、求职机会,欢迎关注字节跳动数据平台微信公众号,回复【1】进入官方交流群 背景 随着LLM(Large Language Model)的不断发展,向量检索也逐渐成为关注的焦点。LLM通过处理大量的文本数据,获取丰…

第1章-计算机网络基础

目录 1. 计算机网络与计算机 2. 计算机网络的定义和基本功能 2.1. 定义:计算机网络是一组自治计算机互连的集合 2.2. 基本功能 2.3. 计算机网络的演进 2.4. 广域网(Wide Area Network,WAN) 2.5. 网络的拓扑结构 2.6. 数据交换方式 2.7. 衡量计算…

图灵日记之java奇妙历险记--异常包装类泛型

目录 异常概念与体系结构异常的分类异常的处理防御式编程异常的抛出异常的捕获异常声明throwstry-catch捕获并处理 自定义异常类 包装类基本数据类型及其对应包装类装箱和拆箱 泛型泛型使用类型推导 裸类型说明 泛型的编译机制泛型的上界语法 异常概念与体系结构 在java中,将程…

VisualODX——ODX数据自动转换工具 加快开发进度

在创建ODX数据库的过程中,我们需要录入大量的数据以及应对多种数据格式。这不仅费时费力,而且还需很高的人力成本,且其错误率也非常高,从而导致开发速度缓慢、效率低下。基于多年的汽车行业诊断经验,我们开发了VisualO…

org.apache.rocketmq.remoting.exception.RemotingTooMuchRequestException

异常信息: org.apache.rocketmq.remoting.exception.RemotingTooMuchRequestException: sendDefaultImpl call timeout 开发环境描述: rocketMq 版本是 4.9.0,部署在服务器主机上, Broker 部署为单节点(单机&#xff…

jdk的安装和Tomcat的安装

jdk的安装 双击jdk,然后一路下一步 公共JRE可以关闭,没多大用,反而会占用内存 计算机–>属性–>高级系统设置–>环境变量 系统变量–新建 JAVA_HOMEjdk的存放路径 修改path 在path的最后面添加(;%JAVA_H…

Python算法题集_移动零

本文为Python算法题集之一的代码示例 题目283:移动零 说明:给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序 注意 ,必须在不复制数组的情况下原地对数组进行操作 本文给出四…

ChatGPT与生成式AI在教育领域的应用前景光明,但也伴随着挑战

随着ChatGPT和其他生成式AI技术,如GPT-3.5、GPT-4的出现,我们正见证教育领域一场前所未有的变革浪潮。这些技术不仅推动了教育方式的进步,也为学习者带来了全新的机遇和挑战。 NO.1 教育变革的新浪潮 生成式AI技术,特别是ChatGPT…

力扣每日一题 --- 972. 相等的有理数

本题中的一个难点是怎么判断是否相等,如果自己写判断的话是不是很麻烦,判断整数之后再去判断小数部分,那么我们这题的另一个难点就要登场了,第一个难点让本题的情况变得复杂,第二个难点让本题变得很难想到怎么判断&…

如何测试你的 Golang 代码

文章目录 简单概述最易想到的方法一个快速体验案例学会使用 go testing测试的编写规则灵活记忆 API 的使用 实践一个案例简洁紧凑的表组测试详细的日志输出灵活控制运行哪些测试总结参考 不论是开源项目,还是日常程序的开发,测试都是必不可少的一个环节。…

STM32-GPIO输出(HAL库)

STM32-GPIO 介绍 什么是GPIO? GPIO(通用输入/输出)是一种用于与外部设备进行数字通信的通用硬件接口。它允许微控制器或其他数字电路的引脚以灵活的方式配置为输入或输出,并在运行时进行动态控制。GPIO可用于连接和控制各种外围…

C# CefSharp 根据输入日期段自动选择日期

1,前言 搞这个Demo整整搞几天通宵,爆肝了。后做的效果出来,还是不错的。给小伙伴看看效果图。 2, 遇到的问题 日期之间相差多少个月数。开始时间框点击对应月份要点击多少次,结束时间框点击对应月份要点击多少次Xpath获取问题。…

使用NVIDIA TensorRT-LLM支持CodeFuse-CodeLlama-34B上的int4量化和推理优化实践

本文首发于 NVIDIA 一、概述 CodeFuse(https://github.com/codefuse-ai)是由蚂蚁集团开发的代码语言大模型,旨在支持整个软件开发生命周期,涵盖设计、需求、编码、测试、部署、运维等关键阶段。 为了在下游任务上获得更好的精…

MP4是什么文件格式?如何转换视频格式为MP4?

MP4文件格式,全称MPEG-4 Part 14,源自MPEG(Moving Picture Experts Group)对数字媒体压缩标准的不断迭代。其产生背景主要是为了适应数字娱乐时代对更高质量、更高效压缩的需求。MP4文件格式在视频、音频和字幕等多媒体元素的集成…

ps发现一张图片上我有些文字我希望扣出去

问: 上面这是在同一个图层中的,一张图片,但是我希望删除: 剩余__次抽奖这几个文字,怎么办? 回答: 选择 快速选择工具, 讲这几个字括起来, 右键选择删除后填充选区, 就实现了将这几个文字删除,

如何在一个集合对象中A排除另外一个集合对象B中A中拥有的数据通用思路,很精妙!

标题是什么意思呢? 假如我有一个集合对象A,数据有1,2,3,4,5,6 另外一个集合对象B,数据有2,4,5 那么在A中排除B拥有的数据就是 最终需要返回的结果就是1,3 那么我们一般一开始的想法其实就是在集合对象中A遍历取到每一个元素,然…