ASP.NET Core 3.1 / React SPA Template App
This app is a template application using ASP.NET Core 3.1 for a REST/JSON API server and React for a web client.
npm install && npm start
This template was developed and tested on macOS Sierra but should run on Windows (for development) as well. If you experience any issues getting it to run on Windows and work through them, please submit a PR! The production provisioning and deployment scripts (
deploy:prod) use Ansible and require a Linux/Ubuntu >= 16.04 target host.
When first cloning the repo or adding new dependencies, run this command. This will:
To start the app for development, run this command. This will:
docker-compose upto ensure the PostgreSQL and MailCatcher Docker images are up and running
dotnet watch runwhich will build the app (if changed), watch for changes and start the web server on http://localhost:5000
npm run migrate
After making changes to Entity Framework models in
api/Models/, run this command to generate and run a migration on the database. A timestamp will be used for the migration name.
This will run the xUnit tests in api.test/ and the Mocha/Enzyme tests in client-react.test/.
npm run provision:prod
Before running this script, you need to create an ops/config.yml file first. See the ops README for instructions.
This will run the ops/provision.yml Ansible playbook and provision hosts in ops/hosts inventory file. Ubuntu 16.04 (Xenial) and Ubuntu 18.04 (Bionic) is supported and tested.
This prepares the hosts to recieve deployments by doing the following: - Install Nginx - Generate a SSL certificate from Let's Encrypt and configure Nginx to use it - Install .Net Core - Install Supervisor (will run/manage the ASP.NET app) - Install PostgreSQL - Setup a cron job to automatically backup the PostgreSQL database, compress it, and upload it to S3. - Setup UFW (firewall) to lock everything down except inbound SSH and web traffic - Create a deploy user, directory for deployments and configure Nginx to serve from this directory
npm run deploy:prod
Before running this script, you need to create a ops/config.yml file first. See the ops README for instructions.
This script will: - Build release Webpack bundles - Package the .NET Core application in Release mode (dotnet publish) - Run the ops/deploy.yml Ansible playbook to deploy this app to hosts in /ops/config.yml inventory file.
This does the following: - Copies the build assets to the remote host(s) - Updates the
appsettings.jsonfile with PostgreSQL credentials specified in ops/group_vars/all file and the app URL (needed for JWT tokens) - Restarts the app so that changes will be picked up
Entity Framework Migrations are automatically applied upon startup so they will run when the app restarts.
This template includes a MailCatcher Docker image so that when email is sent during development (i.e. new user registration), it can be viewed in the MailCacher web interface at http://localhost:1080/.
This template was originally created on .NET Core 1.0 and has been upgraded with new versions of .NET Core. Older versions can be found on the Releases page.
This project has Visual Studio Code tasks and debugger launch config located in .vscode/.
With the following debugger launch configs, you can set breakpoints in api/ or the the Mocha tests in client-react.test/ and have full debugging support.
The following resources were helpful in setting up this template: