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 20:18]
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 57: 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 90: 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 127: 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>​
Line 141: Line 137:
 {{:​getting-started:​portainer-running-containers.png|}} {{:​getting-started:​portainer-running-containers.png|}}
  
-From this page, you can create, delete or recreate containers. You can also click on '​console'​ to access go to the command line inside the container.+From this page, you can create, delete or recreate containers. You can also click on '​console'​ to run commands ​inside the container.
  
-As a final step, click on '​endpoints'​ in the left menu. Next, click on the only endpointwhich is called '​primary'​ or '​local'​. In the public IP field, enter the IP address ​in the address bar of your browers, or raspberrypi.local.+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. 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 ==== ==== Deploy the BrewPi container ====
-Finally, ​we will deploy a BrewPi container. This container will run the BrewPi web interface and the BrewPi Python script that communicates with the BrewPi Spark.+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. 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. 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 trouwble, omit -d to see where it errors.+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 container exposes 2 ports, port 80 and port 81.
-The only difference is that port 81 asks for a username and password. ​So if you want to forward a port on your router, so you can access it from outside of your home network, forward 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. 
  
 <​code>​ <​code>​
-docker run -d --name brewpi -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+docker pull brewpi/​brewpi-raspbian 
 +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
 </​code>​ </​code>​
  
Line 167: 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 different 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 81:​81</​code> ​                                                        | Map port 81 of the container to port 81 of the host. <br> If port 80 is in use, use a different port, for example 8001:​81.  ​|+| <​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 and time 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 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 give the container access to hardware devices. ​The easiest way to do this is to pass the '--privileged' ​flag.+=== 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.
  
 +If you run the command inside your container instead of on the host, the command should be:
 <​code>​ <​code>​
-docker run -d --name brewpi -p 80:80 -p 81:81 --privileged -v ~/brewpi-data:/data -v /etc/​timezone:/​etc/​timezone -v /​etc/​localtime:/​etc/​localtime --restart always ​brewpi/​brewpi-raspbian+sudo htpasswd ​-bc /data/settings/brewpi.htpasswd username password
 </​code>​ </​code>​
  
-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.+=== 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>​ 
 +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>​
  
 +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>​
  
-If you want to connect to the BrewPi Spark via WiFi, no extra docker parameters are needed. +==== Go to the BrewPi web interface ​and connect to the Spark ====
- +
- +
-==== Go to the BrewPi web interface ====+
  
 If you didn't change the default port, you can access the BrewPi web interface at [[http://​raspberrypi.local]]. 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.
  
 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. 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.
-The default is Serial and '​auto'​. ​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.+ 
 +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
 + 
 + 
 +==== 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. 
 + 
 +If you do this, you will lose any changes you made inside the container. Only the BrewPi settings and data that are stored outside of the container are kept. 
 + 
 +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.