这是我参与「第五届青训营 」伴学笔记创作活动的第 6 天 关于青训营最后的大项目“极简抖音”。经过我们团队的商量打算使用如下技术栈:
框架:
服务器相关:
中间件相关:
数据库:
建议大家使用go mod搭建环境。
go env -w GO111MODULE=on
go env -w GOPROXY=https://goproxy.cn,direct # 设置国内下载源,这样的话下载包很快
Gin
简介
Gin是一个golang的微框架,封装比较优雅,API友好,源码注释比较明确,具有快速灵活,容错方便等特点,对于golang而言,web框架的依赖要远比Python,Java之类的要小。自身的net/http足够简单,性能也非常不错。借助框架开发,不仅可以省去很多常用的封装带来的时间,也有助于团队的编码风格和形成规范
入门文档
一个简单的服务器
package main
import (
"github.com/gin-gonic/gin"
"net/http"
)
func main() {
r := gin.Default()
r.GET("/", func(c *gin.Context) {
c.String(http.StatusOK, "搭建完成")
})
r.Run(":8888") // 端口号8888
}
项目中的用途
做Http服务器用来进行接口之间的通信。
Gorm
简介
特性
- 全功能 ORM
- 关联 (Has One,Has Many,Belongs To,Many To Many,多态,单表继承)
- Create,Save,Update,Delete,Find 中钩子方法
- 支持
Preload、Joins的预加载 - 事务,嵌套事务,Save Point,Rollback To Saved Point
- Context、预编译模式、DryRun 模式
- 批量插入,FindInBatches,Find/Create with Map,使用 SQL 表达式、Context Valuer 进行 CRUD
- SQL 构建器,Upsert,数据库锁,Optimizer/Index/Comment Hint,命名参数,子查询
- 复合主键,索引,约束
- Auto Migration
- 自定义 Logger
- 灵活的可扩展插件 API:Database Resolver(多数据库,读写分离)、Prometheus…
- 每个特性都经过了测试的重重考验
- 开发者友好
GORM 官方支持的数据库类型有:MySQL, PostgreSQL, SQLite, SQL Server 和 TiDB
入门文档
项目中的用途
使用Gorm对数据库进行操作,而且使用GORM可以有效避免业务代码出现SQL注入的问题。
Nginx
简介
Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行。其特点是占有内存少,并发能力强。
入门文档
ubuntu下的安装
安装依赖
sudo apt-get update # 更新下apt源
sudo apt-get install gcc # Nginx必备
sudo apt-get install make # 编译安装需要make工具
sudo apt-get install libz-dev
sudo apt-get install libpcre3-dev
sudo apt-get install libssl-dev
通过apt安装
sudo apt-get install nginx
查看是否安装成功
nginx -v
sudo service nginx start
nginx文件安装完成之后的文件位置:
- /usr/sbin/nginx:主程序
- /etc/nginx:存放配置文件
- /usr/share/nginx:存放静态文件
- /var/log/nginx:存放日志 可能遇到的问题 如果启动失败,显示See "systemctl status nginx.service" and "journalctl -xe" for details. 使用一下命令
$ nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful
如果你的配置文件有问题,也能从错误信息中看出来:
a duplicate default server for [::]:80 in /etc/nginx/nginx.conf:41
netstat -nap | grep 端口号,查询端口被那个进程所占用 然后 一般是可能是80 被占用了,导致启动不了。 可以干掉这端口然后启动。
sudo fuser -k 80/tcp
或者从配置文件中修改端口号。
项目中的用途
提供静态资源服务
vsftpd
简介
vsftpd 是“very secure FTP daemon”的缩写,安全性是它的一个最大的特点。vsftpd 是一个 UNIX 类操作系统上运行的服务器的名字,它可以运行在诸如 Linux、BSD、Solaris、 HP-UNIX等系统上面,是一个完全免费的、开放源代码的ftp服务器软件,支持很多其他的 FTP 服务器所不支持的特征。比如:非常高的安全性需求、带宽限制、良好的可伸缩性、可创建虚拟用户、支持IPv6、速率高等。
安装配置
项目中的用途
搭建FTP服务器,存储投稿的视频
ffmpeg
简介
FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。采用LGPL或GPL许可证。它提供了录制、转换以及流化音视频的完整解决方案。
安装
sudo apt-get install ffmpeg
项目中的用途
处理视频的编码解码以及封面截取。
goftp
简介
goftp 旨在成为一个高级 FTP 客户端,在服务器支持时利用有用的 FTP 功能。
-
用于并行传输/遍历的连接池。
-
自动恢复中断的文件传输。
-
显式和隐式 FTPS 支持(仅 TLS,无 SSL)。
-
支持 IPv6。
-
针对 pure-ftpd 和 proftpd 运行的相当不错的自动化测试。
项目中的用途
将go连接到ftp服务器中
Redis
简介
Redis是现在最受欢迎的NoSQL数据库之一,Redis是一个使用ANSI C编写的开源、包含多种数据结构、支持网络、基于内存、可选持久性的键值对存储数据库,其具备如下特性:
- 基于内存运行,性能高效
- 支持分布式,理论上可以无限扩展
- key-value存储系统
- 开源的使用ANSI C语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API
相比于其他数据库类型,Redis具备的特点是:
- C/S通讯模型
- 单进程单线程模型
- 丰富的数据类型
- 操作具有原子性
- 持久化
- 高并发读写
- 支持lua脚本
安装
sudo apt-get install redis-server
查看redis服务的状态为running,说明安装完成系统自动启动了服务
service redis-server status
开启远程连接:
找到/et/redis/redis.conf文件修改如下 ,注释掉 127.0.0.1 #bind 127.0.0.1,如果不需要远程连接redis则不需要这个操作。
找到/et/redis/redis.conf文件修改如下 ,添加 requirepass 123456(密码设置为123456)
启动: sudo service redis-server start
停止: sudo service redis-server stop
重启: sudo service redis-server restart
项目中的用途
存储读写次数比较多的数据,比如点赞喜欢等操作的数据。
RabbitMQ
简介
RabbitMQ是一款使用Erlang语言开发的,实现AMQP(高级消息队列协议)的开源消息中间件。首先要知道一些RabbitMQ的特点:
- 可靠性。支持持久化,传输确认,发布确认等保证了MQ的可靠性。
- 灵活的分发消息策略。这应该是RabbitMQ的一大特点。在消息进入MQ前由Exchange(交换机)进行路由消息。分发消息策略有:简单模式、工作队列模式、发布订阅模式、路由模式、通配符模式。
- 支持集群。多台RabbitMQ服务器可以组成一个集群,形成一个逻辑Broker。
- 多种协议。RabbitMQ支持多种消息队列协议,比如 STOMP、MQTT 等等。
- 支持多种语言客户端。RabbitMQ几乎支持所有常用编程语言,包括 Java、.NET、Ruby 等等。
- 可视化管理界面。RabbitMQ提供了一个易用的用户界面,使得用户可以监控和管理消息 Broker。
- 插件机制。RabbitMQ提供了许多插件,可以通过插件进行扩展,也可以编写自己的插件。
安装
RabbitMQ安装,首先要安装erlang依赖,版本对应图。
通过erlang官网直接下载安装包
再从github上面下载RabbitMQ 注意版本对应
MySQL
简介
MySQL: 是最流行的关系型数据库管理系统,用于持久化的存储数据到硬盘,功能强大,但是速度较慢 Redis:是缓存数据库,用于存储使用较为频繁的数据到缓存中,读取速度快。
安装
参考该链接