Wiki Hostux.fr - Hébergeur à prix libre

Bienvenue sur le wiki Hostux.fr. Il contient le manuel de survie de l'hébergé ainsi que quelques astuces sur l'utilisation de la plateforme ! À vos souris... Naviguez !

Outils pour utilisateurs

Outils du site


installation

Installation de Hostux sur ton propre serveur

Le code source de la plateforme Hostux.fr est libre, ce qui signifie que tu peux faire tourner la plateforme sur ton propre serveur ! Voici les étapes à suivre :

Étape 1 : Installer Debian

Le processus est assez basique. Télécharge l'image “netinst” à partir du site de Debian (pas besoin d'interface graphique).

Ensuite, suis les instruction d'installation. Configure un utilisateur système personnel (pour moi, c'était simplement louis), configure le reste au mieux.

Ne choisis rien lorsque l'installateur te demande si tu souhaites installer des logiciels pour “serveur web”, “serveur mail”, “bureau” …..

Ensuite, pour plus de confort, installe un serveur SSH pour y exécuter tes commandes à partir de ton ordinateur personnel :

apt-get install openssh-server -y

Étape 2 : Installer les fichiers de la plateforme

  • Installe les paquets suivants :
apt-get install bash-completion openssl git curl php5-cli unzip sudo
  • Télécharge et installe composer :
curl -s https://getcomposer.org/installer | php
mv composer.phar /usr/local/bin/composer
  • Définisse quelques variables de configuration système
HOSTUX_SYSTEM_USERNAME="hostux"
HOSTUX_SYSTEM_PASSWORD="votremotdepasse"
HOSTUX_SYSTEM_PWD_CHIFFRE=$(perl -e 'print crypt($ARGV[0], "password")' $HOSTUX_SYSTEM_PWD) # NE PAS CHANGER CETTE LIGNE
HOSTUX_GROUP_HEBERGES="heberges"
HOSTUX_CONFIGURATION_DIR="/etc/hostux/"
HOSTUX_LOGS_DIR="/var/log/hostux/"
HOSTUX_SHARE_DIR="/usr/share/hostux/"
HOSTUX_BIN_DIR="/usr/bin/hostux/"
HOSTUX_VAR_DIR="/var/hostux/"
NDD="aurora.dev"
  • Crée l'utilisateur de la plateforme
useradd "$HOSTUX_SYSTEM_USERNAME" --password "$HOSTUX_SYSTEM_PWD_CHIFFRE" --shell /bin/bash --base-dir /home --create-home --user-group --comment "Utilisateur système de la plateforme"
  • Crée le groupe d'utilisateurs système pour les hébergés :
groupadd "$HOSTUX_GROUP_HEBERGES"
  • Télécharge et mette en place les fichiers de la plateforme Hostux :
mkdir --parents "$HOSTUX_CONFIGURATION_DIR"
git clone --depth=1 https://bitbucket.org/reind33r/hostux-system-configuration "$HOSTUX_CONFIGURATION_DIR"
 
mkdir --parents "$HOSTUX_BIN_DIR"
git clone --depth=1 https://bitbucket.org/reind33r/hostux-scripts "$HOSTUX_BIN_DIR"
 
mkdir --parents "$HOSTUX_SHARE_DIR"
git clone --depth=1 https://bitbucket.org/reind33r/hostux-panel "${HOSTUX_SHARE_DIR}panel/"
* Mets en place les répertoires des fichiers journaux (logs) :
mkdir --parents "$HOSTUX_LOGS_DIR"
mkdir "$HOSTUX_LOGS_DIR/cron/"
mkdir "$HOSTUX_LOGS_DIR/panel/"
touch "$HOSTUX_LOGS_DIR/panel/error.log"
mkdir "$HOSTUX_LOGS_DIR/php/"
mkdir -p "$HOSTUX_LOGS_DIR/php/mail/"
mkdir "$HOSTUX_LOGS_DIR/phpmyadmin/"
mkdir "$HOSTUX_LOGS_DIR/webftp/"
mkdir "$HOSTUX_LOGS_DIR/webmail/"
mkdir "$HOSTUX_LOGS_DIR/wiki/"
mkdir "$HOSTUX_LOGS_DIR/radicale/"
touch "$HOSTUX_LOGS_DIR/radicale/uwsgi.log"
 
