从零开始部署一个网站详细图文教程——腾讯云的服务器、SSL证书,阿里云的域名,七牛云的对象存储、CDN等

文章目录

  • 前期准备
  • 连接服务器
  • 配置Golang环境
  • 安装配置MySQL
  • 安装配置Redis
  • 安装配置Nginx
  • 安装Node
  • 域名解析
  • SSL证书下载
  • 启动项目
  • 配置CDN加速
  • 总结

前期准备

云服务器(必备)、已经备案的域名(必备),已签发的SSL证书(可以算必备,网站一般要求建立https连接)。

云服务器和域名需要去相应的云服务商获取,比如阿里云、腾讯云、华为云等等。

连接服务器

服务器使用的是腾讯云的,因为老板要求买便宜的。系统选用Ubuntu 20.04,拿到服务器后先重置密码,方便后面进行SSH远程来连接。

image-20231028161102346

去防火墙界面,打开22端口和3306端口,分别为SSH连接和MySQL远程连接做准备。

image-20231129203932846

笔者使用Finalshell作为远程连接工具,输入主机,用户名,密码等建立连接。阿里云的用户名一般为root,腾讯云的用户名一般是ubuntu。(说法不绝对)

image-20231129204158114

如果未连接成功,要么用户名或密码错误,要么主机ip地址(请填公网)错误,要么22端口没开。

如下图所示,我已正确连接。

image-20231028161334853

笔者在下包的时候觉得腾讯云的镜像源太慢,所以通过如下操作换成了阿里的镜像。

cd /etc/apt/

sudo vim sources.list

image-20231129205016495

配置Golang环境

详细的安装及配置命令见下面的代码块:

# 下载 Go 1.20.4 版本的 Linux AMD64 包
wget https://golang.google.cn/dl/go1.20.4.linux-amd64.tar.gz

# 将下载的包解压到 /usr/local 目录
sudo tar -C /usr/local -xzf go1.20.4.linux-amd64.tar.gz

# 删除下载的压缩包
rm go1.20.4.linux-amd64.tar.gz

# 打开用户配置文件 .bashrc
sudo vim ~/.bashrc

# 设置 Go 相关的环境变量
export GOPATH=/usr/local/go/GOPATH
export GOROOT=/usr/local/go
export GOPROXY=https://goproxy.cn
export GO111MODULE=on
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin

# 刷新配置文件
source ~/.profile

# 创建 GOPATH 目录并设置权限(不然的话,go get下包的时候显示权限不够,不能下载)
sudo mkdir /usr/local/go/GOPATH
sudo chmod 777 /usr/local/go/GOPATH

查看 Go 环境变量:

go env

出现以下内容代表Golang环境配置成功:
image-20231129205732165

安装配置MySQL

# 更新包列表
sudo apt update

# 安装 MySQL 服务器
sudo apt install mysql-server

# 检查 MySQL 服务器状态,如果是active表示安装成功。
sudo systemctl status mysql

# 以管理员身份进入 MySQL 数据库
sudo mysql

# 在 MySQL 中创建用户 'user',允许任何主机 '%' 使用密码 '123456' 连接
CREATE USER 'user'@'%' IDENTIFIED BY '123456';

# 给用户 'user' 赋予在所有数据库上的所有权限,并且具有 GRANT OPTION(授权他人的权限)
GRANT ALL PRIVILEGES ON *.* TO 'user'@'%' WITH GRANT OPTION;

# 刷新权限设置
FLUSH PRIVILEGES;

# 打开 MySQL 配置文件进行编辑
sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf

# 将绑定地址从默认的 127.0.0.1 更改为允许所有地址 0.0.0.0
#bind-address            = 127.0.0.1
bind-address            = 0.0.0.0

# 重启 MySQL 服务以应用更改
sudo service mysql restart

使用Navicat来连接MySQL,输入主机地址,刚新建的MySQL的用户名和密码,点击测试连接,即可成功。

image-20231129210319524

安装配置Redis

# 更新包列表
sudo apt update

# 安装 Redis 服务器
sudo apt install redis-server

# 检查 Redis 服务器状态,active代表安装成功。
sudo systemctl status redis-server

#如果要远程连接Redis可进行下列操作
# 打开 Redis 配置文件进行编辑
sudo vim /etc/redis/redis.conf

# 将绑定地址从默认的 127.0.0.1 更改为允许所有地址 0.0.0.0
#bind 127.0.0.1 ::1
bind 0.0.0.0 ::1

# 重启 Redis 服务以应用更改
sudo service redis-server restart

安装配置Nginx

# 更新包列表
sudo apt update

