Visual Studio Code met Python/Django op Synology (Docker)

Door kraades op zaterdag 25 april 2020 18:37 - Reacties (4)
Categorieën: Django, Docker, Python, Synology, Visual Studio Code, Views: 2.125

In deze blog beschrijf ik hoe je Visual Studio Code met Python/Django kunt installeren op een Synology door gebruik te maken van Docker.

Let op: Docker is alleen beschikbaar op een Synology DS met Intel processor.

De Docker containers maak je aan als root gebruiker.

THIS PLAY AREA IS USED AT YOUR OWN RISK :)

Maak als eerste de docker container aan.

We gebruiken hier de docker image linuxserver/code-server van LinuxServer.io.

Dit kan bijvoorbeeld als volgt waarbij het gebruik van een .env file optioneel is.
(pas voordat je begint de variabelen in .env aan)
root@DS716:~# mkdir code-server
root@DS716:~# cd code-server/
root@DS716:~/code-server# cat .env
# https://docs.docker.com/compose/env-file/

PASSWORD=mypassword
SUDO_PASSWORD=mysudopassword
CODE_SERVER_CONFIG_DIR=/volume1/Share/Docker/code-server/config
root@DS716:~/code-server# mkdir -p /volume1/Share/Docker/code-server/config
root@DS716:~/code-server# cat docker-compose.yml
version: '3.3'
services:
    code-server:
        container_name: code-server
        environment:
            - PGID=100
            - PUID=1024
            - TZ=Europe/Amsterdam
            - PASSWORD=$PASSWORD
            - SUDO_PASSWORD=$SUDO_PASSWORD
        ports:
            - '8000:8000'
            - '8443:8443'
        volumes:
            - '$CODE_SERVER_CONFIG_DIR:/config'
        restart: unless-stopped
        image: linuxserver/code-server
root@DS716:~/code-server#

Poort 8000 voegen we toe voor de Django server.

Maak de docker container aan:
root@DS716:~/code-server# docker-compose up -d
Creating network "code-server_default" with the default driver
Creating code-server ... done
root@DS716:~/code-server#

Hierna is Visual Studio Code beschikbaar op http://192.168.0.111:8443.

In de config directory op de Synology worden de source code en de overige data als Visual Studio Code extensions opgeslagen. Deze gaan dus niet verloren als de container opnieuw wordt aangemaakt.

