Proxmox 6 news

Pas enocre testé mais j’ai lu dans la doc de proxmox 6 qu’il était toujours possible d’utiliser PVE avec 1 seule ip publique en passant par du NAT. Extrait du chapitre 3.3.5 :

auto lo
iface lo inet loopback
auto eno1
#real IP address
iface eno1 inet static
address 198.51.100.5
netmask 255.255.255.0
gateway 198.51.100.1
auto vmbr0
#private sub network
iface vmbr0 inet static
address 10.10.10.1
netmask 255.255.255.0
bridge_ports none
bridge_stp off
bridge_fd 0
post-up echo 1 > /proc/sys/net/ipv4/ip_forward
post-up iptables -t nat -A POSTROUTING -s ’10.10.10.0/24’ -o eno1  --j MASQUERADE
post-down iptables -t nat -D POSTROUTING -s ’10.10.10.0/24’ -o eno1  --j MASQUERADE

12 – Passer au https avec Let’s Encrypt

Maintenant que nous avons plein de vhost, plein de conteneurs, il serait temps de passer sur du https. Facile grâce à nginx :

On installe le nécessaire :

sudo apt update
sudo apt install software-properties-common
sudo add-apt-repository universe
sudo add-apt-repository ppa:certbot/certbot
sudo apt update
sudo apt install python-certbot-nginx

on lance ensuite la commande :

sudo certbot --nginx

Nous aurons 2 choix à faire :

  • Sélectionner le sous-domaine (ou le domaine) pour lequel nous voulons un certificat
  • Choisir si on souhaite rediriger tout le flux http du sous-domaine en https

Personnellement je fais le 2nd choix.

Subtilité pour wordpress : une fois cette manip faite, les css sautent, l’espace d’amin ne fonctionne plus ! Heureusement il existe une parade :

Dès le début du fichier wp-config.php , juste après la balise  » <?php  » il faut rajouter :

$_SERVER['HTTPS'] = 'on';

 

Promox 5 testé

J’ai testé proxmox 5 sur mon kimsufi, et je confirme qu’il ne m’a pas été possible de créer une VM avec le pont réseau comme je le faisais auparavant. Ce « problème » est connu et assumé par proxmox.

Pour réaliser ce test, j’ai du réinstaller le serveur sur lequel se trouve ce blog, du coup il a été inaccessible pendant une bonne partie du Week-end. L’avantage, c’est qu’à la réinstallation j’ai changé 2 ou 3 petites choses qui donneront lieu à des modifications de procédures existantes ainsi que de nouvelles procédures.

  • En premier lieu, j’ai découvert quelques coquilles dans les procédures. Essentiellement des espaces manquants, et des non correspondances de port entre le conteneur et le vhost
  • Dans un second temps j’en ai profité pour tout passer en https avec certificat letsencrypt ce qui donnera lieu à une voir des nouvelles procédures (wordpress par exemple nécessite une procédure particulière).

enjoy.

A venir

A venir petit à petit :

  • D’autres tutoriels docker :
    • Installation d’un serveur de visio-conférence (probablement jitsi meet)
    • Une curiosité dont je n’arrive pas encore à trouver l’utilité mais que je veux tester : un conteneur avec interface graphique et vnc
    • Des outils de monitoring
    • La sécurisation de nos conteneurs avec un certificat let’s encrypt
  • Des tutoriels firewall (iptable ou ufw, ou le 2) :
    • Sécuriser son serveur
    • Savoir réaliser du port-forwarding
  • Des tutoriels sur le raspberry-pi
    • Transformer un raspberry et une webcam en caméra de surveillance
    • Raspberry media-center
  • Des tutoriels synology

Mes 2 raspberry dorment actuellement, je pense donc tester d’autres choses et tout documenter ici.

Comme je l’ai mis en entête, tout ça viendra petit à petit. J’ai déjà d’autres idées dont certaines pourraient poser des problèmes de déontologie (peut-on parler de serveur perso sans parler de seedbox ?).

Wait & see :p

11- Installation serveur OpenVPN

1- On créé le repertoire /home/user/openvpn et on se place dedans

mkdir /home/user/openvpn
cd /home/user/openvpn

2- On initialise le serveur

docker container run --rm -v /home/user/openvpn/data:/etc/openvpn kylemanna/openvpn:latest ovpn_genconfig -u udp://vpn.domaine.com
docker container run --rm -ti -v /home/user/openvpn/data:/etc/openvpn kylemanna/openvpn:latest ovpn_initpki

3- On créé le docker-compose.yml

nano docker-compose.yml

4- On y insère les lignes suivantes

openvpn:
    image: "kylemanna/openvpn:latest"
    container_name: openvpn
    ports:
        - "1194:1194/udp"
    volumes:
        - "/home/user/openvpn/data:/etc/openvpn"
    cap_add:
        - NET_ADMIN
    restart: always

5- On le lance

docker-compose up -d

6- On créé un utilisateur

docker container run --rm -ti -v /home/user/openvpn/data:/etc/openvpn kylemanna/openvpn:latest easyrsa build-client-full LOGIN MOTDEPASSE

En changeant LOGIN et MOTDEPASSE par vos données

7- On récupère le fichier ovpn

docker container run --rm -v /home/user/openvpn/data:/etc/openvpn kylemanna/openvpn:latest ovpn_getclient ilou> USER.ovpn

Il ne restera plus qu’à récupérer le fichier ovpn via filezilla ou autre

10- Installation portainer

Après avoir créé des conteneurs sans fichier de variable, avec fichier de variable, on va en créer un sans docker-compose.yml

1- On installe et lance le conteneur

docker run -d -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock -v /opt/portainer:/data portainer/portainer

2- On créé le ficher de vhost

sudo nano /etc/nginx/sites-available/portainer

3- On y insère les lignes suivantes

server {
    listen                     80;
    server_name                portainer.domaine.com;
    client_max_body_size       200M;
    location / {
             proxy_pass        http://127.0.0.1:9000;
             proxy_redirect    off;
             proxy_set_header  Host               $host;
             proxy_set_header  X-Forwarded-Server $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  http;
}
}

4- On l’active

sudo ln -s /etc/nginx/sites-available/portainer/ /etc/nginx/sites-enabled/portainer

5- On redémarre nginx

sudo systemctl reload nginx.service

Portainer est disponible sur http://portainer.domaine.com

09- Installation wekan

1- On créé un repertoire /home/user/wekan et on se place dedans

mkdir /home/user/wekan
cd /home/user/wekan

2- On créé le docker-compose.yml

nano docker-compose.yml

3- On y colle les lignes suivantes dedans

version: '2'

services:
  wekandb:
    image: mongo:3.2.21
    container_name: wekan-db
    restart: always
    command: mongod --smallfiles --oplogSize 128
    networks:
      - wekan-tier
    expose:
      - 27017
    volumes:
      - wekan-db:/data/db
      - wekan-db-dump:/dump

  wekan:
    image: quay.io/wekan/wekan:latest
    container_name: wekan-app
    restart: always
    networks:
      - wekan-tier
    ports:
      - 807:8080
    environment:
      - MONGO_URL=mongodb://wekandb:27017/wekan
      - ROOT_URL=http://wekan.ilouvatar.net
      - WITH_API=true
    depends_on:
      - wekandb

volumes:
  wekan-db:
    driver: local
  wekan-db-dump:
    driver: local

networks:
  wekan-tier:
    driver: bridge

4- On lance le conteneur

docker-compose up -d

5- On créé le fichier de vhost

sudo nano /etc/nginx/sites-available/wekan

6- On colle dedans les lignes suivantes

server {
    listen                     80;
    server_name                wekan.domaine.com;
    client_max_body_size       200M;
    location / {
             proxy_pass        http://127.0.0.1:807;
             proxy_redirect    off;
             proxy_set_header  Host               $host;
             proxy_set_header  X-Forwarded-Server $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  http;
}
}

