ผลต่างระหว่างรุ่นของ "01204223/secrets"
Jittat (คุย | มีส่วนร่วม) |
Jittat (คุย | มีส่วนร่วม) |
||
| แถว 53: | แถว 53: | ||
=== จัดการกับรหัสผ่าน === | === จัดการกับรหัสผ่าน === | ||
| + | |||
| + | ถ้าเรายังเก็บ config ของฐานข้อมูลไว้ใน main.py เมื่อเรา push ขึ้นไปที่ github รหัสผ่านทั้งหมดของเราก็อาจจะรั่วไหลไปจนทราบกันทั้งโลกได้ ดังนั้นเราจะต้องนำความลับดังกล่าวออกจากไฟล์ที่จะนำขึ้น version control system | ||
| + | |||
| + | เมื่อนำออกไปแล้ว มีสองวิธีคร่าว ๆ ที่จะทำให้โปรแกรมของเราทราบความลับดังกล่าวได้ | ||
| + | * อ่านจากไฟล์อื่น ๆ (ที่ต้องไม่ถูกนำเข้า version control ซึ่งโดยมากจะต้องระบุให้ชัดเจนใน .gitignore '''สำคัญมาก''') | ||
| + | * อ่านจาก environment variable (ยกตัวอย่างเช่น FLASK_APP ที่เราต้องตั้งก่อนเรียก flask run --debug ทุกครั้ง) | ||
| + | |||
| + | การอ่าน config จากไฟล์จะสะดวกในการใช้ระหว่าง development แต่การอ่านค่าจาก environment จะสะดวกกับการ deploy มากกว่า | ||
รุ่นแก้ไขเมื่อ 05:48, 27 กุมภาพันธ์ 2569
- หน้านี้เป็นส่วนของวิชา 01204223
เราจะฝึกจัดการกับข้อมูลที่เป็นความลับในการพัฒนาเว็บแอพ
ก่อนอื่นอ่านภาพรวมในการจัดการก่อน อ่านที่นี่: แนวทางทั่วไปในการจัดการกับความลับ
เราได้ส่งบัญชีและรหัสผ่านผู้ใช้ mysql บนเครื่อง p1.secondtrain.org แล้ว เราจะเริ่มโดยย้ายฐานข้อมูลของ Todo app ของเราไปใช้ mysql บนเซิร์ฟเวอร์ จากนั้นเราจะจัดการกับความลับนี้
เปลี่ยนฐานข้อมูล
เราจะย้ายไปใช้ฐานข้อมูล mysql บนเซิร์ฟเวอร์ p1.secondtrain.org ให้ไปตรวจสอบบัญชีที่แจกให้ใน google sheet
ถ้ามีโปรแกรม client mysql ในเครื่อง ให้ทดลอง access database ที่กำหนดให้ดูก่อน ถ้าสามารถตรวจสอบได้ จะทำให้ debug โค้ดที่เราจะทดลองต่อไปได้ง่ายขึ้น (อาจจะง่ายขึ้นกว่าใช้ sqlite)
เราจะปรับให้ Flask ใช้ฐานข้อมูลที่กำหนดให้ ก่อนอื่นต้องติดตั้งไลบรารีสำหรับเชื่อมต่อ mysql บน python เสียก่อน
เริ่มโดยการ activate virtual environment ก่อนจะสั่ง
pip install mysqlclient
เมื่อสั่งเรียบร้อย ให้อัพเดท requirements.txt โดยสั่ง
pip freeze > requirements.txt
เราจะเปลี่ยน SQLALCHEMY_DATABASE_URI ให้เป็นฐานข้อมูลใหม่ โดยแก้บรรทัดใน main.py ให้เป็น
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://USERNAME:PASSWORD@p1.secondtrain.org/DATABASENAME'
โดยแทนค่า USERNAME, PASSWORD, และ DATABASENAME ให้เป็นไปตามที่กำหนดให้
จากนั้น ให้ migrate ฐานข้อมูล โดยสั่ง
flask db upgrade
ถ้ากำหนดค่าเรียบร้อยน่าจะเห็นผลลัพธ์ดังนี้
INFO [alembic.runtime.migration] Context impl MySQLImpl. INFO [alembic.runtime.migration] Will assume non-transactional DDL. INFO [alembic.runtime.migration] Running upgrade -> 45b68ed6f7cf, Initial migration INFO [alembic.runtime.migration] Running upgrade 45b68ed6f7cf -> dbe42139c979, add comment INFO [alembic.runtime.migration] Running upgrade dbe42139c979 -> 2da8e1a15425, Add User
ถ้าสามารถดูฐานข้อมูลประกอบไปด้วย อาจจะทำให้เห็นภาพการทำงานชัดเจนขึ้น
ให้สั่งสร้างผู้ใช้
flask create-user admin "Admin Fullname" helloworld
จากนั้นให้ทดลองใช้ todo app ว่าทำงานได้ปกติ เพิ่ม todo item ได้ เพิ่ม comment ได้
จัดการกับรหัสผ่าน
ถ้าเรายังเก็บ config ของฐานข้อมูลไว้ใน main.py เมื่อเรา push ขึ้นไปที่ github รหัสผ่านทั้งหมดของเราก็อาจจะรั่วไหลไปจนทราบกันทั้งโลกได้ ดังนั้นเราจะต้องนำความลับดังกล่าวออกจากไฟล์ที่จะนำขึ้น version control system
เมื่อนำออกไปแล้ว มีสองวิธีคร่าว ๆ ที่จะทำให้โปรแกรมของเราทราบความลับดังกล่าวได้
- อ่านจากไฟล์อื่น ๆ (ที่ต้องไม่ถูกนำเข้า version control ซึ่งโดยมากจะต้องระบุให้ชัดเจนใน .gitignore สำคัญมาก)
- อ่านจาก environment variable (ยกตัวอย่างเช่น FLASK_APP ที่เราต้องตั้งก่อนเรียก flask run --debug ทุกครั้ง)
การอ่าน config จากไฟล์จะสะดวกในการใช้ระหว่าง development แต่การอ่านค่าจาก environment จะสะดวกกับการ deploy มากกว่า