成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

Golang項(xiàng)目部署

Tamic / 1118人閱讀

摘要:配置示例如下其中,為本地的應(yīng)用監(jiān)聽(tīng)端口。編譯程序跨平臺(tái)交叉編譯是的特點(diǎn)之一,可以非常方便地編譯出我們需要的目標(biāo)服務(wù)器平臺(tái)的版本,而且是靜態(tài)編譯,非常方便地解決了運(yùn)行依賴(lài)問(wèn)題。

文章來(lái)源:https://goframe.org/deploymen...

一、獨(dú)立部署

使用GF開(kāi)發(fā)的應(yīng)用程序可以獨(dú)立地部署到服務(wù)器上,設(shè)置為后臺(tái)守護(hù)進(jìn)程運(yùn)行即可。這種模式常用在簡(jiǎn)單的API服務(wù)項(xiàng)目中。

服務(wù)器我們推薦使用*nix服務(wù)器系列(包括:Linux, MacOS, *BSD),以下使用Ubuntu系統(tǒng)為例,介紹如何部署使用GF框架開(kāi)發(fā)的項(xiàng)目。

1. nohup

我們可以使用簡(jiǎn)單的nohup命令來(lái)運(yùn)行應(yīng)用程序,使其作為后臺(tái)守護(hù)進(jìn)程運(yùn)行,即使遠(yuǎn)程連接的SSH斷開(kāi)也不會(huì)影響程序的執(zhí)行。在流行的Linux發(fā)行版中往往都默認(rèn)安裝好了nohup命令工具。
命令如下:

nohup ./gf-app &
2. tmux

tmux是一款Linux下的終端復(fù)用工具,可以開(kāi)啟不同的終端窗口來(lái)將應(yīng)用程序作為后臺(tái)守護(hù)進(jìn)程執(zhí)行,即使遠(yuǎn)程連接的SSH斷開(kāi)也不會(huì)影響程序的執(zhí)行。
ubuntu系統(tǒng)下直接使用sudo apt-get install tmux安裝即可。使用以下步驟將應(yīng)用程序后臺(tái)運(yùn)行。

tmux new -s gf-app;

在新終端窗口中執(zhí)行./gf-app即可;

使用crt + B & D快捷鍵可以退出當(dāng)前終端窗口;

使用tmux attach -t gf-app可進(jìn)入到之前的終端窗口;

3. supervisor

supervisor是用Python開(kāi)發(fā)的一套通用的進(jìn)程管理程序,能將一個(gè)普通的命令行進(jìn)程變?yōu)楹笈_(tái)daemon,并監(jiān)控進(jìn)程狀態(tài),異常退出時(shí)能自動(dòng)重啟。官方網(wǎng)站:http://supervisord.org/
常見(jiàn)配置如下:

[program:gf-app]
user=root
command=/var/www/main
stdout_logfile=/var/log/gf-app-stdout.log
stderr_logfile=/var/log/gf-app-stderr.log
autostart=true
autorestart=true

使用步驟如下:

使用sudo service supervisor start啟動(dòng)supervisor服務(wù);

創(chuàng)建應(yīng)用配置文件/etc/supervisor/conf.d/gf-app.conf, 內(nèi)容如上;

使用sudo supervisorctl進(jìn)入supervisor管理終端;

使用reload重新讀取配置文件并重啟當(dāng)前supoervisor管理的所有進(jìn)程;

也可以使用update重新加載配置(默認(rèn)不重啟),隨后使用start gf-app啟動(dòng)指定的應(yīng)用程序;

隨后可以使用status指令查看當(dāng)前supervisor管理的進(jìn)程狀態(tài);

二、代理部署

代理部署即前置一層第三方的WebServer服務(wù)器處理所有的請(qǐng)求,將部分請(qǐng)求(往往是動(dòng)態(tài)處理請(qǐng)求)有選擇性地轉(zhuǎn)交給后端的Golang應(yīng)用程序執(zhí)行,后端部署的Golang應(yīng)用程序可以配置有多個(gè)。這種模式常用在復(fù)雜的WebServer配置中,常見(jiàn)的場(chǎng)景例如:需要靜態(tài)文件分離、需要配置多個(gè)域名及證書(shū)、需要自建負(fù)載均衡層,等等。

