- SQL Database
- Service Bus
- Storage account
- Container registry
- App Services
- Container instances
- Add photos with description and in real time send notifications to another users.
- Toggle emotes.
- Add comments to photo.
For local development use docker-compose
where you have:
- SQL database image
- API image
- Client image
You also must have:
- Service bus with topic and subscriptions:
- aa_example.com
- bb_example.com
- cc_example.com
- dd_example.com
- ee_example.com
- (look for migration and Notifications.razor files)
- (
@
symbol is forbidden in subscription name)
- Azure storage account with container
test
(look forAzureFileService
and lines19, 33, 46
) or implement missing functions and swapIFileService
implementation toLocalFileService
Set variables in .env
and in Shared project in DoNotGit -> DoNotCommit.cs
- Create resource group with specific location.
- Create database.
- Create container registry.
- Change in container registry -> settings -> access keys -> check Administrator.
- Push API image to registry.
- Get connection string to database like:
- Server=tcp:X.database.windows.net,1433;Initial Catalog=Y;Persist Security Info=False;User ID=W;Password=Z;MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;
- Run migration to remote database.
- Create web app from App Services from API container.
- Set:
- DB_CONNECTION_STRING
- STORAGE_KEY
- TOPIC_KEY
- TOPIC_NAME
- In Shared project -> DoNotGit -> DontCommit.cs change
API_URL
to existing API web app. - Build docker-compose.
- Tag and push to container registry Client container.
- Create instance of Client container from registry with port 80 (by default is added to configuration).
- Add FRONTED_URL environmental variable to API web app like:
- Restart API web app manually and wait for all to startup up.
Places that could have been better designed, but unfortunately were implemented in a non-professional way due to lack of time and experience:
- Better login system (in this state user is stored in LocalStorage of browser).
- Better understanding of CORS, so I don't have to fight and use
FRONTEND_URL
as environmental variable. - Pass environmental variables to Client project (I was fighting with nginx, but maybe I don't need to use it?).