seoeaa / strapi-dockerize

πŸ“¦ A Strapi app powered by Docker and docker-compose. Also a guide to configure your Strapi app with hosted database service such as MongoDB Atlas.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool


Strapi Dockerize

Strapi Dockerize

Build With Yarn Build With Docker

A Strapi app powered by Docker and docker-compose.
Report Bug Β· Request a Feature

Strapi JavaScript Docker AWS MongoDB Atlas GitLab CI

⚠️ Warning

This project works only on NodeJS v10.16.0 - v14.x.x. Please have a look at this issue for more.


πŸ“š Table of Contents

  1. 🌈 About this project
  2. ✨ What collection-type is inside this project?
  3. πŸ“– How to run
    • 🧢 using yarn
    • πŸ‹ using docker-compose
  4. βš™οΈ Set up application configuration
  5. πŸ“ Executing commands inside the Docker container
  6. πŸ–ΌοΈ Pull this project's docker image from DockerHub
  7. πŸ”’ Reset admin password in Strapi client (Strapi with UI)
  8. πŸ’» Related repositories
  9. πŸ“° Related articles

🌈 About this project

This is a Strapi app powered by Docker and docker-compose. Nevertheless, this app provides an example and a guide to configure your Strapi app with hosted database service such as MongoDB Atlas.


✨ What collection-type is featured in this project?

You can think collection-type as an API generated by Strapi. In this project, Juventus collection-type, is provided as a template. This is how it looks :

Collection-Type

The position has enumeration data type but this is how the auto-generated GraphQL schema (only for the Juventus content-type data) looks :

enum ENUM_JUVENTUS_POSITION {
  GK
  DF
  MF
  FW
}

type Juventus {
  id: ID!
  _id: ID!
  createdAt: DateTime!
  updatedAt: DateTime!
  name: String
  number: Int
  age: Int
  country: String
  appearences: Int
  goals: Int
  minutesPlayed: Int
  position: ENUM_JUVENTUS_POSITION
  profpic: UploadFile
  published_at: DateTime
}

Now, it is clear that available options for position are : GK. DF, MF, FW.

In addition, there is another content-type named facility:

facility

You can create a database such as in MongoDB Atlas or in your local machine (laptop) to use this Strapi project. In addition, if you want to integrate this Strapi app with client side (front-end web), you can use these repos :

  1. Ant Design Pro Strapi with Apollo GraphQL client
  2. Ant Design Pro Strapi with URQL GraphQL client

πŸ“– How to Run

  1. Clone this repository :
git clone https://github.com/kevinadhiguna/strapi-dockerize
  1. Change directory
cd strapi-dockerize
  1. Install dependencies :
yarn
  1. Create a .env file which stores application configuation, based on the .env.example file:
cp .env.example .env
  1. Fill in the .env file with the application configuration. This step migth be quite long, please refer the set up application configuration section.

  2. Run your Strapi app :

using yarn

yarn develop

using docker-compose

doocker-compose up

⚠️ Prerequisites of using docker and docker-compose

Please make sure you have Docker and docker-compose installed in your machine. Please refer here to install them :

  1. Docker installation
  2. Docker compose installation


βš™οΈ Set up application configuration (.env) :

DATABASE_HOST

If you run your database locally or in your computer, fill :

DATABASE_HOST=127.0.0.1

Otherwise, please enter your database host URL, such as :

DATABASE_HOST=cluster3.abc65.mongodb.net

The above is an example if you host your database in MongoDB Atlas.


DATABASE_SRV

Value of Database SRV in MongoDB. It could be either true or false as it is boolean. For example :

DATABASE_SRV=true

SRV is a way to specify a single hostname that resolves to multiple host names. When using SRV, the driver conducts an SRV lookup to get the actual names of all of the hosts. Also, when using SRV, the driver does lookups for TXT records, which can contain specific URI options to configure the driver.

Please have a look at MongoDB community forum for more.


DATABASE_PORT

Port that your Strapi app interacts with database management system (DBMS). For example :

DATABASE_PORT=27017

DATABASE_NAME

The database name in database management system (e.g. : MongoDB, MySQL, PostgreSQL). For instance :

DATABASE_NAME=myStrapiApp

DATABASE_USERNAME

The username of your database that you use in your Strapi app. For instance :

DATABASE_USERNAME=admin

DATABASE_PASSWORD

The password of your database that you use in your Strapi app. For instance :

DATABASE_PASSWORD=admin123

DATABASE_SSL

Usually, you set this field if your database in your Strapi app is hosted, for example :

Then in order to establish a secure connection, you want enable SSL. If so, set :

DATABASE_SSL=true

This fields is boolean. Hence, you can either set it to true or false only.


CORS_ORIGIN

Please add URL/IP address of :

  • App's client-side (a Web App and/or a Mobile app)
  • Strapi Admin Panel