chown -R "$HOSTUX_SYSTEM_USERNAME":"$HOSTUX_SYSTEM_USERNAME" "$HOSTUX_LOGS_DIR"
chown root:"$HOSTUX_GROUP_HEBERGES" "$HOSTUX_LOGS_DIR/php/mail/"
chmod g+r "$HOSTUX_LOGS_DIR/php/mail/"
 
mkdir --parents "$HOSTUX_VAR_DIR"{www,conf,environnements,logs,mails}
  • Crée le groupe d'utilisateurs autorisés à se connecter en SSH, et ajoute l'utilisateur de la plateforme :
groupadd ssh-users
usermod -a -G ssh-users "$HOSTUX_SYSTEM_USERNAME"

Étape 3 : Installer les logiciels de la plateforme

Bind9 (résolution de noms)

apt-get install -y bind9
echo -en "\n\n// Inclusion de la configuration Hostux\ninclude \"${HOSTUX_CONFIGURATION_DIR}bind9/named.conf.local\";" >> /etc/bind/named.conf.local

Nginx (serveur web)

apt-get install -y nginx nginx-extras
 
ln -s "${HOSTUX_CONFIGURATION_DIR}nginx/nginx.conf" /etc/nginx/conf.d/hostux.conf
rm /etc/nginx/sites-enabled/default

Let's Encrypt (autorité de certification SSL)

echo "deb http://httpredir.debian.org/debian jessie-backports main" > /etc/apt/sources.list.d/LetsEncrypt.list
apt-get update
sudo apt-get install certbot -t jessie-backports

