The following is a guide for setting up Hudu with no SSL certificate. We only recommend this option if the server is going to be used without outside internet access, and will be accessible only on an internal network.
If you are looking to use a free SSL certificate that auto-renews for you, or a custom SSL certificate, you may want to read this article for alternative options: Getting Started with Hudu Self-Hosted.
Prerequisites
In order to self-host Hudu, you will need:
- Server with at least 4GB memory and at least 1 CPU (as long as there is no contention), with Ubuntu (18.04 or 20.04) as the OS.
- SMTP server for sending outgoing mail.
Instructions
- SSH into the server you are wishing to host Hudu on.
-
Install Docker CE on the server. Setup instructions can be found here.
- Do not use SNAP to install Docker - this will cause issues later on.
- Create a blank directory named hudu2 on the home directory. On Ubuntu, you can do this by typing:
mkdir ~/hudu2
- Move into the directory. On Ubuntu:
cd ~/hudu2
- Place a file named docker-compose.yml in the directory.
Expand to copy content for docker-compose.yml file
volumes: postgres_data: {} app_data: {} redis_data: {} services: db: image: 'postgres:16.2' volumes: - postgres_data:/var/lib/postgresql/data env_file: - '.env' logging: driver: "json-file" options: max-file: "5" max-size: "10m" restart: unless-stopped redis: image: 'redis:7.4.0' command: redis-server volumes: - redis_data:/var/lib/redis/data restart: unless-stopped app: image: hududocker/hudu:latest env_file: - '.env' volumes: - app_data:/var/www/hudu2/public/uploads/ - app_data:/var/www/hudu2/uploads/ - app_data:/var/lib/app/data depends_on: - db - redis logging: driver: "json-file" options: max-file: "5" max-size: "100m" restart: unless-stopped worker: depends_on: - db - redis image: hududocker/hudu:latest command: bundle exec sidekiq -C config/sidekiq.yml volumes: - app_data:/var/www/hudu2/public/uploads/ - app_data:/var/www/hudu2/uploads/ - '.:/app' env_file: - '.env' logging: driver: "json-file" options: max-file: "5" max-size: "100m" restart: unless-stopped nginx: image: lscr.io/linuxserver/nginx container_name: nginx cap_add: - NET_ADMIN env_file: - '.env' depends_on: - app volumes: - /var/www/hudu2/config:/config ports: - 80:80 - 443:443 restart: unless-stopped
Already have a production environment and want to update your docker-compose.yml file? Please visit our Upgrade Postgres in a Production Environment article for more information!
- Place a file named .env in the directory. The contents need to be generated with our config generator: here.
- Add
DISABLE_SSL=true
to the .env file and save.
It is critical that you store an exact copy of the .env file in a secure location. Your encryption and secure keys are located in this file, and you can lose access to passwords and more if this file is lost.
- When both files are residing within the directory, run the command:
sudo docker compose up -d
to start your Hudu instance. - Now, run:
sudo docker compose down
to stop your Hudu instance. - Create a file called: /var/www/hudu2/config/nginx/proxy.conf with the contents of this file.
- Open the file here: /var/www/hudu2/config/nginx/site-confs/default.conf and replace the contents with this file.
- Navigate back to the hudu2 folder. On Ubuntu:
cd ~/hudu2
- Start the instance again:
sudo docker compose up -d
- Your Hudu should now be up and running! Visit your domain to confirm. If you see a Hudu sign-up screen, it's successful. Head over to the Hudu HQ Billing Portal for a license key.
- If you don't see this screen, contact support, and please provide logs:
sudo docker compose logs
- Please paste these into something like Pastebin.com