Tema
/
Interneto svetainių serverio dalies kūrimas GO
📖 Teorija

Įrodyk Volume — įkelk, perdiek, atsisiųsk, sumaišuok

Diegimas, aptarnaujantis puslapį, nėra įrodymas. Įrodymas — kad tavo įkėlimai pergyvena perdiegimą — būtent tai, dėl ko Volume egzistuoja. Padaryk tai pats.

1. Užsiregistruok ir įkelk — gyvame URL. Atverk savo Railway domeną (ne localhost), užsiregistruok paskyrą ir įkelk dokumentą. Pasižymėk jo SHA-256 detalės puslapyje, atsisiųsk kartą ir sumaišuok failą vietoje:

$ sha256sum contract.pdf
4a7d1ed414474e4033ac29ccb8653d9b...  contract.pdf

2. Priversk perdiegti. Pakeisk bet ką smulkaus ir push, arba spausk Redeploy Railway skydelyje. Tai nugriauna konteinerį ir sukuria naują — vietinis diskas nutrinamas. Palauk, kol vėl taps gyvas.

3. Atsisiųsk tą patį dokumentą. Grįžęs į gyvą svetainę, atverk dokumentą ir Download vėl. Sumaišuok:

$ sha256sum contract-after-redeploy.pdf
4a7d1ed414474e4033ac29ccb8653d9b...   # identiška

Baitas į baitą, per perdiegimą, kuris nutrynė konteinerio diską. Failas gyveno Volume prie /data/uploads, ne laikiname konteinerio diske. Dabar įsivaizduok tai be Volume: atsisiuntimas grąžintų 404, failas dingęs — ir būtum tai sužinojęs produkcijoje, iš vartotojo. Būtent tokį siurprizą ši pamoka egzistuoja užkirsti.

4. Patvirtink, kad prod sargybos tikrai įjungtos. Tai saugumo patikros, kurias parašei anksčiau, dabar gyvos:

  • Programa atsisako pasileisti be savo paslapčių. Railway kintamuosiuose pašalink SESSION_SECRET ir perdiek. Diegimas nepavyksta — žurnalai rodo SESSION_SECRET is required in production, o konteineris niekada neaptarnauja. Grąžink. Jokio tylaus nesaugaus numatytojo.
  • Saugus slapukas. Naršyklės kūrėjo įrankiuose pažiūrėk į signflow_session slapuką: Secure ir HttpOnly abu nustatyti (per http dev Secure nebuvo).
  • Griežtas CSRF aktyvus. Nusiųsk POST be Origin/Referer prieš gyvą svetainę:
$ curl -sX POST https://your-app.up.railway.app/login -d 'email=a@b.c&password=x' -o /dev/null -w "%{http_code}\n"
403

Atmesta — gorilla/csrf griežta Origin/Referer patikra įjungta prod, nes atviro teksto apėjimas buvo if !IsProd(). Dev, per http, ta pati užklausa būtų praėjusi. APP_ENV=prod vėliava įjungė visą saugumo poziciją be jokio kodo pakeitimo.

5. Perskaityk tikrą el. pašto srautą iš žurnalų. Sukelk slaptažodžio atstatymą gyvoje svetainėje. Joks el. laiškas neatvyksta — pagal dizainą: konsolės siuntėjas yra prod numatytasis, tad atstatymo nuoroda spausdinama į Railway diegimo žurnalus. Nukopijuok ją iš ten ir užbaik atstatymą. Ką tik paleidai visą el. pašto srautą tikrame diegime be jokios tiekėjo paskyros.

Tai tikrai įdiegta programa: pati migruojanti, nuolatinė per perdiegimus, saugi vėliava ir pilnai išbandoma be trečiųjų šalių paskyrų.