You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

100 lines
3.0 KiB

#!/bin/bash
if [[ $EUID -ne 0 ]]; then
echo "Ce script doit être lancé avec les droits root"
exit 1
fi
pwd=$PWD
# Environment variables
echo -e "\033[0;32m Création des variables d'environnement \033[0m"
echo -e "\033[1;33m Nom d'utilisateur de la base de données \033[0m"
read POSTGRES_USER
echo -e "\033[1;33m Mot de passe de la base de données \033[0m"
read POSTGRES_PASSWORD
echo -e "\033[1;33m Nom de la base de données \033[0m"
read POSTGRES_DB
echo -e "\033[1;33m Clé d'encryption des JWTs \033[0m"
read JWT_SECRET
echo -e "\033[1;33m Utilisateur Gmail \033[0m"
read GMAIL_USER
echo -e "\033[1;33m Mot de passe de l'application Gmail \033[0m"
read GMAIL_PASSWORD
echo -e "\033[1;33m Url du site web \033[0m"
read FRONTEND_URL
echo -e "\033[1;33m Client ID de l'application Github OAuth \033[0m"
read GITHUB_ID
echo -e "\033[1;33m Client secret de l'application Github OAuth \033[0m"
read GITHUB_PASSWORD
touch $pwd/backend/.env
echo "
POSTGRES_USER=$POSTGRES_USER
POSTGRES_PASSWORD=$POSTGRES_PASSWORD
POSTGRES_DB=$POSTGRES_DB
POSTGRES_HOST=localhost
BACKEND_PORT=8000
JWT_SECRET=$JWT_SECRET
LOG_FILE=/var/log/freetube/access.log
GMAIL_USER=$GMAIL_USER
GMAIL_PASSWORD=$GMAIL_PASSWORD
FRONTEND_URL=$FRONTEND_URL
GITHUB_ID=$GITHUB_ID
GITHUB_SECRET=$GITHUB_PASSWORD
" > $pwd/backend/.env
# Install dependencies (NodeJS 22/PostgreSQL/Nginx)
echo -e "\033[0;32m Installation des dépendances... \033[0m"
apt install postgresql nginx openssl curl &&
# Install NVM and NodeJS & NPM
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.3/install.sh | bash &&
export NVM_DIR="$([ -z "${XDG_CONFIG_HOME-}" ] && printf %s "${HOME}/.nvm" || printf %s "${XDG_CONFIG_HOME}/nvm")"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
\. "$HOME/.nvm/nvm.sh" &&
nvm install 22 &&
# Install node packages for backend
echo -e "\033[0;32m Installation des paquets NodeJS \033[0m"
cd $pwd/backend && npm install &&
cd $pwd/frontend && npm install &&
echo "Construction du frontend"
npx vite build
cd $pwd
# Create Nginx configuration
echo -e "\033[0;32m Création de la configuration Nginx \033[0m"
mkdir /etc/nginx/ssl/
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/nginx/ssl/nginx-selfsigned.key -out /etc/nginx/ssl/nginx-selfsigned.crt
touch /etc/nginx/conf.d/freetube.conf
cat $pwd/default.conf > /etc/nginx/conf.d/freetube.conf
echo -e "\033[0;32m Copie des fichiers vers /usr/share/nginx/html \033[0m"
rm /usr/share/nginx/html/index.html
mv $pwd/frontend/dist/* /usr/share/nginx/html/
# Create PostgreSQL database
echo -e "\033[0;32m Création de l'utilisateur $POSTGRES_USER \033[0m"
sudo -u postgres psql -c "CREATE USER $POSTGRES_USER WITH PASSWORD '$POSTGRES_PASSWORD';"
sudo -u postgres psql -c "CREATE ROLE $POSTGRES_USER WITH PASSWORD '$POSTGRES_PASSWORD';"
sudo -u postgres psql -c "CREATE DATABASE $POSTGRES_DB OWNER $POSTGRES_USER;"
# Add log file
mkdir /var/log/freetube
touch /var/log/freetube/access.log
systemctl enable nginx
systemctl enable postgresql
systemctl start nginx
systemctl start postgresql