Install Docker and deploy the first service
Install Docker and deploy the first service
To install Docker I followed this guide (archived page).
It took some time (5-10 minutes) and the CPU went up to 50% roughly.
Instead of manually creating a non-root user as explained in the article I executed this command that was suggested at the end of previous install: dockerd-rootless-setuptool.sh install (the first time failed and I had to install the missing package).
At the end of it, I had to add the export export DOCKER_HOST=unix:///run/user/1000/docker.sock to the .bashrc.
To double-check that everything was correctly installed, I executed docker info and docker run hello-world.
If you see something like the below it means that everything is working:
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
7050e35b49f5: Pull complete
Digest: sha256:aa0cc8055b82dc2509bed2e19b275c8f463506616377219d9642221ab53cf9fe
Status: Downloaded newer image for hello-world:latest
Hello from Docker!
This message shows that your installation appears to be working correctly.
Now I want to install also docker-compose and I ran (from this article):
sudo apt-get install libffi-dev libssl-dev
sudo apt install python3-dev
sudo apt-get install -y python3 python3-pip
sudo pip3 install docker-compose
And now everything is set up!
Before installing anything else, I knew that netdata supports by default and without configuration the monitoring of Docker applications. If netdata was started before Docker was installed, only a restart is needed: sudo service netdata restart.
Now I want to install my RSS reader, miniflux. It’s an amazing tool that I now host on my DigitalOcean droplet. I want to dump its DB and start a new instance of it in my Raspberry with the current content.
I first tried to dump the DB using a tool with a UI since I had some problems to ssh my droplet. I tried pgadmin and pgweb but both attempts failed.
I then used this strategy, successfully, to get a dump of the DB to my laptop:
- start a shell in the postgres container:
docker exec -it DOCKER_ID bash - run the dump command:
pg_dump -U miniflux -d miniflux --column-inserts > 2023-01-25.sql - moved the file into the folder that is attached to the volume:
mv 2023-01-25.sql /var/lib/postgres/data - back to the host (droplet) and cd into the folder where docker stores volumes:
cd /var/lib/docker/volumes - ls to see all the folder and cd into the one related to the right container
- since I could not ssh from my laptop (I was doing everything from the console in the browser) I could not copy my file over and I had to use a 3 party service. I simply uploaded the sql file to file.io:
curl -F [email protected] https://file.io - previous curl returns a link that I could use from my laptop to download the dump. After the download the file is deleted from the server (I hope so :)
Now that I have a working dump on my laptop, I need to restore it in the Raspberry:
- copy the dump into the Raspberry:
scp 2023-01-24.sql [email protected]:/home/alcaprar - start a new postgres docker DB with a persistent volume
- move the file into the folder used as a persistent volume
- start a shell in the postgres container
- create a new database:
psql -U postgres. Thencreate database miniflux;and exit\q - restore the DB
psql -U postgres -d miniflux < 2023-01-25.sql
By now the DB should be restored and it’s only a matter of starting the miniflux too. This is the current docker-compose:
version: '3.4'
services:
miniflux:
image: miniflux/miniflux:2.0.36
ports:
- "8080:8080"
depends_on:
- db
environment:
- DATABASE_URL=postgres://postgres:postgres@db/miniflux?sslmode=disable
db:
image: postgres:15
environment:
- POSTGRES_PASSWORD=postgres
volumes:
- ./data/postgres:/var/lib/postgresql/data
healthcheck:
test: ["CMD", "pg_isready", "-U", "postgres"]
interval: 10s
start_period: 30s
After a docker-compose up -d miniflux should be accessible at port 8080 with all the previous content!.
At this point I want to access it from the outside and use Cloudflare tunnels like I did for netdata.
To add a new service to Cloudflare tunnels:
- stop cloudflared service:
sudo service cloudflared stop - uninstall the service:
sudo cloudflared service uninstall - remove the config from
/etc/cloudflared/config.yml:sudo rm /etc/cloudflared/config.yml - add the new service to the
.cloudflared/config.yml - add the new dns route:
cloudflared tunnel route dns pi4 rss.caprar.xyz - reinstall the service:
sudo cloudflared --config ~/.cloudflared/config.yml service install