Šiame straipsnyje parodysiu, kaip įdiegti GoTTH steką (Go Templ htmx tailwind) gamyboje.
Neseniai sukūriau savo kriptovaliutų mainų agregatorių, vadinamą cyphergoat ; ji suranda jums geriausią kriptovaliutos keitimo iš skirtingų partnerių biržų kursą.
Jį sudaro dvi dalys:
API, kuri sąveikauja su biržomis. Parašyta go ir naudoja džiną.
Žiniatinklio vartotojo sąsaja parašyta go ir naudoja HTML, HTMX, tailwindcss, CSS ir Javascript derinį šablonų šablonuose. Dar žinomas kaip „GoTTH“ krūva. Jis sąveikauja su API, kad surastų tarifus ir pan.
Kas yra labai šaunu naudojant šį krūvą ir sąranką, yra tai, kad mes galime sukurti vieną dvejetainį failą su viskuo, kas įtraukta kiekvienai daliai, ir išsiųsti jį į serverį. Webui pusėje tai įmanoma, nes HTML yra sukompiliuojamas į go kodą naudojant šabloną ir siunčiamas kartu su dvejetainiu.
Šiame straipsnyje apžvelgsiu savo sąranką, kad jums būtų lengviau sukurti kažką panašaus.
Naudoju Debian 12 serverį, kuris atskleis mano programą per Cloudflare tunelius. Visi statiniai failai aptarnaujami per nginx, o API ir svetainės dvejetainiai failai vykdomi kaip sisteminės paslaugos.
Šiame vadove parodysiu, kaip aš tai nustatau.
Mano kūrimo įrenginyje yra vienas aplankas, vadinamas cyphergoat: Jame yra:
api/ web/ builds/
API aplanke yra API šaltinio kodas. Žiniatinklyje yra svetainės šaltinio kodas.
Ir pastatuose yra visos versijos, kurios yra įdiegtos serveryje.
Pirmasis tikras iššūkis kyla teisingai nustatant tailwindcss.
Savo žiniatinklio projekte turiu statinį aplanką, skirtą statiniams failams. Jo viduje turiu du failus:
/web styles.css tailwind.css
styles.css
tiesiog yra:
@import "tailwindcss";
Tailwind.css failas yra vieta, kur tailwind-cli išsaugos savo medžiagą.
Norėdamas sukurti užpakalinio vėjo dalykus, aš tiesiog paleidžiu:
npx @tailwindcss/cli -i ./static/styles.css -o ./static/tailwind.css --watch
(darant prielaidą, kad turite įdiegtą tailwind-cli)
Failo header.templ (visų puslapių antraštės) viršuje turiu:
<link href="/static/tailwind.css" rel="stylesheet"> <link href="/static/styles.css" rel="stylesheet">
Ir failai aptarnaujami naudojant Echo e.Static (mano main.go faile).
func main(){ e := echo.New() e.Use(middleware.Logger()) e.Use(middleware.Recover()) e.Use(middleware.Secure()) e.Static("/static", "static") // Serves content from static folder. // Rest of the handlers }
Savo serverio pusėje turiu Debian 12 vm, veikiantį su proxmox.
Savo vartotojų namų kataloge turiu aplanką su tokiu turiniu:
cyphergoat/ ├── api ├── static/ └── web
Statiniame aplanke yra visi statiniai failai (įskaitant tailwind.css ir styles.css), o žiniatinklis ir API yra dvejetainiai failai.
Tada turiu dvi sistemines paslaugas šiems vykdomiesiems failams:
cg-api.service
/etc/systemd/system/cg-api.service
[Unit] Description=CypherGoat API After=network.target [Service] User=arkal Group=www-data WorkingDirectory=/home/arkal/cyphergoat ExecStart=/home/arkal/cyphergoat/api Restart=always RestartSec=1 [Install] WantedBy=multi-user.target
Ir cg-web.service
/etc/systemd/system/cg-web.service
[Unit] Description=CypherGoat Web After=network.target [Service] User=arkal Group=www-data WorkingDirectory=/home/arkal/cyphergoat ExecStart=/home/arkal/cyphergoat/web [Install] WantedBy=multi-user.target
Abu priklauso grupei www-data
(tai tikriausiai nėra būtina API), kad būtų lengviau juos aptarnauti per nginx.
Svetainė palaiko ryšį su API, bet vis tiek turiu padaryti žiniatinklio sąsają prieinamą.
Aš sukūriau nginx svetainę su tokia konfigūracija: /etc/nginx/sites-available/cg
server { server_name cyphergoat.com; location / { proxy_pass http://127.0.0.1:4200; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } location /static/ { alias /var/www/static/; expires 30d; } # Optional robots.txt location = /robots.txt { root /var/www/static; access_log off; log_not_found off; } listen 80; }
Taip pat nustatiau certbot, kad turėčiau SSL sertifikatą.
Certbot galite nustatyti paleisdami:
sudo apt install certbot python3-certbot-nginx -y
Sukurkite SSL sertifikatą:
sudo certbot --nginx -d cyphergoat.com
Norėdami gauti išsamesnę „nginx“ sąranką, skaitykite „Savęs priegloba“ .
Šiuo metu darau savo svetainę prieinamą naudodamas „Cloudflare“ puslapius. Tai itin paprastas naudoti prievado persiuntimo sprendimas.
Norėdami tai padaryti, jums reikės „Cloudflare“ paskyros ir domeno, nukreipto į „Cloudflare“.
Pirmiausia eikite į „Zero Trust Dashboard“ .
Dalyje Networks
spustelėkite Tunnels,
tada Create a tunnel.
Sukūrę turėtumėte Install and run a connector
; vadovaukitės puslapyje pateiktomis konkrečios sąrankos instrukcijomis.
Kai jungtis veikia, turėtumėte spustelėti skirtuką Public Hostname
ir Add a public hostname
.
Dabar turėtumėte pamatyti kažką panašaus:
Užpildykite informaciją kaip turiu. Paslaugos tipas turi būti HTTP
, o URL – 127.0.0.1:80
arba localhost:80.
Akivaizdu, kad diegiant svetainę nėra jokios priežasties padaryti API viešai prieinamą.
Norėdamas įdiegti dvejetainius failus, aš sukūriau greitą bash scenarijų:
cd api go build -o ../builds/ . cd ../web templ generate && go build -o ../builds/web cmd/main.go cd .. rsync -urvP ./builds/ user@SERVER:/home/user/cyphergoat rsync -urvP ./web/static user@SERVER:/home/user/cyphergoat/ rsync -urvP ./api/coins.json user@SERVER:/user/user/cyphergoat/
Scenarijus sukurs API, sugeneruos šablonų failus, sukurs WebUI, ir tada viską išsiųs į mano serverį (įskaitant statinį aplanką).
Tada ssh į savo serverį:
ssh user@ip
Ir tada iš naujo paleiskite paslaugas.
sudo systemctl restart cg-api cg-web
Ir viskas.
Paprastas kurso ribojimas in Go (džinas)
Kaip sukurti URL sutrumpinimą programoje „Go“.
Kaip įdiegti „Django“ į gamybą
© 2025 4rkal CC BY-SA PRENUMERUOTI