
Strapi is an open-source, Node. js based, Headless CMS that saves developers a lot of development time while giving them the freedom to use their favorite tools and frameworks. Strapi also enables content editors to streamline content delivery (text, images, video etc.) across any devices. In this step by step guide I will show you how to install Strapi on your UGREEN NAS using Docker & Portainer.
STEP 1
Please Support My work by Making a Donation.
STEP 2
InstallĀ Portainer using my step by step guide. If you already have Portainer installed on your UGREEN NAS, skip this STEP. Attention: Make sure you have installed the latest Portainer version.
STEP 3
ā ļøMandatory: Enable HTTPS on your UGREEN NAS.
STEP 4
Create a new hostname on the noip website using your noip account. For example, I have created mariustrapiĀ as Host and I use the free ddns.net domain. In the IP Address area, type in your own IPV4 IP address from your ISP, then click Create. Follow the instructions in the image below.

STEP 5
Go toĀ Files and open the docker folder. Inside the docker folder, create one new folder and name itĀ strapi. Follow the instructions in the image below.
Note: Be careful to enter only lowercase, not uppercase letters.

STEP 6
Now create two new folders inside the strapi folder that you have previosuly created at STEP 5 and name them data and db. Follow the instructions in the image below.
Note: Be careful to enter only lowercase, not uppercase letters.

STEP 7
Log into Portainer using your username and password. On the left sidebar in Portainer, click onĀ HomeĀ thenĀ Live connect. Follow the instructions in the image below.

On the left sidebar in Portainer, click on StacksĀ thenĀ + Add stack. Follow the instructions in the image below.

STEP 8
In the Name field type in strapi. Follow the instructions in the image below.
services:
db:
image: postgres:18
container_name: Strapi-DB
hostname: strapi-db
user: 999:10
security_opt:
- no-new-privileges:true
healthcheck:
test: ["CMD", "pg_isready", "-q", "-d", "strapidb", "-U", "strapiuser"]
timeout: 45s
interval: 10s
retries: 10
volumes:
- /volume1/docker/strapi/db:/var/lib/postgresql:rw
environment:
POSTGRES_DB: strapidb
POSTGRES_USER: strapiuser
POSTGRES_PASSWORD: strapipass
restart: on-failure:5
strapi:
image: vshadbolt/strapi:latest
restart: on-failure:5
container_name: Strapi
hostname: strapi
security_opt:
- no-new-privileges:true
healthcheck:
test: wget --no-verbose --tries=1 --spider http://localhost:1337/ || exit 1
environment:
ADMIN_URL: https://strapi.ddns.net/admin
PUBLIC_URL: https://strapi.ddns.net
DATABASE_CLIENT: postgres
DATABASE_HOST: db
DATABASE_PORT: 5432
DATABASE_NAME: strapidb
DATABASE_USERNAME: strapiuser
DATABASE_PASSWORD: strapipass
DATABASE_SSL: false
BUILD: true
NODE_ENV: production
JWT_SECRET: 50poY7gQJ6xyJv5Vb9K1zOTJlmd0ujQI
ADMIN_JWT_SECRET: EzvqbWc902dbQyvoLI6sPKW8rEiP1Mgq
API_TOKEN_SALT: dELGmaeQkHiQpAtfMTGCcO4Jj0GvhRfF
TRANSFER_TOKEN_SALT: aDY8oCLYUPsw1fRu7RtW33DmbOIX2AGg
#STRAPI_LICENSE: LicenseKey
volumes:
- /volume1/docker/strapi/data:/srv/app:rw
ports:
- 1337:1337
depends_on:
db:
condition: service_healthy
Note: Before you paste the code above in the Web editor area below, change the value numbers for user with your own UID and GID values. (Follow my step by step guide on how to do this.) 999 is my personal UID value and 10Ā is my personal GID value. You have to type in your own values.
Note: Before you paste the code above in the Web editor area below, change the value for ADMIN_URL and type in your own NO IP DDNS withĀ https:// at the beginning that you have previously created at STEP 4. ā ļøMandatory: Remember to add /admin at the end of the URL.
Note: Before you paste the code above in the Web editor area below, change the value for PUBLIC_URL and type in your own NO IP DDNS withĀ https:// at the beginning that you have previously created at STEP 4.
Note: Before you paste the code above in the Web editor area below, change the value for JWT_SECRET. (Generate your own 32 length JWT_SECRET.)
Note: Before you paste the code above in the Web editor area below, change the value for ADMIN_JWT_SECRET.Ā (Generate your own 32 length ADMIN_JWT_SECRET.)
Note: Before you paste the code above in the Web editor area below, change the value for API_TOKEN_SALT.Ā (Generate your own 32 length API_TOKEN_SALT.)
Note: Before you paste the code above in the Web editor area below, change the value for TRANSFER_TOKEN_SALT.Ā (Generate your own 32 length TRANSFER_TOKEN_SALT.)
Note: If you want, you can also add your own Strapi License Key by removing the # in the code above. If you don’t have a Strapi License Key, then leave the code as it is with the #.

