Creating polls with Rallly to arrange meeting times, suitable for social or business use

Rallly - a simpler way to set up meeting times

Containers May 25, 2022

Yes that's three l's there. And yes I said simpler, though to be honest I'm not so sure.

Rally Hero Image
https://rallly.co

Rallly is a poll creator, which allows you to give date and time options to friends or work colleagues to help set up a specific meeting or event. It works by creating a link to the poll, which the creator can then send out to their target group or audience.

Among its features is the ability to take part in a poll without needing to log in or provide contact details (though the poll creator should use an email they have access to so that they can a) modify the poll if necessary, and b) receive update emails on participants and poll results).

And, it's self-hostable. Let's get into it.


Prerequisites

You should have:

  1. Docker and docker-compose installed on your machine
  2. The ability to SSH or use CLI/terminal on your machine, or use Portainer to spin up your stacks
  3. Some sort of access and relevant permissions to manage and create new directories
  4. Git installed on your machine as we'll need to clone the repo

If you want to have Rallly email you/your users

  • An ability to set up an SMTP email account
  • This could be using the built-in Gmail smtp ability on your account, or a separate service you use, such as https://eforw.com

If you want to share and/or access Rallly from outside your network

  • You should have your own domain name with a fully functioning reverse proxy (check out my SWAG article, and I recommend Cloudflare as an incredibly feature-packed, not to mention free CDN)
  • A proxy docker network (either called proxy or something else, this is the network you use for your reverse proxy/SWAG container to communicate with the services it acts as RP for)
  • You know how to create the relevant A or CNAME records and reverse proxy configurations

Prepping the file system

  • Navigate to the directory you keep your docker compose folders in
  • Clone the github repo by copy pasting the following:
git clone https://github.com/lukevella/rallly.git
Copy and paste this
  • It should download quickly, after which you should see a new folder called rallly
  • Open that directory, and you will see a number of folders and files. We are primarily interested in docker-compose.yml and sample.env

Prepping the container files

  • Locate the sample.env file and copy it, renaming it to .env
this can be done in CLI/terminal by typing cp sample.env .env
  • Open the new .env file, then copy and past the following into it:
NEXT_PUBLIC_BASE_URL=http://localhost:3000 #change url and/or port as necessary
DATABASE_URL=postgres://postgres:[email protected]_db:5432/db #do not change
SECRET_PASSWORD=insert a random 32-long character string
[email protected]
SMTP_HOST=smtp.example.com
SMTP_PORT=587
SMTP_SECURE=false #change to true if your server is TLS enabled
SMTP_USER=user
SMTP_PWD=password
If you do not intend to use SMTP, delete those variables listed above
  • Save the file. You can now close it, but you may want to come back to it later
you can check out all possible config variables here
💡
You'll notice that the page linked immediately above says DATABASE_URL can be removed when using docker. I've found that removing this variable broke the installation (the gui would load up, but no polls could be created. Up to you if you want to try it without)
  • Locate and open the docker-compose.yml file. You'll see it's pre-populated, but we're going to copy over it. Please paste the following, completely replacing the existing content:
version: "3.3"
services:
  rallly_db:
    image: postgres:14.2
    restart: unless-stopped
    container_name: rallly-db
    volumes:
      - db-data:/var/lib/postgresql/data
    environment:
      - POSTGRES_PASSWORD=postgres

  rallly:
    build:
      context: .
      args:
        - DATABASE_URL=postgres://postgres:[email protected]_db:5432/db?pgbouncer=true
        - NEXT_PUBLIC_BASE_URL=${NEXT_PUBLIC_BASE_URL}
    restart: unless-stopped
    container_name: rallly
    command: sh -c "yarn prisma migrate deploy --schema prisma/schema.prisma && yarn start"
    depends_on:
      - rallly_db
    ports:
      - 3000:3000 #change before the `:` if necessary to avoid port conflicts
    environment:
      - DATABASE_URL=postgres://postgres:[email protected]_db:5432/db
    env_file:
      - .env
    networks:
      - default
#uncomment and modify the following to user your reverse proxy
#      - proxy
      
volumes:
  db-data:
    driver: local

networks:
  default:
    name: rallly
    ipam:
      config:
      	- subnet: 172.xx.0.0/29 #change subnet as necessary
#uncomment and modify the following to use your reverse proxy
#  proxy:  
#    external: true
Make the relevant changes where indicated

A couple of things to note here:

  1. If you change the mapped port in the rallly service, then make sure to change it in the .env NEXT_PUBLIC_BASE_URL variable too
  2. If you plan to use a reverse proxy to access rallly, uncomment the proxy network in the rallly and networks blocks and change the name (if necessary) to your reverse proxy network. You will also need to change the NEXT_PUBLIC_BASE_URL in the .env to your https://polls.domain.com or whatever you're calling it

You're now ready to build the environment and create the containers.


Creating the containers and accessing the gui

In our docker-compose file you'll notice that the rallly service has a build command. When we run docker-compose up for the first time, this will download and install dependencies for the service.

  • Inside the same directory as your docker-compose.yml file, type in docker-compose -p "rallly" up -d, and you'll see a lot of downloading and building taking place
💡
This could take some time. Go and get a drink or watch the lines scroll by

The dependencies will be downloaded and installed first, and once complete, the containers will be created.

  • Once finished, you should have your two containers, rallly and rallly-db created
  • Double check the logs if you want, otherwise access the gui at either http://localhost:3000 (change the port if necessary as per your compose file) or  your version of https://polls.domain.com
Landing page
Click to zoom

From here, you can either click View demo to get a feel for the service, or create your own poll by clicking Get started. Let's go ahead and do that.

Creating your poll
Click to zoom

Fill out all the info on this and the following pages, and you should end up with a (non participated) poll.

I'm accessing this locally, hence the link being specific to my machine's IP rather than a publicly accessible URL

By clicking the Share button top right, you get a link for either a participant or an admin (who can modify the poll) and a Copy Link button which will let you send it out to your participants.

And that's mostly it. Check out the Preferences and Manage buttons to access other options, happy polling!


Related Articles

Portainer - Easy Container Management for Docker
A step-by-step docker walkthrough to installing and configuring Portainer, your one-stop container-management resource
Updating your Containers with Diun and Watchtower
Ways to create autonomous and semi-autonomous systems to notify you and update the images for your favorite and mission-critical container
Swag, Authelia and Reverse Proxies
A step-by-step walkthrough to self-host your Reverse Proxy with SWAG, and providing SSO and 2FA security using Authelia, all in docker

PTS

PTS fell down the selfhosted rabbit hole after buying his first NAS in October 2020, only intending to use it as a Plex server. Find him on the Synology discord channel https://discord.gg/vgSq5pcT

Have some feedback or something to add? Comments are welcome!

Please note comments should be respectful, and may be moderated