Diegimo failai ir Railway CLI
Keturi failai kortelėse — konteineris, ignoravimo sąrašas, Railway konfigūracija ir env šablonas. Dockerfile → .dockerignore → railway.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.