αααα»αααΆααααααααα αααααααααΌααααααααα»ααα
α
α»αααααααααααΈ 90 α αα
αααααα ααΆααΆααααα½αααΆαααααα»αααΆαααΆαααα½αααΆαα
αααα»αααααΆααααΆαααΆαα ααΆααααΆαααΈααα Apache αα
ααΎααΆααααα ααα
ααααααααα½αα
ααα½α α’αααα’αΆα
α
αΌααα
αααα»ααααΆαααΈααααααααΆαααα FTP ααααααααα’αααΈαα½αααΌα
ααΆ ftp://ftp.example.com
. αααααΆααααα’αααααααΌααααα
αΌαααααα αα·αααΆααααααααΆααααααα’ααα α αΎααααα»αα―αααΆααα
αααΆαααΈαααα ααΆαααααα»αααααΆ α’αααΈαααΊααΆααααααΆαααααα
αα
α»ααααααα
αααα»αααααααααΈαααααααααα αΆααααΆααααΈαααααααα α’αααΈαααΆαααααΆααααααΌαα αααΎαα ααα αααααααΆαααααααα»αααααααΆα αα½αααΆααααΌααααααααΌααααα»ααα»ααααα ααα±ααααααΎαααΆαααα·αααααα αααΆαααΈααααααα½αααΆαααααΆααα ααΆαααΆαααΈαααααΆα αααΎααααααααΎαααΆααα ααΈαααααααΆααααα»ααα»αααααΆα α αΎαααΆαααααΎααααΆαααααααααααααα½ααα·αα·αααααααααΆαααααΆαααΆααΏαααααααΆα
αααααΆααααααααααααΆαααααα½ααααααααα»α αααα»αααΆαααΆαααααααα
ααΆαααααααααα·αααα α αΎαβαααα»αβααΆαβααΉαβααΆβαααα»αβααααΌαβααΆαβαααααααΆαβαααα»αβααΆαβααΆααβαααααΆαβααα αααααβαααα»αβααΆαβααα·αβαααβα’αα»ααααβαααααααΆαβααβαα½αβααα»αααααα ααΆαβαααααβααΌαβαα
βααΆααΆ master
αα
ααΎ GitHub α ααΎαααΈαααααα αααα»αααΆαααΉαααΆ ααΎααααΈααΆααΆααΆαααΌαααααα·ααααα·ααΆααααααααα·ααΈαααααΆαααΌα
αααααααα»α αααα»ααα·αα
αααααααααααα
ααααα Kubernetes αααα α¬ααααΎαα
αα
αααα·ααααΆ Docker Swarm α¬αααααΆαααα»ααααααΆαααΈααααααααΆααα ααααΆααααΆα αα·αααααααααααααααααααα ααΆααααα»αααααΆαα ααΎααααΈαααααα
ααΆαααΌαααααα
ααααΆαααααΎα±ααααΆαααΆαααΆαααΆαααΆααααα½αααΆααααα’αΆα
ααααΎααΆα αααα»αααααΌαααααΆαα CI/CD α
ααααα·αααΎα’αααααΆαααααααααΌα
αα½α (αααα»αααααΈααα αααααα Node.js) α αΎαα’αααα
ααααΉαααΈααααααααΎααααααααααααα·ααααααααΆαααΆαααααααΆαααααααααα αααααααααααΆααΆααΆα’αααΈαααααααΌαααΆααααααΆαα»ααααα»αααααΆααααααΌαααααΆααΉαα’αααΈαααααααΎαααΆααα
αααα»αααα·ααααα ααααααα»α αα·αααΆα’ααααααα ααααΆα
αΆααα’αΆααααααααΉαα’ααααααααα
αααααΌαααΆαααΆαα»α
α’αααα’αΆαα’ααααααααααααΌαααΆαααααααΉαααΆααΉαααΆαααΆααααααΉαααΆααΌαααααΆαα’αααΈαααααΆααααΆααααααααΆ αα·αααΆααααααα’αααα Bash α ααΎαααΈααααααααΆααααΉαααααΌαααΆαααααΈ
ααααααα
αααα»αααΉααα·ααα·ααΆαααΆα’ααααααααα’αΆα ααααΌαααΆαααα α ααΆ "ααΆααααααα" αααααααΆαααααααααααα αααααΊααΆα―αααΆαααΆα αααΎααααααααααα»ααα·ααΆαα’αααΈα’αααΈααααααα»αααΆαααα αα·ααααααΆα’αααΈααααΎαααΆααααααΆαααααΉααααα»ααααααΆααααΆαααααΎααααα αα·αααΆαααΆαααααααΆαααΌααα ααΆααααΆαααα·α αααααααΌαααΆαα’αα»αααααα αααα»ααα·αα·ααααααααααααααααααααα·αα½αα
αααααΆα’αααΈαααααα αΌαααΆαααΆααααααααα»αααΆααααα ααα
αααααΆαααααααΌααααααΆααααα αααα
ααΆααααΆααΆααααΆααααΆαα½α ααΎαααααα master
, αααααααΆαααΆααααααααααΌαααΆαα’αα»αααα:
- ααααααααΆαααααα ααΎ Travis CI α αΆααααααΎαα
- ααΆααα―αααΆ ααΆαααααΎαααΆα αααααα αα·αααΆαααααΎαααααααΈα α»ααααα ααααααΌαααΆαα’αα»ααααα
αααααΆαααααααααΌααααααααΆααα
αΌα master
, ααααΌαααΆαα’αα»ααααααΌα
ααΆαααααα:
- α’αααΈβαααααβαααΆαβαααβααΆαβαααααΆααβααΆαβααΎβ, ααΌα ...
- ααΆααααααΎαααΌαααΆα Docker αααααα’ααααΎααΌα ααΆαααααα αα·αααα·ααααΆααα αα α»ααααααα
- ααΆαααΆαααααααΆαααΌαααΆααα Docker Hub α
- ααΆααααααΆαααα αααΆαααΈαααααα·αααααα
- αααα»ααααα ααααΌαααΆαααΈ Docker Hub αα αααΆαααΈαααα
- ααΆααααααααα»αααΊααααα αα α»αααααα αα·αα αΆααααααΎαααααΈαα½ααααααα’ααααΎααΌαααΆαααααΈα
ααααα·αααΎα’ααααα·αααΉαα’αααΈααΆααα’ααα’αααΈ Docker ααΌαααΆα αα·ααα»αααΊααα αα»αααΆααααα αααα»αααΉαααααΆααα’αααααΆααα’ααααααΆα’αααΈααΆα
ααΎ CI/CD ααΆα’αααΈ?
α’ααααααΆαα CI/CD ααααΆαα±αα "ααΆααα½ααααα αΌαααΆαααααααααΆαα / ααΆαααΆαααααααΆαααΆαααααααααΆαα" α
β ααΆααα½ααααα αΌαααΆαααααααααΆαα
ααΆααα½ααααα
αΌαααΆαααααααααΆααααΊααΆααααΎαααΆααα½ααααα’αααα’αα·ααααααααααΎααΆαααααααααΆα
α·αααα
ααααααααΆααααΌααααααααααΆαααααααααααα (ααΆααααααΆααΆααΆαα½α master
) αααααΉαααΉαααααα»αααΆααααααααΌαααααΌαααΆαααΆααΆααΆααααααΆαααααΎααααααααααααααααααααα·α
β ααΆαααΆαααααααΆαααΆαααααααααΆαα
ααΆαααΆαααααααΆαααΆααααααΊααΆααΆαααΆααα±ααααααΎααααΆαααααααααααααααααα·ααΌαααΌααα αααα»αααα·αααααααΉαααΆααα αααααααΈααΈαααα’ααααααΆαα CI/CD αααααααααααΌαααΆααααααααΆααΆ "ααΆαα ααα αΆααααα"α αααααΆααΌαααααΆαααΌα ααααΆααΉα "ααΆαααΆαααααααΆααααα" ααα»αααα "ααΆαα ααα αΆααααα" ααααααααααααααΌαααΆαααΎααααΈαααααΆααααΆαααααΆααααααΌαααααααα»ααααα αΆααααααΎαααααΎαααΆαααΆαααααααΆαααααααα
ααΆαα αΆααααααΎα
αααααα·ααΈααααααα»αααααΆαααααααΆααα’αααααααααΌαααΆαααα α
ααΆ
αααα»αααααΈαααααααα»α αααααα·ααΈααΊααΆαααΆαααΈααα Express ααααααα»αααααΎαααΆααα
αααα»αααα·ααααΆα Node.js αααααΎαααααα·ααΈ React ααααααααα½α αα·αααΆαααα API α
αα αααααΆαααΈααααααααΆααα»ααααα·ααΆαα ααααΆαααααααααααααααΎααΆααα»αααααΆααααααααα’αΆα
ααααΌαααΆαααααΎααα
αααα»α
αααα»αααΆααα·αααααααΆαα½α
Dockers
Docker ααΊααΆα§ααααααααα’ααα»αα
αααααα
αα
αααα·ααααΆ containerization α’αα»ααααΆαα±αααααααα·ααΈααααΌαααΆαα
ααα
αΆααααΆαααΆααααα½αααΆαααααααΆα αα·αααααΎαααΆααααα»αααα·ααΆααΆαααΌα
ααααΆ αααααΈααΆαααα·ααΆ Docker αααα½αααΆααααΎαααΆααααα»αααα·ααααΆααααααααααΆαααααα ααααΌααααα»αααααΌααααααααααααα»ααα
ααΎα§ααααααααααΆααααΆααααααααΆ Docker (CLI) α
Docker Hub ααΊαααα αΆαααααα ααααΉα
ααΌα αααα ααΎααααΈα αΆααααααΎαααΆαα½α Docker α’αααααααΌαααααΎααΏαααΈααααΆαα
- ααααα
αα»αααααΌαααααΎαα» . - α
α»αααααααααααΆαα
αα»ααααα αΆαα .
αααααΆααααΈααα α’αααα’αΆα αα·αα·αααααΎαααΆααΎ Docker CLI ααααΎαααΆααααααααΎαααΆαααΆααααααααΆααΆααααααααΎααααΈαα·αα·αααααΎααααα Docker αααα¬ααα
docker -v
αααααΆαααα ααΌαα αΌααα ααΆαα Docker Hub ααααααα αΌααααααα’αααααααΎααααΆαα αα·αααΆααααααααΆααααααα’ααα αα αααααααΌαααΆααα½αα
docker login
ααΎααααΈααααΎ Docker α’αααααααΌααααααααΈααααααα·αααααΌαααΆα αα·ααα»αααΊαααα
β ααΌαααΆα
ααΌαααΆαβααΊβααΆβα’αααΈβαα½αβααΌα βααΆβαααααβααβαααβααΆαβααΆαααααΆαβαααααΆααβααΆαβααα‘αΎαβαα»αα αααααΊααΆααΌαααααααα·αα’αΆα ααααΆααααααΌαααΆαααααααααααα―αααΆα αα·αααΆαααααααααααααααα·ααΈα α’αααα’αα·ααααααα’αΆα α αααααααααΌαααΆαααΆααααΆαααΆααααα½αα
# ΠΡΠ²ΠΎΠ΄ ΡΠ²Π΅Π΄Π΅Π½ΠΈΠΉ ΠΎΠ±ΠΎ Π²ΡΠ΅Ρ
ΠΎΠ±ΡΠ°Π·Π°Ρ
docker images
ααΆααααααααΆαααααΉααααα ααααΆααΆααααααΆαααααααΆααΌα ααΆααααααα
REPOSITORY TAG IMAGE ID CREATED SIZE
---
αααααΆααααΎαααΉααα·αα·αααααΎαα§ααΆα ααααα½αα ααα½αααααΆααααααααΆαααα»αααααααααΌα ααααΆ - ααααΌαααΆαααΆααααααααΆαααααΆαααα·αααααα αΎααααααΆααααα§ααΆα αααααα’αααΈαααααΆα’αΆα αααα ααααΆαα
β αα»α
αα»αααΊαααααΊααΆαααα αααααα’αΆα ααααα·ααααα·ααΆααααααΆαα’αααΈααααααααΆααααααααΌαααΆαααΎααααΈααααΎαααΆααααααα·ααΈα αααααα·ααΈαααααΆααα·ααΈααΆααααααααααΉαααααΎαααΆαααΌα ααααΆααΆαα·α αα ααααα·ααα·αααΈα αααααΆαα ααΆααααααααα αα αααα»αααα·ααΆααΆαααΆα ααααα‘αα αα·ααααα»αααα·ααΆααΆαααΌα ααααΆα α ααα»α αααααΊααΆααΌαααΆαααΌα ααααΆααααΌαααΆαααΎαααααΎαααΆααααα»αααα·ααΆααΆαααααααααααΆα
# ΠΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½ΠΈΠ΅ Π²ΡΠ΅Ρ
ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΎΠ²
docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
---
β ααααΆα
ααααΆαααΊααΆααΆαα ααα’α»ααααα αΆαα’αααΈααααααΆααααΆααααααΌαααΆααα½αα
β ααα ααααΈααααα ααα ααααααΆααααααααΆ Docker
αααααΆαα·αααααΆαααΌαα ααααΆααααααααΆ Docker αααααααΎααΆααΌαα αα½αα ααα½αα
αααα»αααΆαααΆα
ααα·αα
αααααααΆαα
ααΌαααΆαα
ααΆααααααΎαααΌαααΆαααΈ Dockerfile
ααΌαααΆαα
ααΆαααΆααααααΆαααΌαααΆα
ααΌαααΆαα
ααΆαα α»ααααααΈααΌαααΆα
αα»αααΊααα
αααα»αααααΎαααΆααα»αααΊααααααααα’ααααΎααΌαααΆα
ααΌαααΆαα
ααΆααααα ααααΌαααΆααα αααααΈααααα
ααΌαααΆαα
αααα»ααααα»αααΌαααΆαααΈαααααΈααααα
αα»αααΊααα
ααΆαα α»ααααααΈαα»α
ααΌαααΆα/αα»αααΊααα
ααΆααααα»ααα·αααΌαααΆαααααα·αααααΎ
β Dockerfile
αααα»αααΉαααΈααααααααΎαααΆααααααα·ααΈααα·ααααααααα»ααααα»αα αααα»αααΆαααΆαααααααα
ααΆαααααααα Webpack αααααααΌαααΆααα
ααΆα‘αΎαααΎααααΈαααααΎααααααα·ααΈ React αααααααααα½α
ααΆααααα
α αααααΆαααααααα»αααΆαααΆααααααααΆαααα
αΆααααααΎααααΆαααΈααααααααΆαααΌαααααΆαααΎ Node.js αα
ααΎα
ααα 5000
. ααΆααΎααα
ααΌα
αααα
npm i # ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ° Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ
npm run build # ΡΠ±ΠΎΡΠΊΠ° React-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ
npm run start # Π·Π°ΠΏΡΡΠΊ Node-ΡΠ΅ΡΠ²Π΅ΡΠ°
ααΆαα½αααααααΌαααΆαααααααααΆααααΆαααα»ααα·αααΆααααααα·ααΈα§ααΆα ααααααααΆαααααααΆαααααααα ααα»αααααα ααΈααα αααααΆααααΆααα·ααααα αααααα·ααΈ Node ααΆααααααΆαα½αααΉαααααΎα
ααΎααααΈααααΎαα»αααΊααα α’αααααΉαααααΌααααααααΆαααααΆαααα Docker α αααααααΌαααΆαααααΎααΆααααα―αααΆααααα α
ααΆ Dockerfile
αααααΆαααΈααΆαααα
αααα»αααα«αααααααααα ααααΌαα―αααΆααααα αΆααααΌα
ααΆαα·αα’αΆα
αααααΆαα
ααα»ααααα’αααΈαααααΆααΆααααααΆααααα»ααααα ααΆαα½αααΉαααΆααααααααΆαα·ααα αααααααααααΉαααΆααααα αααα·ααΆααΆαααΆαααΆαα αααααΊααΆααΆααααααααΆαα½αα ααα½αα
FROM - ααΆααααααααΆαααα αΆααααααΎαα―αααΆαα ααΆαααααΆααααΌαααΆαααΌαααααΆαααααα»αααααΌαααΆαααΆαααααα αααΆααα αααα - α ααααα―αααΆαααΈααααααααα»ααααα»ααα αα»αααΊααααWORKDIR - αααααααααΆαααΆααααααΆααααΆααααααααΆααΆαααααααααα - ααααΎαααΆαααΆααααααααΆαααΆααααααα - ααΆααααααα ααααα ααα»α βα αΌα - ααΆαα ααα’α»ααααα αΆαα’αααΈααΆααααααααΆαααααααΌαααααα·ααααα·α
Dockerfile
α’αΆα
ααΎααα
ααΌα
αααα
# ΠΠ°Π³ΡΡΠ·ΠΈΡΡ Π±Π°Π·ΠΎΠ²ΡΠΉ ΠΎΠ±ΡΠ°Π·
FROM node:12-alpine
# Π‘ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ ΡΠ°ΠΉΠ»Ρ ΠΈΠ· ΡΠ΅ΠΊΡΡΠ΅ΠΉ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ Π² Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ app/
COPY . app/
# ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ app/ Π² ΡΠΎΠ»ΠΈ ΡΠ°Π±ΠΎΡΠ΅ΠΉ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ
WORKDIR app/
# Π£ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ (ΠΊΠΎΠΌΠ°Π½Π΄Π° npm ci ΠΏΠΎΡ
ΠΎΠΆΠ° npm i, Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΡ
ΡΠ±ΠΎΡΠΎΠΊ)
RUN npm ci --only-production
# Π‘ΠΎΠ±ΡΠ°ΡΡ ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠΎΠ΅ React-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π΄Π»Ρ ΠΏΡΠΎΠ΄Π°ΠΊΡΠ½Π°
RUN npm run build
# ΠΡΠΎΡΠ»ΡΡΠΈΠ²Π°ΡΡ ΡΠΊΠ°Π·Π°Π½Π½ΡΠΉ ΠΏΠΎΡΡ
EXPOSE 5000
# ΠΠ°ΠΏΡΡΡΠΈΡΡ Node-ΡΠ΅ΡΠ²Π΅Ρ
ENTRYPOINT npm run start
α’αΆαααααααΎααΌαααΆαααΌαααααΆααααα’αααααααΎαααΎα α’ααααααα ααααΆααααΌαααα‘αΎαααΆαα’αΆαααααααααααα ααΆααα·αααΊααΆααΌαααΆαααΌαααααΆααα½αα ααα½α (ααΌα ααΆ Node Alpine Linux) ααααΌαααΆααααααΎαα‘αΎααααα»ααααααααααααΎα±αααα½αααααααα½αααΆααααα’αΆα ααααΎαα ααΆαα ααΆαααααα αα½ααααααα ααααΆαα·αααΆααααααα·ααΈαα½αα ααα½ααααα’αααααααΉααα»ααααααα
β ααΆαααΆαααα ααΆαααΆααααααΆα αα·αααααΎαααΆααα»αααΊααα
ααΆααα½αααααα»αααααΆαααα»αααααααα·αααΆαααΎαααααΎαααΆααα»αααΊαααααΊαααααΆααααΈααΎαααΆα Dockerfile
, ααΆααα·α
αα
ααΊααΆααααααΆααα αα»ααααα’ααααα»αααΌαααΆααα
Docker Hub α’αααααααΌαααΆαααααααΆαα
αααα»αααΌαααααΆαα
β ααααα·ααΆα
ααααΌαα’αααααααΌααααααΌα latest
).
# Π‘Π±ΠΎΡΠΊΠ° ΠΎΠ±ΡΠ°Π·Π°
docker build -t <image>:<tag> .
αααααΆααααΈααααΎαααΆαααΆααααααααΆααα α’αααα’αΆα ααΎα Docker αααααΎαααΌαααΆαα
Sending build context to Docker daemon 2.88MB
Step 1/9 : FROM node:12-alpine
---> ...Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΡΡΠ°ΠΏΠΎΠ² ΡΠ±ΠΎΡΠΊΠΈ...
Successfully built 123456789123
Successfully tagged <image>:<tag>
ααΆαααΆααααα’αΆα
α
αααΆααααααΈαααΈααΆααΈ - ααΆααΆααα’ααααΊα’αΆαααααααΎα
ααα½αααΆαα’αΆααααααααα’αααααΆαα αα
ααααααααΆαααααΆαααΆααααΌαααΆααααα
ααα’αααα’αΆα
ααααΎαααΆαααΆααααααααΆ docker images
α αΎαααΎαααΆααα·αααααΆααααΌαααΆαααααΈααααα’αααα
REPOSITORY TAG IMAGE ID CREATED SIZE
<image> latest 123456789123 About a minute ago x.xxGB
β ααΎαααααΎαααΆα
ααΌαααΆαααααΌαααΆααααααΎαα‘αΎαα αααααΆααααααΆα’αααα’αΆα
ααααΎαααΆααα»αααΊααααααααα’ααααΎααΆα αααααΆααααααα»αα
ααα’αΆα
α
αΌααα
ααΆαααααααα·ααΈααααααα»αααααΎαααΆααα
αααα»ααα»αααΊααααα
localhost:5000
, αααα»α, αα
ααΆααααααααααΌ 5000:5000
αα
αααα»αααΆααααααααΆαααααΆαααααααΆαααα‘αΎα 5000
. αα
ααΆαααααΆαααΊααΆα
ααααα»αααΊαααα
# ΠΠ°ΠΏΡΡΠΊ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΏΠΎΡΡΠ° 5000 ΠΈ ΠΏΠΎΡΡΠ° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ° 5000
docker run -p 5000:5000 <image>:<tag>
α₯α‘αΌαααααα»αααΊαααααααΌαααΆααααααΎα αα·αααααΎαααΆα α’αααα’αΆα
ααααΎααΆααααααααΆ docker ps
ααΎααααΈααΎαααααααΆαα’αααΈαα»αααα (α¬α’αααα’αΆα
ααααΎααΆααααααααΆ docker ps -a
ααααααα αΆαααααααΆαα’αααΈαα»αααΊαααααΆααα’αα αα·αααααΉαααααααΎαααΆαααα»ααααααα)α
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
987654321234 <image> "/bin/sh -c 'npm runβ¦" 6 seconds ago Up 6 seconds 0.0.0.0:5000->5000/tcp stoic_darwin
ααααα·αααΎα’αααα₯α‘αΌαααααα
α’αΆααααααΆα localhost:5000
β α’αααα’αΆα
ααΎαααααααααααααα·ααΈααααααα»αααααΎαααΆααααααΎααα
ααΌα
ααααΆαα
ααΉαααααααααααααα·ααΈααααααα»αααααΎαααΆααα
αααα»αααα·ααΆααΆαααα·αααααα
β ααΆαααΆααααααΆα αα·αααΆαααααα»αααααααΆα
ααΎααααΈααααΎααΌαααΆααααααΆααααααΎααα½ααα ααΎαααΆαααΈαααααα·ααααα ααΎαααααΌαααΆαααααααΆαααΆαααααΌαααΆααααααΈ Docker Hub α αααααΆααααααΆααααΌαα’αααααααΌααααααΎαααααΆαααααααΆαααααααααα ααΎ Docker Hubα αααααΆααααΈαααααΎαααΉαααΆααααααααααααΎαα’αΆα ααααΎααΌαααΆαα ααΌαααΆαααααΌαααααΌααααααααΎααααΈα±αααααααααααααΆα αΆααααααΎαααααααααα’αααααααΎααααΆαα Docker Hub ααααααΎαα ααααα½αααααααΌαααΆαα’αα»ααααααΆααααααααααααααΆααα ααααΆαααΆαα½αα’αΆα ααααΌαααΆαααΆαααα α α»ααααα αααααααααα ααΆαααααααααααΆα§ααΆα αααααααΆαααΆαααααααααΌαααΆααααααααΎαααααααΆααααααα
α₯α‘αΌαα’αααα’αΆα
αααααΎαααΌαααΆααααααααΎαααααααααΈ α αΎαααααΎαααΆαααΆααααααααΆ docker push
ααΎααααΈαα»αααΆαα
ααααΆαα Docker Hub α
docker build -t <username>/<repository>:<tag> .
docker tag <username>/<repository>:<tag> <username>/<repository>:latest
docker push <username>/<repository>:<tag>
# ΠΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ΅ ΡΡΠΎ ΠΌΠΎΠΆΠ΅Ρ Π²ΡΠ³Π»ΡΠ΄Π΅ΡΡ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ°ΠΊ:
docker build -t user/app:v1.0.0 .
docker tag user/app:v1.0.0 user/app:latest
docker push user/app:v1.0.0
ααααα·αααΎα’αααΈαααααΎαααΆαααα’ ααΌαααΆαααΉαααΆααα ααΎ Docker Hub α αΎαα’αΆα αααα»αα‘αΎααααΆαααΆααααα½ααα ααΆαααααΆαααΈααα α¬ααααααα α’αααα’αα·ααααααααααααααα
ααα αΆαβαααααΆαα
ααααααααααα ααΎαααΆααααααααααΆααααΆαααααα·ααΈαααα»αααααααααΆ Docker container αααα»αααααΎαααΆααααα»αααΌαααααΆαα ααΎαααΆααααα αααα»αααΊααααα Docker Hub α ααΆααα’αααααααΆααααααΆ αα½αααΎαααΆαααΆααα αα»ααααΆαααα’ ααααααα ααααααα ααααααΎαα α₯α‘αΌααααααΎαααααΌααααααααΆααααα½αααΈααααααααααα
- ααΆαααα‘αΎαα§ααααα CI αααααΆααααΆααααα αα·αααΆαααααααΆαααΌαα
- ααΆαααα‘αΎααααΆαααΈαααααα·αααααααΎααααΈα±ααααΆα’αΆα ααΆααα αα·αααααΎαααΆαααΌαααααααΎαα
αααα»αααααΈααααααΎαααΎαααααΎ
ααΆαα½αααααααΌαααΆαααααααααΆααααΆαα ααΈαααα’αααα’αΆα ααααΎααΆααα½ααααα αΌαααααΆααααααΆααααααααααααα α§ααΆα ααα αααα½αα±αα Travis CI α’αααα’αΆα ααααΎ CircleCI α¬ Github Actions α α αΎααααα½αα±αα DigitalOcean - AWS α¬ Linode α
ααΎαααΆααααααα α α·αααααααΎααΆαααΆαα½α Travis CI α αΎααααα»αααΆαα’αααΈαα½ααααααΆαααααααα ααΆαααααααααα½α α αΎααα αααα»αααααΆαααααααα ααΌα ααααα₯α‘αΌαααααααα»αααΉααα·ααΆααααααααααα’αααΈαααααααα αααΆαααααΆααααΆαααΆαα
Travis CI
Travis CI ααΊααΆα§ααααααααααΆααααΆααααα αα·αααΆαααααααΆαααΌαα αααα»ααα·αα ααα αΌααα αααα»αααΆααααα»αααααααΆαααααΆααααααΎα Travis CI αα αααααΆαααααααααΈαα½ααααΆααααααααα·ααα α αΎαααΆααΉααα·αααΆαααααΌαα’αααααααααααα αααΎαααα ααα»αααααααα»αααΉααααααΆααααΈααΌαααααΆαααααΉα ααΎααααΈα²ααα’αααα αΆααααααΎα ααααα·αααΎα’ααααααααα α α·αααααααΎ Travis CIα αα·αααΆα’αααααααΎαααΎα Travis CI, CircleCI, Jenkins α¬α’αααΈαααααααααα αα·ααΈααΆαααααααααααα ααΆααααααααααααααααααΆααΉαααααΌαααΆαααααΎαα αααααααΈααααααα
ααΎααααΈα
αΆααααααΎαααΆαα½α Travis CI ααΌαα
αΌααα
ααΆαα
ααΆαααααααα Travis CI ααααΌαααΆαα αΆααααααΎα αααΆαααΈαααααααΌαααΆαααΎαααααΎαααΆα αααααααα·ααααα·ααΆααααααααΆαααααΆααααααΆαααα αααα»αα―αααΆαααααααα ααΆαααααααα αα½αααΆααααΆαααΆαααααααΆαααΆααΆααααΆαααααααααΌαααααΆα
β ααααααΈαα·αααΆαααΆα
α―αααΆαααααααα
ααΆαααααααα Travis CI ααΆαα α
.travis.yml
αα·ααααααΆαα»ααααα»αααα«ααααααα ααΆαααααααα·αααααααΉαααα·ααΆααα
apt addons
cache components
before_install
install
before_script
script
before_cache
after_success ΠΈΠ»ΠΈ after_failure
before_deploy
deploy
after_deploy
after_script
β ααΆαααααΎααααα
αα αααα»αα―αααΆαααααααα ααΆαααααααα αααα»αααΉαααααααα ααΆαααααααααααΆαααΈααα Travis CI ααΌαααααΆαα αααα»αααΆαααααΎαααΎα Node 12 ααΆααΆααΆ α αΎαααΆαααααΆααααααααααα±ααααα‘αΎαααΆαα’αΆαααααααααααααΌαα±ααααααΎ Docker α
α’αααΈααααααααΆααααααΆααα
αααα»ααααααΈ .travis.yml
ααΉαααααΌαααΆαααααα·ααααα·αα
ααααααααααΎααΆαααΆααα’ααααααΌαααΆαααααΎα‘αΎααα
ααΆαααααααααΆααΆααΆααα’ααααααααΆαα ααΎααααααααΆαααΆααααααΆαααααααααΈαααα αααααΊααΆαα»αααΆαααΆααααααααααααααααΆααΆααααααΆααΎαα’αΆα
ααΆαααααααΌαααΆααα’αααααα
αΌααααααα»αααααΆααα αααα’αα»ααααΆαα±ααα’αααααΉαααΆααΎααΌααα½α
ααΆααα αΎαα¬αα
ααΎααααΈααααααα
ααΆααααΆααΆα master
αα·αααΆααΎααΆααΉααααααααααΎαααΆαααΆαααααααααααααα¬ααα αα
αααα»αααΆαααααααα
ααΆαααααααααααααα αααα»αααα‘αΎαα’αααΈαααααααααΆααα
αααα»αααΌαααααΆα ααααΎαααΆααααΆαααΈααα Webpack dev αααα»αααααααΆαααααα (αααααΊααΆααααααααααααΎαααΆαααΆαααΆααααααααα»α) αα·αααααΎαααΆαααΆαααααα
ααααα·αααΎα’αααα
ααα±ααααααΆααααααα’ααααααα αΆαααΌαααααΆαααααααααααααΆααααα,
ααΌα
αααααααααΊααΆααααΉαααΆαααα―αααΆα .travis.yml
:
# Π£ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΡΠ·ΡΠΊ
language: node_js
# Π£ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ Π²Π΅ΡΡΠΈΡ Node.js
node_js:
- '12'
services:
# ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΡΡ ΡΡΡΠΎΠΊΡ Docker
- docker
install:
# Π£ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ Π΄Π»Ρ ΡΠ΅ΡΡΠΎΠ²
- npm ci
before_script:
# ΠΠ°ΠΏΡΡΡΠΈΡΡ ΡΠ΅ΡΠ²Π΅Ρ ΠΈ ΠΊΠ»ΠΈΠ΅Π½Ρ Π΄Π»Ρ ΡΠ΅ΡΡΠΎΠ²
- npm run dev &
script:
# ΠΠ°ΠΏΡΡΡΠΈΡΡ ΡΠ΅ΡΡΡ
- npm run test
αααααΊααΆααααααααααααααααΆααααααααΌαααΆαα’αα»αααααααααΆααααΆααΆααΆααα’ααααααααΆαα αα·ααααααΆααααααΎααΆααααα ααα
β ααΆαααΆαααααααΆα
αααααα’ααααΎααΆαααααααααΆααΆαααααΎαααααααααααααααααα·ααΆααα’ααααΆααααα
ααααααααααα ααΎαα’αΆα
ααΆαααααα
αΌαααΌααα
αααΆαααΈαααααα·ααααααααααΆαααααΎαα αααααΆαβααΎαβα
ααβααααΎβαααβαααααΆααβααβααΌαβααΈβααΆααΆβααα»αααααα master
ααΎααααααααΆαααααΆαααααααααααααααααααα
αααα»αααΆααααααααΆαααΆααα±ααααααΎααααΆααα αα»ααααα’αααααααΆααΆαααααΎααΌααααααΎαααΉαααΎααααααΆαααα
αααα»αααααααααααα’ααα αααα»αα
αααααααΆαα’αααααΆα’αααααααΌαααααΆαααααααΈααα·αααααΆαααααα α
ααΆαααααΆααααΆααα±ααααααΎααααΆααα
deploy:
# Π‘ΠΎΠ±ΡΠ°ΡΡ Docker-ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ ΠΈ ΠΎΡΠΏΡΠ°Π²ΠΈΡΡ Π΅Π³ΠΎ Π½Π° Docker Hub
provider: script
script: bash deploy.sh
on:
branch: master
ααααααΈαααΆαααααααΆααααααααΆααααα αΆααΈαα
- αααααΎα ααΆααααααΆα αα·αααααΎααΌαααΆααα Docker Hub αααααααΎα§ααααα CI (αααα»αααααΈααααααΎα Travis CI)α
- αααα»ααααα»αααΌαααΆααα ααΎαααΆαααΈααα αααααααα»αααΊαααα αΆαα αα·αα αΆααααααΎαααααΈαα½α (αααα»αααααΈααααααΎα αααΆαααΈαααααααΎαααΆαααΎαααα·ααΆ DigitalOcean)α
ααααΌα α’αααβααααΌαβαααα αβααααΎαααΆαβαααααβαααααααα·βαααααΆααβααΆαβαααααΎα ααΆαβααΆααβααααΆα αα·αβαα»αβααΌαααΆαβαα Docker Hubα ααΆααα’αααααααΊααααααααααΆαα ααΉαα’αααΈαααααΎαααΆαααααΎαα½α ααααα ααΎααααααααΎαααααΌαααΆααα»αααααΆααααααααααΆαααααααααααΆααααα½αααααα ααΌαααΆα αα·αααΆαα αΌααααααααααααααααα·α αααα»αααΆαααΆααα·ααΆαααΆαα½αααΉαααααααΆααααα’α·ααα½αα ααα½αααααααααΈαααΆααα±ααααααΎααααΆαα ααΌα ααΆαα»αααααΆαααααααΆααααααΆα ααΆαα αΌα ααΆαα’αα·αααΌα SSH key ααΆααααααΎαααΆααααααΆαα SSH α ααα»ααααβααααΆαβααα’βαααβαα·αααβαααα»αβααααβαααα»αβααα’βααΆαα½αβααΉα bash ααΌα βααΉαβααΏαβααΆβα αααΎαβαααα ααΆααααΆααα½ααααα»ααααααααααααΈααααα
ααΌα
αααα αααααααααΌαααααααααΈααααα»ααααα»αααΌαααΆααα
Docker Hub α ααααα·αααΆααΆααααα½αααααΎα αααααααΆαααααΆααααααΆαααααααα»αααΆαααααΎααΆαααααααααΉαααΆααα½ααααα
αΌα git hash αα·α git tag ααααα·αααΎααΆαα αααααΆααΆααΆααααΆαααΊααΆααααα½αααα αα·αααααΎα±ααααΆααΆααααααΆααααα½ααααα»αααΆααααααα’ααααααααΆαααΆααα½αααααα»αααααΆαααααΆααΆαααΌαααααΆαα DOCKER_USERNAME
ΠΈ DOCKER_PASSWORD
ααΊααΆα’αααααα·ααααΆαα’αααααααΎααααΆαααααα’αΆα
ααααααααααααΎα
ααα»α
αααααΆαα Travis CI α Travis CI ααΉαααααΎαααΆααα·αααααααααΎααααααααααααααααα· ααΎααααΈαα»αα±ααααΆααααΆαααα
αααα»ααααα»αα
αααααΊααΆαααααααααΌαααααααααΈα deploy.sh
.
#!/bin/sh
set -e # ΠΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΡΠΊΡΠΈΠΏΡ ΠΏΡΠΈ Π½Π°Π»ΠΈΡΠΈΠΈ ΠΎΡΠΈΠ±ΠΎΠΊ
IMAGE="<username>/<repository>" # ΠΠ±ΡΠ°Π· Docker
GIT_VERSION=$(git describe --always --abbrev --tags --long) # Git-Ρ
ΡΡ ΠΈ ΡΠ΅Π³ΠΈ
# Π‘Π±ΠΎΡΠΊΠ° ΠΈ ΡΠ΅Π³ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎΠ±ΡΠ°Π·Π°
docker build -t ${IMAGE}:${GIT_VERSION} .
docker tag ${IMAGE}:${GIT_VERSION} ${IMAGE}:latest
# ΠΡ
ΠΎΠ΄ Π² Docker Hub ΠΈ Π²ΡΠ³ΡΡΠ·ΠΊΠ° ΠΎΠ±ΡΠ°Π·Π°
echo "${DOCKER_PASSWORD}" | docker login -u "${DOCKER_USERNAME}" --password-stdin
docker push ${IMAGE}:${GIT_VERSION}
α’αααΈααααααααααΈααΈαααααααααΈαααΉαα’αΆαααααααΆαααααα»αααΎαααΆαααΈααααα’ααααααα»αααααΎ αα·ααααααααααΆααααααΆαααα
ααΆααααΌαααΆααααα
αα αααα»αααααΈαααααααα»α αααααΆααααα»αααααΎ Digital Ocean αααα»αααααΎααΆααααααααΆααΎααααΈααααΆαααα
αααΆαααΈααα aws
, αβαα
ααΆαααα‘αΎααααΆαααΈααααα·ααα·ααΆαααΆαα·αααααα ααΌα
αααααααα»ααααα
ααααααααΉααααααα’ααααΎααΌαααΆαααΌαααααΆαα ααΆαα½αααααααΌαααΆαααααααααΆααααΆααααααααααααααα»αααΆαααααΎαααΎααααααΌαα±ααααΆαααΆαααα‘αΎα Docker ααααααααα½ααα αα·αααΆαααΎαααααΎαααΆα Docker αααααααααααα αααα»αααΆαααααΎα’ααΌααα»αααΌ 18.04 ααΎααααΈααα‘αΎα Docker ααΌα
ααααααααα·αααΎα’ααααααααα»αααααΎα’ααΌααα»αααΌααΎααααΈααααΎααΌα
ααααΆααα α’αααααααΆααααααααΎααΆα
αααα»ααα·ααα·ααΆααα ααΈαααα’αααΈααΆααααααααΆααΆααααΆαααααααΆααααααΆαααααα ααααααα·αααααΆααααα’αΆα αααααααα½ααααΆαααααΆαααα αααα»αααααΈααααααααααΆα αααα»αααΉαααααααααααΆαααΌαα αααααααααΆααααααααΌαα’αα»αααααααααΆααααΈααααΆααααΆαααα SSH αα αααΆαααΈααα ααααααααααααααΉαααααΌαααΆααα±ααααααΎααααΆααα
- ααΎαααααΌαααααααααα»αααΊαααααααααα»αααααΎαααΆαα αΎαααααααααΆα
- αααααΆααααα’αααααααΌαααΎαααααΎαααΆααα»αααΊαααααααΈαα½ααα ααααααΆααααααα
- α’αααααΉαααααΌααααααα
αααααΌαααααΆααααααααΆαααΈααα
80
- ααΆααΉαα’αα»ααααΆαα±ααα’ααααααα αΌαααα ααααααα α’αΆααααααΆαααΌαexample.com
ααααα·ααααααΆααα ααα ααΆααΆαααααΎα’αΆααααααΆαααΌαexample.com:5000
. - ααΆα α»αααααα α’αααααααΌααα»ααα»α αα·αααΌαααΆαα αΆαααααΆααα’ααα ααα
αααααΊααΆααΆαααααααααααααΈαα
# ΠΠ°ΠΉΡΠΈ ID ΡΠ°Π±ΠΎΡΠ°ΡΡΠ΅Π³ΠΎ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ°
CONTAINER_ID=$(docker ps | grep takenote | cut -d" " -f1)
# ΠΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΡΡΠ°ΡΡΠΉ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ, Π·Π°ΠΏΡΡΡΠΈΡΡ Π½ΠΎΠ²ΡΠΉ, ΠΎΡΠΈΡΡΠΈΡΡ ΡΠΈΡΡΠ΅ΠΌΡ
docker stop ${CONTAINER_ID}
docker run --restart unless-stopped -d -p 80:5000 ${IMAGE}:${GIT_VERSION}
docker system prune -a -f
ααΏααα½αα ααα½ααααααααΌαααα α·ααααα»αααΆαα
ααΆα’αΆα αα αα½α αααααΆαα ααααααα’αααααααΆαααα αααΆαααΈαααααΆαααα SSH ααΈ Travis CI α’αααααΉαααΎαααΆααααααΆααααααΉαααΆααΆααα’αααααΈααΆαααααααΆαααα‘αΎααααααααααααααααΉααααα αΆαααΆαααααΎαααααααα’αααααααΎααααΆααα
The authenticity of host '<hostname> (<IP address>)' can't be established.
RSA key fingerprint is <key fingerprint>.
Are you sure you want to continue connecting (yes/no)?
αααα»αβααΆαβαααβααΆ string key α’αΆα
βααααΌαβααΆαβα’αα·αααΌαβαααα»α base64 ααΎααααΈβαααααΆβαα»αβααΆβαααα»αβααααααβαααβααΆβα’αΆα
βααααΎβααΆαβααΆαβαααΆαβααΆααααα½α αα·αβα’αΆα
βαα»αβα
α·αααβααΆαα αα
βααααΆααααΆαβααα‘αΎα α’αααβα’αΆα
βαα·ααΌαβααααΆααΆααα α αΎαβαααααβααΆβαα
βα―αααΆα known_hosts
ααΎααααΈαααα
αΆααααα α»αααΆαααΎα
echo <public key> | base64 # Π²ΡΠ²ΠΎΠ΄ΠΈΡ <ΠΏΡΠ±Π»ΠΈΡΠ½ΡΠΉ ΠΊΠ»ΡΡ, Π·Π°ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ Π² base64>
αα αααα»αααΆαα’αα»αααα ααΆααααααααΆαααα’αΆα ααΎααα ααΌα αααα
echo "123.45.67.89 ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAklOUpkDHrfHY17SbrmTIpNLTGK9Tjom/BWDSU
GPl+nafzlHDTYW7hdI4yZ5ew18JH4JW9jbhUFrviQzM7xlELEVf4h9lFX5QVkbPppSwg0cda3
Pbv7kOdJ/MTyBlWXFCR+HAo3FXRitBqxiX1nKhXpHAZsMciLq8V6RjsNAQwdsdMFvSlVK/7XA
t3FaoJoAsncM1Q9x5+3V0Ww68/eIFmb1zuUFljQJKprrX88XypNDvjYNby6vw/Pb0rwert/En
mZ+AW4OZPnTPI89ZPmVMLuayrD2cE86Z/il8b+gw3r3+1nKatmIkjn2so1d01QraTlMqVSsbx
NrRFi9wrf+M7Q== [email protected]" | base64
α αΎααααααΊααΆα’αααΈαααααΆααα·α - ααααα’αααααααααΆαα’αα·αααΌα base64α
MTIzLjQ1LjY3Ljg5IHNzaC1yc2EgQUFBQUIzTnphQzF5YzJFQUFBQUJJd0FBQVFFQWtsT1Vwa0RIcmZIWTE3U2JybVRJcE5MVEdLOVRqb20vQldEU1UKR1BsK25hZnpsSERUWVc3aGRJNHlaNWV3MThKSDRKVzlqYmhVRnJ2aVF6TTd4bEVMRVZmNGg5bEZYNVFWa2JQcHBTd2cwY2RhMwpQYnY3a09kSi9NVHlCbFdYRkNSK0hBbzNGWFJpdEJxeGlYMW5LaFhwSEFac01jaUxxOFY2UmpzTkFRd2RzZE1GdlNsVksvN1hBCnQzRmFvSm9Bc25jTTFROXg1KzNWMFd3NjgvZUlGbWIxenVVRmxqUUpLcHJyWDg4WHlwTkR2allOYnk2dncvUGIwcndlcnQvRW4KbVorQVc0T1pQblRQSTg5WlBtVk1MdWF5ckQyY0U4NlovaWw4YitndzNyMysxbkthdG1Ja2puMnNvMWQwMVFyYVRsTXFWU3NieApOclJGaTl3cmYrTTdRPT0geW91QGV4YW1wbGUuY29tCg==
αααααΊααΆααΆααααααααΆαααααΆααααααΆααααΆαααΎ
install:
- echo < ΠΏΡΠ±Π»ΠΈΡΠ½ΡΠΉ ΠΊΠ»ΡΡ, Π·Π°ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ Π² base64> | base64 -d >> $HOME/.ssh/known_hosts
αα·ααΈααΆαααααααΌα ααααΆαααα’αΆα ααααΌαααΆαααααΎααΆαα½αααα―ααααα ααααααααΎαααΆααααααΆαα αααααΆαα’ααααααα ααααΆααααΌαααΆαααα―αααααΎααααΈα αΌαααααΎαααΆαααΈαααα αα αααααααΎααΆαααΆαα½ααα α’αααααααΆααααααααΌαααΆααΆααΆααΆααααΌαααΆααααααΆαα»ααααΆαααΆααα»ααααα·ααΆααα αααα»αααα·ααααΆα Travis CI α αΎαααΆααΆαα·αααααΌαααΆααααα αΆααααααααΈααααααααα
ααΏααα½αααααααααααΌαααααααααΆααααΊααΆα’ααααααα ααααΆααααΌαααααΎαααΆαααααααΈαααΆαααΆαααααααΆαααΆααααΌαααΆαααααΆαααα½αα§ααΆα ααα - ααΆαα½α doctl
. αααα’αΆα
αααααΌαα±ααααΆαααΆααα·αααααααΉαααααααααααααα½αα
ααα½αα
doctl compute ssh <droplet> --ssh-command "Π²ΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ Π±ΡΠ΄ΡΡ Π·Π΄Π΅ΡΡ && Π·Π΄Π΅ΡΡ"
TLS/SSL αα·αααΆααααα»ααα»αααααΆα
αααααΆααβααΈβαααα»αβααΆαβααααΎβα’αααΈβαααααβαααΆαβαααβααΆαβαααααΆααβααΆαβααΎ αααα αΆβα
α»αβαααααβαααβαααα»αβααΆαβαα½αβααΊβαααΆαααΈαβαααααΎβαα·αβααΆα SSL α αααααΆααααα»αααααΎαααΆαααΈααα Node.js ααΎααααΈααααα
αααα»ααα·αααΆαα·αα
ααααααΎααΆαααααααα
ααΆαααααααα SSL αααααααααα ααΌα
αααααααα»αααΎααααααααΎααααααα·ααΈαα»αααααΆαααααα»α αα·ααααααααΆααααααΆααααα’α·αααααααΆαα
αααα»α DNS α α§ααΆα ααααααα»αααααΈ DigitalOcean ααΆααααααΎααα·ααααΆαααααααααα
α»αα αααααααΆααααααα½αα―αααααααααααααααααααααααα·αα
ααΎα§ααααααααα»ααα»αααααΆαααΊααΆααΈαα·αα·ααΈααΆαααα α₯ααα·ααααα αα·αααΏαα αα·ααΈααΆααααααααααΆαα’ααααααααααααααααααααααΆααααΎα±ααααΆαααΆαααΆααααα½ααααα»αααΆαααα‘αΎα SSL αα
ααΎαααΆαααΈαααααΆα
αααΎααααααααΎαααΆααα
ααΈαααααα§ααααααααα»ααα»αααααΆαααααα·αααΎα
αΆαααΆα
αα αααα’αα»ααααΆαα±αααααΆαααΈααααααα½αα―ααα·α "αα·α" α’αααΈ SSL ααΆααααααα ααα»αααααααα»αααααααα½αααααΎα
αααααΌα
ααααααΆ 80
. ααΌα
ααααααΆαααα‘αΎα SSL αα
ααΎ load balancer ααΊααΆααααααΆααααα½α αα·αααΆααααα½αααΆααα·ααΈααΆαααααααααααααααααΆαααα‘αΎα SSL α
α₯α‘αΌααααα’αααα’αΆα
αα·αα
αααααΆααα’αααα
ααΎαααΆαααΈααααααααα½αααααΆααααααΆααα
αΌα - ααΎααααααα
ααα 80
ααααΎααΎααααΈααΆααααααΆαα½α Load Balancer αα·α Port 22
αααααΆαα SSH α ααΆαααααα ααΆαααααΆααΆαα
αΌαααααΎαααΆαααΈααααααααααΆαααα
ααΎα
αααααΆαα½ααααα
ααΈα
αααααΆααααΈααααααΉααααΆαααα
αααααα
αααααΆααααΈαααα»αααΆαααααΎα’αααΈααααααααΆαααααααα»αααΆααα·ααΆααα
αααα»ααααααΆααααα ααΆαααααα·ααΆ Docker αα·ααααα·ααααααααααααΆαα CI/CD ααααααααααααα·ααΆαααααΎα±αααααα»ααααααααΆα
αααα αΎαα αααα»αα’αΆα
αααα
ααααααααααΆααααΆααα½ααααα
αΌαααΆαααααααααΆαα αααα»αα’αα‘α»αααααααααΌαααααΌαααΆαααΆααααα αα»ααααααΆα
αΌααα
αααα»αααΆαααα·α α αΎαααΌαααααΌαααΆαααΆααα±ααααααΎααααΆαααααααααααααααααα·αα
ααΎαααΆαααΈαααα ααΆααα’ααααααα
ααααααΈαααααΆαααααα»α α αΎααααα»αααααΆααααΆααΆααα·ααΈααΎααααΈαααααα’ααα αΌαααΆαααΆααααααααααααααααα·αααααααα»α αα·αααααΎα±ααααΆααΆααααααΆαααααα·αααααΆαα ααΌα
ααααβααααα·αβααΎβα’αααβααΆαβαααα·αβααΆβαα½αβαααα»αβαααα αΆβαααβααΌαβααααΆααβαααα»αβα
PS αα
αααα»αααααααΎα
α’αααα’αΆαααΆααΈαααα‘αΆαα! ααΎα’αααααααΎαα αα αααα·ααααΆ CI/CD αα αααα»αααααααααααα’ααααα?
ααααα: www.habr.com