Linux快速搭建可用环境
本文最后更新于 129 天前,如有失效请评论区留言。

快速搭建网站

前言

本文主要以图文的形式讲解任意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

    1. 更新软件包索引

      sudo apt update
    2. 安装必要的依赖包

      sudo apt install apt-transport-https ca-certificates curl software-properties-common
    3. 添加 Docker 的官方 GPG 密钥

      curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
    4. 添加 Docker 仓库到 APT 源

      sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu focal stable"
    5. 再次更新软件包索引(添加了新的 Docker 仓库后):

      sudo apt update
    6. 安装 Docker CE(社区版)

      sudo apt install docker-ce
    7. 验证 Docker 是否安装成功(通过运行 Hello World 容器):

      sudo docker run hello-world

    安装 Docker Compose

    1. 下载 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
    2. 使 Docker Compose 文件可执行

      sudo chmod +x /usr/local/bin/docker-compose
    3. 验证 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安装

  1. 下载MySQL5.7的docker镜像: docker pull mysql,可以通过mysql:5.7来指定下载特定版本,否则默认下载最新版(8.0x)

  2. 创建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 \这一行可能会导致上面的启动命令出现问题,如果无法启动可以删除这一行后重试。

image-20230921094302822

参数说明

 -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来进行操作。

image-20240319171635997

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来进行部署,网上有很多教程,在这里就不赘述了,主要是要注意两点:

  1. 修改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
  2. 改完上述内容以后,服务器就能监听2375端口的推送了,这里需要注意,首先要打开系统的2375端口,
    firewall-cmd --zone=public --add-port=2375/tcp --permanent
  3. 然后需要打开云服务器安全组的2375端口(如果有的话)。
    为避免被黑客利用,建议配置tcp 中的来源ip仅为本机ip,如果没有外置安全组的话,推送完代码建议立刻修改回原来的配置

前端部署的坑

前端部署其实无非就是nginx配置不对,这个稍后我将我的nginx配置放在文章中,并且标明含义.

文章到这里就结束了,如果大家有什么问题欢迎大家联系我,qq:1849819717 邮箱:jiam-xia@outlook.com

参考链接:

vite实现一个端口多个前端服务

mall在linux下的部署

版权声明:除特殊说明,博客文章均为夏夜小鹿原创,依据CC BY-SA 4.0许可证进行授权,转载请附上出处链接及本声明。 由于可能会成为AI模型(如ChatGPT)的训练样本,本博客禁止将AI自动生成内容作为文章上传(特别声明时除外)。如果您有什么想对小鹿说的,可以到留言板 进行留言

评论

  1. 夏夜小鹿
    Macintosh Chrome 116.0.0.0
    11 月前
    2023-9-14 17:13:37

    哈哈哈哈哈哈

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
下一篇