Cách triển khai ASP.NET Core Web App với Entity Framework
Xin chào các bạn và các bậc tiền bối!
Em đang tìm hiểu về cách triển khai một ứng dụng ASP.NET Core Web App tới một server, khi viết ứng dụng trên máy local thì em dùng entity framework để migration và create ra database, thì sẽ có database sẵn để ứng dụng kết nối và lấy dữ liệu, vậy khi em muốn publish ứng dụng đến server em phải backup database từ local để restore trên server hay có cách nào khác không ạ? Hay em phải chạy entity framework trên ứng dụng bằng cách nào ạ? Và em có cách nào để che giấu connection string của ứng dụng khi deploy lên server không ạ? Em cám ơn mọi người đã xem qua câu hỏi của em ạ! Xin các bạn và các cao nhân cho em thêm nhiều thông tin về vấn đề này ạ!
1 CÂU TRẢ LỜI
Mình chưa dùng qua ASP.NET hay là Entity Framework nhưng mà theo mình thì bạn cần biết một vài khái niệm chung sau đây.
Hiện tại bạn đang có 2 môi trường là: Local và Server (giả định là production)
1. Deploy lên server có cần backup database để chuyển lên hay không?
Hiểu đơn giản thì migration sinh ra với mục đích để khi làm việc chung mình không cần phải backup database mỗi khi deploy hay chia sẻ cho các developer khác mỗi khi có sự thay đổi về database (thêm, sửa, xóa bảng, cột,...).
Hãy tưởng tượng có 2 dev.
Dev A thêm cột X -> import database lên server
Dev B xóa cột Y nhưng chưa update database mới từ A -> import database lên server
=> Nghiễm nhiên database mới sẽ bị sai khác dẫn đến lỗi ứng dụng.
Chính vì thế mình nghĩ bạn nên chạy migration trên server để tạo ra các table trong database thay vì backup lên server.
2. Và em có cách nào để che giấu connection string của ứng dụng khi deploy lên server không ạ?
Mình đang hiểu connection string ở đây nghĩa là thông tin kết nối đến database không biết có đúng không. Nếu đúng thì mình xin trả lời bạn như sau:
Bạn cần biết đến khái niệm biến môi trường (environment variables). Tức là mỗi môi trường sẽ có các thông tin config khác nhau. Ví dụ như: API key của service nào đó, thông tin database connection, giá trị config cho ứng dụng,... Thường thì những thứ này sẽ lưu trong 1 file gọi là env, file này sẽ bị ignore ra khỏi git và mỗi môi trường bạn sẽ phải tạo và điền vào các thông tin khác nhau.
Thân ái và quyết thắng!!!
Xin chào bạn @tiennguyen98, cám ơn bạn đã trả lời cho câu hỏi của mình!
-
Ý của bạn ở đây là mình sẽ phải chạy migration từ local tới database server (production) đúng không ạ? Nhưng ở đây mình không thể kết nối trực tiếp đến production để mình chạy migration được á bạn? Mình mới làm quen với EF và chỉ biết migration từ IDE thôi. Còn nếu chạy migration trên production thì mình không thể cài IDE lên đó được. Vậy có cách nào khác để mình chạy được không bạn?
-
Connection string ở đây giống như bạn nghĩ, nó được chứa ở file appsettings.json khi publish ứng dụng đến server, và mình muốn ẩn nó đi bằng một loại mã hóa nào đó, để khi deploy tới production, end user dù có nghịch cũng không thấy được chuỗi kết nối này được. Vì mình deploy ứng dụng tới app server ( có 2 server khác nhau App và Database) nên mình muốn che giấu connection string đi bằng mã hóa cũng được. Vì mình mới quen với ASP.Net Core và EF nên mình thấy luôn để chuỗi connection string rõ ràng ra ở file appsettings.json.
Xin bạn chỉ giáo thêm cho mình!
- Mình không chạy migration ở dưới local mà chạy trực tiếp trên server bạn ạ. Theo mình tìm hiểu thì có 2 cách để chạy migration:
Cách 1: Chạy bằng VS Code như bạn nói
Cách 2: Chạy bằng .NET CLI
https://docs.microsoft.com/en-us/ef/core/managing-schemas/migrations/?tabs=dotnet-core-cli
- Bạn sẽ phải tạo 1 file appsettings.json riêng trên server bạn nhé
- Việc bảo mật Database không chỉ mỗi Connection String quyết định tất cả. Ở Server Database bạn có thể giới hạn IP truy cập, ví dụ như chỉ IP nhà bạn, Server App, ... các IP Server khác cần kết nối. Còn lại thì Block hết. Như vậy khi User có down cả file config về thì cũng chẳng làm được gì!
Cảm ơn 2 bạn @tiennguyen98 và @longvt1912 đã giúp đỡ ạ!