beego项目部署上线完整过程

前言

博客做完了,但是因为一开始就是在本地使用 bee run 来跑测试,那么到了正式服务器,如何来进行部署呢.网上查了好多发现只是略微说了下使用什么部署,却没有完整的部署过程,我将描述下本博客在部署上线的完整过程

前期

需要完整测试好项目的完整,将代码部署到 git 环境,因为我自己在服务器搭建了 git 服务器,所以暂时不用 github, 我使用的是gitolite来配合 git 服务器进行管理,选择他的理由是权限分配和仓库管理实在是方便,虽然是我一个人开发,但是这个权限用起来很好,后面另一篇文章会讲述gitolite的使用方法和配置.通过 gitolite 搭建起来 git 链接后,就可以轻松的将代码提交到自己的git服务器了

需要提交的代码点

不是完整的代码结构,而且项目结构,比如我的项目在 src 下面的 blog 目录,其他的例如 github 和 golang.io这些目录不需要提交上去,需要将他们加入.ignore 文件,包括配置文件和编译文件.

部署上线工作

在项目要发布的时候,因为之前的依赖包没有和 git 一起提交,所以在此处需要一个golang包管理工具:Godeps来管理依赖

安装godeps

go get github.com/tools/godep

可以通过 help 来查看具有的命令:

godep help

在 help 里面可以查看到详细的信息
下面就直接将项目纳入godep管理
我的项目完整目录是:

前往我划线的 blog 目录下面,然后运行 godep save 命令
如果提示依赖缺少了,就直接在当前目录进行 go get 依赖包,比如提示缺少github.com/astaxie/beego,直接当前目录运行:

go get github.com/astaxie/beego

一直到不报错位置,应该会在当前目录下面生成Godeps目录,不用管他.
到此代码算是到了服务器了.

使用nginx服务器来进行部署

我使用的是 nginx 来进行部署的,因为需要一些日志信息和一些其他的配置利于好管理,因为服务器还有别的 php 项目在运行,所以直接使用 nginx 来进行服务部署.
nginx 的配置信息如下:

server
{
listen 80;
listen 443 ssl http2;
server_name www.aicyun.com aicyun.com;

#SSL-START SSL相关配置,请勿删除或修改下一行带注释的404规则
#error_page 404/404.html;
#HTTP_TO_HTTPS_START
if ($server_port !~ 443){
rewrite ^(/.*)$ https://$host$1 permanent;
}
#HTTP_TO_HTTPS_END
ssl_certificate /etc/letsencrypt/live/www.aicyun.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/www.aicyun.com/privkey.pem;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4:!DH:!DHE;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
error_page 497 https://$host$request_uri;

#SSL-END

#ERROR-PAGE-START 错误页配置,可以注释、删除或修改
error_page 404 /404.html;
error_page 502 /502.html;
#ERROR-PAGE-END

#PHP-INFO-START PHP引用配置,可以注释或修改
# include enable-php-70.conf;
#PHP-INFO-END

#REWRITE-START URL重写规则引用,修改后将导致面板设置的伪静态规则失效
include /www/server/panel/vhost/rewrite/www.aicyun.com.conf;
#REWRITE-END

#禁止访问的文件或目录
location ~ ^/(\.user.ini|\.htaccess|\.git|\.project|LICENSE|README.md)
{
return 404;
}

location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
expires 30d;
access_log off;
root "/www/wwwroot/blog/src/blog/static";
try_files $uri @backend;
}

location ~ .*\.(js|css)?$
{
expires 12h;
access_log off;
root "/www/wwwroot/blog/src/blog/static";
try_files $uri @backend;
}
location ~* ^.+\.(eot|ttf|otf|woff|svg)$ {
access_log off;
expires max;
root "/www/wwwroot/blog/src/blog/static";
try_files $uri @backend;
}
access_log /www/wwwlogs/www.aicyun.com.log;
location / {
try_files /_not_exists_ @backend;
}
location @backend {
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $http_host;
proxy_pass https://127.0.0.1:8090;
}
}

上面有一些是配置 http2和 https 的所以有点长,和一般的 nginx 配置不同的地方在反向代理那:

location / {
try_files /_not_exists_ @backend;
}
location @backend {
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $http_host;
proxy_pass https://127.0.0.1:8090;
}

当然可以使用官方提供的 nginx 配置信息:

server {
listen 80;
server_name .a.com;

charset utf-8;
access_log /home/a.com.access.log;

location /(css|js|fonts|img)/ {
access_log off;
expires 1d;

root "/path/to/app_a/static";
try_files $uri @backend;
}

location / {
try_files /_not_exists_ @backend;
}

location @backend {
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $http_host;

proxy_pass http://127.0.0.1:8080;
}
}

配合supervisor来管理进程

因为 nginx 不太好控制进程的重启和暂停,所以使用supervisor来进行 go 程序的重启运行. go 是一种编译型的语言,就是静态语言,所以最终编译的文件会以进程跑在服务后台;
supervisor一些操作

supervisorctl reload aicyun

编译代码

我这不打包,go 是默认安装的,安装很简单

yun install go

然后配置下 gopath 到项目里面就是上面 src 上级目录
配置 gopath 自行百度

编译go 文件:

go buid aicyun -o ./

上面的是在上面图片的红线目录执行,成功后会在当前目录出现 blog 文件.然后通过supervisor来管理.新增supervisor管理进程文件配置,通过 yun 安装的默认是在 /etc/supervisord.d下面

vim aicyun.ini

写入下面的配置信息:

[program:aicyun]
directory=/www/wwwroot/blog/src/blog
command=/www/wwwroot/blog/src/blog/aicyun
autostart=true
user=root
redirect_stderr=true
stdout_logfile =/www/wwwlogs/www.aicyunsup.log

重启

配置玩了之后没有出现问题就重启吧

supervisorctl reload aicyun
nginx -s reload

文章出处:https://www.aicyun.com/article/31

你可能感兴趣的:(golang)