![v2-646dfa0d028f8f7e6c027233b9a4eb95_1440w.jpg?source=172ae18b](http://img-03.proxy.5ce.com/view/image?&type=2&guid=6e7fa472-082e-eb11-8da9-e4434bdf6706&url=https://pic2.zhimg.com/v2-646dfa0d028f8f7e6c027233b9a4eb95_1440w.jpg?source=172ae18b)
开始
这篇文章的最终目标如下:
- 不考虑网站内容,网页只显示hello world
- 强制https访问
- 用golang构建并将其部署在以Nginx作为反向代理的Ubuntu 18.04服务器上
![v2-655745d361fb3e0ae809289209e79811_b.jpg](http://img-02.proxy.5ce.com/view/image?&type=2&guid=6e7fa472-082e-eb11-8da9-e4434bdf6706&url=https://pic2.zhimg.com/v2-655745d361fb3e0ae809289209e79811_b.jpg)
前期需要准备的内容如下:
- 一个可用的域名
- 一台可用的Ubuntu服务器(这里推荐使用Vultr的服务器)
- 在自己的PC上安装Xshell和Xftp
ubuntu上安装golang
使用Xshell登录到Ubuntu服务器,具体使用方法本文不再赘述。登陆完成之后可以使用Xftp图形化操作整个服务器目录。若使用Vultr主机登录之后,用户身份即为root
,GOPATH
的位置即为/root
。
只要在Xshell中输入下方代码即可在ubuntu上安装golang:
sudo apt-get install golang-go
看一下安装成功没?
go version
````
查看GOPATH位置:
go env
输入上方代码即可查看`GOPATH`的位置,在该位置下添加、新建文件夹、新建项目,则无需修改环境变量。如果想改变自己项目的位置,则需要修改。
## 上传go文件
1. 查看完`GOPATH`的位置后,在该路径下方新建文件夹:`~/go/go-web`(~代表了`GOPATH`)。
2. 在自己的PC上创建一个文件,将其命名为`main.go`,并使用编辑器(这里推荐使用Visual Studio Code)进行编辑。代码如下:
```go
package main //编译成可执行文件
import ( //导入包
"fmt"
"net/http"
)
func main() {
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Hello World")
}) //建立路由,即当访问:“主域名” 时即返回“hello world”
http.HandleFunc("/greet/", func(w http.ResponseWriter, r *http.Request) {
name := r.URL.Path[len("/greet/"):]
fmt.Fprintf(w, "Hello %sn", name)
}) //建立路由,即当访问:“主域名/greet/自定义” 时即返回“hello 自定义”
http.ListenAndServe(":9990",nil)
}
- 保存完上述文件后,将文件使用Xftp上传至
~/go/go-web
- 使用Xshell打开该文件夹
~/go/go-web
cd /root/go/go-web #前方的root应当根据GOPATH而变
- 输入下方代码进行编译:
go build main.go
创建Systemd Unit文件
- 在自己的PC上创建一个文件,将其命名为
goweb.service
,并使用编辑器(这里推荐使用Visual Studio Code)进行编辑。代码如下:
[Unit]
Description=goweb
[Service]
Type=simple
Restart=always
RestartSec=5s
ExecStart=/root/go/go-web/main
[Install]
WantedBy=multi-user.target
注意上方的/root
路径应当根据自己的GOPATH
进行改变。
- 使用Xftp在Ubuntu服务器中找到
/lib/systemd/system
路径,将goweb.service
放入此处。 - 在Xshell中回到根目录:
cd
- 启动网络服务
sudo service goweb start
- 查看服务状态
sudo service goweb status
如果显示状态为Active: active (running)
,即为启动成功。
安装Nginx
在Ubuntu下安装Nginx:
sudo apt-get install nginx
域名添加解析
在你的域名提供商处进行域名的解析,域名解析到Ubuntu服务器的ip地址上。一般来说,域名提供商会提供快速的域名解析操作,比如阿里云的新手引导
啊等等。不同的域名提供商操作可能不同,详情可以参阅各个域名提供商的帮助页面。
配置ssl证书
搞一个真实的ssl证书
一般来说现在的域名提供商处都会提供免费的ssl证书申请。这里推荐一个我一直使用的免费ssl证书提供商:freessl.cn。在其官网上经过简单的操作即可获得域名的ssl证书。
将该网站所提供的证书下载下来备用,具体步骤可以查看这篇文章。
![v2-60b7f0fd8ec52ee6d6e92944becbbcdd_b.jpg](http://img-02.proxy.5ce.com/view/image?&type=2&guid=6e7fa472-082e-eb11-8da9-e4434bdf6706&url=https://pic2.zhimg.com/v2-60b7f0fd8ec52ee6d6e92944becbbcdd_b.jpg)
一些准备工作
- 将ssl证书进行转换,具体步骤可以查看这篇文章。
- 将转换完成的ssl证书(
.crt
和.key
文件)分别放置到和main.go
同级的目录中(其实放到其他目录也没有关系,只要在下方的配置文件中指明路径即可)
修改Nginx配置文件
- 在自己的PC上创建一个文件,将其命名为
你的域名
,比如xd.sh.cn
,没有后缀名。使用编辑器(这里推荐使用Visual Studio Code)进行编辑。代码如下(需要根据自己的情况进行更改,如域名),这里展示三种情况:
下方代码仅配置了http,无法使用https访问网站。
server {
server_name xd.sh.cn www.xd.sh.cn;
location / {
proxy_pass http://localhost:9990;
}
}
下方代码仅配置了https,无法使用http访问网站。
server {
listen 443 ssl;
## listen 80; ##加上这句http和https均能访问
server_name xd.sh.cn www.xd.sh.cn;
ssl on;
ssl_certificate /root/go/go-web/server.crt;
ssl_certificate_key /root/go/go-web/server.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
location / {
proxy_pass http://localhost:9990;
}
}
下方代码会将http强制跳转至https,查了有挺多种方法。这里使用了return 301
这个方法,$server_name$
指代了上方的域名,request_uri
意味着域名后方的链接不管怎么变,都会进行跳转https。
server {
listen 80;
server_name xd.sh.cn www.xd.sh.cn;
return 301 https://$server_name$request_uri;
location / {
proxy_pass http://localhost:9990;
}
}
server {
listen 443 ssl;
server_name xd.sh.cn www.xd.sh.cn;
ssl on;
ssl_certificate /root/go/go-web/server.crt;
ssl_certificate_key /root/go/go-web/server.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
location / {
proxy_pass http://localhost:9990;
}
}
- 保存该文件,并上传至
/etc/nginx/sites-available
文件夹。 - 在Xshell中,执行以下命令,目的是在
/etc/nginx/sites-enabled
中建立一个该文件的快捷方式:
sudo ln -s /etc/nginx/sites-available/your_domain /etc/nginx/sites-enabled/your_domain
- 重新加载Nginx
sudo nginx -s reload
大功告成
- 打开浏览器,输入你的域名
https://your_domain
,例如https://xd.sh.cn
,即能访问。页面将出现Hello World
字样。 - 如果输入
https://your_domain/greet/your_name
。页面将出现Hello your_name
字样。 - 即使不输入
https://
,网站也会自动跳转至https。
参考资料
https://www.letscloud.io/community/how-to-deploy-a-go-web-application-using-nginx-on-ubuntu-1904www.letscloud.io Ubuntu 16.04安装Nginxwww.cnblogs.com原文地址
Ubuntu服务器上部署第一个golang web应用hxd.red![v2-646dfa0d028f8f7e6c027233b9a4eb95_180x120.jpg](http://img-01.proxy.5ce.com/view/image?&type=2&guid=6e7fa472-082e-eb11-8da9-e4434bdf6706&url=https://pic2.zhimg.com/v2-646dfa0d028f8f7e6c027233b9a4eb95_180x120.jpg)