Gin 部署实践

Golang
2019-11-27 12:01

开发容易部署难。将本地代码折腾上服务器还是花了挺多功夫的。在这里简单记录一下吧

代码托管

Github是很好用的代码托管平台,没有例外,本博客的代码也是托管在Github上的。地址是:https://github.com/YanxinTang/blog.git

Linux 环境配置

防火墙配置,允许http, https流量

sudo firewall-cmd --permanent --zone=public --add-service=http
sudo firewall-cmd --permanent --zone=public --add-service=https
sudo firewall-cmd --reload

部署

在服务器上安装Go, Git, Mariadb,拉取最近的代码并进行编译,都可以很顺利的完成。

守护进程,我使用了 Linux 的系统工具 Systemd。Service 配置如下

# /usr/lib/systemd/system/blog.service

[Unit]
Description=Simple Blog

[Service]
Type=simple
Restart=on-failure
RestartSec=10s
Environment=GIN_MODE=release                          // 环境变量,release 模式
WorkingDirectory=/home/opc/blog                       // 这里一定要指定工作目录,否则会因为模板路径问题而报错
ExecStart=/home/opc/blog/blog                         // 执行文件所在路径

[Install]
WantedBy=multi-user.target

添加完成,即可使用sudo systemctl start blog来启动我们的程序了。

配置Nginx反向代理

安装Nginx, 将/etc/nginx/nginx.conf里面server部分内容注释。然后新建配置文件

# /etc/nginx/conf.d/blog.conf
server {
    listen       80 default_server;
    server_name  _;

    location / {
        proxy_pass http://localhost:8080;
    }
}

sudo systemctl restart nginx, 重启Nginx, 此时访问你的服务器,不出意外,可以看到首页了已经。如果访问出错,请检查SELinux的httpd_can_network_connect配置项是否开启

上面只是简单的转发http请求到http,正式环境中,还需要配置https来增强连接安全性

配置https

我使用的是Let's Encrypt的免费证书,因此直接是用https://github.com/Neilpang/acme.sh这个工具来进行申请的。具体的步骤请参考此工具的wiki。只是需要说明的是,申请的时候指定域名时www@均需要添加到cert证书中。否则未添加的域名无法使用https访问。

申请成功后,下面是 Nginx https 的简单配置。

# 监听80端口请求,然后重定向到https
server {
    listen       80 default_server;
    server_name  www.chihv.com chihv.com;
    return 301 https://chihv.com$request_uri;   # http请求重定向至https
}

server {
    listen 443 ssl;
    server_name www.chihv.com chihv.com;
    
    # ssl
    ssl_certificate  /etc/nginx/ssl/fullchain.cer;
    ssl_certificate_key  /etc/nginx/ssl/chihv.key;
    # ssl_dhparam
    ssl_dhparam  /etc/nginx/ssl/dhparam.pem;
    
    # gzip
    gzip on;
    gzip_disable "msie6";

    gzip_vary on;
    gzip_proxied any;
    gzip_comp_level 6;
    gzip_buffers 16 8k;
    gzip_http_version 1.1;
    gzip_min_length 256;
    gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/vnd.ms-fontobject application/x-font-ttf font/opentype image/svg+xml image/x-icon;

    location / {
        proxy_pass http://localhost:8080;
    }
}

nginx -t检查配置,通过之后使用sudo systemctl restart nginx重启Nginx来应用配置。不出意外,现在已经可以使用https来访问网站了。

后续

Nginx 和 Systemd 的配置项都是现查资料然后照猫画虎写的,后面还需要多多学习,避免在运维阶段捉襟见肘。

参考

http://www.ruanyifeng.com/blog/2016/03/systemd-tutorial-commands.html

https://stackoverflow.com/questions/23948527/13-permission-denied-while-connecting-to-upstreamnginx

https://github.com/schollz/find/issues/56

验证码