Production Deployment
Step 1: Prepare the Build
Ensure that the environment is set up correctly for building the project. This includes dependencies specified in the Directory.Build.props
file. Avoid any warnings that may affect deployment:
<NoWarn>$(NoWarn);CS1701;CS1702;CS1591</NoWarn>
After ensuring the warnings are handled, run the build command:
dotnet build StringlyTyped.sln -c Release
Step 2: Publish the Application
Once the build is successful, publish the application to prepare it for deployment. This will create a self-contained deployment package. The following command assumes that you want to publish for a specific runtime identifier (RID):
dotnet publish src/StringlyTyped -c Release -r win-x64 --self-contained
Check the build output directory for the published application artifacts.
Step 3: Configure NuGet Packages
During deployment, it’s crucial to ensure that the correct NuGet packages are restored and available. The cache for NuGet packages can be found in the following files:
"/root/.nuget/packages/microsoft.netcore.app/2.1.0/microsoft.netcore.app.2.1.0.nupkg.sha512",
"/root/.nuget/packages/system.collections/4.3.0/system.collections.4.3.0.nupkg.sha512",
To restore the NuGet packages, run:
dotnet restore StringlyTyped.sln
Step 4: Test the Deployment
After publishing, perform testing to ensure that the application behaves as expected in the production environment. Execute the unit tests contained in the tests/StringlyTyped.SmallTests
project:
dotnet test tests/StringlyTyped.SmallTests
Review test results and ensure that all tests pass successfully.
Step 5: Deploy to Production Server
Transfer the published output to the production server. Methods can include FTP, SSH, or other deployment automation tools. For example, if using SCP:
scp -r ./src/StringlyTyped/bin/Release/net5.0/publish user@yourserver:/var/www/StringlyTyped
Step 6: Configure the Application on the Server
Once on the server, configure the application according to the production environment requirements. This may include environment variables, connection strings, and other settings specific to a deployed environment.
A typical configuration file might look something like this:
{
"ConnectionStrings": {
"DefaultConnection": "Server=yourserver;Database=yourdb;User Id=youruser;Password=yourpassword;"
},
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning"
}
}
}
Ensure that the connection strings and any secrets are managed securely.
Step 7: Start the Application
Run the application on the server. Depending on the setup, the command can vary, but using a specified runtime like .NET Core will look like this:
dotnet /var/www/StringlyTyped/StringlyTyped.dll
Optionally, you can set up a reverse proxy (e.g., Nginx) to direct traffic to the application.
Step 8: Monitor and Maintain
After deployment, monitor logs and performance continuously to ensure the application is functioning correctly. Logging can be configured via the application settings and reviewed through a log management solution.
Logs are crucial for identifying issues in production. Check configured log pathways regularly.
private static readonly ILogger<Startup> logger = LoggerFactory.Create(builder =>
{
builder.AddConsole();
builder.AddDebug();
}).CreateLogger<Startup>();
Setup alerts and reviews for log messages to ensure prompt action can be taken when issues occur.
This deployment procedure is compiled from the best practices for deploying .NET applications as per the configuration and architecture expressed in the project files.