Todo: remove renewal (because done by certbot debian package) Todo: letsencrypt → certbot (https://certbot.eff.org/docs/)

Lien symbolique fullchain dans /etc/hostux/ssl/hostux_fullchain.pem

MariaDB (bases de données)

Veuillez choisir un mot de passe fort pour le superutilisateur (root) MariaDB. Veuillez également conserver ce mot de passe.

MARIADB_REPO_FILE="/etc/apt/sources.list.d/MariaDB.list"
apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 0xcbcb082a1bb943db
echo "# MariaDB 10.1 repository list - created 2016-11-03 15:42 UTC" >> "$MARIADB_REPO_FILE"
echo "# http://downloads.mariadb.org/mariadb/repositories/" >> "$MARIADB_REPO_FILE"
echo "deb [arch=amd64,i386] http://fr.mirror.babylon.network/mariadb/repo/10.1/debian jessie main" >> "$MARIADB_REPO_FILE"
echo "deb-src http://fr.mirror.babylon.network/mariadb/repo/10.1/debian jessie main" >> "$MARIADB_REPO_FILE"
 
apt-get update
apt-get install mariadb-server libmariadbclient-dev libssl-dev python3-mysqldb
 
mysql_secure_installation # Répondre "oui" à toutes les questions = meilleure sécurité
 
 
PLATEFORME_SQL_PWD="hostux" # Définir un mot de passe pour l'utilisateur SQL Hostux
QUERY_CREATE_HOSTUX_DATABASE="CREATE DATABASE IF NOT EXISTS \`${HOSTUX_SYSTEM_USERNAME}_panel\`;"
QUERY_CREATE_HOSTUX_USER="GRANT ALL PRIVILEGES ON \`${HOSTUX_SYSTEM_USERNAME}_panel\`.* TO \`${HOSTUX_SYSTEM_USERNAME}_panel\`@localhost IDENTIFIED BY '$PLATEFORME_SQL_PWD';"
mysql -uroot -p"$MYSQL_ROOT_PWD" -e "$QUERY_CREATE_HOSTUX_DATABASE"
mysql -uroot -p"$MYSQL_ROOT_PWD" -e "$QUERY_CREATE_HOSTUX_USER"
 
ln -s "${HOSTUX_CONFIGURATION_DIR}mariadb/root.my.cnf" /root/.my.cnf
ln -s "${HOSTUX_CONFIGURATION_DIR}mariadb/mysqldump.cnf" /etc/mysql/conf.d/mysqldump.cnf

Vous pouvez indifféremment utiliser MySQL.

Memcached (serveur de cache)

apt-get install memcached libmemcached-dev -y

PHP

if [ "$(whoami)" != "root" ]; then
    SUDO=sudo
fi
 
${SUDO} apt-get -y install apt-transport-https lsb-release ca-certificates
${SUDO} wget -O /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg
${SUDO} sh -c 'echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list'
${SUDO} apt-get update
 
 
apt-get install php7.2-cli php7.2-common php7.2-curl php7.2-fpm php7.2-gd php7.2-igbinary php7.2-imagick php7.2-imap php7.2-intl php7.2-json php7.2-mbstring php7.2-memcached php7.2-msgpack php7.2-mysql php7.2-opcache php7.2-readline php7.2-sqlite3 php7.2-xml php7.2-xsl php7.2-zip
echo -en "\n\n; Hostux.fr - Importation de la configuration\ninclude=${HOSTUX_CONFIGURATION_DIR}php5/php-fpm.conf" >> /etc/php5/fpm/php-fpm.conf

Serveur FTP (Pure-FTPD)

apt-get install pure-ftpd-mysql -y
echo no > /etc/pure-ftpd/conf/PAMAuthentication 
echo no > /etc/pure-ftpd/conf/AllowAnonymousFXP 
echo yes > /etc/pure-ftpd/conf/ChrootEveryone 
echo yes > /etc/pure-ftpd/conf/CreateHomeDir 
echo yes > /etc/pure-ftpd/conf/DontResolve
echo 2 > /etc/pure-ftpd/conf/TLS
echo "${HOSTUX_CONFIGURATION_DIR}pure-ftpd/welcome_message.txt" > /etc/pure-ftpd/conf/FortunesFile
echo "62000 62100" > /etc/pure-ftpd/conf/PassivePortRange
echo "$NETWORK_IPV4" > /etc/pure-ftpd/conf/ForcePassiveIP
 
mv /etc/pure-ftpd/db/mysql.conf /etc/pure-ftpd/db/mysql.conf.backup
ln -s "${HOSTUX_CONFIGURATION_DIR}pure-ftpd/mysql.conf" /etc/pure-ftpd/db/mysql.conf
 
cat /etc/letsencrypt/live/$NDD/privkey.pem /etc/letsencrypt/live/$NDD/fullchain.pem > /etc/ssl/private/pure-ftpd.pem
 
PUREFTPD_SQL_PWD=$(generate_password 8)
QUERY_GRANT_PUREFTPD_SELECT="GRANT SELECT ON \`$HOSTUX_SYSTEM_USERNAME\`.* TO \`${HOSTUX_SYSTEM_USERNAME}_pureftpd\`@localhost IDENTIFIED BY '$PUREFTPD_SQL_PWD';"
mysql -uroot -p"$MYSQL_ROOT_PWD" -e "$QUERY_GRANT_PUREFTPD_SELECT"

Dans le fichier */etc/default/pure-ftpd-common*, activer l'option virtualchroot (pour que les hébergés puissent suivre les liens symboliques de leur /home/username/ vers /var/hostux/{www,environnements,logs}/username/)

todo: function generate_password on beginning of install instructions

Installation du serveur mail (Dovecot, Postfix, Spamassassin)

Fail2ban

uWSGI et panel

apt-get install -y python3 python3-pip rubygems ruby-dev libxml2-dev uwsgi uwsgi-emperor uwsgi-plugin-python uwsgi-plugin-python3
gem install sass compass
pip3 install virtualenvwrapper
 
ln -s "$HOSTUX_CONFIGURATION_DIR"uwsgi/hostux.ini /etc/uwsgi/apps-enabled/
ln -s "$HOSTUX_CONFIGURATION_DIR"uwsgi/hostux.ini /etc/uwsgi/apps-enabled/
 
mv /etc/uwsgi-emperor/emperor.ini /etc/uwsgi-emperor/emperor.ini.bak
ln -s "$HOSTUX_CONFIGURATION_DIR"uwsgi/emperor.ini /etc/uwsgi-emperor/emperor.ini
su "$HOSTUX_SYSTEM_USERNAME" <<'EOF'
export WORKON_HOME=~/.python_virtualenvs/
export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3
mkdir --parents "$WORKON_HOME"
source /usr/local/bin/virtualenvwrapper.sh
mkvirtualenv --python=/usr/bin/python3 plateforme_env
workon plateforme_env
pip install -r ${HOSTUX_SHARE_DIR}panel/requirements.txt
cd ${HOSTUX_SHARE_DIR}panel/
python manage.py migrate
python manage.py createsuperuser
EOF
 
echo -en "\n\n# Hostux - python virtualenv\nexport WORKON_HOME=~/.python_virtualenvs/\nexport VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3\nsource /usr/local/bin/virtualenvwrapper.sh\nworkon plateforme_env\nexport PYTHONIOENCODING=utf-8" >> /home/"$HOSTUX_SYSTEM_USERNAME"/.bashrc
 
ln -s "${HOSTUX_CONFIGURATION_DIR}sudoers/hostux" /etc/sudoers.d/hostux

Étape 4 : finalisation de l'installation

  • Interdire l'accès aux fichiers sensibles (configuration & logs Hostux) aux hébergés
chown :heberges {"${HOSTUX_CONFIGURATION_DIR}","${HOSTUX_LOGS_DIR}"}
chmod g-rwx {"${HOSTUX_CONFIGURATION_DIR}","${HOSTUX_LOGS_DIR}"}
  • Limiter le nombre de process lançables par utilisateur dans /etc/security/limits.conf :
@heberges        hard    nproc           70
  • Empêcher les hébergés d'utiliser su :
chown :heberges /bin/su
chmod g-rwx /bin/su
  • Mise en place d'un groupe système pour que les programmes puissent lire les fichiers de configuration utilisateurs
groupadd heberges_conf
adduser bind heberges_conf
  • Configuration de la passerelle PHP5/Panel hébergé
cd "${HOSTUX_SHARE_DIR}panel/panel_web/environnements/"
ln -s php php5
# ln -s php php7 si PHP7 est installé
  • Mets en place les services web annexes dans le répertoire “$HOSTUX_SHARE_DIR”
    • Dokuwiki pour le wiki
    • PHPMyAdmin
    • Page de phpinfo()
    • RainLoop (webmail)
    • webftp (todo : choisir un nouveau logiciel)
  • Mets en place les tâches CRON de la plateforme :
ln -s "$HOSTUX_BIN_DIR"cron/hourly.sh /etc/cron.hourly/hostux
ln -s "$HOSTUX_BIN_DIR"cron/daily.sh /etc/cron.daily/hostux
ln -s "$HOSTUX_BIN_DIR"cron/weekly.sh /etc/cron.weekly/hostux
ln -s "$HOSTUX_BIN_DIR"cron/monthly.sh /etc/cron.monthly/hostux
  • Crée-toi une clé privée/publique RSA, importe la clé publique sur ton compte utilisateur sur le serveur, et reconfigure le serveur SSH :
mv /etc/ssh/sshd_config /etc/ssh/sshd_config.backup
ln -s "$HOSTUX_CONFIGURATION_DIR"ssh/sshd_config /etc/ssh/sshd_config

Petits bonus

  • Activer le Wake-on-LAN sur votre carte réseau, pour pouvoir démarrer votre serveur à distance
  • Installe et configure php7 de la même façon que php5, et fais un ln -s php php7 dans le dossier du panel panel_web/environnements

Étape 3 : Configuration

Certaines étapes ne sont pas (encore) gérées par le script d'installation. Vous devez donc :

  • Configure ton réseau en statique si besoin (/etc/network/interfaces et /etc/resolv.conf)
  • Configurer une partition de sauvegardes à l'emplacement /mnt/backup sur un disque dur physique différent
  • Configurer MonstaFTP, PhpMyAdmin, RainLoop, Dokuwiki, la plateforme
  • Créer un compte sur Esgob pour avoir un DNS secondaire gratuit
    • Attention : votre nom d'utilisateur chez Esgob doit être le même que le nom d'utilisateur système de la plateforme choisi lors de l'installation
    • Vous pouvez choisir un autre fournisseur : dans ce cas, veuillez modifier les fichiers /etc/hostux/bind9/named.conf.local et /usr/local/bin/hostux/panel/zones/conf/bind9_zone.example afin d'ajouter les adresses IP de votre fournisseur
  • Si vous avez configuré une IPv6, dans /usr/local/bin/hostux/panel/zones/zone_new.py remplacer ligne 69 “&masterip=1.2.3.4” par “&masterip=ipv6::0”
  • Exécute la commande pour récupérer les certificats de Let's Encrypt (dans /usr/local/bin/hostux/cron/rsync_backup/rsync_backup.sh) puis décommente la ligne des certificats SSL dans /etc/hostux/nginx/nginx.conf
  • Dans /etc/sudoers décommenter la ligne d'include de /etc/sudoers.d/

To do : ajouter light dans le script ; hostux_rainloop (SQL)

Choses à refaire

  • Reprendre script de 0 dans virtualenv
  • Radicale installation : collections dans backup
installation.txt · Dernière modification: 2018/09/17 21:59 par hostux