Ga naar deze link en start een nieuwe Terminal via Ctrl+Shift+` en selecteer eventueel de default shell /bin/bash.

Voer achtereenvolgens uit:
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install python3
sudo apt-get install python3-pip
sudo apt-get install python3-venv

Dit kan ook door de Dockerfile aan te passen en zelf een image te builden. Zodoende is de software onderdeel van de image en blijft dan ook bewaard als je de docker container opnieuw aanmaakt.

Grofweg:
  • Voer uit: git clone https://github.com/linuxserver/docker-code-server.git
  • Pas de Dockerfile aan en voeg python3, python3-pip en python3-venv toe aan de apt-get install
  • Voer uit: docker build -t code-server-python .
  • Maak op basis van de nieuwe image code-server-python een nieuwe container aan
Een alternatief is om dit te doen via de LinuxServer.io customization. Hoe dit precies werkt is misschien iets voor een volgende blog...

Ga in Visual Studio Code naar de Welcome pagina en kies voor Install support for Python.

Om de omgeving te testen maken we een Django website aan.

Maak een virtual environment aan in een Terminal:
python3 -m venv django_venv

Selecteer de virtual enviroment django_venv in Visual Studio Code.

Installeer Django:
pip install Django

Django wordt geïnstalleerd in de virtual environment die zojuist is aangemaakt.

Maak vervolgens een Django project aan:
django-admin startproject django_project

Ga naar de directory django_project en pas de file settings.py aan:
code:
1
ALLOWED_HOSTS = ['192.168.0.111']

In dit geval wordt de Djange server benaderd vanuit IP adres 192.168.0.111. Dit is het IP-adres van de Synology DS.

Kies voor F5 en kies voor Django als Debug Configuration.

Kies voor ${workspaceFolder}/django_project/manage.py voor de locatie van de manage.py file.

Er wordt een launch.json file aangemaakt.

Voeg het argument "0.0.0.0:8000" toe zodat de server vanuit elke locatie kan worden benaderd.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
{
    // Use IntelliSense to learn about possible attributes.
    // Hover to view descriptions of existing attributes.
    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Python: Django",
            "type": "python",
            "request": "launch",
            "program": "${workspaceFolder}/django_project/manage.py",
            "args": [
                "runserver",
                "0.0.0.0:8000"
            ],
            "django": true
        }
    ]
}


Ga vervolgens naar http://192.168.0.111:8000.

Hier zie je als het goed is een pagina met daarin: The install worked successfully! Congratulations!.

Omdat Visual Studio Code uit veiligheidsoverwegingen alleen volledig werkt als er een certificaat wordt gebruikt voeren we de volgende stappen uit op de Synology.

Voeg een Reverse Proxy toe

Ga naar Control Panel, Application Portal, Reverse Proxy, Create.

General
Description: code

Source
Protocol: HTTPS
Hostname: code.xxxxxxxx.synology.me
Port: 443

Destination
Protocol: HTTP
Hostname: localhost
Port: 8443

Custom Header
Create, WebSocket.

Voeg een certificaat toe

Ga naar Control Panel, Security, Certificate.

Add
Add a new certificate, Get a certificate from Let's Encrypt.

Domain name: code.xxxxxxxx.synology.me
Email: admin@example.com
Subject Alternative Name: code.xxxxxxxx.synology.me

Configure
Services: code.xxxxxxxx.synology.me
Certificate: code.xxxxxxxx.synology.me

Waarbij xxxxxxxx gelijk is aan jouw Synology DDNS ID. Je kunt natuurlijk ook je eigenlijk domain name gebruiken.

De gegenereerde Nginx configuratie file ziet er dan als volgt uit:

root@DS716:/etc/nginx/app.d# cat server.ReverseProxy.conf | grep -v -e '^$'
server {
    listen 443 ssl;
    listen [::]:443 ssl;
    server_name code.xxxxxxxx.synology.me;
    ssl_certificate /usr/syno/etc/certificate/ReverseProxy/5ffeea13-2ea9-42ef-9bcf-1a84e7eeda9f/fullchain.pem;
    ssl_certificate_key /usr/syno/etc/certificate/ReverseProxy/5ffeea13-2ea9-42ef-9bcf-1a84e7eeda9f/privkey.pem;
    location / {
        proxy_connect_timeout 60;
        proxy_read_timeout 60;
        proxy_send_timeout 60;
        proxy_intercept_errors off;
        proxy_http_version 1.1;
        proxy_set_header        Upgrade            $http_upgrade;
        proxy_set_header        Connection            $connection_upgrade;
        proxy_set_header        Host            $http_host;
        proxy_set_header        X-Real-IP            $remote_addr;
        proxy_set_header        X-Forwarded-For            $proxy_add_x_forwarded_for;
        proxy_set_header        X-Forwarded-Proto            $scheme;
        proxy_pass http://localhost:8443;
    }
    error_page 403 404 500 502 503 504 @error_page;
    location @error_page {
        root /usr/syno/share/nginx;
        rewrite (.*) /error.html break;
        allow all;
    }
}
root@DS716:/etc/nginx/app.d#

Docker-compose voor het configureren van je docker applicaties

Door kraades op maandag 20 april 2020 11:04 - Reacties (15)
Categorieën: Docker, Synology, Views: 3.869

In deze blog beschrijf ik het gebruik van docker-compose voor het configureren van je docker applicaties.

Compose is a tool for defining and running multi-container Docker applications. With Compose, you use a YAML file to configure your application’s services. Then, with a single command, you create and start all the services from your configuration.

We maken hier misschien een klein beetje misbruik van docker-compose omdat we het hier gebruiken om NZBGet, Sonarr, Radarr, Bazarr en Lidarr te configureren terwijl dit eigenlijk "losstaande" applicaties zijn.

Ik gebruik een Synology DS maar dit zou op elk systeem moeten werken.

Let op: Docker is alleen beschikbaar op een Synology DS met Intel processor.

De Docker containers maak je aan als root gebruiker.

THIS PLAY AREA IS USED AT YOUR OWN RISK :)

Voorheen maakte in de docker containers aan met het docker create commando. Het docker create commando bewaarde ik dan ergens in een document.
code:
1
2
3
4
5
6
7
8
9
docker create \
    --name=nzbget \
    -e PGID=100 -e PUID=1024 \
    -e TZ=Europe/Amsterdam \
    -p 6789:6789 \
    -v /volume1/Share/Docker/nzbget/config:/config \
    -v /volume1/Share/Docker/nzbget/downloads:/downloads \
    --restart unless-stopped \
    linuxserver/nzbget

I.p.v. het docker create commando kun je ook een docker-compose.yml file gebruiken waarin de parameters zijn opgenomen. Docker-compose maakt hier dan gebruik van.

Het is dan niet langer nodig de docker create commando's met de parameters te onthouden. Deze staan namelijk in de docker-compose.yml file.

Dat ziet er dan als volgt uit: (omgezet via https://composerize.com/)
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
version: '3.3'
services:
    'nzbget[':
        container_name: nzbget
        environment:
            - PGID=100
            - PUID=1024
            - TZ=Europe/Amsterdam
        ports:
            - '6789:6789'
        volumes:
            - '/volume1/Share/Docker/nzbget/config:/config'
            - '/volume1/Share/Docker/nzbget/downloads:/downloads'
        restart: unless-stopped
        image: 'linuxserver/nzbget'

Dit kun je voor alle applicaties ("services") in één docker-compose.yml file zetten en dit ziet er dan als volgt uit:
root@DS716:/volume1/Share/Docker# cat docker-compose.yml
version: '3.3'
services:
    nzbget:
        container_name: nzbget
        environment:
            - PGID=100
            - PUID=1024
            - TZ=Europe/Amsterdam
        ports:
            - '6789:6789'
        volumes:
            - '$NZBGET_CONFIG_DIR:/config'
            - '$NZBGET_DOWNLOADS_DIR:/downloads'
        restart: unless-stopped
        image: linuxserver/nzbget

    sonarr:
        container_name: sonarr
        environment:
            - PGID=100
            - PUID=1024
            - TZ=Europe/Amsterdam
        ports:
            - '8989:8989'
        volumes:
            - '$SONARR_CONFIG_DIR:/config'
            - '$SONARR_TV_DIR:/tv'
            - '$SONARR_DOWNLOADS_DIR:/downloads'
        restart: unless-stopped
        image: linuxserver/sonarr

    radarr:
        container_name: radarr
        environment:
            - PGID=100
            - PUID=1024
            - TZ=Europe/Amsterdam
        ports:
            - '7878:7878'
        volumes:
            - '$RADARR_CONFIG_DIR:/config'
            - '$RADARR_MOVIES_DIR:/movies'
            - '$RADARR_DOWNLOADS_DIR:/downloads'
        restart: unless-stopped
        image: linuxserver/radarr

    bazarr:
        container_name: bazarr
        environment:
            - PGID=100
            - PUID=1024
            - TZ=Europe/Amsterdam
        ports:
            - '6767:6767'
        volumes:
            - '$BAZARR_CONFIG_DIR:/config'
            - '$BAZARR_MOVIES_DIR:/movies'
            - '$BAZARR_TV_DIR:/tv'
        restart: unless-stopped
        image: linuxserver/bazarr

    lidarr:
        container_name: lidarr
        environment:
            - PGID=100
            - PUID=1024
            - TZ=Europe/Amsterdam
        ports:
            - '8686:8686'
        volumes:
            - '$LIDARR_CONFIG_DIR:/config'
            - '$LIDARR_MUSIC_DIR:/music'
            - '$LIDARR_DOWNLOADS_DIR:/downloads'
        restart: unless-stopped
        image: linuxserver/lidarr
root@DS716:/volume1/Share/Docker#

De exacte locatie van de volumes heb ik in een .env file gezet die automatisch door docker-compose wordt gebruikt:
root@DS716:/volume1/Share/Docker# cat .env
# https://docs.docker.com/compose/env-file/

# NZBGet directories
NZBGET_CONFIG_DIR=/volume1/Share/Docker/nzbget/config
NZBGET_DOWNLOADS_DIR=/volume1/Share/Docker/nzbget/downloads

# Sonarr directories
SONARR_CONFIG_DIR=/volume1/Share/Docker/sonarr/config
SONARR_TV_DIR=/volume1/Share/Docker/sonarr/tv
SONARR_DOWNLOADS_DIR=/volume1/Share/Docker/sonarr/downloads

# Radarr directories
RADARR_CONFIG_DIR=/volume1/Share/Docker/radarr/config
RADARR_MOVIES_DIR=/volume1/Share/Docker/radarr/movies
RADARR_DOWNLOADS_DIR=/volume1/Share/Docker/radarr/downloads

# Bazarr directories
BAZARR_CONFIG_DIR=/volume1/Share/Docker/bazarr/config
BAZARR_MOVIES_DIR=/volume1/Share/Docker/bazarr/movies
BAZARR_TV_DIR=/volume1/Share/Docker/bazarr/tv

# Lidarr directories
LIDARR_CONFIG_DIR=/volume1/Share/Docker/lidarr/config
LIDARR_MUSIC_DIR=/volume1/Share/Docker/lidarr/music
LIDARR_DOWNLOADS_DIR=/volume1/Share/Docker/lidarr/downloads
root@DS716:/volume1/Share/Docker#


Voor het aanmaken van de directory structuur wordt een apart script gebruikt:
root@DS716:/volume1/Share/Docker# cat makedirs.sh
#!/bin/bash
source .env

MEDIA_MOVIES_DIR=/volume1/Share/Media/Video/Movies
MEDIA_TV_DIR=/volume1/Share/Media/Video/TV
MEDIA_MUSIC_DIR=/volume1/Share/Media/Music

# Media library directories
mkdir -p $MEDIA_MOVIES_DIR
mkdir -p $MEDIA_TV_DIR
mkdir -p $MEDIA_MUSIC_DIR

# NZBGet directories
mkdir -p $NZBGET_CONFIG_DIR
mkdir -p $NZBGET_DOWNLOADS_DIR

# Sonarr directories
mkdir -p $SONARR_CONFIG_DIR
ln -sfn $NZBGET_DOWNLOADS_DIR $SONARR_DOWNLOADS_DIR
ln -sfn $MEDIA_TV_DIR $SONARR_TV_DIR

# Radarr directories
mkdir -p $RADARR_CONFIG_DIR
ln -sfn $NZBGET_DOWNLOADS_DIR $RADARR_DOWNLOADS_DIR
ln -sfn $MEDIA_MOVIES_DIR $RADARR_MOVIES_DIR

# Bazarr directories
mkdir -p $BAZARR_CONFIG_DIR
ln -sfn $RADARR_MOVIES_DIR $BAZARR_MOVIES_DIR
ln -sfn $SONARR_TV_DIR $BAZARR_TV_DIR

# Lidarr directories
mkdir -p $LIDARR_CONFIG_DIR
ln -sfn $NZBGET_DOWNLOADS_DIR $LIDARR_DOWNLOADS_DIR
ln -sfn $MEDIA_MUSIC_DIR $LIDARR_MUSIC_DIR
root@DS716:/volume1/Share/Docker#

Dit script maakt de volgende directory structuur aan:
root@DS716:/volume1/Share/Docker# tree -d -L 1 nzbget bazarr/ radarr/ sonarr/ lidarr/
nzbget
├── config
└── downloads
bazarr/
├── config
├── movies -> /volume1/Share/Docker/radarr/movies
└── tv -> /volume1/Share/Docker/sonarr/tv
radarr/
├── config
├── downloads -> /volume1/Share/Docker/nzbget/downloads
└── movies -> /volume1/Share/Media/Video/Movies
sonarr/
├── config
├── downloads -> /volume1/Share/Docker/nzbget/downloads
└── tv -> /volume1/Share/Media/Video/TV
lidarr/
├── config
├── downloads -> /volume1/Share/Docker/nzbget/downloads
└── music -> /volume1/Share/Media/Music

14 directories
root@DS716:/volume1/Share/Docker#

Hierna kun je met docker-compose de applicaties configureren.

Voor alle applicaties:
root@DS716:/volume1/Share/Docker# docker-compose up -d
Creating sonarr ... done
Creating lidarr ... done
Creating bazarr ... done
Creating radarr ... done
Creating nzbget ... done
root@DS716:/volume1/Share/Docker# docker-compose start
Starting nzbget ... done
Starting sonarr ... done
Starting radarr ... done
Starting bazarr ... done
Starting lidarr ... done
root@DS716:/volume1/Share/Docker# docker-compose stop
Stopping nzbget ... done
Stopping bazarr ... done
Stopping radarr ... done
Stopping lidarr ... done
Stopping sonarr ... done
root@DS716:/volume1/Share/Docker# docker-compose pull
Pulling nzbget ... done
Pulling sonarr ... done
Pulling radarr ... done
Pulling bazarr ... done
Pulling lidarr ... done
root@DS716:/volume1/Share/Docker# docker-compose rm
Going to remove nzbget, bazarr, radarr, lidarr, sonarr
Are you sure? [yN] y
Removing nzbget ... done
Removing bazarr ... done
Removing radarr ... done
Removing lidarr ... done
Removing sonarr ... done
root@DS716:/volume1/Share/Docker#

Of per applicatie:
root@DS716:/volume1/Share/Docker# docker-compose up -d nzbget
Creating nzbget ... done
root@DS716:/volume1/Share/Docker# docker-compose start nzbget
Starting nzbget ... done
root@DS716:/volume1/Share/Docker# docker-compose stop nzbget
Stopping nzbget ... done
root@DS716:/volume1/Share/Docker# docker-compose pull nzbget
Pulling nzbget ... done
root@DS716:/volume1/Share/Docker# docker-compose rm nzbget
Going to remove nzbget
Are you sure? [yN] y
Removing nzbget ... done
root@DS716:/volume1/Share/Docker#

NZBGet, Sonarr, Radarr en Bazarr op Synology (Docker)

Door kraades op vrijdag 3 januari 2020 15:54 - Reacties (22)
Categorieën: Docker, Synology, Views: 5.917

In deze blog beschrijf ik hoe je NZBGet, Sonarr, Radarr en Bazarr kunt installeren op een Synology door gebruik te maken van Docker.

Let op: Docker is alleen beschikbaar op een Synology DS met Intel processor.

De Docker containers maak je aan als root gebruiker.

Update
Zie deze blog post voor het gebruik van docker-compose i.p.v. docker create en deze blog post voor het gebruik van NZBGet via OpenVPN.

THIS PLAY AREA IS USED AT YOUR OWN RISK :)

Voorbereiding

Terminal

Ik voer een aantal commando's via de terminal uit. Hiervoor moet je SSH aanzetten via Control Panel, Terminal & SNMP, Terminal, Enable SSH service en inloggen met een terminal emulator. Op Windows kun je hiervoor bijvoorbeeld PuTTY gebruiken.

Symbolic links

Ik maak gebruik van symbolic links. Het is dan ook handig om "Allow symbolic links within shared folders" aan te zetten via Control Panel, File Services, SMB/AFP/NFS, SMB, Advanced Settings.

Directory structuur voor persistent data

Docker containers slaan geen persistent data op. Om persistent data zoals instellingen op te kunnen slaan kun je gebruik maken van bind mounts. Het gebruik van bind mounts staat hier beschreven.

Ik vind het zelf makkelijk om de directories die bij de bind mounts worden gebruikt als volgt op te zetten:

admin@DS716:/volume1/Share/Docker$ tree -d -L 1 nzbget bazarr/ radarr/ sonarr/
nzbget
├── config
└── downloads
bazarr/
├── config
├── movies -> /volume1/Share/Docker/radarr/movies
└── tv -> /volume1/Share/Docker/sonarr/tv
radarr/
├── config
├── downloads -> /volume1/Share/Docker/nzbget/downloads
└── movies -> /volume1/Share/Media/Video/Movies
sonarr/
├── config
├── downloads -> /volume1/Share/Docker/nzbget/downloads
└── tv -> /volume1/Share/Media/Video/TV

11 directories
admin@DS716:/volume1/Share/Docker$

De persistent data kun je deze manier eenvoudig inzichtelijk krijgen en backuppen.

Toelichting:
  • Eén hoofddirectory /volume1/Share/Docker
  • Per container een subdirectory nzbget, bazarr, radarr en sonarr
  • Per -v optie een subdirectory bijvoorbeeld config en downloads voor nzbget
En:
  • Sonarr en Radarr maken gebruik van NZBGet en verwijzen dus naar de download diretory van NZBGet
  • Bazarr zoekt ondertitels voor Sonarr en Radarr en verwijst dus naar de tv directory van Sonarr en de movies directory van Radarr
Er wordt gebruikt gemaakt van symbolic links:
  • In mijn geval staan movies buiten de Docker persistent data directory structuur in /volume1/Share/Media/Video/Movies; dit is niet verplicht
  • In mijn geval staan tv series buiten de Docker persistent data directory structuur in /volume1/Share/Media/Video/TV; dit is niet verplicht
De naamgeving van de directories zoals bijvoorbeeld de hoofddirectory mag natuurlijk ook anders gekozen worden.

De hierboven genoemde directories en symbolic links kun je als volgt aanmaken:

# Media library directories
mkdir -p /volume1/Share/Media/Video/Movies
mkdir -p /volume1/Share/Media/Video/TV

# NZBGet directories
mkdir -p /volume1/Share/Docker/nzbget/config
mkdir -p /volume1/Share/Docker/nzbget/downloads

# Sonarr directories
mkdir -p /volume1/Share/Docker/sonarr/config
ln -s /volume1/Share/Docker/nzbget/downloads /volume1/Share/Docker/sonarr/downloads
ln -s /volume1/Share/Media/Video/TV /volume1/Share/Docker/sonarr/tv

# Radarr directories
mkdir -p /volume1/Share/Docker/radarr/config
ln -s /volume1/Share/Docker/nzbget/downloads /volume1/Share/Docker/radarr/downloads
ln -s /volume1/Share/Media/Video/Movies /volume1/Share/Docker/radarr/movies

# Bazarr directories
mkdir -p /volume1/Share/Docker/bazarr/config
ln -s /volume1/Share/Docker/radarr/movies /volume1/Share/Docker/bazarr/movies
ln -s /volume1/Share/Docker/sonarr/tv /volume1/Share/Docker/bazarr/tv

Dit ter illustratie. Ik heb expres de directories volledig uitgeschreven en geen variabelen gebruikt. Verder zal de door jou gekozen structuur mogelijk afwijken.

Aanmaken containers

Ik maak gebruik van de images van LinuxServer,io maar als je wilt kun je ook van andere images gebruik maken. Het idee zal ongeveer hetzelfde zijn.

De documentatie van LinuxServer,io is hier te vinden. Hier staat eveneens beschreven waarvoor PUID en PGID worden gebruikt.

PUID en PGID kun je als volgt bepalen:

admin@DS716:~$ id admin
uid=1024(admin) gid=100(users) groups=100(users),101(administrators),25(smmsp)
admin@DS716:~$

Het aanmaken van de containers gaat als volgt:

NZBGet

docker create \
    --name=nzbget \
    -e PGID=100 -e PUID=1024 \
    -e TZ=Europe/Amsterdam \
    -p 6789:6789 \
    -v /volume1/Share/Docker/nzbget/config:/config \
    -v /volume1/Share/Docker/nzbget/downloads:/downloads \
    --restart unless-stopped \
    linuxserver/nzbget

Sonarr

docker create \
    --name=sonarr \
    -e PGID=100 -e PUID=1024 \
    -e TZ=Europe/Amsterdam \
    -p 8989:8989 \
    -v /volume1/Share/Docker/sonarr/config:/config \
    -v /volume1/Share/Docker/sonarr/tv:/tv \
    -v /volume1/Share/Docker/sonarr/downloads:/downloads \
    --restart unless-stopped \
    linuxserver/sonarr

Radarr

docker create \
    --name=radarr \
    -e PGID=100 -e PUID=1024 \
    -e TZ=Europe/Amsterdam \
    -p 7878:7878 \
    -v /volume1/Share/Docker/radarr/config:/config \
    -v /volume1/Share/Docker/radarr/movies:/movies \
    -v /volume1/Share/Docker/radarr/downloads:/downloads \
    --restart unless-stopped \
    linuxserver/radarr

Bazarr

docker create \
    --name=bazarr \
    -e PGID=100 -e PUID=1024 \
    -e TZ=Europe/Amsterdam \
    -p 6767:6767 \
    -v /volume1/Share/Docker/bazarr/config:/config \
    -v /volume1/Share/Docker/bazarr/movies:/movies \
    -v /volume1/Share/Docker/bazarr/tv:/tv \
    --restart unless-stopped \
    linuxserver/bazarr

Configuratie

Let op: Overal waar ******** staat moet je zelf je eigen instellingen gebruiken.

Hierna zijn de applicaties als volgt te benaderen:

NZBGet: http://<synology ip adres>:6789
Sonarr: http://<synology ip adres>:8989
Radarr: http://<synology ip adres>:7878
Bazarr: http://<synology ip adres>:6767

Omdat ik reverse proxies heb aangemaakt kan ik de applicaties ook als volgt benaderen:

NZBGet: http://nzbget.********.synology.me:80
Sonarr: http://sonarr.********.synology.me:80
Radarr: http://radarr.********.synology.me:80
Bazarr: http://bazarr.********.synology.me:80

Ik gebruik hieronder de reverse proxies. Pas de adressen en poorten aan als je dit niet doet.

NZBGet

Als je NZBGet voor het eerst start dan moet je de volgende default username en password ingeven.

Username: nzbget
Password: tegbzn6789

Pas de volgende instellingen aan:

Settings, Paths

Als je gebruik wilt maken van de extension Email.py dan kun je het pad als volgt aanpassen zonder iets te hoeven kopieren.

ScriptDir=/app/nzbget/share/nzbget/scripts

Settings, News Server

Server1.Name=********
Server1.Host=news.********.nl
Server1.Port=563
Server1.Username=********
Server1.Password=********

Settings, Security

Omdat mijn reverse proxies al achter een username/password zitten, heb ik username/password van NZBGet uitgezet.

ControlUsername=
ControlPassword=

Settings, Extention Scripts

Vul dit in als je graag via Email op de hoogte wil worden gehouden van downloads.

Extensions=EMail.py

Settings, Email

EMail.py:SendMail=Always
EMail.py:From="NZBGet" <********@gmail.com>
EMail.py:To=********@gmail.com
EMail.py:Server=smtp.gmail.com
EMail.py:Port=587
EMail.py:Encryption=yes
EMail.py:Username=********
EMail.py:Password=********
EMail.py:Statistics=yes
EMail.py:FileList=yes
EMail.py:BrokenLog=yes
EMail.py:NzbLog=OnFailure

Sonarr

Pas de volgende instellingen aan:

Settings, Media Management

Episode Naming

Rename Episodes: Yes
Include Series Title: Yes
Include Episode Title: No
Include Quality: Yes
Replace Spaces: Yes
Separator: Period
Numbering Style: S01E05
Season Folder Format: Season {season:00}
Multi-Episode Style: Extend
Single Episode Example: The.Series.Title.(2010).S01E01.HDTV-720p
Multi-Episode Example: The.Series.Title.(2010).S01E01-02-03.HDTV-720p
Daily-Episode Example: The.Series.Title.(2010).2013-10-30.HDTV-720p
Anime Episode Example: The.Series.Title.(2010).S01E01.HDTV-720p
Anime Multi-Episode Example: The.Series.Title.(2010).S01E01-02-03.HDTV-720p
Series Folder Example: The Series Title (2010)
Season Folder Example: Season 01

Importing

Import Extra Files: No

File Management

Ignore Deleted Episodes: No
Recycle Bin:

Settings, Profiles

Alles default.

Settings, Quality

Alles default.

Settings, Indexers

Indexers

Name: ********
Enable RSS Sync: Yes
Enable Search: Yes
URL: http://********
API Key: ********
Categories: 5030, 5040
Anime Categories:

Options

Minimum Age: 0
Retention: 0
Maximum Size: 0

Settings, Download Client

Download Clients

Name: NZBGet
Enable: Yes
Host: nzbget.********.synology.me
Port: 80
Username:
Password:
Category: Series
Recent Priority: Normal
Older Priority: Normal
Add Paused: No
Use SSL: No

Completed Download Handling

Enable: Yes
Remove: No

Failed Download Handling

Redownload: Yes
Remove: Yes

Settings, Connect

Alles default.

Settings, Metadata

Alles default.

Settings, General

Alles default.

Settings, UI

Alles default.

Radarr

Pas de volgende instellingen aan:

Settings, Media Management

Alles default.

Settings, Profiles

Alles default.

Settings, Quality

Alles default.

Settings, Custom Formats

Alles default.

Settings, Indexers

Indexers

Name: ********
Enable RSS Sync: Yes
Enable Search: Yes
URL: http://********
API Key: ********

Options

Minimum Age: 0
Retention: 0
Prefer Special Indexer Flags: No

Availability Options

Availability Delay: 0

Settings, Download Client

Download Clients

Name: NZBGet
Enable: Yes
Host: nzbget.********.synology.me
Port: 80
Username:
Password:
Category: Movies
Recent Priority: Normal
Older Priority: Normal
Add Paused: No
Use SSL: No

Settings, Lists

Alles default.

Settings, Connect

Alles default.

Settings, Metadata

Alles default.

Settings, General

Alles default.

Settings, UI

Alles default.

Bazarr

Als je Bazarr voor het eerst start moet je een aantal instellingen opgeven.

General

Alles default.

Kies hierna Next.

Subtitles

Kies minimaal één subtitle provider bijvoorbeeld OpenSubtitles (voor OpenSubtitles moet je een account aanmaken; deze is gratis met beperkingen).

Ik gebruik zelf de volgende instellingen:

Subtitles languages

Single Language: Off
Enabled Languages: Dutch English

Series Default Settings

Default Enabled: On
Languages: English
Hearing-Impaired: Off
Forced: False

Movie Default Settings

Default Enabled: On
Languages: English
Hearing-Impaired: Off
Forced: False

Kies hierna Next.

Sonarr

Use Sonarr: On

Hostname or IP Address: sonarr.********.synology.me
Listening Port: 80
Base URL:
SSL Enabled: Off

API Key: ********
Download Only Monitored: Off

De API Key kun je vinden in Sonarr onder Settings, General, Security, API Key.

Radarr

Use Radarr: On

Hostname or IP Address: radarr.********.synology.me
Listening Port: 80
Base URL:
SSL Enabled: Off

API Key: ********
Download Only Monitored: Off

De API Key kun je vinden in Radarr onder Settings, General, Security, API Key.

NZBGet via OpenVPN op Synology (Docker)

Door kraades op vrijdag 29 november 2019 14:26 - Reacties (6)
Categorieën: Docker, Synology, Views: 3.595

In deze blog beschrijf ik hoe je NZBGet gebruik kunt laten maken van een VPN verbinding.

Er wordt gebruik gemaakt van Docker op een Synology DS716+ en PIA VPN.

Let op: Docker is alleen beschikbaar op een Synology DS met Intel processor.

De Docker containers maak je aan als root gebruiker.

THIS PLAY AREA IS USED AT YOUR OWN RISK :)

Stap 1

Maak de OpenVPN container:

docker create \
    --cap-add=NET_ADMIN \
    --device /dev/net/tun \
    --dns=8.8.8.8 \
    --name openvpn-client \
    -e TZ=Europe/Amsterdam \
    -v /volume1/Share/Docker/openvpn-client:/vpn \
    dperson/openvpn-client

Met de -v optie zorg je ervoor dat je de directory /vpn in de container op de host via /volume1/Share/Docker/openvpn-client kunt benaderen. Ook blijven de directory en inhoud bewaard bij het opnieuw aanmaken van de container. Dit mag uiteraard ook een andere directory zijn dan /volume1/Share/Docker/openvpn-client.

Download https://www.privateinternetaccess.com/openvpn/openvpn.zip.

Kies de ovpn file die je wilt gebruiken. Hernoem bijvoorbeeld Switzerland.ovpn in vpn.conf en plaats deze in /volume1/Share/Docker/openvpn-client. Je kunt hier ook een andere opvn file kiezen.

Hernoem de file ca.rsa.2048.crt in vpn-ca.cr en plaats deze in dezelfde directory.

Maak een credentials.conf file met PIA username en password:

admin@DS716:/volume1/Share/Docker/openvpn-client$ cat credentials.conf
p4199999
secretpassword  
admin@DS716:/volume1/Share/Docker/openvpn-client$

Vervang "p4199999" en "secretpassword" door je eigen username en password.

Hierna staan de volgende files in /volume1/Share/Docker/openvpn-client:

admin@DS716:/volume1/Share/Docker/openvpn-client$ ls
credentials.conf  vpn-ca.crt  vpn.conf
admin@DS716:/volume1/Share/Docker/openvpn-client$

Stap 2

Maak de NZBGet container en laat deze gebruik maken van de openvpn-client container:

docker create \
    --name nzbget \
    --net=container:openvpn-client \
    -e PGID=100 -e PUID=1024 \
    -e TZ=Europe/Amsterdam \
    -v /volume1/Share/Docker/nzbget/config:/config \
    -v /volume1/Share/Docker/nzbget/downloads:/downloads \
    --restart unless-stopped \
    linuxserver/nzbget

Ook hier geldt dat je de directires bij de -v optie zelf kunt kiezen.

Stap 3

Maak een Nginx container die gelinkt is aan de OpenVPN container:

docker create \
    --name nzbget-proxy \
    --link=openvpn-client:nzbget \
    -p 6789:6789 \
    -v /volume1/Share/Docker/nzbget-proxy/nginx.conf:/etc/nginx/nginx.conf:ro \
    nginx

Maak een nginx.conf file:

admin@DS716:/volume1/Share/Docker/nzbget-proxy$ cat nginx.conf
events {
  worker_connections 1024;
}

http {
  server {
    listen 6789;
    location / {
      proxy_pass http://nzbget:6789;
    }
  }
}
admin@DS716:/volume1/Share/Docker/nzbget-proxy$

Stap 4

Herstart de omgeving: (als root)

root@DS716:~$ cat resetnzbget.sh
docker stop nzbget
sleep 1
docker stop nzbget-proxy
sleep 1
docker stop openvpn-client
sleep 5
docker start openvpn-client
sleep 1
docker start nzbget-proxy
sleep 1
docker start nzbget
root@DS716:~$

Cross compiling voor Synology - Part II

Door kraades op donderdag 3 september 2015 14:44 - Reacties (7)
Categorie: Synology, Views: 6.595

In de vorige post Simon's Blog: Cross compiling voor Synology hebben we gezien hoe we een C programma kunnen cross compileren voor Synology.

Hierin staat ook aangegeven hoe je de Synology toolchain kunt installeren. Ik ga ervan uit dat je deze al hebt geinstalleerd. Net als Ubuntu zelf... :)

In deze post gaan we een programma cross compilen met behulp van het configure en make commando.

De eerste stap is om de source code te downloaden. In dit voorbeeld compileren we sysstat van Sebastien Godard.

Sysstat bevat o.a. iostat en mpstat.

iostat - Report Central Processing Unit (CPU) statistics and input/output statistics for devices and partitions.
code:
1
2
3
4
5
6
Usage: ./iostat [ options ] [ <interval> [ <count> ] ]
Options are:
[ -c ] [ -d ] [ -h ] [ -k | -m ] [ -N ] [ -t ] [ -V ] [ -x ] [ -y ] [ -z ]
[ -j { ID | LABEL | PATH | UUID | ... } ]
[ [ -T ] -g <group_name> ] [ -p [ <device> [,...] | ALL ] ]
[ <device> [...] | ALL ]

mpstat - Report processors related statistics
code:
1
2
3
4
Usage: ./mpstat [ options ] [ <interval> [ <count> ] ]
Options are:
[ -A ] [ -u ] [ -V ] [ -I { SUM | CPU | SCPU | ALL } ]
[ -P { <cpu> [,...] | ON | ALL } ]

Start voor het gemak een root sessie.
sudo su -

Download de source code en pak deze uit.
wget http://perso.orange.fr/sebastien.godard/sysstat-11.0.6.tar.xz
tar xf sysstat-11.0.6.tar.xz

Vervolgens gaan we configure en make uitvoeren.

In de DSM Developer Guide staan een aantal voorbeelden van instellingen voor verschillende Synology modellen voor CC, LD, RANLIB, CFLAGS, LDFLAGS, host, target, build etc.

Voor de DS715 die ik heb is dit:
env CC=/usr/local/arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc \
LD=/usr/local/arm-linux-gnueabihf/bin/arm-linux-gnueabihf-ld \
RANLIB=/usr/local/arm-linux-gnueabihf/bin/arm-linux-gnueabihf-ranlib \
CFLAGS="-I/usr/local/arm-linux-gnueabihf/arm-linux-gnueabihf/sysroot/usr/include -DSYNO_ANNAPURNA_ALPINE -O2 -mfloat-abi=hard -mtune=cortex-a15 -mfpu=neon-vfpv4 -mthumb -I/usr/syno/include -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -g -DSYNO_PLATFORM=ALPINE" \
LDFLAGS="-L/usr/local/arm-linux-gnueabihf/arm-linux-gnueabihf/sysroot/lib -L/usr/syno/lib" \
./configure --host=arm-linux-gnueabihf --target=arm-linux-gnueabihf --build=i686-pc-linux --prefix=/usr/local

Dit betekent dat het configure commando wordt uitgevoerd met de juiste settings voor CC etc.

Ga naar de source directory en voer het bovenstaande commando uit.
cd sysstat-11.0.6
env CC=/usr/local/arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc \
LD=/usr/local/arm-linux-gnueabihf/bin/arm-linux-gnueabihf-ld \
RANLIB=/usr/local/arm-linux-gnueabihf/bin/arm-linux-gnueabihf-ranlib \
CFLAGS="-I/usr/local/arm-linux-gnueabihf/arm-linux-gnueabihf/sysroot/usr/include -DSYNO_ANNAPURNA_ALPINE -O2 -mfloat-abi=hard -mtune=cortex-a15 -mfpu=neon-vfpv4 -mthumb -I/usr/syno/include -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -g -DSYNO_PLATFORM=ALPINE" \
LDFLAGS="-L/usr/local/arm-linux-gnueabihf/arm-linux-gnueabihf/sysroot/lib -L/usr/syno/lib" \
./configure --host=arm-linux-gnueabihf --target=arm-linux-gnueabihf --build=i686-pc-linux --prefix=/usr/local

Voer dan make uit zodat de programma's worden gecompileerd.
make

Een make install kun je beter niet uitvoeren omdat de binaries niet compatible zijn met je Linux platform (hier: Ubuntu) en alleen draaien op de betreffende Synology.

Kopieer de binaries iostat en mpstat naar de Synology en kijk of ze werken.
DS715> ./iostat
Linux 3.2.40 (DS715)    09/03/2015      _armv7l_        (4 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.23    0.10    0.30    1.38    0.00   97.99

Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
sda               2.91       809.03       218.10  962115216  259363756
sdb               2.76       733.01       218.10  871700275  259363756
mtdblock0         0.00         0.00         0.00         15          0
mtdblock1         0.00         0.00         0.00         15          0
mtdblock2         0.00         0.00         0.00         15          0
mtdblock3         0.00         0.00         0.00         15          0
mtdblock4         0.00         0.00         0.00         15          0
mtdblock5         0.00         0.00         0.00         15          0
md0               0.12         1.15         0.22    1362306     262760
md1               0.00         0.00         0.00       2160         32
sdq               0.00         0.02         0.03      23485      31300
sdr              11.61         0.70      1364.81     834969 1623050143
md2               6.68      1540.88       217.81 1832436940  259022736
dm-0              0.00         0.00         0.00       2127          0
dm-1              6.68      1540.88       217.81 1832430957  259022736

DS715> ./mpstat -P ALL
Linux 3.2.40 (DS715)    09/03/2015      _armv7l_        (4 CPU)

02:33:48 PM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
02:33:48 PM  all    0.23    0.10    0.25    1.38    0.00    0.05    0.00    0.00    0.00   97.99
02:33:48 PM    0    0.24    0.36    0.49    2.47    0.00    0.08    0.00    0.00    0.00   96.36
02:33:48 PM    1    0.26    0.01    0.20    1.12    0.00    0.04    0.00    0.00    0.00   98.36
02:33:48 PM    2    0.21    0.01    0.17    0.98    0.00    0.03    0.00    0.00    0.00   98.59
02:33:48 PM    3    0.21    0.01    0.16    0.95    0.00    0.03    0.00    0.00    0.00   98.63
DS715>

In de volgende post gaan we kijken hoe de Synology Package Toolkit werkt.