-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsession_lecture.txt
385 lines (292 loc) · 26.1 KB
/
session_lecture.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
[136. Deployment plan]
Various ways to deploy Django
- Directly on a server
-Run directly on server เลยโดยอาจใช้เช่น Nginx
-รันผ่าน Docker ใน server (ซึ่งคุณก็สามารถใช้แค่ Docker-compose เพื่อรัน app แบบง่ายๆ)
- ใช้ serverless Cloud
# โดย upload application ไปที่ service โดยเราแค่ publish code ของเราบน service แล้วเรื่องของ hardware มันจะจัดการให้เราเอง
ยกตัวอย่างเช่น Google Cloud Run / Google App Engine
AWS Elastic Beanstalk / ECS Fargate
How we'll deploy
- เราจะใช้ Single VPS on AWS (หรือก็คือ EC2)
VPS = Virtual private server
คือ Virtual private server หรือก็คือ virtual machine ที่เราจะซื้อจาก aws
- และเราจะใช้ docker / docker compose เพื่อรัน application บน server นั้น
# เราจะมี EC2 1 instance และ เราจะรัน Docker service บน instance และมันก็จะสามารถเข้าถึงได้จาก outside website แล้ว user ก็จะสร้าง connect เข้ามาได้
Steps we'll take
1. Configure project for deployment
2. Create server on AWS
3. Deploy app
video: The 4 best ways to deploy a Django application
https://www.youtube.com/watch?v=IoxHUrbiqUo
[137. Django deployment overview]
สิ่งที่เราต้องทำเมื่อทำการ Deploying Django
1. Setup a proxy
2. Handle static / media files
3. Configuration app ของเราบน server
Components ต่างๆสำหรับการ Deployment
- Persistent Data
# เมื่อ upload files มันไม่ควรเก็บลง container แต่ควรเก็บลงที่นี้ หรือ persistent volume
# ซึ่ง volume สามารถเข้าได้โดย containers ต่างๆที่อยู่ใน service
- WSGI (Django)
# WSGI => Web server gateway interface
# whiskey service
- Users
- Reverse Proxy
# คือที่ที่จะ accept request เข้า application
# นั้นคือทุก request ที่มาจาก internet มันจะไม่ตรงไปที่ Django service (หรือ whiskey service) แต่จะเข้าตรงนี้หรือproxyก่อน
Why use a reverse proxy?
- Best practice when deploying Django
- whiskey server ที่รัน python (หรือ web server gateway interface) มันไม่เหมาะกับการจัดการ requests เยอะๆ และมันสามารถ serve พวก images css js static files ได้และไม่มีประสิทธิภาพเลย
# whiskey server Not great at serving data
- Web servers นั้นมีประสิทธิภาพมาก ให้การ serve static files และจัดการ requests แบบเยอะๆ
(เราจะ setup reverse proxy ให้ใช้ web server application เพื่อให้เราสามารถ serve files ที่ web server หรือ reverse proxy นั้นแหละ มีประสิทธิภาพในการ serve ผ่าน proxy)
Application ที่เราจะใช้
- nginx => คือ web server ซึ่ง open source, fast, secure, production grade, very popular tool และเป็น tool ที่นิยมมากในการสร้าง reverse proxy or web server
- uWSGI => Whiskey server หรือ Web server gateway interface
- Docker Compose
# เพื่อเอาแต่ละอย่างมารวมกัน แล้ว serve มันใน server
Docker Compose setup มีอะไรบ้างดังนี้
- app uWSGI (เพื่อ serve app ของเรา)
# ถ้า request เป็น static/media files จะไม่เข้าที่นี้แต่จะไปเข้าที่ proxy
# แต่ถา request ไม่ใช้ static/media files มันถึงจะมาเข้าที่ proxy และมาที่ Django ต่อ
- db
- proxy (nginx) รับ request/response
# จะ serve static/media file เลยโดยไม่ผ่าน django (จะตรงๆเข้า volumn ผ่าน proxy แล้ว django app จะไม่รู้ด้วยซำ้ว่ามี request นี้)
- volume
-static data (static/media)
-prostgres-data (data จาก database)
# เราเก็บ data ไว้ตรงนี้ทำให้ถึงแม้ว่า server จะ reboot นั้น data เราก็จะไม่หาย
Handling configuration
- เราจะ configure deployed app อย่างไร?
-อย่างใส่ทุกอย่างลง Git (เพื่อ key, secret, password ต่างๆ)
- Various approaches (วิธีต่างๆในการจัดการ configure พวกนี้)
-Environment variables (เราจะใช้วิธีนี้)
# ซึ่งก็เป็นวิธีที่เราใช้ใน docker compose อยู่แล้ว
-Secret managers
# ซึ่งก็มีให้บริการในทุก cloud เช่น aws, google cloud แต่เราต้องเอา app ของเราไป deploy ที่ cloud นั้นๆ
How configuration works
- Create .env file on server
- Set values in Docker Compose
Using AWS
- We'll host our app on AWS
# Popular platform
- Students responsible for security and costs
- Must keep your account secure!
-Use MFA (multi-factor authentication เพื่อให้ account secure มากขึ้น)
-Use strong passwords
-Don't share your account details
-Keep your machine secure and update to date
-Delete unused accounts (ถ้าไม่ใช้แล้วควรลบทิ้ง เพื่อกันไม่ให้ใครเอาไปใช้)
[138. Add uWSGI to project]
เมื่อ setup ทุกอย่างเสร็จลอง build image ดูว่ามันจะมีปัญหาอะไรมั้ย
'docker-compose build'
uWSGI: https://pypi.org/project/uWSGI/
[139. Create proxy configs]
สร้าง proxy configuration และ Dockerfile
default.conf.tpl => Default.configuration.template
จะเป็น file ที่เก็บ value บางอย่างเอาไว้ เพื่อเมื่อรัน proxy (nginx คือที่เราจะใช้) จริงๆ เราจะเอา file นี้เข้าไปใส่ในบางสิ่งเพื่อให้มันรัน ไม่ได้เอา file นี้ไม่รันตรงๆ
configuration ของ nginx ต้องการ ; ที่ จุดสิ้นสุดของแต่ละบรรทัด
# เป็น configuration block
server {
# แต่ละ block นี้จะ executed เป็น order จากบนลงล่าง
listen ${LISTEN_PORT};
# port ที่ server จะ listen on
# แล้วผ่านเข้าไปใน service
# ใส่เป็น variable (LISTEN_PORT) ซึ่งเดี๋ยวต้องเอา var พวกนี้ใส่เข้า project ด้วย
# location block เอาไว้ map url ที่ผ่านเข้ามาใน server
location /static { # บอกว่า url ใหนที่เริ่มจาก /static มันจะไปที่ alias /vol/static ซึ่งก็คือ volume ที่เก็บ static และ media files ของ app เรา
alias /vol/static;
}
# block location นี้เอาไว้จัดการ requests ที่เหลือที่ไม่เจอ location block ด้านบน
# ให้แต่ละ key กับ value อยู่ในระดับเดียวกัน เลยเว้นวรรคแบบนั้น
location / {
uwsgi_pass ${APP_HOST}:${APP_PORT}; # เช่น localhost:8000 เป็นต้น ซึ่งต้องเป็นที่ที่ whiskey server รันอยู่ (และเราต้อง configure nginx server ให้สามารถ connect กับ service นี้ได้)
include /etc/nginx/uwsgi_params;
# ต้อง include whiskey params คือ parameters ที่จำเป็นสำหรับ http request เพื่อ process ใน whiskey (ซึ่งเดี๋ยวเราต้อง configurate มันต่อ โดยหลักๆก็คือ list ของ parameters ที่จะใส่ลง http request มาที่ running service)
client_max_body_size 10M; # คือกำหนดขนาด maximum body size of the request ที่จะผ่านเข้ามา # เช่น maximum image ที่เราจะสามารถ upload ได้คือ 10M
}
}
ต่อมาสร้าง uwsgi_params file ซึ่งมันมี doc สำหรับ param ที่เรากำหนดให้
docs: https://uwsgi-docs.readthedocs.io/en/latest/Nginx.html#what-is-the-uwsgi-params-file
เรา copy มาวางเลยไม่ต้องคิดอะไรเยอะ (ค่อยศึกษาที่หลัง)
จากนั้นก็สร้าง run.sh เพื่อ start proxy service ของเรา
[40. Create proxy Dockerfile]
เมื่อ config เสร็จก็ลองทดสอบ build โดยการ
"cd proxy"
"docker build ."
[141. Handling configuration]
เราจะใช้ environment variables เพื่อจัดการรัน app
- Store configuration in a file
- Retrieve values with Docker Compose
- Pass to applications
เราจะสร้าง .env เพื่อเก็บ variable ต่างๆ แล้วเอา var มาใส่ใน docker-compose file และก็สามารถเอาไปกำหนดใน python code ได้เช่นกัน
[142. Create docker compose config]
.env.sample
เพื่อสร้าง template env ที่สามารถใช้บน server ได้ และเมื่อเราจะ deploy เราก็แค่ re-name file นี้เป็น
.env
Environment variables in Compose docs: https://docs.docker.com/compose/environment-variables/
[143. Update Django settings]
เราจะมาแก้ไข setting.py file เพื่อให้มันใช้ configured environment variables
สร้าง .env ขึ้นมา โดย file นี้จะเก็บ secret จริงๆ (ซึ่ง file นี้ จะ auto ถูก ignore โดย git)
และเป็น file ที่จะset ตัวแปรต่างๆเพื่อใช้ใน configuration สำหรับ deployed application
ส่วน .env.sample นั้นแค่เอามาเก็บไว้เฉยๆ จะได้ไม่ลืม
เพื่อทดสอบ deployment environment ก่อนเราจะไป deploy จริงๆที่ server
เพื่อ clear container ที่มีออกก่อน
'docker-compose -f docker-compose-deploy.yml down'
เพื่อ start server แบบ deployment environment
'docker-compose -f docker-compose-deploy.yml up'
จากนั้นลองไปที่ http://127.0.0.1:8000/api/docs/ จะเห็น app ของเรารันอยู่ นั้นแปลว่า deployment environment รันได้ไม่มีปัญหาอะไร
(อย่าลืมเปลี่ยน port กลับเป็น 80 ที่ docker-compose-deploy.yml ด้วย)
[144. Creating a virtual server]
สิ่งที่เราจะทำต่อไปคือ
- Create AWS account and user
- Login to console
- Create new virual server
AWS Costs => calcuator.aws (เพื่อคำนวณราคาที่เราจะต้องจ่าย)
หลังจากสร้าง server แล้ว
Connecting to the server
- Connect via SSH (บน terminal)
- Use same SSH key as for GitHub
[145. Create AWS account and user]
เมื่อสร้าง root user account สำเร็จ แนะนำว่าไม่ควรใช้ root user account ในการ login ในแต่ละวัน เพราะมันมี privileges มาก ดังนั้นคุณต้องสร้าง admin account อีกอันนึงเพื่อในในแต่ละวัน เพื่อให้ root account ปลอดภัย
นั้นคือเราต้องสร้าง IAM user
IAM: https://us-east-1.console.aws.amazon.com/iamv2/home?region=us-east-1#/home
ไปที่ IAM dashbaord -> ไปที่ Users menu -> Add users -> ติ๊กที่ Password - AWS Management Console access -> เลือกCustom password ต่อ -> ใส่รหัสที่ต้องการ -> คลิก Next -> ไปที่ Attach existing policies directory -> แล้วติ๊กที่ AdministratorAccess (ซึ่งจะทำให้ user คนที่เราสร้างอยู่นี้สามารถเข้าถึงทุกอย่างใน root account เราได้ ยกเว้นลบ root account) -> Next -> Next -> Create user
IAM user ที่เป็น administrative
mick
mick@18791955
[146. Upload SSH Key to AWS]
เราจะสร้าง ssh key สำหรับ aws account ซึ่งเราสามารถใช้ในทุก connect service ต่างๆใน account นั้นได้
"cd ~/" => เพื่อไปที่ root directory
"ls -la" => เพื่อหา .ssh folder
"cd .ssh" => ไปที่ .ssh folder
เพื่อสร้าง ssh key ใหม่ ในนี้
"ssh-keygen -t rsa -b 4096"
Enter file in which to save the key: "/Users/chanonmanojit/.ssh/aws_id_rsa"
Enter passphrase (empty for no passphrase): 18791955
ลอง "ls" จะเห็น aws_id_rsa ที่คุณพึงสร้าง ซึ่งเป็น private key ใน local machine เพราะเราจะไม่ share ให้ใคร
cat aws_id_rsa.pub => จะเห็น content ข้างใน aws_id_rsa.pub ของเรา แล้วก็ copy มาได้เลย
"
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCZMMwUGMCBEHTaQa2xmJOxK/PZeaKP3CthOmaXmYmb0AqBXzc/EWpNs0v1P4ChsWyL1vqh0IKDGpfJ3VJauqYA1+NFVEsGrjycfS06EHv4VM57opTg9wl9R1LPcXgxy9VRQZ8tZ/Fn6rjT7ag2XgpHv0LG62LMA/V8AxG3cFU8NvosqMMy8VB9row9hln0nlVlXwq4p+fL00xZQYnn1iww+YEQlmMKPCyM7AA6v2zkrmWGzZ6KNqRnL2Slg7hx3IV6RnWTSvLg4I6RXZO6umZGu3WxSj3xL6sXK2dMrMDFmTE46QDQw2BiQKNA5NbbabwGZu8aDHd08hR1Byn+9j+XjQhgUMypbbZ5yiYIGNhByIEmuBVraeqIHwDZnrgeamVkppWbEiIUBVskRHeBNp9hA2n6hC9RwusflDR/DkVSCjKRmFuwaykxUulJg+jv2dhJiyiQ3i3r4+qAoAXnU6Um15/wXaXwGZ0nvbqZRBEk6vSDxRp4L6hImdLz0EA+65kkggTr2i+Hk4JVZHZaqaRWozh1+by3sBVqJAk0F18BwS3yC3cDChsw4WO6v8YWorqcmu/pjmGgJaHCcm0Vb/t0T+4BkYTt8pfqk+nu7IgAsFh3W6Q/j9T6VC4sjbvolShaCsim2XjYEbRUQ8YK87HCy1xE6KX054Qk/CeUMyQiMw== chanonmanojit@MacBook-Pro-khxng-chanon.local
"
: หลังจากสร้าง key เสร็จ ก็ไปที่ console aws แล้วไปที่ EC2 dashboard
-> ไปที่ Key Pairs Menu
ซึ่งเป็น security keys เพื่อเข้าถึง servers ที่คุณสร้างใน EC2
-> คลิก Actions -> Import key pair (เพราะว่าเราสร้าง key ที่ localแล้วทำให้เราไม่ต้องคลิกที่ Create key pair เพื่อสร้าง key)
-> Name: mick-local-machine -> เอา key ที่ copy มาใส่ -> คลิก Import key pair
เท่านี้ ก็จัดการ key pairs สำเร็จ ทำให้ไม่ว่าคุณจะสร้าง server ใหม่มา machine ที่มี key นี้ก็สามารถเข้าถึง server ได้
ซึ่ง key ตรงนี้จะ 1 key สำหรับ 1 machine เท่านั้น ถ้าใช้ที่เครื่องอื่นด้วยคุณต้องสร้าง key เฉพาะของเครื่องนั้นด้วย
[147. Create EC2 instance]
: ไปที่ EC2 dashbaord
-> คลิกปุ่ม Launch instance
-> Name(ชื่อของ instance): recipe-api-dev-server
-> Number of instances: 1 (ถ้าใส่ 50 คุณก็จะโดนเก็บเงิน 50 instances แต่ยังไงก็ตามให้เลือกจำนวน instance ตามที่เราต้องการ)
-> Application and OS Images: เลือก Amazon Linux
-> Instance type: t2.micro (Free tier eligible)
-> Key pair (login): เลือก mick-local-machine (ที่คุณพึงสร้าง)
-> Allow SSH traffic from: Anywhere 0.0.0.0/0 (เพื่อให้เข้าถึง server โดย ssh ที่ใหนก็ได้)
-> ติ๊ก Allow HTTP traffic from the internet
-> Configure storage: เอาแบบตำ่สุด แต่เนื่อจจาก free tier มันให้ถึง 30GB ก็ใส่ 30
-> คลิก Lanch instance
คุณสร้าง instance สำเร็จ
: ไปที่ EC2 dashboard
-> ไปที่ instances menu
จะเห็น instance ที่คุณพึงสร้าง
ทำการ connect ไปที่ instance โดย
: click ที่ instance ID
-> copy id ที่ Public IPv4 address column
-> กลับมาที่ terminal ที่ .ssh folder ให้ทำการ
-> ssh-add aws_id_rsa จากนั้นก็ใส่ password ที่คุณเคยตั้งเอาไว้ตอนสร้าง aws_id_rsa
-> ssh ec2-user@50.16.76.95 (50.16.76.95 คือ Public IP ของ EC2 ที่เราสร้าง)
-> Are you sure you want to continue connecting: yes
ซึ่งเราก็จะเข้าถึง server EC2 ที่เราสร้าง ได้สำเร็จ
"
[ec2-user@ip-172-31-30-220 ~]$
"
[148. Setup GitHub deploy key]
เมื่อคุณเข้าถึง ssh ไปที่ server ได้แล้ว [ec2-user@ip-172-31-30-220 ~]$
: "ssh-keygen -t ed25519 -b 4096"
ed25519 คืออีก type นึงของ key
-> Enter file in which to save the key (/home/ec2-user/.ssh/id_ed25519): Enter ไปเลย
-> Enter passphrase (empty for no passphrase): Enter ไปเลย (คือมันจะเป็น blank value)
-> cat ~/.ssh/id_ed25519.pub เพื่อ output public key
"
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAILDHvrmqCeFi+JStc6e/KZVA8dfMxu6hhz0PhJcXo7VE ec2-user@ip-172-31-30-220.ec2.internal
"
อันนี้คือเราสร้างที่ remote server
-> ไปที่ repositoryของ project นี้ที่ github -> ไปที่ Deploy keys -> Add deploy key
-> Title: server
-> Key: ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAILDHvrmqCeFi+JStc6e/KZVA8dfMxu6hhz0PhJcXo7VE ec2-user@ip-172-31-30-220.ec2.internal
(ไม่ต้องกำหนด Allow write access เพราะสิ่งที่เราจะทำกับ server คือ pull code ลง เราไม่จำเป็นต้อง push code จาก server กลับมาให้เรา)
-> คลิก Add Key
คุณก็จะมี server key เพิ่มเข้า project
docs จากผู้สอนสำหรับ deployment: https://github.com/LondonAppDeveloper/build-a-backend-rest-api-with-python-django-advanced-resources/blob/main/deployment.md#deployment
[149. Install Docker, Compose and Git]
ที่ terminal ที่เชื่อม ssh ไปที่ remote อยู่
: "sudo yum install git -y"
เนื่องจาก server มี yum package manager อยู่แล้ว
-> "sudo amazon-linux-extras install docker -y" => install docker บน server
-> "sudo systemctl enable docker.service" => เพื่อ enable docker service บน system
-> "sudo systemctl start docker.service" => เพื่อ start docker บน system
-> "sudo usermod -aG docker ec2-user" => ให้สิทธิ user ชื่อ ec2-user ทำการรัน docker containers
-> "exit" => เพื่อ logout ออกจาก server กลับเข้า terminal ปกติ
-> แล้ว "ssh ec2-user@50.16.76.95" => เพื่อกลับเข้าไปใหม่ ทำให้ user มี permissions ที่คุณพึงเพิ่มเข้าไป
install docker-compose
-> "sudo curl -L "https://github.com/docker/compose/releases/download/1.29.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose"
command นี้จะทำการ install docker-compose
-> "sudo chmod +x /usr/local/bin/docker-compose" => เพื่อที่เราจะได้รัน docker-compose command ได้
+x คือ เพื่อให้ execute permission ไปที่ path ที่กำหนด
[150. Clone and configure project]
-> ไป copy ssh ของ repository ของ project ที่จะ deploy ก่อน เช่น
'git@github.com:Chanon2000/dj-recipe-app-api.git'
ที่ [ec2-user@ip-172-31-30-220 ~]$
-> 'git clone git@github.com:Chanon2000/dj-recipe-app-api.git'
-> "ls" จะเห็น dj-recipe-app-api ของเราถูก clone มาแล้ว
-> "cd dj-recipe-app-api"
-> "ls -la" => เพื่อให้มั้นใจว่าคุณ push .env.sample file ไปด้วยแล้ว
ถ้าไม่มีก็ ให้ถูก push code ที่ local ขึ้น origin ก่อน จากนั้นก็ "git pull origin" ที่ remote นี้
-> "cp .env.sample .env" => สร้าง file ชื่อ .env จาก .env.sample
-> "nano .env" หรือ "vi .env" ก็ได้ เพิ่มเปิด editor ที่ .env file
-> แล้วทำการตั้งรหัสต่างๆใหม่ที่นั้นเลย
DB_NAME=recipedb
DB_USER=recipeuser
DB_PASS=mick1879
DJANGO_SECRET_KEY=qweqeqwedsfsdfrgdf # ใส่เป็น random string อะไรก็ได้เลย
DJANGO_ALLOWED_HOSTS=127.0.0.1 # เอาจาก Public IPv4 DNS ที่ EC2 instance console # ซึ่งถ้าคุณเพิ่ม custom domain คุณก็ต้องมาเพิ่มตรงนี้ด้วย
-> save file
-> cat .env => เพื่อดูว่าข้อมูลมีการเปลี่ยนแปลงแล้วหรือยัง
[151. Run service]
ที่ [ec2-user@ip-172-31-30-220 dj-recipe-app-api]$
-> "docker-compose -f docker-compose-deploy.yml up -d"
รันบน demon mode นั้นหมายความว่ามันจะรันใน background ไม่ใช่ foreground
-> copy Public IPv4 DNS: ec2-50-16-76-95.compute-1.amazonaws.com
-> เอาไปเปิดที่ browser : http://ec2-50-16-76-95.compute-1.amazonaws.com/admin เพราะถ้า / เฉยๆ app ของเราจะไม่เจออะไรอยู่แล้ว
-> จะเจอหน้า admin
-> กลับไปที่ remote console โดยเป็น dj-recipe-app-api directory
-> 'docker-compose -f docker-compose-deploy.yml run --rm app sh -c "python manage.py createsuperuser"' เพื่อสร้าง superuser ที่ remote
email: admin@example.com
pass: 123456
-> แล้วเอาไป login ที่ หน้า admin
-> ถ้าอยากเห็น logs ให้ทำการรัน 'docker-compose -f docker-compose-deploy.yml logs'
[152. Updating service]
เพื่อ deploy code ที่ update ไปที่ server
'docker-compose down'
'docker-compose run --rm app sh -c "python manage.py test"'
-> เมื่อเพิ่ม feature และ test เสร็จแล้วก็ push ขึ้น github
-> ที่ remote terminal dj-recipe-app-api dir
-> "git pull origin"
-> "docker-compose -f docker-compose-deploy.yml build app" => เพื่อ build app ใหม่เนื่องจากมี code ใหม่ pull ลงมา
-> "docker-compose -f docker-compose-deploy.yml up --no-deps -d app" => ทำการ restart app
--no-deps คือ no dependencies ทำให้มันจะไม่ restart dependencies
-> ไปดู ที่เรา deploy ที่ browser จะเห็นว่ามีเส้น health-check เพิ่มเข้ามา
[153. Deployment summary]
- Configured project for deployment
- Created EC2 server instance
- Deployed application to server
- Updated service
[155. Upgrading to Django 4]
แก้ requirements file เสร็จก็ทำการ build
'docker-compose build'
แล้วก็ลองทดสอบทั้ง 3 command นี้
'docker-compose run --rm app sh -c "python manage.py wait_for_db && python manage.py test && flake8"'