PicoCMS for Nextcloud & Nginx

Pico is a stupidly simple, blazing fast, flat file CMS. That’s definitely a mouthful, what does it even mean? In the most basic sense, it means that there is no administration backend or database to deal with. You simply create markdown files in the content folder and those files become your pages. There’s much more to Pico than that though.

With PicoCMS you can create and manage websites with an address like: https://cloud.example.com/sites/my_site/ You can edit the website as easy text (Markdown style) files in Nextcloud.

You can make the pages visible for everyone or only for users or groups on your Nextcloud. You can also share the files that the website consists of so you can collaborate with others maintaining the site.

1. Download PicoCMS from the Nextcloud app store


2. Extract and upload PicoCMS to server

Extract and upload the cms_pico folder to your nextcloud apps directory (e.g. /var/www/cloud.yoursite.com/html/apps/ – or – /var/www/html/yoursite.com/nextcloud/apps/ – etc)

3. Enable the PicoCMS app in Nextcloud

Inside the administrator apps section of Nextcloud, Enable the PicoCMS app.

4. Update Nginx configuration

Below is the code to add to your nextcloud nginx config, replacing https://sub.domain.tld/ with your own domain:

location /sites/ {
        rewrite /sites/(.*) /apps/cms_pico/pico/$1 break;
        proxy_redirect off;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Host $host;
        proxy_set_header X-Forwarded-Server $host;
        proxy_pass https://sub.domain.tld/;

5. Restart Nginx:

$ sudo service nginx restart

6. Adding new sites

Go to the Nextcloud settings -> Pico CMS section of Nextcloud to add sites.




Pico Plugins

Pico Themes

Markdown Sytax

Markdown Extra

2 thoughts on “PicoCMS for Nextcloud & Nginx

  1. Hi Ken

    thanks for your tutorial!

    I followed your tutorial step by step using the latest Nextcloud 24 with nginx and traefik as a reverse proxy with letsencrypt ssl certificates. Everything runs in docker.

    I configured the location /sites/ as described by you. However, I do get the following nginx error when calling the nexrcloud pico short url (long url works just fine):

    ncfpm-nginx | 2022/10/10 21:25:50 [crit] 32#32: *3 SSL_do_handshake() failed (SSL: error:14094458:SSL routines:ssl3_read_bytes:tlsv1 unrecognized name:SSL alert number 112) while SSL handshaking to upstream, client:, server: , request: “GET /sites/investigator/ HTTP/1.1”, upstream: “”, host: “sub.domain.ddnss.de” being my correct external IP address which I anonymized.

    Do you have any idea what the problem could be?

    Thanks, Det

  2. Thanks for your comment Det. Just by looking at your error log it appears it has something to do with your SSL config. Have you tried using the url without port 443 in it? For example: “”. Not sure if running this in docker makes a difference concerning the SSL issue but other than that it would probably be best to check the github page: https://github.com/nextcloud/cms_pico/issues

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.