Į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_SECRETir perdiek. Diegimas nepavyksta — žurnalai rodoSESSION_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_sessionslapuką:SecureirHttpOnlyabu nustatyti (per http devSecurenebuvo). - Griežtas CSRF aktyvus. Nusiųsk POST be
Origin/Refererprieš 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ų.