React / Vite + SWC / Express.js / Sequelize / PostgreSQL codebase containing real-world examples (CRUD, auth, advanced patterns, etc) that adhere to the RealWorld spec and API, with added Terraform and Ansible deployment, now automated with GitHub Actions.
This project extends the original Conduit App by adding infrastructure-as-code (Terraform), configuration management (Ansible) capabilities for easy deployment to AWS EC2, and GitHub Actions for automated workflow.
conduit-app/
├── ansible/
│ ├── templates/
│ │ ├── conduit-app.service.j2
│ │ └── nginx.conf.j2
│ ├── vars/
│ │ ├── env_dev.yml
│ │ ├── main.yml
│ │ └── vault.yml
│ ├── inventory.ini
│ └── main.yml
├── backend/
├── frontend/
├── terraform/
│ ├── .terraform/
│ ├── .terraform.lock.hcl
│ ├── main.tf
│ ├── provider.tf
│ ├── setup.sh
│ ├── variables.tf
│ └── vpc.tf
├── .github/
│ └── workflows/
│ └── deploy.yml
├── .gitignore
├── CODE_OF_CONDUCT.md
├── LICENSE
├── logo.png
├── package-lock.json
├── package.json
├── README.md
└── vitest.config.js
- GitHub account with Actions enabled
- AWS account with configured IAM user for programmatic access
- All prerequisites from the original Conduit app (Node.js, NPM, SQL database)
The deployment process is now fully automated using GitHub Actions. The workflow is triggered manually ("workflow_dispatch") and performs the following steps:
- Checks out the repository
- Sets up Terraform
- Configures AWS CLI with secrets
- Updates the Terraform backend configuration
- Sets up SSH for Ansible
- Initializes and validates Terraform
- Applies Terraform changes to create/update infrastructure
- Runs Ansible playbook to deploy the application
- Uploads the Terraform lock file to S3
To run the workflow, you need to set up the following secrets in your GitHub repository:
AWS_ACCESS_KEY_ID
: Your AWS access key IDAWS_SECRET_ACCESS_KEY
: Your AWS secret access keyAWS_REGION
: The AWS region to deploy toBUCKET_NAME
: The name of your S3 bucket for Terraform stateSTATE_KEY
: The key for your Terraform state file in the S3 bucketEC2_PRIVATE_KEY
: The private key for SSH access to EC2 instancesANSIBLE_VAULT_PASSWORD
: The password to decrypt Ansible vault files
To deploy the application:
- Go to the "Actions" tab in your GitHub repository
- Select the "Create infra and deploy app" workflow
- Click "Run workflow"
- Monitor the workflow progress and check for any errors
While the GitHub Actions workflow automates the entire process, you can still perform manual steps if necessary:
-
Navigate to the
terraform
directory:cd terraform
-
Initialize Terraform:
terraform init
-
Review and apply the Terraform configuration:
terraform plan terraform apply
If you need to run Ansible manually:
-
Navigate to the
ansible
directory:cd ~/conduit-app/ansible
-
Run the Ansible playbook:
ansible-playbook -i inventory.ini main.yml -e 'env=dev' --ask-vault-pass -v
For local development and more details about the Conduit app itself, please refer to the original README.
These instructions will help you install and run the project on your local machine for development and testing.
Before you run the project, make sure that you have the following tools and software installed on your computer:
- Text editor/IDE (e.g., VS Code, Sublime Text, Atom)
- Git
- Node.js
v18.11.0+
- NPM (usually included with Node.js)
- SQL database
To install the project on your computer, follow these steps:
-
Clone the repository to your local machine.
git clone https://github.com/TonyMckes/conduit-app
-
Navigate to the project directory.
cd conduit-app
-
Install project dependencies by running the command:
npm install
-
Create a
.env
file in the root directory of the project -
Add the required environment variables as specified in the
.env.example
file -
(Optional) update the Sequelize configuration parameters in the
config.js
file -
If you are not using PostgreSQL, you may also have to install the driver for your database:
Use one of the following commands to install:
Note:
-w backend
option is used to install it in the backendpackage.json
.npm install -w backend pg pg-hstore # Postgres (already installed) npm install -w backend mysql2 npm install -w backend mariadb npm install -w backend sqlite3 npm install -w backend tedious # Microsoft SQL Server npm install -w backend oracledb # Oracle Database
ℹ️ Visit Sequelize - Installing for more infomation.
-
Create database specified by configuration by executing
⚠️ Please, make sure you have already created a superuser for your database.npm run sqlz -- db:create
ℹ️ The command
npm run sqlz
is an alias fornpx -w backend sequelize-cli
.
Executenpm run sqlz -- --help
to see more ofsequelize-cli
commands availables. -
Optionally you can run the following command to populate your database with some dummy data:
npm run sqlz -- db:seed:all
To run the project, follow these steps:
-
Start the development server by executing the command:
npm run dev
-
Open a web browser and navigate to:
- Home page should be available at
http://localhost:3000/
. - API endpoints should be available at
http://localhost:3001/api
.
- Home page should be available at
To run tests, simply run the following command:
npm run test
The following command will build the production version of the app:
npm run start
This project is licensed under the MIT License. See the LICENSE file for details.