# 安装 Nginx 服务器
sudo apt install nginx

# 检查 Nginx 服务器状态,如果是active,代表安装成功
sudo systemctl status nginx

# 确保防火墙配置允许 HTTP(80)和 HTTPS(443)端口的流量
# 如果使用 UFW,启用 'Nginx Full' 配置文件,其中包含了这两个端口
sudo ufw allow 'Nginx Full'

# 查看防火墙状态,确认规则已生效
sudo ufw status

# 防火墙状态显示如下:
# Status: active
# To                         Action      From
# --                         ------      ----
# 22/tcp                     ALLOW       Anywhere
# Nginx Full                 ALLOW       Anywhere
# 22/tcp (v6)                ALLOW       Anywhere (v6)
# Nginx Full (v6)            ALLOW       Anywhere (v6)

刻印通过访问你的云服务器的公网IP,如果Nginx启动成功,应该会出现下面的界面:
image-20231129211402243

安装Node

如果前端启动需要npm相关工具的话,根据下列操作安装nodejs

# 安装 Node.js
sudo apt-get install nodejs

# 安装 npm(Node.js 包管理器)
sudo apt-get install npm

# 查看安装的 Node.js 版本
node -v

# 查看安装的 npm 版本
npm -v

域名解析

域名使用的是阿里云的,添加一条A记录,指向你的服务器的公网IP即可。

image-20231129211949821

SSL证书下载

我是去腾讯云弄的SSL证书,当然你也可以去阿里云,都可以申请免费的SSL证书,而且都可以申请好几张。

给你已经备案的域名申请SSL证书后,会有一定的审核验证,一般会让你在域名解析处添加一条用于验证的记录,这个比较简单,按照腾讯云给的流程走就行了,easy~

证书签发后,就可以点击下载按钮了。

image-20231129212515492

选择Nginx类型的证书:

image-20231129212602262

打开后有四个以你已经备案的域名开头的四个文件:
image-20231129212755546

将以crtkey结尾的两个文件复制到你的后端项目的根目录上。

启动项目

首先将你的前后端项目都打包放到服务器上,专业版的Finalshell可以远程传输文件,当然Goland专业版也可以。

项目目录大概长下面的样子:
image-20231129213923742

可以看到我编写了Makefile,可以通过make run来启动后端,当然也可以通过一般的命令:go run main.go。后端服务跑在8080端口上。

然后就是编写nginx的配置文件,这是很关键的一步。

下面奉上我的nginx.conf文件:

user root;
worker_processes auto;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;

events {
    use epoll;
	worker_connections 5000;
	# multi_accept on;
}

