Starting Point: https://docs.vultr.com/how-to-host-a-joplin-server-with-docker-on-ubuntu
Script wright up https://raspberrytips.com/docker-on-raspberry-pi/
curl -sSL https://get.docker.com | sh
Add new user
adduser [username]
adduser [username] sudo
addeser [username] docker
Login as new user
sudo passwd -l root
sudo mkdir /opt/joplin
cd /opt/joplin/
sudo nano joplin-docker-compose.yml
**This Juplin setup will also use docker for nginx proxy **
The values 5434 and 8080 are examples. You can change these if required.
Replace http://192.168.0.5:80 with your ip address.
Replace the values for POSTGRES_PASSWORD, POSTGRES_DATABASE, and POSTGRES_USER with your preferred values.
version: '3'
services:
  db:
    image: postgres:13
    volumes:
      - ./data/postgres:/var/lib/postgresql/data
    ports:
      - "5432:5432"
    restart: always
    environment:
      - POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
      - POSTGRES_USER=${POSTGRES_USER}
      - POSTGRES_DB=${POSTGRES_DB}
  app:
    image: joplin/server:latest
    container_name: joplin-server
    depends_on:
      - db
    ports:
      - "8080:8080"
    restart: always
    environment:
      - APP_PORT=8080
      - APP_BASE_URL=${APP_BASE_URL}
      - DB_CLIENT=pg
      - POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
      - POSTGRES_DATABASE=${POSTGRES_DB}
      - POSTGRES_USER=${POSTGRES_USER}
      - POSTGRES_PORT=5432
      - POSTGRES_HOST=db
  nginx:
    image: nginx:latest
    container_name: nginx-proxy
    ports:
      - "80:80"
    volumes:
      - ./nginx/joplin-server.conf:/etc/nginx/conf.d/joplin-server.conf
      - ./nginx/log:/var/log/nginx
    depends_on:
      - app
    restart: always
version: '3'
services:
  db:
    image: postgres:13
    volumes:
      - ./data/postgres:/var/lib/postgresql/data
    ports:
      - "5432:5432"
    restart: always
    environment:
      - POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
      - POSTGRES_USER=${POSTGRES_USER}
      - POSTGRES_DB=${POSTGRES_DB}
  app:
    image: joplin/server:latest
    container_name: joplin-server
    depends_on:
      - db
    ports:
      - "8080:8080"
    restart: always
    environment:
      - APP_PORT=8080
      - APP_BASE_URL=${APP_BASE_URL}
      - DB_CLIENT=pg
      - POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
      - POSTGRES_DATABASE=${POSTGRES_DB}
      - POSTGRES_USER=${POSTGRES_USER}
      - POSTGRES_PORT=5432
      - POSTGRES_HOST=db
  nginx:
    image: nginx:latest
    container_name: nginx-proxy
    ports:
      - "80:80"
    volumes:
      - ./nginx/joplin-server.conf:/etc/nginx/conf.d/joplin-server.conf
      - ./nginx/log:/var/log/nginx
    depends_on:
      - app
    restart: always
sudo mkdir -p ./nginx/log
sudo mkdir -p ./nginx/conf.d
sudo nano ./nginx/joplin-server.conf
server {
    listen 80;
    listen [::]:80;
    server_name 192.168.0.#;  # Replace with the IP address of your Docker host
    error_log /var/log/nginx/joplin-server.error;
    location / {
        proxy_pass http://192.168.0.#:8080;  # This remains the same (proxying to Joplin container)
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}server {
    listen 80;
    listen [::]:80;
    server_name 192.168.0.#;  # Replace with the IP address of your Docker host
    error_log /var/log/nginx/joplin-server.error;
    location / {
        proxy_pass http://192.168.0.#:8080;  # This remains the same (proxying to Joplin container)
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}sudo nano .env
POSTGRES_PASSWORD=Your-Password-here POSTGRES_USER=joplin-user POSTGRES_DB=joplindb APP_BASE_URL=http://192.168.0.#:80
POSTGRES_PASSWORD=Your-Password-here
POSTGRES_USER=joplin-user
POSTGRES_DB=joplindb
APP_BASE_URL=http://192.168.0.#:80
.env Filesudo chmod 600 .env
sudo chown ve:ve .env # Or the specific user that needs access
sudo docker compose --env-file .env -f joplin-docker-compose.yml up -d
Log in to the Joplin server with the following default email and password.
admin@localhostadmin