Tema
/
Interneto svetainių serverio dalies kūrimas GO

Diegimo failai ir Railway CLI

Keturi failai kortelėse — konteineris, ignoravimo sąrašas, Railway konfigūracija ir env šablonas. Dockerfile.dockerignorerailway.json.env.example.

1. Dockerfile (naujas) — daugiapakopis kūrimas. Pirmas etapas (golang:1.26) atsisiunčia modulius savo talpykloje esančiame sluoksnyje, nukopijuoja šaltinį ir go build sukuria statinį dvejetainį (CGO_ENABLED=0, -trimpath -ldflags="-s -w" mažesniam, atkuriamam rezultatui). Antras etapas — distroless/static-debian12 — jis neša CA sertifikatus (reikalingus Resend HTTPS skambučiui) ir nieko daugiau. Galutinis atvaizdas — tik COPY --from=build dvejetainio. templ/sqlc išvestis įrašyta, tad kūrimas — paprastas go build be kodo generavimo žingsnio.

2. .dockerignore (naujas) — laiko kūrimo kontekstą mažą, o paslaptis už atvaizdo ribų: .git/, uploads/, *.exe, .env, *.md. Niekada nesiųsk savo vietinio .env ar vietinių įkėlimų į atvaizdą.

3. railway.json (naujas) — parenka DOCKERFILE kūrėją, nukreipia į Dockerfile ir sukonfigūruoja diegimą: /healthz sveikatos patikra, perkrovimas įvykus klaidai. Railway skaito tai kiekvieno diegimo metu.

4. .env.example (naujas) — dokumentuotas kiekvieno kintamojo paviršius, įrašytas, kad naujas kūrėjas nukopijuotų jį į .env. Jis įvardija, kurie kintamieji reikalingi prod (SESSION_SECRET, BASE_URL), ir pažymi laikinos failų sistemos pastabą ant UPLOAD_DIR — sprendimą, kurį ši pamoka išsprendžia.

Įdiek (Railway CLI — nemokamos paskyros pakanka):

railway login
railway init --name signflow
railway add --database postgres          # suteikia DATABASE_URL

# Įdiek servisą su prod konfigūracija. SESSION_SECRET sugeneruojamas vietoje.
railway add --service signflow \
  --variables APP_ENV=prod \
  --variables 'DATABASE_URL=${{Postgres.DATABASE_URL}}' \
  --variables UPLOAD_DIR=/data/uploads \
  --variables "SESSION_SECRET=$(openssl rand -base64 32)"

railway up                                # sukurk Dockerfile ir įdiek
railway domain                            # gauk savo viešą URL

Tada Railway skydelyje pridėk Volume prie serviso, primontuotą prie /data (kad UPLOAD_DIR=/data/uploads nusėstų ant nuolatinio disko), ir nustatyk BASE_URL į domeną, kurį Railway davė (jis eina į el. laiškų nuorodas). Perdiek.

Paleidžiant dvejetainis paleidžia savo migracijas prieš Postgres priedą ir pradeda aptarnauti. Stebėk diegimo žurnalus:

INFO starting signflow env=prod port=8080 base_url=https://signflow-....up.railway.app
INFO goose msg="OK    00001_users.sql"
...
INFO file storage: local disk dir=/data/uploads
INFO listening addr=:8080

/healthz tampa žalias, o URL — gyvas.