Deploying a Phoenix Server on Raspberry Pi with k3s
On this page
Learn how to deploy a Phoenix server on Raspberry Pi using k3s and Docker, from app creation to Kubernetes deployment. This guide provides detailed steps for setting up your environment and deploying your application.
In this guide, we’ll deploy a Phoenix server on a Raspberry Pi using K3s and Docker. This setup is similar to deploying a Node.js server.
Creating the Phoenix App
You can create the app inside the Docker container or on a different machine, but we’ll do it locally. First, install Erlang, Elixir, and Phoenix:
mix phx.new phoenix_server --no-ectoIf you answer ‘Y’ to the “Fetch and install dependencies?” prompt, it will take a while but save time during the Docker build step.
Dockerfile
Create a Dockerfile with the following content:
# Use an official Elixir runtime as a parent image
FROM elixir:latest
# Install hex, rebar, and phoenix.
RUN mix local.hex --force \
&& mix local.rebar --force \
&& mix archive.install --force hex phx_new 1.4.12
# Install nvm
RUN curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.2/install.sh | bash
# Install node
ENV NODE_VERSION=v12.14.1
RUN set -e \
&& NVM_DIR="$HOME/.nvm" \
&& . "$NVM_DIR/nvm.sh" \
&& nvm install $NODE_VERSION
# Create an app directory and copy the Elixir projects into it
RUN mkdir /app
COPY . /app
WORKDIR /app
# Compile the project
RUN mix do deps.get, compile
RUN set -e \
&& NVM_DIR="$HOME/.nvm" \
&& . "$NVM_DIR/nvm.sh" \
&& cd assets \
&& npm install \
&& node node_modules/webpack/bin/webpack.js --mode development
EXPOSE 4000
CMD ["/app/docker-entrypoint.sh"]docker-entrypoint.sh
Create a docker-entrypoint.sh script with the following content:
#!/bin/bash
set -e
export NVM_DIR="$HOME/.nvm"
. "$NVM_DIR/nvm.sh"
cd /app
exec mix phx.serverMake it executable:
chmod +x docker-entrypoint.shNote that the above script runs the Phoenix app in development mode.
Creating the Docker Image
Build the Docker image using:
docker build -t phoenix-server .Pushing to a Private Docker Repository
Tag and push the Docker image to your private repository:
docker tag phoenix-server rpi201:5000/phoenix-server
docker push rpi201:5000/phoenix-serverCreating a Deployment
Create a deployment in Kubernetes:
sudo kubectl create deployment phoenix-server --image=rpi201:5000/phoenix-serverExposing the Deployment
Expose the deployment to make it accessible:
sudo kubectl expose deployment phoenix-server --port 4000Checking the Deployment
Verify that the deployment is working:
sudo kubectl get endpoints phoenix-server
curl 10.42.3.15:4000For more details, refer to the PSPDFKit blog post.
Following these steps, you can successfully deploy a Phoenix server on Raspberry Pi using k3s and Docker.