文章

从0到1 轻松部署项目

这是一个分享如何部署前后端分离的项目

从0到1 轻松部署项目

从0到1 轻松部署项目

1. 前言

最近在尝试部署一个项目由于是第一次部署,所以遇到了很多问题,于是决定写一篇博客来记录一下部署的过程,方便以后查阅。

2.项目背景

前端使用nodejs的新生框架svelteKit;

后端使用Golang,无框架;

数据库使用关系型postgresql

操作系统:window11

3. 准备工作

3.1. 购买并连接服务器

阿里云地址

1
https://cn.aliyun.com/

首先需要购买一台服务器,我选择的是阿里云的ECS服务器,购买时需要注意选择合适的配置,比如CPU、内存、带宽等。新人的话标配版。一年99块,足够了。 我的服务器是Ubuntu的操作系统

avatar1

之后可以控制台的实例中,找到刚刚购买的服务器ECS。进行远程连接,建议直接先使用密码登录,以Root的角色登录

avatar2

3.2. 安装宝塔面板

1
wget -O install.sh http://download.bt.cn/install/install-ubuntu_6.0.sh && sudo bash install.sh 2d18f339c

进入以下界面

avatar3

即可安装,并且需要下载证书

1
https://dg2.bt.cn/ssl/baota root.pfx 

进入以下网址,输入密码www.bt.cn,即可成功运行安装宝塔面板

3.3 进入宝塔面板

打开图片中外网的网址即可进行宝塔面板,输入刚刚的用户名跟密码,即可进入到宝塔界面,随后一键安装第一个

avatar4

等待安装即可

avatar5

4.部署postgresql

4.1安装postgresql服务

1
https://cn.linux-console.net/?p=22460

即可安装,并且创建属于自己用户的数据库,可以使用VScode中的插件进行远程连接尝试

5.部署Golang后端

5.1 在服务器上安装Golang的运行环境

  • 1.下载适用于linux的golang安装包。可以去官网下载,也可以在阿里云这个网站下载https://mirrors.aliyun.com/golang/。本项目下载go1.21.12.linux-amd64.tar.gz这个包。
  • 2.把下好的包通过宝塔文件系统放入服务器中,执行指令安装golang
1
tar -C /usr/local -xzf go1.22.1.linux-amd64.tar.gz 
  • 3.需要在配置文件中添加GO语言环境变量
1
2
3
echo 'export PATH=$PATH:/usr/local/go/bin' >> ~/.bashrc
echo 'export GOROOT=/usr/local/go' >> ~/.bashrc
echo 'export GOPATH=/www/wwwroot/goweb' >> ~/.bashrc
  • 4.立即生效,即可在任何地方使用GO的命令。
1
source ~/.bashrc

接着检查是否安装成功

1
go version

5.2 将Golang项目通过宝塔界面上传到服务器,启动后端

  • 1.创建对应的文件夹,用于存放你的Golang项目,随后执行下面的指令
1
2
go mod tidy
go build

即可生成Linux的可执行文件 使用ls指令来查看是否增加了一个无任何后缀的文件

  • 2.接着使用指令启动后端,&作用是在后台默默的运行,»作用将打印信息追加到当前目录之下的output.log的文件里面,把../main换成自己的路径跟可执行文件名称即可
1
nohup ../main >> output.log 2>&1 &
  • 3.需要开放监听端口,后端监听什么端口就去安全组中开放端口,在原GO项目中添加一些打印信息在output.log能看到打印信息,后端运行正常。 avatar6 avatar6
  • 4.或者可以查看此时的运行端口来查看
1
ps aux | grep '...'

路径换成对应自己的可执行文件路径即可 avatar6 端口图片

6.部署前端svelteKit项目

6.1打包自己的前端项目

  • 1.把自己的项目安装上自动化打包的包,需要安装的包,但是要注意与主的svelte版本进行适配
1
"@sveltejs/adapter-auto": "^3.0.0",
  • 2.把svelte.config.js文件添加上这一段:
1
2
3
4
5
6
7
8
9
10
11
12
kit: {
		adapter: adapter({
			// default options are shown. On some platforms
			// these options are set automatically — see below
			pages: 'build',
			assets: 'build',
			fallback: 'index.html',
			precompress: true,
			strict: true,
		}),

	}

6.2 部署前端项目

即可使用npm run build来进行项目打包,之后会在主目录下方生成一个build文件夹,把这个build文件夹拖入到文件系统里面,开启一个网站站点

avatar7

之后去配置文件,添加上一段nginx转发的协议即可:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
      # 反向代理,将指定路径转发到指定目标, '/api' 'http' 请求
  location /api {
    resolver 127.0.0.11;
    set $target http://127.0.0.1:6167;
    proxy_pass $target;

    proxy_set_header Host $http_host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-for $remote_addr;

    port_in_redirect off;

    proxy_connect_timeout 300s;
    proxy_send_timeout 300s;
    proxy_read_timeout 300s;
  }
	
  # '/msg'  'websocket' 连接
  location /msg {
    resolver 127.0.0.11;
    set $target http://127.0.0.1:6167;
    proxy_pass $target;
    
    proxy_set_header Host $http_host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-for $remote_addr;

    port_in_redirect off;

    proxy_connect_timeout 300s;
    proxy_send_timeout 300s;
    proxy_read_timeout 300s;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";

  }


  location / {
    # First attempt to serve request as file, then
    # as directory, then fall back to redirecting to index.html
    try_files $uri $uri/ $uri.html /index.html;
  }

最后需要去服务器的安全组开放端口即可!大家可以参观我的选课管理系统!(等我域名申请下来的话….)

本文由作者按照 CC BY 4.0 进行授权