摘要:配置示例如下其中,為本地的應(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. supervisorsupervisor是用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è)性的WebServer如nginx/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-app的docker鏡像。
3. 運(yùn)行鏡像使用以下命令運(yùn)行鏡像:
docker run gf-app4. 鏡像分發(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
摘要:但是,隨著微服務(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ù)雜性...
摘要:將應(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...
摘要:將應(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...
摘要:博客地址起因因?yàn)樯a(chǎn)需要最近又重新折騰了一下和。主要目的是想自動(dòng)編譯,打包,部署一些的。將宿主機(jī)的掛載為容器的目錄。這樣做的目的是,如果容器被不小心刪除也不至于的數(shù)據(jù)丟失。其中的安裝路徑在中。 博客地址:yeqown.github.com 起因 因?yàn)樯a(chǎn)需要最近又重新折騰了一下Jenkins和docker。主要目的是想自動(dòng)編譯,打包,部署一些Golang的HttpServer。于是決...
閱讀 678·2021-11-15 11:37
閱讀 4135·2021-09-09 09:34
閱讀 3573·2019-08-30 15:52
閱讀 2613·2019-08-29 14:03
閱讀 2854·2019-08-26 13:36
閱讀 1597·2019-08-26 12:16
閱讀 1602·2019-08-26 11:45
閱讀 3494·2019-08-23 18:41