Linux实验:Golang+MySQL部署Web环境

题目要求

使用SSH客户端(如SecureCRT)远程连接Linux操作系统,使用编程语言Golang搭建网页运行环境,并实现从MySQL中读取学生学号和姓名信息到页面中显示。
要求分别在本地和云端操作成功,云端的网页能被外网访问。

编程环境

本地

本地操作系统:Windows 10
本地虚拟机运行平台:VMware Workstation Pro 14
本地虚拟机镜像:CentOS-7-x86_64-Minimal-1908.iso

云端

云服务器提供商:阿里云计算有限公司
Linux发行版本及版本号:CentOS 7.6 64位

客户端

SecureCRT

命令实现

本人安装的是go 1.14.2版本,其他版本的安装和配置可能有所变化。

1、MySQL的安装和配置

详见博客《Linux实验:MySQL的安装和配置》。

2、下载安装Golang

wget –c https://dl.google.com/go/go1.14.2.linux-amd64.tar.g

# 解压到/usr/local/文件夹下
tar -zxvf go1.14.2.linux-amd64.tar.gz -C /usr/local/

3、创建Golang工作目录

# 在当前目录下创建一个go目录,go目录下有src、bin和pkg三个子目录
mkdir -p go/src go/bin go/pkg

4、添加Golang相关环境

# 修改涉及Linux环境变量的/etc/profile文件
vi /etc/profile
# 按下i键进入编辑模式,添加以下内容:
export GOROOT=/usr/local/go   # 设置Golang的安装路径
export GOPATH=$HOME/go        # 设置Golang的工作目录路径
export PATH=$PATH:$GOROOT/bin # 添加到系统变量
# 按下esc键退出编辑模式
# 保存并退出文件
:wq

# 使配置生效
source /etc/profile 

# 查看Golang环境配置信息
go env

# 查看Golang语言版本
go version

5、编写使用9090端口的Golang网页

# 网页文件要放在Golang工作目录下的src文件夹中
vi go/src/MyGolang.go
# 按下i键进入编辑模式,添加以下内容:
package main
import (
    "fmt"
    "net/http"
    "strings"
    "log"
)
func sayHello(w http.ResponseWriter, r *http.Request) {
    r.ParseForm() // 解析参数,默认是不会解析的
    fmt.Println(r.Form) // 这些信息是输出到服务器端的打印信息
    fmt.Println("path", r.URL.Path)
    fmt.Println("scheme", r.URL.Scheme)
    fmt.Println(r.Form["url_long"])
    for k, v := range r.Form {
        fmt.Println("key:", k)
        fmt.Println("val:", strings.Join(v, ""))
    }
    fmt.Fprintf(w, "Hello Golang!") // 这个写入到w的是输出到客户端的
}
func main() {
    http.HandleFunc("/MyGolang.go", sayHello) // 设置访问的路由
    err := http.ListenAndServe(":9090", nil) // 设置监听的端口为9090
    if err != nil {
        log.Fatal("ListenAndServe: ", err)
    }
}
# 按下esc键退出编辑模式
# 保存并退出文件
:wq

Golang语法参考《从0开始Go语言,用Golang搭建网站》。

6、开放9090端口

# 重启防火墙,以保证防火墙一定是开启的
systemctl restart firewalld

# 在防火墙添加端口9090且设置永久开启
firewall-cmd --zone=public --add-port=9090/tcp --permanent

# 重新加载防火墙,使上一步操作生效
firewall-cmd --reload

# 查看9090端口是否开放
firewall-cmd --zone=public --query-port=9090/tcp

如果是Linux云服务器,则还要在阿里云服务器控制台增加端口为9090的安全组规则,才能保证Golang网页能被访问,结果如下图所示。具体操作请参考博客《Linux脚本编程:sudo命令下安装ssh服务并自定义端口和允许root登陆》中代码实现部分的注意事项。

7、开放HTTP服务

# 重启防火墙,以保证防火墙一定是开启的
systemctl restart firewalld

# 在防火墙添加服务http且设置永久开启
firewall-cmd --zone=public --add-service=http --permanent

# 重新加载防火墙,使上一步操作生效
firewall-cmd --reload

# 查看http服务是否开放
firewall-cmd --query-service http

此步是为了让Linux云服务器IP能被外网访问。

8、测试Golang开发环境

# 切换到Golang网页文件所在目录
cd go/src/

# 编译生成可执行文件
go build MyGolang.go

# 运行可执行文件,&表示后台运行,不加的话ctrl+c退出当前命令后网页将不能访问
./MyGolang & 

# 在浏览器输入IP:9090/MyGolang.go查看网页是否正常显示

# 查看后台运行程序
jobs

# 找到正在运行的Golang网页的进程号,将其调到前台
fg 后台进程号

# 停止运行
ctrl+c

9、下载MySQL驱动包,使得Golang能连接MySQL

# 下载前确保Linux上已安装Git,如果没有安装则执行以下命令
yum –y install git

# 下载时间可能较长
go get github.com/go-sql-driver/mysql

此步本人曾因下载响应慢,于是根据网友的做法换成国内代理。但不知为什么,使用国内代理无法完整获得该驱动包,最终还是换了回来,耐心等待下载。具体的原因暂未找到,欢迎知情的朋友到评论区讨论!

10、修改Golang文件

# 网页文件要放在Golang工作目录下的src文件夹中
vi go/src/MyGolang.go
# 按下i键进入编辑模式,输入以下内容实现题目要求:
package main
import (
    "fmt"
    "net/http"
    "log"
    "database/sql"
    _"github.com/go-sql-driver/mysql"
)
func readDB(w http.ResponseWriter, r *http.Request) {
	// 连接数据库
	// DSN数据源字符串:用户名:密码@协议(地址:端口)/数据库名?参数=参数值
	db, err := sql.Open("mysql", "用户名:密码@tcp(localhost:3306)/数据库名?charset=utf8");
	defer db.Close()
	if err != nil{
	    fmt.Println("连接数据库失败!", err)
		return
	} 
	rows, err := db.Query("SELECT * FROM 数据表名")
	if err != nil {
		fmt.Println("查询数据库失败!", err)
		return
	}
	// 遍历结果集
	for rows.Next() {
	  	var id string
		var name string
		err := rows.Scan(&id,&name)
		if err != nil {
		     fmt.Println("读取数据库失败!", err)
		     return
	  	}
		fmt.Fprintf(w, "学号: %s - 姓名: %s", id , name)
	}
}
func main() {
    http.HandleFunc("/MyGolang.go", readDB) // 设置访问的路由
    err := http.ListenAndServe(":9090", nil) // 设置监听的端口为9090
    if err != nil {
        log.Fatal("ListenAndServe: ", err)
    }
}
# 按下esc键退出编辑模式
# 保存并退出文件
:wq

Golang连接MySQL语法参考《Go连接MySQL数据库》。

11、使用nohup命令运行Golang网页

# 切换到Golang网页文件所在目录
cd go/src/

# 编译生成可执行文件
go build MyGolang.go

# 运行可执行文件,&表示后台运行,不加的话ctrl+c退出当前命令后网页将不能访问
nohup ./MyGolang & 

# 在浏览器输入IP:9090/MyGolang.go查看网页是否正常显示

nohup 是 no hang up 的缩写,就是不挂断的意思,使用该命令是为了解决断开SSH连接后网页不能访问的问题。参考《nohup》。

如果文章内容出错或者您有更好的解决方法,欢迎到评论区指正和讨论!

  • 3
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值