paint-brush
Kaip įdiegti Go + Templ + HTMX + TailwindCSS į gamybąpateikė@4rkal
Nauja istorija

Kaip įdiegti Go + Templ + HTMX + TailwindCSS į gamybą

pateikė 4rkal5m2025/03/08
Read on Terminal Reader

Per ilgai; Skaityti

Šiame straipsnyje parodysiu, kaip įdiegti GoTTH steką (Go Templ htmx tailwind) gamyboje.
featured image - Kaip įdiegti Go + Templ + HTMX + TailwindCSS į gamybą
4rkal HackerNoon profile picture

Š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:

  1. API, kuri sąveikauja su biržomis. Parašyta go ir naudoja džiną.


  2. Ž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.

Sąranka

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.

Sąranka

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.

Galinis vėjas

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 }

Serveris

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.

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“ .

Cloudflare tuneliai

Š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ą.

Diegimas

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.

Prisijunkite prie mano nemokamo naujienlaiškio

Susiję straipsniai

Paprastas kurso ribojimas in Go (džinas)

Kaip sukurti URL sutrumpinimą programoje „Go“.

Kaip įdiegti „Django“ į gamybą

© 2025 4rkal CC BY-SA PRENUMERUOTI