Are you looking for an image hosting platform that is easy to use, highly customizable, and packed with powerful features?
Look no further than Chevereto.
Chevereto is an open-source image hosting platform that allows you to store, manage, and share your photos and images with ease.
With its user-friendly interface and extensive customization options, Chevereto is a great choice for anyone who wants to create a customized and professional-looking image hosting website.
In this blog post, we’ll explore what Chevereto is, how it works with Docker, and why you might want to consider using it for your own image hosting needs.
Installing Chevereto with Docker
Pre-Requisites!! Just Get Docker 馃悑
Important step and quite recommended for any SelfHosting Project - Get Docker Installed
It will be one command, this one, if you are in Linux:
apt-get update && sudo apt-get upgrade && curl -fsSL https://get.docker.com -o get-docker.sh
sh get-docker.sh && docker version
-
The official repository: https://github.com/chevereto/docker
-
The documentation is great, let’s use it to create our Chevereto Docker Instace: https://v4-docs.chevereto.com/guides/docker/#pure-docker
You will find this to run purely chevereto, but this instance has to be combined with a Database service as we will see next.
docker run -d \
--name chevereto \
-p 88:80 \
-e CHEVERETO_DB_HOST=database \
-e CHEVERETO_DB_USER=chevereto \
-e CHEVERETO_DB_PASS=user_database_password \
-e CHEVERETO_DB_PORT=3306 \
-e CHEVERETO_DB_NAME=chevereto \
-e CHEVERETO_ASSET_STORAGE_TYPE=local \
-e CHEVERETO_ASSET_STORAGE_URL=/images/_assets/ \
-e CHEVERETO_ASSET_STORAGE_BUCKET=/var/www/html/images/_assets/ \
-v /var/www/html/images/ \
ghcr.io/chevereto/chevereto:latest
And the yml version will be:
version: "3.7"
services:
chevereto:
image: ghcr.io/chevereto/chevereto:latest
container_name: chevereto
init: true
restart: unless-stopped
volumes:
- chevereto:/var/www/html/images
networks:
- internal
ports:
- 88:80 #the port that you will use to access the UI locally
environment:
CHEVERETO_DB_HOST: mariadb
CHEVERETO_DB_USER: ${DB_USER}
CHEVERETO_DB_PASS: ${DB_PASSWORD}
CHEVERETO_DB_PORT: 3306
CHEVERETO_DB_NAME: ${DB_NAME}
CHEVERETO_ASSET_STORAGE_TYPE: local
CHEVERETO_ASSET_STORAGE_URL: /images/_assets
CHEVERETO_ASSET_STORAGE_BUCKET: /var/www/html/images/_assets
mariadb:
image: mariadb
container_name: chevereto_mariadb
restart: always
init: true
environment:
MYSQL_DATABASE: ${DB_NAME}
MYSQL_USER: ${DB_USER}
MYSQL_PASSWORD: ${DB_PASSWORD}
MARIADB_ROOT_PASSWORD: ${DB_ROOT_PASSWORD}
volumes:
- chevereto_mariadb:/var/lib/mysql
networks:
- internal
volumes:
chevereto: {}
chevereto_mariadb: {}
networks:
internal: {}
In the previous config file, we were using some parameters, docker-compose will be looking for a .env file in the same folder with this structure:
DB_USER=chevereto_user
DB_PASSWORD=chevereto_password
DB_NAME=chevereto
DB_ROOT_PASSWORD=chevereto_root_password
FQDN=subdomain.your_domain.com
For security reasons, make sure to customize that .env file with proper passwords.
Ready? Let’s deploy it then with docker-compose:
docker compose up -d
After the deployment is completed, access the UI at http://localhost:88, as specified by the configuration file. Then, create your user and password to start using your Chevereto instance with docker.
Exposing Chevereto to the Internet
This works perfectly to try at home, but if you want to expose this service to the internet, you will need some proxy manager:
Chevereto and NGinX
Using an existing NGinX Instance
Do you have already deployed an NGinX Proxy Manager instance? In that case, simply add the network name in the docker-compose file like this:
version: "3.7"
services:
chevereto:
image: ghcr.io/chevereto/chevereto:latest
container_name: chevereto
init: true
restart: unless-stopped
volumes:
- chevereto:/var/www/html/images
networks:
- internal
- nginx_default #this will allow communication between chevereto service and the existing nginx service
ports:
- 88:80 #the port that you will use to access the UI locally
environment:
CHEVERETO_DB_HOST: mariadb
CHEVERETO_DB_USER: ${DB_USER}
CHEVERETO_DB_PASS: ${DB_PASSWORD}
CHEVERETO_DB_PORT: 3306
CHEVERETO_DB_NAME: ${DB_NAME}
CHEVERETO_ASSET_STORAGE_TYPE: local
CHEVERETO_ASSET_STORAGE_URL: /images/_assets
CHEVERETO_ASSET_STORAGE_BUCKET: /var/www/html/images/_assets
mariadb:
image: mariadb
container_name: chevereto_mariadb
restart: always
init: true
environment:
MYSQL_DATABASE: ${DB_NAME}
MYSQL_USER: ${DB_USER}
MYSQL_PASSWORD: ${DB_PASSWORD}
MARIADB_ROOT_PASSWORD: ${DB_ROOT_PASSWORD}
volumes:
- chevereto_mariadb:/var/lib/mysql
networks:
- internal
volumes:
chevereto: {}
chevereto_mariadb: {}
networks:
internal: {}
nginx_default:
external: true # add this if the network (for nginx proxy manager) is already existing!
FAQ
How to Deploy Nginx Proxy Manager
If you are interested in deploying a separated NGINX instance with Docker, I already created a guide for that here.