7- On l’active

ln -s /etc/nginx/sites-available/wekan /etc/nginx/sites-enabled/wekan

8- On relance nginx

sudo systemctl reload nginx.service

wekan est désormais disponible sur http://wekan.domaine.com

08- Installation owncloud

1- On créé un répertoire /home/user/owncloud et on se place dedans

mkdir /home/user/owncloud
cd /home/user/owncloud

2- On créé un fichier d’environnement

nano .env

3- On y colle les lignes suivantes

OWNCLOUD_VERSION=10.0
OWNCLOUD_DOMAIN=domaine.com
ADMIN_USERNAME=admin
ADMIN_PASSWORD=CHANGEME
HTTP_PORT=802

en changeant le nom de domaine et le mot de passe et optionnellement le nom du compte admin

4- On créé le fichier docker-compose.yml

nano docker-compose.yml

5- On y colle les lignes suivantes

version: '2.1'

volumes:
  files:
    driver: local
  mysql:
    driver: local
  backup:
    driver: local
  redis:
    driver: local

services:
  owncloud:
    image: owncloud/server:${OWNCLOUD_VERSION}
    restart: always
    ports:
      - ${HTTP_PORT}:8080
    depends_on:
      - db
      - redis
    environment:
      - OWNCLOUD_DOMAIN=${OWNCLOUD_DOMAIN}
      - OWNCLOUD_DB_TYPE=mysql
      - OWNCLOUD_DB_NAME=owncloud
      - OWNCLOUD_DB_USERNAME=owncloud
      - OWNCLOUD_DB_PASSWORD=owncloud
      - OWNCLOUD_DB_HOST=db
      - OWNCLOUD_ADMIN_USERNAME=${ADMIN_USERNAME}
      - OWNCLOUD_ADMIN_PASSWORD=${ADMIN_PASSWORD}
      - OWNCLOUD_MYSQL_UTF8MB4=true
      - OWNCLOUD_REDIS_ENABLED=true
      - OWNCLOUD_REDIS_HOST=redis
    healthcheck:
      test: ["CMD", "/usr/bin/healthcheck"]
      interval: 30s
      timeout: 10s
      retries: 5
    volumes:
      - files:/mnt/data

  db:
    image: webhippie/mariadb:latest
    restart: always
    environment:
      - MARIADB_ROOT_PASSWORD=owncloud
      - MARIADB_USERNAME=owncloud
      - MARIADB_PASSWORD=owncloud
      - MARIADB_DATABASE=owncloud
      - MARIADB_MAX_ALLOWED_PACKET=128M
      - MARIADB_INNODB_LOG_FILE_SIZE=64M
    healthcheck:
      test: ["CMD", "/usr/bin/healthcheck"]
      interval: 30s
      timeout: 10s
      retries: 5
    volumes:
      - mysql:/var/lib/mysql
      - backup:/var/lib/backup

  redis:
    image: webhippie/redis:latest
    restart: always
    environment:
      - REDIS_DATABASES=1
    healthcheck:
      test: ["CMD", "/usr/bin/healthcheck"]
      interval: 30s
      timeout: 10s
      retries: 5
    volumes:
      - redis:/var/lib/redis

En modifiant les logins/pass

6- On lance le conteneur

docker-compose up -d

7- On créé le ficher de vhost

sudo nano /etc/nginx/sites-available/owncloud

8- On y colle les lignes suivantes dedans

server {
    listen                     80;
    server_name                cloud.domaine.com;
    client_max_body_size       200M;
    location / {
             proxy_pass        http://127.0.0.1:802;
             proxy_redirect    off;
             proxy_set_header  Host               $host;
             proxy_set_header  X-Forwarded-Server $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  http;
}
}

9- On l’active

sudo ln -s /etc/nginx/sites-available/owncloud /etc/nginx/sites-enabled/owncloud

10- On relance nginx

sudo systemctl reload nginx.service

owncloud est désormais disponible sur http://cloud.domaine.com