CORS only cares three aspects, namely :

  • Scheme (e.g. : https, http, etc.)
  • URL/IP address
  • Port

So, if your app's client-side and Strapi admin panel run on http://192.168.1.4:3000 and http://192.168.1.4:1337 respectively, you should write :

CORS_ORIGIN=http://192.168.1.4:1337,http://192.168.1.4:3000

AWS_ACCESS_KEY_ID

For example :

AWS_ACCESS_KEY_ID=DGHY4REH7IUVDF908UNV

AWS_SECRET_ACCESS_KEY

For example :

AWS_SECRET_ACCESS_KEY=3bFhYF76zFG+5F78436KJ8bH3x19TALuIxytfNc/

AWS_REGION

For example :

AWS_REGION=eu-west-2

Please see AWS service endpoints for details.


EMAIL_DEFAULT_FROM

An email address your Strapi app will send an email from. For example :

EMAIL_DEFAULT_DEFAULT_FROM=hello@example.com

EMAIL_DEFAULT_REPLY_TO

An email address your Strapi app will be receiving emails. For example :

EMAIL_DEFAULT_REPLY_TO=reply@example.com

AWS_BUCKET

For example :

AWS_BUCKET=mybucket.mydomain.com

AWS_S3_STORAGE_CLASSES

For example :

AWS_S3_STORAGE_CLASSES=S3 Standard

You can read more about AWS Storage Classes.


CLOUD_NAME

This is the cloud name of your Coudinary account.
This looks like :

CLOUD_NAME=ehsjuvnxpz

Please leave it blank if your Strapi app foes not use Cloudinary.


API_KEY

This is API key from Cloudinary.
For instance :

API_KEY=253857109845223

You can leave it blank if you do not use Cloudinary.


API_SECRET

This is API secret from Cloudinary.
For example :

API_SECRET=DBVrte27_GtyrIUxFGydk_R8tRX

If you do not use Cloudinary, you can leave it blank.


SENTRY_DSN

This is a Sentry DSN that you obtain from Sentry if you use it. Otherwise, leave it blank.
For example :

SENTRY_DSN=https://vx547s32f45d7v91q865hgh5421z8932@f584318.ingest.sentry.io/6712395

HOST

Simply open terminal and type ip addr show (MacOS / Linux-based OS) or ipconfig (Windows). You should see like 192.168.1.4 which is the value of this variable.
Example :

HOST=http://192.168.1.4

PORT

Specify the port that you want to run.
For example :

PORT=1337

ADMIN_JWT_SECRET

Generate a secure token is required for superadmin authentication.
In terminal, please type :

openssl rand 64 | base64 # (linux/macOS users)
# or
node -e "console.log(require('crypto').randomBytes(64).toString('base64'))" # (all users)

Then you should see something like this in your terminal :

ErhxCk10YqNCImwodl5Ml/Maqnw46oTyLjr+9Na4bjmJSLVWnCS90BJRAAkLsspj98caylAJgikBO9ZS0jEiOQ==

Please copy the token and assign it like this :

ADMIN_JWT_SECRET=ErhxCk10YqNCImwodl5Ml/Maqnw46oTyLjr+9Na4bjmJSLVWnCS90BJRAAkLsspj98caylAJgikBO9ZS0jEiOQ==

NODE_ENV

This refers to the environment that your application runs. It could be development, staging, production, or something else.
For example :

NODE_ENV=development


πŸ“ Executing commands inside the Docker container

You can run:

docker-compose exec <container_ID> /bin/sh

or

docker-compose exec <container_name> /bin/sh


πŸ”’ Reset Admin password in Strapi client (Strapi with UI)

You can reset Strapi admin password by running this command:

using Yarn

yarn strapi admin:reset-user-password --email=<admin_email_address> --password=<new_admin_password>

using NPM

npm run strapi admin:reset-user-password --email=<admin_email_address> --password=<new_admin_password>

However if you have installed Strapi globally (not recommended), you can run this command:

strapi admin:reset-user-password --email=<admin_email_address> --password=<new_admin_password>

Example case:
You have kai@doe.com registered as the admin email for login credential in Strapi client but you forgot the password. If you use Yarn and want to reset the password to Kaidoe12345, you can do so by running :

yarn strapi admin:reset-user-password --email=kai@doe.com --password=Kaidoe12345


πŸ’» Related Repositories

Please feel free to have a look at :



πŸ“° Related Articles

Also, this article might be helpful to use this project : https://about.lovia.life/creating-strapi-app-image-with-docker/.

Should you have any questions or discussion, please feel free to ask here. Thanks!


Visits Badge

About

πŸ“¦ A Strapi app powered by Docker and docker-compose. Also a guide to configure your Strapi app with hosted database service such as MongoDB Atlas.

License:MIT License


Languages

Language:JavaScript 65.7%Language:Dockerfile 25.5%Language:Shell 5.2%Language:HTML 3.7%