雖然Golang實(shí)現(xiàn)的WebServer也能夠處理靜態(tài)文件,但是相比較于專(zhuān)業(yè)性的WebServernginx/apache來(lái)說(shuō)比較簡(jiǎn)單,性能也較弱。因此不推薦使用Golang WebServer作為前端服務(wù)直接處理靜態(tài)文件請(qǐng)求。
Nginx

我們推薦使用Nginx作為反向代理的前端接入層,有兩種配置方式實(shí)現(xiàn)動(dòng)靜態(tài)請(qǐng)求的拆分。

靜態(tài)文件后綴

這種方式通過(guò)文件名后綴區(qū)分,將指定的靜態(tài)文件轉(zhuǎn)交給nginx處理,其他的請(qǐng)求轉(zhuǎn)交給golang應(yīng)用。
配置示例如下:

server {
    listen       80;
    server_name  goframe.org;

    access_log   /var/log/gf-app-access.log;
    error_log    /var/log/gf-app-error.log;

    location ~ .*.(gif|jpg|jpeg|png|js|css|eot|ttf|woff|svg|otf)$ {
        access_log off;
        expires    1d;
        root       /var/www/gf-app/public;
        try_files  $uri @backend;
    }

    location / {
        try_files $uri @backend;
    }

    location @backend {
        proxy_pass                 http://127.0.0.1:8199;
        proxy_redirect             off;
        proxy_set_header           Host             $host;
        proxy_set_header           X-Real-IP        $remote_addr;
        proxy_set_header           X-Forwarded-For  $proxy_add_x_forwarded_for;
    }
}

其中,8199為本地的golang應(yīng)用WebServer監(jiān)聽(tīng)端口。

例如,在該配置下,我們可以通過(guò)http://goframe.org/my.png訪問(wèn)到指定的靜態(tài)文件。

靜態(tài)文件目錄

這種方式通過(guò)文件目錄區(qū)分,將指定目錄的訪問(wèn)請(qǐng)求轉(zhuǎn)交給nginx處理,其他的請(qǐng)求轉(zhuǎn)交給golang應(yīng)用。
配置示例如下:

server {
    listen       80;
    server_name  goframe.org;

    access_log   /var/log/gf-app-access.log;
    error_log    /var/log/gf-app-error.log;

    location ^~ /public {
        access_log off;
        expires    1d;
        root       /var/www/gf-app;
        try_files  $uri @backend;
    }

    location / {
        try_files $uri @backend;
    }

    location @backend {
        proxy_pass                 http://127.0.0.1:8199;
        proxy_redirect             off;
        proxy_set_header           Host             $host;
        proxy_set_header           X-Real-IP        $remote_addr;
        proxy_set_header           X-Forwarded-For  $proxy_add_x_forwarded_for;
    }
}

其中,8199為本地的golang應(yīng)用WebServer監(jiān)聽(tīng)端口。

例如,在該配置下,我們可以通過(guò)http://goframe.org/piblic/my.png訪問(wèn)靜態(tài)文件。

三、容器部署

容器部署即使用docker化部署golang應(yīng)用程序,這是在云服務(wù)時(shí)代最流行的部署方式,也是最推薦的部署方式。

1. 編譯程序

跨平臺(tái)交叉編譯是golang的特點(diǎn)之一,可以非常方便地編譯出我們需要的目標(biāo)服務(wù)器平臺(tái)的版本,而且是靜態(tài)編譯,非常方便地解決了運(yùn)行依賴(lài)問(wèn)題。
使用以下方式靜態(tài)編譯Linux平臺(tái)amd64架構(gòu)的可執(zhí)行文件:

CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o gf-app main.go

這樣便編譯出來(lái)一個(gè)gf-app的可執(zhí)行文件。

2. 編譯鏡像

我們需要將該可執(zhí)行文件gf-app編譯生成docker鏡像,以便于分發(fā)及部署。Golang的運(yùn)行環(huán)境推薦使用alpine基礎(chǔ)系統(tǒng)鏡像,編譯出的容器鏡像約為20MB左右。

