查看原文
其他

不就部署个网站么?还能玩出花来?

鱼皮 程序员鱼皮 2022-08-14

大家好,我是鱼皮,不知道朋友们有没有试着部署过自己开发的网站呢?

其实部署网站非常简单,而且有非常多的花样。这篇文章就给大家分享几种主流的前端 / 后端项目部署方式吧!

前端部署

对于前端项目,打包之后往往是一个目录,目录中包含 index.html(入口文件)、css、js 等等。

那么我们要做的事情其实就是想办法 让用户访问到这些文件 ,包含两个关键的问题:

  1. 文件存放到哪里?
  2. 怎么提供文件访问能力?

围绕这两个问题,常见的部署方式有以下五种。

1. web 服务器

将文件放到远程服务器上(没有服务器也可以在自己电脑上部署),然后通过 Nginx、Apache、Tomcat 等 web 服务器提供网页文件访问能力。

你可以自行安装上述 web 服务器,然后修改其配置文件,指定用户通过 哪个端口 访问到 哪个目录(网页文件所在目录),Nginx 示例配置如下:

server {
listen 80; # 监听端口,http 80 https 443
server_name dogyupi.com; # 域名
index index.html; # 主页文件
root /web/xxx; # 网页文件所在目录
}

然后用户访问 dogyupi.com 就能访问到网页了。

2. 宝塔 Linux

这种方式部署网站也是需要 web 服务器的,只不过通过使用宝塔 Linux,能够可视化地安装和管理 Linux 服务器上的软件,比如一键安装 Nginx、更方便地管理配置:

现在我上线访问量不大的新网站时,一般都会安装宝塔 Linux,的确非常方便省事儿。

3. 静态网站托管

如果我们没有完整的服务器,也可以把网页文件放到静态网站托管平台上,比如 GitHub Pages、Gitee Pages、腾讯云静态网站托管等。

下图是 GitHub Pages 提供的网站访问能力,把代码上传到指定分支、指定代码文件所在目录即可:

你甚至可以把网页文件像图片文件一样直接扔到云服务商提供的对象存储平台上(还可以搭配 CDN 加个速)。但是,这种方式仅限于静态页面(必须每个页面路由都有对应的 html 文件),否则可能会出现刷新页面 404 的情况。

4. 容器

通过 Docker 容器技术,我们可以把 web 服务器以及网页文件打包成一个镜像,然后在服务器上拉取镜像并执行就好。

大致的步骤就是在网上 copy 一个 Dockerfile 文件,然后执行 docker build 命令构建镜像,最后 docker run 命令执行。

5. 容器托管平台

如果使用上一步提到的部署方式,我们每次代码更新后都要手动去执行镜像构建、关闭老容器、启动新容器,非常麻烦,而且没法对容器进行统一的管理。所以更方便的方式是使用云服务商提供的容器托管平台(比如微信云托管),可以实现自动化构建以及发布版本化等一系列强大的功能。

微信云托管

后端部署

后端项目我就拿 Java 来举例吧,打包后一般有两种产物形式:依赖 web 服务器部署的 war 包,以及内嵌 web 服务器 & 可直接运行的 jar 包。对应的部署方式也不同,加起来共有 5 种。

1. web 服务器

如果你要部署 war 包,最常见的 web 服务器当属 tomcat 和 jetty 了,和部署前端项目一样,先手动安装 tomcat,然后改几行配置文件,让 tomcat 能找到 war 包即可。注意尽量不要暴露 tomcat 提供的应用管理页面哦!

Tomcat 应用管理页面

2. 直接启动

如果你使用 SpringBoot 框架开发,打包之后得到的是 jar 包,内置了 tomcat 等 web 服务器,因此只需要用一行命令启动 jar 包即可,比如:

java -jar app.jar --spring.profiles.active=prod

如果想在后台运行 jar 包,那就给命令开头补充 nohup ,结尾补充  &

3. 宝塔面板

和前端部署一样,如果你懒得自己在服务器上安装 java、maven、tomcat 等环境,可以直接用宝塔面板来帮你安装:

宝塔面板安装软件

4. 容器

使用 Docker 容器技术,理论上可以封装任何环境和应用,对于后端 Java 项目来说,把 Java 环境、Maven 和 jar 包封装成一个镜像就好了。

在写 Dockerfile 时,可以直接使用 maven:3.5-jdk-8-alpine 这种基础镜像,自带了 jdk 和 maven,省去了自己写安装脚本的麻烦。

当然,有需要的话,你还可以在 Java 容器前加个 Nginx 负载均衡~

5. 容器托管平台

只要是容器,就可以放到容器托管平台进行管理,对于后端应用来说也是如此,不再赘述~



扯了那么多种部署方式,你最喜欢或者最常用的网站部署方式是什么呢?

图文的方式介绍起来比较麻烦,今天晚上 我会在自己的 编程知识星球 内直播带大家学习几种前后端项目部署的方式,把之前星球内全程直播带大家开发的用户中心项目搞上线!

欢迎大家加入星球吧~ 和近 6000 名小伙伴们一起交流学习,向鱼皮等大厂同学 1 对 1 提问、帮你定制学习计划不迷茫、跟着鱼皮直播做项目提升编程能力(往期直播可回看)、领取海量优质编程资源等等。

只欢迎想进步的同学,扫码限时优惠加入:


往期推荐

怎么做个不用网络的软件?

都这个点儿了,这帮人竟然在。。。

做了个找打的网站,拿去玩!

字节跳动最爱考的 64 道算法题(JS版)

5000 人,炸了!

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存