STEP 9
Scroll down on the page until you see a button namedĀ Deploy the stack. Click on it. Follow the instructions in the image below. The installation process can take up to a few minutes. It will depend on your Internet speed connection.

STEP 10
If everything goes right, you will see this message at the top right of your screen: āSuccess Stack successfully deployedā.

STEP 11
Open your Nginx Proxy Manager container that you have previously installed at STEP 3. Click Add Proxy Host. A new pop up window will open. Add the following details:
Domain Names: Type in your own noip domain name that you have previously created at STEP 4.
Scheme: http
Forward Hostname/IP: Type in the local NAS IP of your UGREEN NAS.
Forward Port: Type in the StrapiĀ local Port that is 1337
Check Block Common Exploits
Check Websockets Support
Click the SSL tab. Follow the instructions in the image below.

STEP 12
After you click the SSL tab, add the following details:
SSL Certificate: Request a new SSL Certificate
Check: Force SSL
Check: HSTS Enabled
Check: HTTP/2 Support
Email Address for Let’s Encrypt: Type in your own Email Address.
Check: I Agree to the Let’s Encrypt Terms of Service.
Click Save. Follow the instructions in the image below.

STEP 13
In the Proxy Hosts area, if everything goes right, you will see that your strapi hostname has been generated. Click on it. Follow the instructions in the image below.

STEP 14
If you get a blank 502 Error page, just wait some minutes. This means the Strapi Container is not yet ready.
STEP 15
š¢Please Support My work by Making a Donation. Almost 99,9% of the people that install something using my guidesĀ forget to support my work, or justĀ ignoreĀ STEP 1. Iāve been very honest about this aspect of my work since the beginning: I donāt run any ADS, I donāt require subscriptions, paid or otherwise, I donāt collect IPs, emails, and I donāt have any referral links from Amazon or other merchants. I also donāt have any POP-UPs or COOKIES. I have repeatedly been told over the years how much I have contributed to the community. Itās something I love doing and have been honest about my passion since the beginning. But I also Need The Community to Support me Back to be able to continue doing this work.
STEP 16
Please wait approximately 5 minutes or you will get a blank 502 error page if you try to connect too soon. Now open your browser and type in your HTTPS/SSL certificate like this https://strapi.ddns.net/adminĀ that you have previously created at STEP 4. In my case it’s https://mariustrapi.ddns.net/adminĀ If everything goes right, you will see the Strapi administrator creation page. Type in your First name and Last name, your Email address and your own Password. Confirm your Password then click Let’s start. Follow the instructions in the image below.

STEP 17
Select what type of workĀ you do, then click Finish. Follow the instructions in the image below.

STEP 18
Your Strapi Dashboard at a glance!

Enjoy Strapi!
šNote/Update/Container: How to Update Your Docker Containers on UGREEN NAS Using Portainer.
š³Note: How to Create Docker Shortcuts on Desktop.
šNote: How to Update Portainer to the latest version.
This post was updated on Thursday / November 6th, 2025 at 10:51 PM