http {
	server {
	 #SSL 默认访问端口号为 443
     listen 443 ssl;
     #请填写绑定证书的域名,例如xxx.cn
     server_name xxx.cn;
     #请填写证书文件的相对路径或绝对路径,由于nginx配置文件和证书文件都在项目根目录下,这里只需要填文件名即可
     ssl_certificate xxx.cn_bundle.crt;
     #请填写私钥文件的相对路径或绝对路径
     ssl_certificate_key xxx.cn.key;
     ssl_session_timeout 5m;
     ssl_protocols TLSv1.2 TLSv1.3;
     #请按照以下套件配置,配置加密套件,写法遵循 openssl 标准。
     ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
     ssl_prefer_server_ciphers on;

#反向代理配置,指向后端的服务端口  
location /api/ {
        proxy_pass http://localhost:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
	
	#前端相关配置
    root /code/project/web;
    index index.html;

    location / {
        try_files $uri $uri/ /index.html;
    }

    location /static/ {
        alias /code/project/web/static/;
    	}
    }

	#下面的不用管,弄上就行
	sendfile on;
	tcp_nopush on;
	tcp_nodelay on;
	keepalive_timeout 65;
	types_hash_max_size 2048;
	client_max_body_size 20m;
	include /etc/nginx/mime.types;
	default_type application/octet-stream;
	ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; # Dropping SSLv3, ref: POODLE
	ssl_prefer_server_ciphers on;
	access_log /var/log/nginx/access.log;
	error_log /var/log/nginx/error.log;
	gzip on;
	include /etc/nginx/conf.d/*.conf;
	include /etc/nginx/sites-enabled/*;
}

然后就是重启nginx,我喜欢先kill掉原来的nginx,再重新启动。

ubuntu@VM-16-9-ubuntu:~$ ps -ef |grep nginx

ubuntu   1109610 1040889  0 21:56 pts/0    00:00:00 grep --color=auto nginx
root     3942060       1  0 Nov26 ?        00:00:00 nginx: master process nginx -c /code/project/nginx.conf
root     3942061 3942060  0 Nov26 ?        00:00:19 nginx: worker process
root     3942062 3942060  0 Nov26 ?        00:00:00 nginx: worker process

ubuntu@VM-16-9-ubuntu:~$ sudo kill 3942060

然后通过下面的命令启动nginx,注意后面跟你的nginx.conf的路径,建议绝对路径。

sudo nginx -c /code/project/nginx.conf

当然你也可以用更优雅的方式重启nginx

接下来当访问你的域名时,应该就能看到网页啦~

image-20231129220141820

配置CDN加速

如果你的项目用到了对象存储,可以配一个加速域名。

我这个项目对象存储使用的是七牛云,按图示进行操作:
image-20231129220648708

你同样需要使用已经备案的域名,还有该域名配套的SSL证书:
image-20231129220901549

我的网站域名是xxx.cn,我的加速域名是www.xxx.cn

然后它会给你一个域名,要求你在你的加速域名处添加一条CNAME解析记录,它给你的域名可能长这样:www-xxx-cn-idvn69p.qiniudns.com

你去域名解析处添加这条记录即可:
image-20231129221438054

回到七牛云界面,点击刷新域名,如果显示已配置,则代表域名解析成功。状态可能会显示处理中,必须要等到它变为成功,你才可以使用它。

然后给你的存储空间添加外链域名,这样你的CDN加速域名就配好啦!

image-20231129221829492

总结

在部署网站这方面,我也算是第一次部署这么一个需要上线的项目,遇到了很多报错和苦难,折腾了很久,中间有多次查阅各方面的资料,学习到了很多内容,部署好后非常有成就感。给我印象最深的点就是要学好计算机网络,这样你就能比较清楚明白每一步在干什么。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ABAP2XLSX 的安装和demo

ABAP2XLSX 是一个git上面的很好用的工具,它可以帮助abaper们更方便,更简单的生成各种各样复杂的自定义的excel,以满足各企业的信息化建设 在安装这个之前,请先查看之前的博客,去安装abapgit abap2xlsx地址&#xff1…

RabbitMQ的基本介绍

RabbitMQ的基本介绍 基于AMQP协议,Erlang语言开发,是部署最广泛的开源消息中间件,是最受欢迎的开源消息中间件之一。 AMQP,即Advanced Message Queuing Protocol,一个提供统一消息服务的应用层标准高级消息队列协议&a…

MySQL之undo日志

聊聊undo log 什么是undo log undo log(回滚事务),在事务没有提交前,MySQL将记录更新操作的反向操作到undo log日志中,以便进行回退保证事务的原子性 undo log的作用 1.提供回滚操作 我们在进行数据更新操作的时候…

肖sir__搭建环境报错:com.alibaba.druid:type=DruidDataSourceStat异常

报错现象: 解决方案: 同一个服务器配置多个tomcat,而这些tomcat里边的项目配置的数据库连接池都是用alibaba.druid。下面说下我的解决过程,首先,修改tomcat bin目录下的catalina.sh,添加如下代码: 代码如…

Flink(八)【窗口】

前言 终于忙完了四门专业课的期末,确实挺累啊。今天开始继续学习 Flink ,接着上次的内容。 今日摘录: 他觉得一个人奋斗更轻松自在。跟没有干劲的人在一起厮混,只会徒增压力。 -《解忧杂货店》 1、窗口 之前我们已经了解了…

HyperBDR云容灾v4.10.1发布,划重点:支持UCloud云平台自动化容灾+新增可灵活定义的备份策略

版本更新 HyperBDR云容灾v4.10.1版本来啦! 此次更新为大家带来了多个新功能,下面让我们来看看具体是哪些吧~ 01 策略管理新功能: 多时间段限速功能: 更加灵活的多个时间段限速选择,可以在创建策略时为不同的时间段设…

Zoho CRM:高效捕捉线索,精准管理客户

线索管理是销售过程中的重要环节,它可以获取潜在客户信息,有效的管理和转化,提高企业销售业绩。如今,Zoho CRM管理系统广泛应用于更多的企业,他们使用CRM系统进行线索管理,用以提高线索转化率。下面就来说说…

VsCode中使用功能vite创建vue3+js项目报错

VsCode中使用功能vite创建vue3js项目报错 VsCode中使用功能vite创建vue3js项目import模块报错如下处理方法 VsCode中使用功能vite创建vue3js项目import模块报错如下 处理方法 在项目根目录新建jsconfig.json {"compilerOptions": {"baseUrl": "./&q…

YOLOv7独家原创改进:自研独家创新FT_Conv,卷积高效结合傅里叶变换

💡💡💡本文自研创新改进:卷积如何有效地和频域结合,引入分数阶傅里叶变换和分数阶Gabor变换,最终创新到YOLOv7。 推荐指数:五星 在道路缺陷检测任务中,原始map为0.8,FT_Conv为0.82 收录YOLOv7原创自研 https://blog.csdn.net/m0_63774211/category_12511937.htm…

虚拟机指定开放数据库3306端口

1、查看当前防火墙状态: sudo firewall-cmd --state 2、开放指定端口 sudo firewall-cmd --zonepublic --add-port3306/tcp --permanent 3、重新加载防火墙配置 sudo firewall-cmd --reload 4、检查端口是否开放成功 sudo firewall-cmd --zonepublic --list-por…

macbook电脑运行缓慢和卡顿内存怎么清理了?

假如你还在为“你的系统内存不足”的提示所困扰,或者你的Mac电脑突然运行缓慢和卡顿,那么你一般需要认真了解一下macbook内存怎么清理了? MacBook是功能强大的电脑,这点毫无疑问,但是它仍旧会随着时间推移变得运行缓慢。值得庆幸…

6.16二叉搜索树中的搜索(LC700-E)

算法: 二叉搜索树自带顺序,所以不用强调前、中、后序。 调试过程: 原因:初始化变量result时,没有给result赋值 正确代码: /*** Definition for a binary tree node.* public class TreeNode {* int…

Typora .MD笔记中本地图片批量上传到csdn (.PNG格式)(无需其他任何图床软件)

Typora .MD笔记中本地图片批量上传到csdn (.PNG格式)(无需其他任何图床软件) 截图软件推荐 qq 截图 快捷键 ctrlshiftA. 步骤一 设置Typora 的图片 点击文件. 点击偏好设置 ->图像 我们可以选择将图片复制到我们的文件夹中。 建议刚写好文件标题就…

Linux系统安装-以文本模式安装rhel8

文本模式安装提供了用于安装 Red Hat Enterprise Linux 的交互式非图形界面。此安装方法对于没有图形功能的系统很有用。但是,在开始基于文本的安装之前,请务必考虑可用的替代方案。文本模式在安装过程中可以做出的选择数量有限。 目录 交互式文本模式安…

数据结构树与二叉树(5)Huffman树

#include <iostream> #include <stack> #include <queue>using namespace std;struct Node {char name ;int code[200];int num 0;//code的下标int weight 0;//权重&#xff08;次数&#xff09;Node* lchild;//左孩子Node* rchild;//右孩子Node* parent;N…

switch....case击穿| return 和break的区别

1、我们首先要明白switch..case的语法使用&#xff1a; 执行流程&#xff1a;首先计算switch后面圆括号中表达式的值&#xff0c;然后用此值依次与各个case的常量表达式比较,若圆括号中表达式的值与某个case后面的常量表达式的值相等,就执行此case后面的语句,执行后遇break语句…

牛客剑指offer刷题模拟篇

文章目录 顺时针打印矩阵题目思路代码实现 顺时针打印矩阵 题目 描述 输入一个矩阵&#xff0c;按照从外向里以顺时针的顺序依次打印出每一个数字&#xff0c;例如&#xff0c;如果输入如下4 X 4矩阵&#xff1a; [[1,2,3,4], [5,6,7,8], [9,10,11,12], [13,14,15,16]] 则依次…

MGF4964BL-01 低噪声 InGaAs HEMT(高电子迁移率晶体管) K波段放大器 微X型塑料封装

MGF4964BL-01超低噪声 InGaAs HEMT(高电子迁移率晶体管)设计用于K波段放大器。MGF4964BL-01是符合 RoHS 标准的产品&#xff0c;通过无铅认证。 MGF4964BL-01特征&#xff1a; f20GHz NFmin 时的低噪声系数。0.65 分贝(典型值) f20GHz 时的高相关增益 Gs 13.5dB(典型值。) MG…

C#文件流二进制文件的读写

目录 一、BinaryWriter类 二、BinaryReader类 三、示例 1.源码 2.生成效果 二进制文件的写入与读取主要是通过BinaryWriter类和BinaryReader类来实现的。 一、BinaryWriter类 BinaryWriter类以二进制形式将基元类型写入流&#xff0c;并支持用特定的编码写入字符串&#…

【开源】基于JAVA的高校学生管理系统

项目编号&#xff1a; S 029 &#xff0c;文末获取源码。 \color{red}{项目编号&#xff1a;S029&#xff0c;文末获取源码。} 项目编号&#xff1a;S029&#xff0c;文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 学生管理模块2.2 学院课程模块2.3 学…
最新文章