Video coming soon…

🚀 Setup Strapi — Open-Source Headless CMS

Leading open-source headless CMS with a visual content type builder, automatic REST and GraphQL APIs, and a powerful admin panel for managing content.

⚠️ This script is provided for demo and testing purposes only. Not intended for production use.

📦 Resources & Setup Scripts

Grab the automated bash script from GitHub to follow along with the video.

Automated install script — Strapi headless CMS with PostgreSQL running in one command.
View on GitHub

Quick Install:

wget https://raw.githubusercontent.com/mhmdali94/Docker/main/cms/strapi/strapi-ubuntu.sh
chmod +x strapi-ubuntu.sh
sudo bash strapi-ubuntu.sh

Tutorial Steps

1 Download & Run Installer

The script installs Docker if needed, then pulls the Strapi and PostgreSQL images and starts both containers. Strapi admin panel and API will be available on port 1337 with a PostgreSQL database for production-grade data persistence.

wget https://raw.githubusercontent.com/mhmdali94/Docker/main/cms/strapi/strapi-ubuntu.sh
chmod +x strapi-ubuntu.sh
sudo bash strapi-ubuntu.sh

2 Access Admin Panel & Create Admin

Open your browser and navigate to the Strapi admin panel. On first visit you will be prompted to create the administrator account — set a full name, email, and strong password. This account has full access to all content types, media, settings, and API tokens.

http://<your-server-ip>:1337/admin

3 Build Content Types

Use the visual Content-Type Builder to define your data models without writing code. Create collection types (multiple entries) or single types (one entry). For example, create an Article type with fields like Title (text), Content (rich text), Cover (media), PublishedAt (date), and Category (relation). Strapi automatically generates REST and GraphQL endpoints for each content type you create.

4 Call the API

After creating content types and adding entries, call the auto-generated REST API from any frontend or tool. Set permissions in Settings → Roles → Public to allow unauthenticated access, or use a Bearer token for authenticated requests. The API follows a consistent pattern for all content types.

# Get all articles (public)
GET http://<your-server-ip>:1337/api/articles

# Get with Bearer token
curl -H "Authorization: Bearer YOUR_API_TOKEN" \
  http://<your-server-ip>:1337/api/articles

Ports Used

PortPurpose
1337Strapi Admin Panel & API
5432PostgreSQL (internal)

Overview

Strapi is the leading open-source headless CMS built on Node.js. It provides a visual Content Type Builder for designing your data models without code, generates REST and GraphQL APIs automatically, and includes a built-in admin panel for content editors — all self-hosted on your own server.

Why Use It

Strapi balances developer power with editor usability. Developers configure content types and plugins; editors manage content in a clean admin UI. Unlike WordPress, Strapi is API-first — designed to serve content to any frontend: Next.js, React, Vue, mobile apps, or static site generators.

When You Need It

    Who Should Use It

      Real Use Cases

        Main Features

          How to Use After Installation

            Security Best Practices

              Ports and Firewall Notes

              Strapi runs on port 1337. In production, always serve it behind a reverse proxy on port 443. The database port should never be exposed. The admin panel at /admin should be restricted to trusted IP ranges if not needed publicly.

              Backup and Maintenance

                Common Mistakes

                  Troubleshooting

                    Alternatives

                    Alternatives include Payload CMS (code-first, TypeScript), Directus (wraps existing databases), WordPress REST API (PHP, huge ecosystem), and Contentful (cloud, polished). Choose Strapi for a visual content type builder with the largest open-source headless CMS community.

                    When Not to Use It

                    Avoid Strapi if you need real-time or live preview features — these are limited in Strapi. Also avoid for very high-traffic public APIs without caching in front of it, as Strapi's Node.js server is not optimized for extremely high concurrency without additional infrastructure.

                    PrismaTechWork Professional Help

                    PrismaTechWork provides end-to-end infrastructure services — from initial deployment and security hardening to ongoing monitoring, automated backups, and dedicated support. Whether you need a single-server setup or a multi-site network, our team ensures your infrastructure is built right, secured properly, and maintained reliably.

                      Contact Us

                      Frequently Asked Questions

                      Do I need to write code to use Strapi?

                      Minimal code is needed to get started. The Content Type Builder lets you create data models visually. APIs are generated automatically. You will need some Node.js knowledge to customize plugins, add custom routes, or configure lifecycle hooks — but basic Strapi usage is largely no-code for the CMS part.

                      What databases does Strapi support?

                      Strapi v4 supports PostgreSQL, MySQL, MariaDB, and SQLite. SQLite is used by default for development only. For production, use PostgreSQL or MySQL. Configure the database connection in the config/database.js file or via environment variables.

                      How do I access my Strapi content from a frontend app?

                      Generate an API token in the Strapi admin panel under Settings then API Tokens. Use this token in the Authorization header of HTTP requests to the Strapi REST API endpoint (e.g., GET /api/articles). Alternatively, use the GraphQL API available at /graphql.

                      Does Strapi support multilingual content?

                      Yes. Enable the Internationalization plugin in Strapi (included by default in v4). Add the i18n field to your content types and specify which locales you support. Content editors can then create localized versions of each entry, and the API returns the requested locale via the locale query parameter.

                      Can I extend Strapi with custom plugins?

                      Yes. Strapi has a plugin system — you can install community plugins from npm or build custom plugins that add new admin panel sections, API routes, middleware, and content type behaviors. The Strapi Marketplace lists vetted community plugins.

                      How do I deploy Strapi to production?

                      Build Strapi for production with npm run build (this compiles the admin panel). Run with npm run start in production mode. Use a process manager like PM2 or Docker Compose to keep it running. Place behind Nginx or Caddy with HTTPS. Use PostgreSQL and configure all secrets as environment variables.

                      Does Strapi have a media library?

                      Yes. Strapi includes a built-in media library for uploading and managing images, videos, and files. By default, files are stored locally. For production, configure a cloud storage provider plugin (AWS S3, Cloudinary, or other S3-compatible providers) via the upload provider setting.

                      How do I update Strapi?

                      Update the Strapi version in package.json, run npm install, and then npm run build followed by restarting the server. Always test upgrades in a staging environment first. Read the migration guide in the Strapi changelog for any breaking changes between versions.