Python: Išplėstiniai naudojimo būdai
Toliau su jūsų Python diegimais
👋 Sveiki atvykę į Stackhero dokumentaciją!
Stackhero siūlo paruoštą naudoti Python cloud sprendimą, kuris suteikia daugybę privalumų, įskaitant:
- Įdiekite savo programą per kelias sekundes su paprastu
git push.- Naudokite savo domeno vardą ir pasinaudokite automatinės HTTPS sertifikatų konfigūracijos privalumais, kad padidintumėte saugumą.
- Mėgaukitės ramybe su automatinėmis atsarginėmis kopijomis, vieno paspaudimo atnaujinimais ir paprasta, skaidria bei prognozuojama kainodara.
- Gaukite optimalią veikimo ir tvirtą saugumo lygį dėka privačios ir dedikuotos VM.
Taupykite laiką ir supaprastinkite savo gyvenimą: išbandyti Stackhero Python cloud hosting sprendimą užtrunka tik 5 minutes!
Diegimas kitos šakos nei main
Iki šiol naudojome komandą git push stackhero main, kad diegtume main šaką į gamybą.
Jei reikia diegti kitą šaką, galite naudoti šią komandą, kur <BRANCH> yra šakos, kurią norite diegti, pavadinimas:
git push stackhero <BRANCH>:main
Pavyzdžiui, jei norite diegti production šaką, tiesiog vykdykite:
git push stackhero production:main
Diegimas žymos vietoj šakos
Galite pasirinkti diegti žymą, o ne šaką. Norėdami diegti konkrečią žymą, pakeiskite <TAG> į norimą žymą šioje komandoje:
git push stackhero '<TAG>^{}:main'
Pavyzdžiui, norėdami diegti žymą v1.0.0, vykdykite:
git push stackhero 'v1.0.0^{}:main'
^{}sintaksė užtikrina, kad jūs stumiate pažymėtą commit'ą, o ne pačią žymos nuorodą.
Diegimas konkretaus commit'o
Be šakų ar žymų diegimo, galite taip pat diegti konkretų commit'ą naudodami jo hash. Pakeiskite <COMMIT_HASH> į commit'o, kurį norite diegti, hash:
git push -f stackhero <COMMIT_HASH>:main
Pavyzdžiui, norėdami diegti commit'ą su hash abcde, vykdykite:
git push -f stackhero abcde:main
Grįžimas prie ankstesnės versijos
Jei neseniai atliktas diegimas sukėlė problemų, galite grįžti prie ankstesnio commit'o diegdami tą commit'ą. Pirmiausia, nustatykite commit'o hash vykdydami:
git log
Ši komanda rodo kiekvieno commit'o datą, hash ir aprašymą.
Pavyzdžiui, išvestis gali atrodyti taip:
git log
commit cccc8b3ebdccb9abc1926ef49ee589dae5c5fe06 (HEAD -> main, stackhero/main)
Author: Developer
Date: Fri Apr 28 09:36:18 +0000
Break the code
commit bbbb622301772072c3d82f3cc0d91e29e6e84901
Author: Developer
Date: Wed Apr 26 12:49:28 +0000
Update the code
commit aaaa1d8b06535b413e0df8298ccf52339dfef3ff
Author: Developer
Date: Wed Apr 26 12:44:50 +0000
Improve the code
Jei dabartinis gamybos diegimas yra commit'as "Break the code" (hash prasideda cccc), ir norite grįžti prie ankstesnio commit'o "Update the code" (hash prasideda bbbb), vykdykite:
git push -f stackhero bbbb622301772072c3d82f3cc0d91e29e6e84901:main
Norint išvengti klaidingo kodo diegimo ir padidinti gamybos stabilumą, labai rekomenduojama turėti "staging" aplinką.
Esanti tarp kūrimo ir gamybos, staging aplinka suteikia beveik identišką gamybos konfigūraciją. Ji padeda kruopščiai išbandyti jūsų kodą prieš tiesioginį diegimą.
Naudojant staging padidėja pasitikėjimas jūsų kodo funkcionalumu ir našumu, todėl gamybos diegimas tampa patikimesnis.
Šio tipo aplinka bus aptarta vėliau dokumentacijoje.
Staging aplinkos nustatymas
Staging aplinka yra geriausia praktika, kai ji naudojama kartu su kūrimo ir gamybos aplinkomis. Ji atkartoja gamybos aplinką, kad galėtumėte išbandyti atnaujinimus ir pakeitimus prieš juos įgyvendinant, taip sumažinant problemų riziką gamyboje.
Staging aplinka turi glaudžiai atitikti gamybos aplinką.
Tačiau ji turėtų naudoti klonuotą jūsų gamybos duomenų bazės ar prijungtų paslaugų versiją, o ne tiesioginę gamybos duomenų bazę.
Jei jūsų Python paslauga priklauso nuo duomenų bazių ar kitų paslaugų, atkurkite jas naujame
<Project> - Stagingstack'e.
Vykdykite šiuos veiksmus, kad nustatytumėte staging aplinką su Stackhero:
- Stackhero prietaisų skydelyje pervadinkite esamą stack'ą iš
<Project>į<Project> - Production. Pavyzdžiui, jei jūsų projektas vadinasiChat Bot, stack'as tampaChat Bot - Production. - Sukurkite naują stack'ą pavadinimu
<Project> - Staging. ProjektuiChat Bot, stack'as tampaChat Bot - Staging. - Pradėkite Python paslaugą staging stack'e.
- Gaukite
git remotekomandą ir vykdykite instrukcijas dokumentacijoje Diegimas į staging aplinką.
Ši konfigūracija užtikrina, kad turite visiškai funkcionalią staging aplinką, skirtą atnaujinimų testavimui prieš gamybos diegimą.
Diegimas į staging aplinką
Labai rekomenduojama palaikyti atskiras staging ir gamybos aplinkas. Norėdami valdyti kelias aplinkas, pradėkite pervadindami dabartinį nuotolinį saugyklą. Pavyzdžiui, pervadinkite nuotolinį stackhero į stackhero-production su:
git remote rename stackhero stackhero-production
Tada sukurkite naują Python paslaugą savo staging aplinkai. Gaukite git remote add komandą ir pakeiskite ją, pakeisdami <XXXXXX> į jūsų paslaugos domeną:
-
Originali komanda:
git remote add stackhero ssh://stackhero@<XXXXXX>.stackhero-network.com:222/project.git -
Pakeista komanda:
git remote add stackhero-staging ssh://stackhero@<XXXXXX>.stackhero-network.com:222/project.git
Tada galite diegti į bet kurią aplinką naudodami šias komandas:
-
Diegti į staging:
git push stackhero-staging main -
Diegti į gamybą:
git push stackhero-production main
Norėdami pagerinti diegimo procesą, siūlome naudoti patobulintą Makefile versiją.
Su šiuo patobulintu
Makefile, diegimas į gamybą ar staging tampa toks paprastas, kaip vykdytimake deploy-productionarbamake deploy-staging.
Patobulinta Makefile versija
Žemiau pateikiamas patobulintas Makefile, kuris palaiko kelias taisykles:
make dev(arba tiesiogmake): Paleidžia programą kūrimo režimu.make deploy: Diegia programą į nuotolinį pavadinimustackhero. Tai gerai veikia, kai turite vieną Stackhero instanciją.make deploy-production: Diegia programą į nuotolinį pavadinimustackhero-production.make deploy-staging: Diegia programą į nuotolinį pavadinimustackhero-staging.
Šis
Makefileyra sukurtas tvarkyti situacijas, kai kodas nepasikeitė, išvengiant klaidos "Everything up-to-date".
Nukopijuokite ir įklijuokite šį turinį kaip savo naują Makefile:
# Taisyklė, kuri vykdoma pagal nutylėjimą, kai "make" kviečiamas be argumento
.DEFAULT_GOAL := dev
# Stackhero Python vykdys "run" taisyklę jūsų instancijoje.
# Tai komanda, kurią reikia vykdyti tiek gamybos, tiek staging aplinkose.
run:
ENV=production gunicorn app:app \
--error-logfile - \
-b 0.0.0.0:8080
# Komanda, kurią reikia naudoti kūrimo aplinkoje
dev:
python app.py
# Taisyklė "deploy" diegti į instanciją "stackhero".
# Tinka, jei turite tik vieną instanciją.
deploy:
@$(MAKE) -s deploy-script DEPLOY_REMOTE=stackhero DEPLOY_BRANCH=main
# "deploy-*" taisyklės diegia į instanciją pavadinimu "stackhero-*".
# Pavyzdžiui, vykdant "make deploy-production" diegiama į "stackhero-production",
# arba "make deploy-staging" diegiama į "stackhero-staging".
deploy-%:
@$(MAKE) -s deploy-script DEPLOY_REMOTE=stackhero-$* DEPLOY_BRANCH=main
# Vidinė diegimo taisyklė. Nemodifikuokite jos.
deploy-script:
@echo "Diegiama šaka \"${DEPLOY_BRANCH}\" į \"${DEPLOY_REMOTE}\"..."
@echo
@if [ -n "$$(git status --porcelain)" ]; then \
echo "Negalima diegti, nes yra neįsipareigojusių pakeitimų:"; \
echo "\e[0m"; \
git status -s; \
echo ""; \
echo "\e[0;31m"; \
echo "Galite naudoti šią komandą pakeitimams įsipareigoti:"; \
echo "git add -A . && git commit -m \"Jūsų žinutė\""; \
echo "\e[0m"; \
exit 1; \
fi
@git push --dry-run ${DEPLOY_REMOTE} ${DEPLOY_BRANCH} 2>&1 | grep -q -F "Everything up-to-date"; \
EXIT_CODE=$$?; \
if [ $$EXIT_CODE -eq 0 ]; then \
echo -n "Nieko naujo diegti... Priverstinis diegimas (tai sukurs naują commit'ą)? (y/N) "; \
read answer && \
case $$answer in \
y|Y|yes|YES) \
git commit --allow-empty -m "Priverstinis atnaujinimas diegimo tikslu į \"${DEPLOY_REMOTE}\"" ; \
;; \
*) \
echo "Nieko diegti!"; \
exit 1; \
;; \
esac \
fi
git push ${DEPLOY_REMOTE} ${DEPLOY_BRANCH}
Slaptų duomenų (aplinkos kintamųjų) tvarkymas
Tam tikru momentu jums reikės saugoti slaptus duomenis, tokius kaip tokenai ir slaptažodžiai duomenų bazėms ar trečiųjų šalių paslaugoms. Svarbu juos saugoti saugiai. Venkite jų tiesioginio įterpimo į savo saugyklą ar kodą, nes tai sukelia didelę saugumo riziką.
Aplinkos kintamųjų naudojimas suteikia du pagrindinius privalumus:
- Jūsų slapti duomenys niekada nėra saugomi jūsų Git saugykloje, sumažinant neteisėtos prieigos riziką.
- Galite naudoti skirtingus prisijungimus įvairioms aplinkoms, pavyzdžiui, naudoti gamybos duomenų bazę gamyboje ir kūrimo duomenų bazę kūrimo metu.
Aplinkos kintamųjų nustatymas kūrimui
Kūrimo aplinkoje sukurkite .env failą savo projekto šaknyje. Šis failas turi būti neįtrauktas į Git, kad būtų užtikrinta, jog jis niekada nebus įsipareigotas.
Norėdami automatiškai skaityti .env failą, galite naudoti python-dotenv modulį:
pip install python-dotenv
pip freeze > requirements.txt
Tada sukurkite .env failą savo projekto šaknyje ir pridėkite savo kintamuosius:
ENV="development"
DATABASE_PASSWORD="secretPassword"
THIRD_API_PRIVATE_KEY="secretKey"
# ...
Galiausiai, užtikrinkite, kad .env failas būtų neįtrauktas į Git, pridėdami jį prie .gitignore:
echo ".env" >> .gitignore
Aplinkos kintamųjų nustatymas staging ir gamybai
.env failas nėra pakankamai saugus staging ir gamybos aplinkoms. Vietoj to, Stackhero leidžia saugiai saugoti jūsų aplinkos kintamuosius tiesiogiai jūsų Python paslaugos konfigūracijoje.
Galite nustatyti šiuos kintamuosius Stackhero prietaisų skydelyje, pasirinkdami savo Python paslaugą ir tada spustelėdami mygtuką "Configure".
Python aplinkos kintamieji Stackhero
Aplinkos kintamųjų pasiekimas Python
Aplinkos kintamųjų pasiekimas Python yra paprastas. Tiesiog naudokite os.environ.get(), kaip parodyta žemiau:
import os
print(os.environ.get('ENV'))
Pavyzdžiui, prisijungimas prie Redis serverio naudojant aplinkos kintamąjį gali būti atliekamas taip:
import os
import redis
r = redis.from_url(os.environ.get("REDIS_URL"))
Kūrimo aplinkoje nustatykite REDIS_URL savo .env faile taip:
REDIS_URL="redis://localhost:6379"
Gamybai ir staging, nustatykite REDIS_URL Stackhero prietaisų skydelyje pagal Python paslaugos konfigūraciją:
REDIS_URL="rediss://default:<yourPassword>@<XXXXXX>.stackhero-network.com:6380"
Python paketų valdymas
Rekomenduojama valdyti Python paketus naudojant requirements.txt failą. Šis failas išvardija visus reikalingus paketus ir jų versijas, kad jūsų kodas veiktų patikimai.
Laikant šį failą atnaujintą užtikrinama:
- Visi reikalingi paketai yra įdiegti.
- Naudojamos tik suderinamos paketų versijos.
Diegiant į savo Stackhero instanciją, paketai, nurodyti requirements.txt, yra automatiškai įdiegiami.
Norėdami sugeneruoti arba atnaujinti requirements.txt, vykdykite šią komandą po naujų paketų įdiegimo:
pip freeze > requirements.txt
UDP/TCP portų atidarymas
Dauguma Python programų naudoja HTTP portus 80 (HTTP) ir 443 (HTTPS).
Jei jūsų programa turi atidaryti papildomus portus arba naudoja kitus protokolus (TCP ar UDP), galite koreguoti "Ports Redirections" nustatymą savo Python paslaugoje Stackhero prietaisų skydelyje.
Kiekvienam papildomam portui nurodykite įėjimo portą (viešai matomą), paskirties portą (naudojamą jūsų Python programos) ir protokolą (TCP ar UDP).
Portų nukreipimai Stackhero prietaisų skydelyje
Failų saugojimas
Failams, tokiems kaip naudotojų nuotraukos ar dokumentai, saugoti paprastai geriausia naudoti objektų saugojimo sprendimą.
Objektų saugojimas leidžia dalintis failais tarp kelių paslaugų ar instancijų ir atskiria jūsų saugojimą nuo jūsų kodo, laikantis geriausių praktikų.
Rekomenduojame MinIO, greitą ir galingą sprendimą, suderinamą su Amazon S3 protokolu.
Jei pageidaujate vietinio failų saugojimo, galite naudoti nuolatinį saugojimą, pateiktą su jūsų Python instancija, esančią /persistent/storage/. Tačiau šis požiūris daugeliu atvejų nerekomenduojamas.
ĮSPĖJIMAS: Niekada nesaugokite duomenų už
/persistent/storage/aplanko ribų!Duomenų saugojimas už šio aplanko ribų gali sukelti duomenų praradimą, kai jūsų instancija yra paleidžiama iš naujo, atnaujinama arba kai stumiate naują kodą.
Apple/macOS: išsaugokite savo SSH privačios rakto slaptažodį
macOS sistemoje gali būti nepatogu kiekvieną kartą įvesti savo SSH privačios rakto slaptažodį, kai stumiate savo kodą. Nors saugumas yra svarbiausias, galite saugiai išsaugoti savo slaptažodį naudodami Apple Keychain, o ne pašalindami jį iš savo rakto.
Norėdami išsaugoti rakto, pavadinto id_ed25519, slaptažodį, vykdykite:
ssh-add --apple-use-keychain ~/.ssh/id_ed25519
Po to jums nebereikės įvesti savo rakto slaptažodžio, taupant laiką ir pastangas.
Jei naudojate RSA raktą vietoj to, pakeiskite
id_ed25519įid_rsakomandoje:ssh-add --apple-use-keychain ~/.ssh/id_rsa