一個(gè)參考的Dockerfile文件如下( 可以參考gf-home項(xiàng)目的Dcokerfile: https://github.com/gogf/gf-home ):

FROM loads/alpine:3.8

LABEL maintainer="[email protected]"

###############################################################################
#                                INSTALLATION
###############################################################################

ADD ./gf-app /bin/main
RUN chmod +x /bin/main

###############################################################################
#                                   START
###############################################################################

CMD main

其中,我們的基礎(chǔ)鏡像使用了loads/alpine:3.8這個(gè)鏡像,基礎(chǔ)鏡像的Dockerfile地址:https://github.com/johngcn/do... ,倉(cāng)庫(kù)地址:https://hub.docker.com/u/loads

隨后使用 docker build gf-app . 命令編譯生成名為gf-appdocker鏡像。

3. 運(yùn)行鏡像

使用以下命令運(yùn)行鏡像:

docker run gf-app
4. 鏡像分發(fā)

容器的分發(fā)可以使用docker官方的平臺(tái):https://hub.docker.com/ ,國(guó)內(nèi)也可以考慮使用阿里云:https://www.aliyun.com/produc... 。

5. 容器編排

在企業(yè)級(jí)生產(chǎn)環(huán)境中,docker容器往往需要結(jié)合kubernetes或者docker swarm容器編排工具一起使用。
容器編排涉及到的內(nèi)容比較多,感興趣的同學(xué)可以參考以下資料:

https://kubernetes.io/

https://docs.docker.com/swarm/

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/27680.html

相關(guān)文章

  • 從PHP遷移至Golang - 基礎(chǔ)篇

    摘要:但是,隨著微服務(wù)架構(gòu)的興起以及容器時(shí)代的到來(lái),這種情況又再次加劇。最重要的是,在微服務(wù)與容器領(lǐng)域有很好的基礎(chǔ),后期系統(tǒng)可完美實(shí)現(xiàn)微服務(wù)化與容器化。 1、Why Not PHP 使用PHP構(gòu)建的WEB程序,隨著業(yè)務(wù)發(fā)展到一定體量之后,都不得不面臨以下一些問(wèn)題: 業(yè)務(wù)功能不斷擴(kuò)張,如何避免某單一業(yè)務(wù)功能故障影響整體,維持系統(tǒng)健壯性 業(yè)務(wù)邏輯復(fù)雜度不斷上升,如何解耦與模塊化,降低系統(tǒng)復(fù)雜性...

    Kerr1Gan 評(píng)論0 收藏0
  • Gin實(shí)踐 連載九 將Golang應(yīng)用部署到Docker

    摘要:將應(yīng)用部署到項(xiàng)目地址快上車(chē),支持一波原文地址注開(kāi)始前你需要安裝好,配好鏡像源本章節(jié)源碼在分支上從本章節(jié)開(kāi)始項(xiàng)目目錄都以為基準(zhǔn)請(qǐng)配合自己本地項(xiàng)目靈活變動(dòng)介紹在這里簡(jiǎn)單介紹下,建議深入學(xué)習(xí)是一個(gè)開(kāi)源的輕量級(jí)容器技術(shù),讓開(kāi)發(fā)者可以打包他們 將Golang應(yīng)用部署到Docker 項(xiàng)目地址:https://github.com/EDDYCJY/go... (快上車(chē),支持一波)原文地址:https...

    Half 評(píng)論0 收藏0
  • Gin實(shí)踐 連載九 將Golang應(yīng)用部署到Docker

    摘要:將應(yīng)用部署到項(xiàng)目地址快上車(chē),支持一波原文地址注開(kāi)始前你需要安裝好,配好鏡像源本章節(jié)源碼在分支上從本章節(jié)開(kāi)始項(xiàng)目目錄都以為基準(zhǔn)請(qǐng)配合自己本地項(xiàng)目靈活變動(dòng)介紹在這里簡(jiǎn)單介紹下,建議深入學(xué)習(xí)是一個(gè)開(kāi)源的輕量級(jí)容器技術(shù),讓開(kāi)發(fā)者可以打包他們 將Golang應(yīng)用部署到Docker 項(xiàng)目地址:https://github.com/EDDYCJY/go... (快上車(chē),支持一波)原文地址:https...

    mengera88 評(píng)論0 收藏0
  • docker+jenkins+golang持續(xù)集成實(shí)踐[轉(zhuǎn)載自我的博客]

    摘要:博客地址起因因?yàn)樯a(chǎn)需要最近又重新折騰了一下和。主要目的是想自動(dòng)編譯,打包,部署一些的。將宿主機(jī)的掛載為容器的目錄。這樣做的目的是,如果容器被不小心刪除也不至于的數(shù)據(jù)丟失。其中的安裝路徑在中。 博客地址:yeqown.github.com 起因 因?yàn)樯a(chǎn)需要最近又重新折騰了一下Jenkins和docker。主要目的是想自動(dòng)編譯,打包,部署一些Golang的HttpServer。于是決...

    inapt 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<