快速搭建网站
前言
本文主要以图文的形式讲解任意web项目在Linux环境下的部署,涉及在Docker容器中安装MySQL、Redis、Nginx、RabbitMQ以及SpringBoot应用部署,基于CenterOS7.6(其实别的系统也都是可以的,我目前使用的就是OpenCloudOS8.6
)
1.推荐服务器配置(或虚拟机配置)
-
服务器:
腾讯云-轻量应用服务器 centerOS7.6 2核4G 5M我现在已经不使用国内的服务器了,现在已经全部转为海外vps了,其实我觉得如果非必要的话都可以选择海外的vps,限制会少很多,套上cdn也不用担心被网站被墙的问题,这里推荐一家极其廉价的vps,美国的RackNerd,但其实如果你的主要面向群体还是国内用户的话,建议还是使用国内的服务器。
-
对象存储:腾讯云cos存储-50GB存储(新用户应该会送三个月的存储,但是需要自己购买下行流量以及访问次数)
2.Docker环境安装
centos系统下命令如下
# 安装yum-utils:
yum install -y yum-utils device-mapper-persistent-data lvm2
# 为yum源添加docker仓库位置:
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# 安装docker:
yum install docker-ce
#启动docker:
systemctl start docker
ubuntu系统的命令如下
-
安装 Docker
-
更新软件包索引:
sudo apt update
-
安装必要的依赖包:
sudo apt install apt-transport-https ca-certificates curl software-properties-common
-
添加 Docker 的官方 GPG 密钥:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
-
添加 Docker 仓库到 APT 源:
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu focal stable"
-
再次更新软件包索引(添加了新的 Docker 仓库后):
sudo apt update
-
安装 Docker CE(社区版):
sudo apt install docker-ce
-
验证 Docker 是否安装成功(通过运行 Hello World 容器):
sudo docker run hello-world
安装 Docker Compose
-
下载 Docker Compose 的当前稳定版本(请访问 Docker Compose 的 GitHub 发布页面 查看最新版本):
sudo curl -L "https://github.com/docker/compose/releases/download/v2.2.3/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
-
使 Docker Compose 文件可执行:
sudo chmod +x /usr/local/bin/docker-compose
-
验证 Docker Compose 安装(检查版本):
docker-compose --version
配置 Docker
- 将当前用户添加到 Docker 组(避免每次使用 Docker 命令时都需要
sudo
):
sudo usermod -aG docker ${USER}
注:更改应用后需要注销并重新登录。
- 启动 Docker 服务(如果它还没有运行):
sudo systemctl start docker
- 设置 Docker 服务开机自启:
sudo systemctl enable docker
-
如果你还是决定使用国内服务器(国外vps请直接跳过),我建议还是要修改一些docker的默认配置,不然很大程度上没法下载国外或者是github上的优质镜像:
# 下面的代码一行行敲,不是一下全复制粘贴 下面的代码主要是给vps配置国内的镜像源
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": [
"https://a3e6u0iu.mirror.aliyuncs.com",
"https://hub-mirror.c.163.com",
"https://mirror.baidubce.com"
]
}
EOF
# 一定要重载docker配置
sudo systemctl daemon-reload
sudo systemctl restart docker
3.MySQL安装
-
下载MySQL5.7的docker镜像:
docker pull mysql
,可以通过mysql:5.7
来指定下载特定版本,否则默认下载最新版(8.0x) -
创建mysql镜像并启动
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=root \
-d mysql:5.7
注意!!这里最后一行的5.7应该根据实际的来,这是tag,具体的tag可以使用命令: docker images
来查看!另外-v /mydata/mysql/conf:/etc/mysql \
这一行可能会导致上面的启动命令出现问题,如果无法启动可以删除这一行后重试。
参数说明
-p 3306:3306:将容器的3306端口映射到主机的3306端口
-v /mydata/mysql/conf:/etc/mysql:将配置文件夹挂载到主机
-v /mydata/mysql/log:/var/log/mysql:将日志文件夹挂载到主机
-v /mydata/mysql/data:/var/lib/mysql/:将数据文件夹挂载到主机
-e MYSQL_ROOT_PASSWORD=root:初始化root用户的密码
生产环境尽量不要用简单的root密码,如果一定要用请自己处理防火墙。 国内较大的云服务器厂商应该都会提供外置防火墙(也有可能叫安全组,你可以通过这种方式来限制单一ip访问你的服务器数据库)
进入mysql镜像并且打开mysql命令行
在这里我首先安利一下我使用的ssh工具,轻量且好用,win和mac都能使用的开源工具tarbby-ssh连接工具
docker exec -it mysql /bin/bash #进入mysql镜像
mysql -uroot -proot --default-character-set=utf8; # 打开mysql客户端 --default后面的部分可以视情况加,非必选项
create database xxx character set utf8; # 创建一个名为xxx的数据库
docker cp /mydata/1234.sql mysql:/ # 将数据库文件导入到mysql镜像中,这一步需要你自己提前先将1234.sql文件上传到服务器上面去,
use xxx;# 切换数据库
source /1234.sql; #执行sql文件
grant all privileges on *.* to 'reader' @'%' identified by '123456'; # % 的意思是所有的ip都能够利用这个账户对数据库进行访问,所以如果在**生产环境**一定要把密码弄的特别复杂才行!!千万别123456
其实还有一个更好的办法,就是通过navicat premium来进行操作。
4.安装redis
docker pull redis:7
拉取redis镜像 指定版本为7
docker run -p 6379:6379 --name redis \
-v /mydata/redis/data:/data \
-d redis:7 redis-server --appendonly yes --requirepass "mypassword"
生产环境一定要设置非常复杂的密码,因为生产环境密码简单的话完全可以利用你的6379端口抢占你的服务器
5.安装nginx
推荐大家可以看看我的另一篇文章,使用nginx proxy manager来搭建nginx服务,更适合小白
镜像拉取
docker pull nginx:1.22
nginx配置
直接看这篇文章就可以解决你百分之99的问题,至少可以确定如果你的项目在根目录下的话,前端打包就一定能跑起来!docker-nginx安装部署与扩展性配置
这篇文章中有一点:docker run -d -p 80:80 --name nginx_wms_ui -v /home/wms/nginx/dist:/usr/share/nginx/html --restart=always nginx
-p 后面跟的是端口号,如果你后续需要配置https兼容的话,还需要监听443端口,其他的参数根据自己的需求来进行配置即可。
其实我不建议大家使用nginx自己手动配置,对于很大部分小白来说,这是极其困难且不友好的,你很大概率不知道每个配置项的含义是什么,因此我强烈推荐大家使用nginx proxy manager 来进行nginx配置,网上也有很多使用docker来安装的教程,当然我更推荐大家看我的教程[nginx proxy manager 安装使用]()
6.RabbitMQ安装
RabbitMQ是一个开源的消息队列中间件,广泛用于构建可靠的、可扩展的分布式应用系统。它基于AMQP(高级消息队列协议)标准实现,提供了高效、灵活的消息传递机制。
主要特点
-
灵活的消息传递模型: RabbitMQ支持多种消息传递模式,如点对点、发布/订阅、消息广播等,适用于不同场景的需求。
-
高可靠性: RabbitMQ具有持久化消息、消息确认机制、备份和复制等特性,确保消息不丢失且系统具有高可用性。
-
多语言支持: 提供多种编程语言的客户端库,包括Java、Python、Ruby、JavaScript等,使其能够广泛应用于不同技术栈的项目。
-
轻量且易于部署: RabbitMQ是一个轻量级的消息代理服务器,容易安装和部署到不同的系统环境中。 ## 使用场景 RabbitMQ适用于多种场景,包括但不限于: - 异步任务处理 - 分布式系统间的消息通信 - 日志处理与分发 - 应用程序解耦 - ...
# 下载rabbitmq3.9-management的docker镜像:
docker pull rabbitmq:3.9-management
# 使用如下命令启动RabbitMQ服务:
docker run -p 5672:5672 -p 15672:15672 --name rabbitmq \
-v /mydata/rabbitmq/data:/var/lib/rabbitmq \
-d rabbitmq:3.9-management
# 开启防火墙
firewall-cmd --zone=public --add-port=15672/tcp --permanent //打开防火墙,设置permanent表示永久开启,避免docker重启后失效
firewall-cmd --reload //重载防火墙配置
如果显示没有开启防火墙,请百度搜索防火墙开启关闭💖
关于防火墙
如果是部署在云服务的话,除了系统防火墙外,云服务也有自己的防火墙规则,也就是说不仅要开启系统的防火墙,云服务器的防火墙也需要开启。当然也不是所有的vps服务商都会提供外置防火墙/安全组。
到这里,简单的开发环境就算搭建好了,之后你就可以愉快的进行docker的安装了,接下来讲一下我部署自己的前后端分离项目的时候遇到的坑。
7.部署前后端服务遇到的坑
1.部署后端springboot服务
首先我推荐用docker来进行部署,网上有很多教程,在这里就不赘述了,主要是要注意两点:
- 修改docker配置文件,监听2375端口上来的后端jar包
vim /usr/lib/systemd/system/docker.service
找到文件中ExecStart ,修改为如下:ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock
- 改完上述内容以后,服务器就能监听2375端口的推送了,这里需要注意,首先要打开系统的2375端口,
firewall-cmd --zone=public --add-port=2375/tcp --permanent
- 然后需要打开云服务器安全组的2375端口(如果有的话)。
为避免被黑客利用,建议配置tcp 中的来源ip仅为本机ip,如果没有外置安全组的话,推送完代码建议立刻修改回原来的配置
前端部署的坑
前端部署其实无非就是nginx配置不对,这个稍后我将我的nginx配置放在文章中,并且标明含义.
文章到这里就结束了,如果大家有什么问题欢迎大家联系我,qq:1849819717 邮箱:jiam-xia@outlook.com
参考链接:
哈哈哈哈哈哈