Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
getting-started:raspberry-pi-docker-install [2018/03/13 19:47]
Elco Jacobs
getting-started:raspberry-pi-docker-install [2019/03/16 16:51] (current)
99.93.141.76 Changed step for updating the packages on Raspian.
Line 1: Line 1:
 ===== Installing Docker and BrewPi on a Raspberry Pi ===== ===== Installing Docker and BrewPi on a Raspberry Pi =====
-REWRITING THIS! 
  
 We run BrewPi inside a Docker container to make it easier to: We run BrewPi inside a Docker container to make it easier to:
Line 58: Line 57:
 ------------- -------------
 ==== Find the Raspberry Pi on your local network ==== ==== Find the Raspberry Pi on your local network ====
-It might not be necessary to find and remember the IP-address of your Raspberry Pi. It will register itself on the network as ''​rasbperrypi.local''​. This is provided by the package ''​avahi-daemon''​ and it is called Zeroconf.+It might not be necessary to find and remember the IP-address of your Raspberry Pi. It will register itself on the network as ''​raspberrypi.local''​. This is provided by the package ''​avahi-daemon''​ and it is called Zeroconf.
  
 If the .local address doesn'​t work, you can use the app Fing ([[https://​play.google.com/​store/​apps/​details?​id=com.overlook.android.fing|Android]] / [[https://​itunes.apple.com/​gb/​app/​fing-network-scanner/​id430921107|iOS]]). \\  This app can scan your local network for devices. If our Raspberry Pi successfully connected to your network, it should be on the list. Make a note of the IP address. If the .local address doesn'​t work, you can use the app Fing ([[https://​play.google.com/​store/​apps/​details?​id=com.overlook.android.fing|Android]] / [[https://​itunes.apple.com/​gb/​app/​fing-network-scanner/​id430921107|iOS]]). \\  This app can scan your local network for devices. If our Raspberry Pi successfully connected to your network, it should be on the list. Make a note of the IP address.
Line 91: Line 90:
 ==== Configure and install necessary packages ==== ==== Configure and install necessary packages ====
  
-Once logged in, run raspi-config to configure your locale settings and time zone:+Once logged in, run raspi-config to configure your password, ​locale settings and time zone:
 <​code>​ <​code>​
 sudo raspi-config sudo raspi-config
-</​code>​ 
- 
-Next, change the default password for the pi user: 
-<​code>​ 
-passwd 
 </​code>​ </​code>​
  
 Update the packages on the system: Update the packages on the system:
 <​code>​ <​code>​
-sudo apt update & sudo apt dist-upgrade+sudo apt-get update ​&& sudo apt-get dist-upgrade
 </​code>​ </​code>​
  
 Install Docker Install Docker
 <​code>​ <​code>​
-curl -sSL https://get.docker.com ​sh+curl -fsSL get.docker.com ​-o get-docker.sh && sh get-docker.sh
 </​code>​ </​code>​
  
Line 128: Line 122:
 The command to deploy portainer is: The command to deploy portainer is:
 <​code>​ <​code>​
 +docker pull portainer/​portainer
 docker run -d -p 9000:9000 -v /​var/​run/​docker.sock:/​var/​run/​docker.sock --restart always --name portainer portainer/​portainer -H unix:///​var/​run/​docker.sock docker run -d -p 9000:9000 -v /​var/​run/​docker.sock:/​var/​run/​docker.sock --restart always --name portainer portainer/​portainer -H unix:///​var/​run/​docker.sock
 </​code>​ </​code>​
  
 Portainer will now run on port 9000. Portainer will now run on port 9000.
-Go to [[http://​raspberrypi.local:​9000]],​ or http://<ip-address>:9000 in your web browser.+Go to [[http://​raspberrypi.local:​9000]],​ or ''​http://[ip address]:9000'' ​in your web browser.
  
 +It will ask you to set an admin password when you first access it.
 +
 +{{:​getting-started:​portainer-password-setup.png|}}
 +
 +On the container tab, you can see all the docker containers that are running. At this point, it will be only the container that runs portainer.
 +
 +{{:​getting-started:​portainer-running-containers.png|}}
 +
 +From this page, you can create, delete or recreate containers. You can also click on '​console'​ to run commands inside the container.
 +
 +Finally click on '​endpoints'​ in the left menu. Click on the only endpoint which is called '​primary'​ or '​local'​. In the public IP field, enter ''​raspberrypi.local''​ or the IP address of the pi.
 +If you omit this step, clicking on exposed ports of a container will link to 0.0.0.0:80 instead of raspberrypi.local:​80,​ which will not work.
 +
 +
 +==== Deploy the BrewPi container ====
 +Now we are ready to deploy a BrewPi container. This container will run the BrewPi web interface and the BrewPi Python script that communicates with the BrewPi Spark.
 +
 +The container will store your brewing data and settings outside of the container, so you can safely delete and recreate the container without losing data.
 +This is done by creating a mapped volume. In the command below, the ~/​brewpi-data on the raspberry pi host is mapped to /data in the container.
 +
 +The container is started with -d, so it runs as a daemon in the background. If you run into trouble, omit -d to see where it errors.
 +
 +The container exposes 2 ports, port 80 and port 81.
 +The only difference is that port 81 asks for a username and password.
 +
 +If you want to forward a port on your router, so you can access it from outside of your home network, only forward port 81.
  
  
-==== Deploy the brewpi container ==== 
-Get the latest raspbian based image brewpi image  
 <​code>​ <​code>​
 docker pull brewpi/​brewpi-raspbian docker pull brewpi/​brewpi-raspbian
-</​code>​ +docker run -d --name brewpi ​--privileged ​-p 80:80 -p 81:81 -v ~/​brewpi-data:/​data -v /​etc/​timezone:/​etc/​timezone -v /​etc/​localtime:/​etc/​localtime --restart always brewpi/​brewpi-raspbian
-Deploy a new brewpi container. Modify the command below to to your liking, especially the port and the data location on the host (default is ''​~/​brewpi-data''​). +
-If you want to connect your BrewPi Spark over USB, check the section below. +
-<​code>​ +
-docker run -d --name brewpi -p 80:80 -v ~/​brewpi-data:/​data -v /​etc/​timezone:/​etc/​timezone -v /​etc/​localtime:/​etc/​localtime --restart always brewpi/​brewpi-raspbian+
 </​code>​ </​code>​
  
Line 152: Line 167:
 | <​code>​-d</​code> ​                                                              | After starting the container, run it as daemon in the background. ​                                                         | | <​code>​-d</​code> ​                                                              | After starting the container, run it as daemon in the background. ​                                                         |
 | <​code>​--name brewpi</​code> ​                                                   | Name the new container brewpi, modify this you are running multiple brewpi containers. ​                                    | | <​code>​--name brewpi</​code> ​                                                   | Name the new container brewpi, modify this you are running multiple brewpi containers. ​                                    |
-| <​code>​-p 80:​80</​code> ​                                                        | Map port 80 of the container to port 80 of the host. <br> If port 80 is in use, use a differnt ​port, for example 8000:​80. ​ |+| <​code>​--privileged</​code> ​                                                    | Run with elevated permissions to access serial ports that are present when the container starts. ​                         | 
 +| <​code>​-p 80:​80</​code> ​                                                        | Map port 80 of the container to port 80 of the host. <br> If port 80 is in use, use a different ​port, for example 8000:​80. ​
 +| <​code>​-p 81:​81</​code> ​                                                        | Map port 81 of the container to port 81 of the host.                                                                       |
 | <​code>​-v ~/​brewpi-data:/​data</​code> ​                                          | Store data and settings in ~/​brewpi-data on the host.                                                                      | | <​code>​-v ~/​brewpi-data:/​data</​code> ​                                          | Store data and settings in ~/​brewpi-data on the host.                                                                      |
-| <​code>​-v /​etc/​timezone:/​etc/​timezone -v /​etc/​localtime:/​etc/​localtime</​code> ​ | Use timezone from the host.                                                                                                |+| <​code>​-v /​etc/​timezone:/​etc/​timezone -v /​etc/​localtime:/​etc/​localtime</​code> ​ | Use timezone ​and time from the host.                                                                                       ​|
 | <​code>​--restart always</​code> ​                                                | Start on boot and always restart the container when it stops. ​                                                             | | <​code>​--restart always</​code> ​                                                | Start on boot and always restart the container when it stops. ​                                                             |
 | <​code>​brewpi/​brewpi-raspbian</​code> ​                                          | The image that is used. Use''​brewpi/​brewpi-raspbian''​ for the raspberry pi, ''​brewpi/​brewpi-ubuntu''​ for x64/x86 systems. ​ | | <​code>​brewpi/​brewpi-raspbian</​code> ​                                          | The image that is used. Use''​brewpi/​brewpi-raspbian''​ for the raspberry pi, ''​brewpi/​brewpi-ubuntu''​ for x64/x86 systems. ​ |
  
  
-=== Connecting ​the BrewPi Spark via USB ===+Please note that you need to have the BrewPi Spark connected ​via USB when the container starts for it to be available to the container. 
 +In the web interface, you can select the serial number (for USB) or enter the IP address of the Spark to connect.
  
-If you want to connect to the BrewPi Spark over USB, you need to pass an extra argument to the container to forward the usb device, before ​'​brewpi/​brewpi-raspbian'.+=== Change ​the password for port 81 === 
 +The default login details are username ''​brewer''​ and password ''​brewpi''​. 
 +To change the password, you can run: 
 +<​code>​ 
 +sudo apt install apache2-utils 
 +sudo htpasswd -bc ~/brewpi-data/​settings/​brewpi.htpasswd username password 
 +</​code>​ 
 +Replace ''​username''​ and ''​password'​' ​with your desired user name and password.
  
-^ Parameter ​                                       ^ Explanation ​                                                         ^ +If you run the command inside your container instead of on the host, the command should be: 
-<​code>​--device=/dev/ttyACM0:/dev/ttyACM0</​code> ​ | Make the serial port device /​dev/​ttyACM0 available in the container ​ |+<​code>​ 
 +sudo htpasswd ​-bc /data/settings/brewpi.htpasswd username password 
 +</​code>​
  
-The full command will then be:+=== Troubleshooting === 
 +If you get an error about a conflict with an existing container (see below), you can remove the old container or use another name for the new one.
 <​code>​ <​code>​
-docker ​run -d --name brewpi -p 80:80 -v ~/brewpi-data:/data -v /​etc/​timezone:/​etc/​timezone -v /​etc/​localtime:/​etc/​localtime --restart always --device=/​dev/​ttyACM0:/​dev/​ttyACM0 brewpi/​brewpi-raspbian+docker: Error response from daemon: Conflict. The container ​name /brewpi” is already in use by container “e863…”. You have to remove (or rename) that container to be able to reuse that name. 
 +See ‘docker run --help’.
 </​code>​ </​code>​
  
-Please note that you need to have the BrewPi Spark connected via USB when running this commandotherwise the ttyACM0 device will not be found.+To remove ​the existing container named '​brewpi'​run: 
 +<​code>​ 
 +docker stop brewpi 
 +docker rm brewpi 
 +</​code>​
  
-=== Connecting ​the BrewPi Spark via WiFi ===+To view all containers, run the command below or use portainer. 
 +<​code>​ 
 +docker ps -a 
 +</​code>​
  
-This step requires that you both configure ​the BrewPi ​Spark itself ​and your docker instance so it can find your controller on the network. Please follow [[:how-to-setup-wifi-on-the-brewpi-spark|this guide]] to configure both. Note that since you are running docker, expect the ''​config.cfg''​ to reside in ''​~/​brewpi-data/​settings/''​ or the folder you specified when ran your container.+==== Go to the BrewPi ​web interface ​and connect ​to the Spark ====
  
 +If you didn't change the default port, you can access the BrewPi web interface at [[http://​raspberrypi.local]].
  
 +Click 'Start script',​ if it isn't already running.
  
-==== Use portainer ​to access ​the command line of the brewpi container ==== +Finally, go to the maintenance panel and fill in the field for connection ​to let the script know where it can find your BrewPi Spark.
-Try to load the portainer web interface: ''​192.168.1.100:​9000''​. +
-This IP address is where your rpi lives on your network and uses port 9000. Adjust accordingly.  +
-It will ask you to set an admin password. Pick a password and set it up. Use it to log in on the next page+
  
-{{:getting-started:​portainer-password-setup.png|}}+If you want to connect to the Spark over Wifi, set the drop-down menu to 'IP address'​ and enter the IP address that is displayed on the LCD of your BrewPi Spark.
  
-On the next page, choose to first option '​Manage the Docker instance where Portainer is running'​ and click the Connect button. ​ 
  
-{{:​getting-started:​portainer-connect.png|}}+==== Updating the BrewPi container ===== 
 +The easiest way to update the container is let portainer ​re-create it. 
 +Browse to the BrewPi container and click '​recreate'​. Leave 'pull latest image' ticked.
  
-When you have logged in, you can see your running containers. In this casethere will be a brewpi and a portainer one. If you click on the published port, this will take you to the web interface. +If you do this, you will lose any changes ​you made inside ​the containerOnly the BrewPi settings and data that are stored outside of the container are kept.
- +
-{{:​getting-started:​portainer-running-containers.png|}}+
  
-If you click on the brewpi ​containeryou can click on '​console'​ on the container ​pageThis will drop you directly ​to the command line of the container if you need it.+You can also stop the container ​and create a new one before ​you delete ​the old container. 
 +Just make sure that each container needs to have a unique name and that running containers cannot use the same port on the host.