+++ date = 2023-06-30 title = "Self-Hosting Voyager - A Lemmy Web Client" description = "A guide to self-hosting the Voyager application on your own server." +++ ## Installation Guide [Voyager](https://github.com/aeharding/voyager) is a mobile-first Lemmy web client, based on iOS design standards. It follows very closely to Apollo's design. This post is a guide showing how I was able to build and launch my own instance of Voyager via Docker Compose. ### Clone the Repository Start by cloning the repository and entering it: ```sh git clone https://github.com/aeharding/voyager cd voyager ``` ### Build the Image With this repository, you can build the image yourself without any further configuration. When complete, it'll give you the image ID for you to run. ```sh sudo docker build . # Successfully built 5f00723cb5be ``` With the image ID above, you can run the container and pass the requested port `5314` through or use a custom port, if you wish. You can also set the `CUSTOM_LEMMY_SERVERS` environment variable if you want to add to the default suggested login servers. This must be set with a comma separated list of suggested servers. The first instance in the list will be the default view for logged-out users. I will be using a `docker-compose.yml` file to run this container, instead of a `docker run` command. ```sh nano docker-compose.yml ``` ```conf version: "2" services: voyager: image: 5f00723cb5be restart: always ports: - ":5314" environment: - CUSTOM_LEMMY_SERVERS=lemmy.dbzer0.com,lemmy.world,lemmy.ml,beehaw.org ``` ```sh sudo docker-compose up -d ``` The web app will now be available at the following address: `:`. If you are running it on your local device, try `localhost:`. ### Reverse Proxy If you want to visit this app via an external URL or domain name, you'll need to set up a reverse proxy. The example below uses Nginx as a reverse proxy. Simply create the configuration file, paste the contents below, save the file, symlink the file, and restart Nginx. ```sh sudo nano /etc/nginx/sites-available/voyager ``` ```conf server { if ($host ~ ^[^.]+\.example\.com$) { return 301 https://$host$request_uri; } listen [::]:80; listen 80; server_name voyager.example.com; return 404; } server { listen [::]:443 ssl http2; listen 443 ssl http2; server_name voyager.example.com; access_log /var/log/nginx/voyager.access.log; error_log /var/log/nginx/voyager.error.log; location / { proxy_http_version 1.1; proxy_pass http://localhost:5314; proxy_set_header Host $host; } ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; include /etc/letsencrypt/options-ssl-nginx.conf; ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; } ``` ```sh sudo ln sudo ln -s /etc/nginx/sites-available/voyager /etc/nginx/sites-enabled/voyager sudo systemctl restart nginx.service ``` The site will now be available at the `server_name` you specified above! You can visit my instance at [voyager.cleberg.net](https://voyager.cleberg.net) for an example.