国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Golang項目部署

Tamic / 1114人閱讀

摘要:配置示例如下其中,為本地的應用監聽端口。編譯程序跨平臺交叉編譯是的特點之一,可以非常方便地編譯出我們需要的目標服務器平臺的版本,而且是靜態編譯,非常方便地解決了運行依賴問題。

文章來源:https://goframe.org/deploymen...

一、獨立部署

使用GF開發的應用程序可以獨立地部署到服務器上,設置為后臺守護進程運行即可。這種模式常用在簡單的API服務項目中。

服務器我們推薦使用*nix服務器系列(包括:Linux, MacOS, *BSD),以下使用Ubuntu系統為例,介紹如何部署使用GF框架開發的項目。

1. nohup

我們可以使用簡單的nohup命令來運行應用程序,使其作為后臺守護進程運行,即使遠程連接的SSH斷開也不會影響程序的執行。在流行的Linux發行版中往往都默認安裝好了nohup命令工具。
命令如下:

nohup ./gf-app &
2. tmux

tmux是一款Linux下的終端復用工具,可以開啟不同的終端窗口來將應用程序作為后臺守護進程執行,即使遠程連接的SSH斷開也不會影響程序的執行。
ubuntu系統下直接使用sudo apt-get install tmux安裝即可。使用以下步驟將應用程序后臺運行。

tmux new -s gf-app

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

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

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

3. supervisor

supervisor是用Python開發的一套通用的進程管理程序,能將一個普通的命令行進程變為后臺daemon,并監控進程狀態,異常退出時能自動重啟。官方網站:http://supervisord.org/
常見配置如下:

[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啟動supervisor服務;

創建應用配置文件/etc/supervisor/conf.d/gf-app.conf, 內容如上;

使用sudo supervisorctl進入supervisor管理終端;

使用reload重新讀取配置文件并重啟當前supoervisor管理的所有進程;

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

隨后可以使用status指令查看當前supervisor管理的進程狀態;

二、代理部署

代理部署即前置一層第三方的WebServer服務器處理所有的請求,將部分請求(往往是動態處理請求)有選擇性地轉交給后端的Golang應用程序執行,后端部署的Golang應用程序可以配置有多個。這種模式常用在復雜的WebServer配置中,常見的場景例如:需要靜態文件分離、需要配置多個域名及證書、需要自建負載均衡層,等等。

雖然Golang實現的WebServer也能夠處理靜態文件,但是相比較于專業性的WebServernginx/apache來說比較簡單,性能也較弱。因此不推薦使用Golang WebServer作為前端服務直接處理靜態文件請求。
Nginx

我們推薦使用Nginx作為反向代理的前端接入層,有兩種配置方式實現動靜態請求的拆分。

靜態文件后綴

這種方式通過文件名后綴區分,將指定的靜態文件轉交給nginx處理,其他的請求轉交給golang應用。
配置示例如下:

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應用WebServer監聽端口。

例如,在該配置下,我們可以通過http://goframe.org/my.png訪問到指定的靜態文件。

靜態文件目錄

這種方式通過文件目錄區分,將指定目錄的訪問請求轉交給nginx處理,其他的請求轉交給golang應用。
配置示例如下:

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應用WebServer監聽端口。

例如,在該配置下,我們可以通過http://goframe.org/piblic/my.png訪問靜態文件。

三、容器部署

容器部署即使用docker化部署golang應用程序,這是在云服務時代最流行的部署方式,也是最推薦的部署方式。

1. 編譯程序

跨平臺交叉編譯是golang的特點之一,可以非常方便地編譯出我們需要的目標服務器平臺的版本,而且是靜態編譯,非常方便地解決了運行依賴問題。
使用以下方式靜態編譯Linux平臺amd64架構的可執行文件:

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

這樣便編譯出來一個gf-app的可執行文件。

2. 編譯鏡像

我們需要將該可執行文件gf-app編譯生成docker鏡像,以便于分發及部署。Golang的運行環境推薦使用alpine基礎系統鏡像,編譯出的容器鏡像約為20MB左右。

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

FROM loads/alpine:3.8

LABEL maintainer="john@johng.cn"

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

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

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

CMD main

其中,我們的基礎鏡像使用了loads/alpine:3.8這個鏡像,基礎鏡像的Dockerfile地址:https://github.com/johngcn/do... ,倉庫地址:https://hub.docker.com/u/loads

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

3. 運行鏡像

使用以下命令運行鏡像:

docker run gf-app
4. 鏡像分發

容器的分發可以使用docker官方的平臺:https://hub.docker.com/ ,國內也可以考慮使用阿里云:https://www.aliyun.com/produc... 。

5. 容器編排

在企業級生產環境中,docker容器往往需要結合kubernetes或者docker swarm容器編排工具一起使用。
容器編排涉及到的內容比較多,感興趣的同學可以參考以下資料:

https://kubernetes.io/

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

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/27680.html

相關文章

  • 從PHP遷移至Golang - 基礎篇

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

    Kerr1Gan 評論0 收藏0
  • Gin實踐 連載九 將Golang應用部署到Docker

    摘要:將應用部署到項目地址快上車,支持一波原文地址注開始前你需要安裝好,配好鏡像源本章節源碼在分支上從本章節開始項目目錄都以為基準請配合自己本地項目靈活變動介紹在這里簡單介紹下,建議深入學習是一個開源的輕量級容器技術,讓開發者可以打包他們 將Golang應用部署到Docker 項目地址:https://github.com/EDDYCJY/go... (快上車,支持一波)原文地址:https...

    Half 評論0 收藏0
  • Gin實踐 連載九 將Golang應用部署到Docker

    摘要:將應用部署到項目地址快上車,支持一波原文地址注開始前你需要安裝好,配好鏡像源本章節源碼在分支上從本章節開始項目目錄都以為基準請配合自己本地項目靈活變動介紹在這里簡單介紹下,建議深入學習是一個開源的輕量級容器技術,讓開發者可以打包他們 將Golang應用部署到Docker 項目地址:https://github.com/EDDYCJY/go... (快上車,支持一波)原文地址:https...

    mengera88 評論0 收藏0
  • docker+jenkins+golang持續集成實踐[轉載自我的博客]

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

    inapt 評論0 收藏0

發表評論

0條評論

Tamic

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<