diff --git a/.dockerignore b/.dockerignore index 15108fea5..259a17f5a 100644 --- a/.dockerignore +++ b/.dockerignore @@ -1,4 +1,10 @@ * !Dockerfile !sources/**/* -!config/**/* \ No newline at end of file +!config/**/* +!entrypoint.sh + +sources/var/cache/* +sources/var/logs/* + +!sources/**/.gitkeep \ No newline at end of file diff --git a/.github/workflows/docker-image.yml b/.github/workflows/docker-image.yml index ee4594951..df82396d2 100644 --- a/.github/workflows/docker-image.yml +++ b/.github/workflows/docker-image.yml @@ -14,6 +14,9 @@ jobs: - name: Checkout repository uses: actions/checkout@v4 + - name: Prepare .env file + run: cp ./config/example.env ./config/.env + - name: Generate SSL certificates run: | make gen-key @@ -35,4 +38,4 @@ jobs: push: true tags: | dayzu/prestashop:latest - dayzu/prestashop:1.0.${{ github.run_number }} + dayzu/prestashop:1.0.${{ github.run_number }} \ No newline at end of file diff --git a/Dockerfile b/Dockerfile index cb56b7f52..ccd2daae4 100644 --- a/Dockerfile +++ b/Dockerfile @@ -6,11 +6,17 @@ RUN apt-get update \ && a2enmod ssl \ && rm -rf /var/lib/apt/lists/* -COPY ./sources /var/www/html +COPY --chown=www-data:www-data ./sources /var/www/html +RUN rm -rf /var/www/html/install -COPY ./config/ssl/certs /etc/apache2/ssl -COPY ./config/ssl/000-default.conf /etc/apache2/sites-available/000-default.conf +COPY --chown=www-data:www-data ./config/ssl/certs /etc/apache2/ssl +COPY --chown=www-data:www-data ./config/ssl/000-default.conf /etc/apache2/sites-available/000-default.conf + +COPY ./entrypoint.sh /entrypoint.sh +RUN chmod u+x /entrypoint.sh WORKDIR /var/www/html -CMD ["apache2-foreground"] +USER www-data + +ENTRYPOINT ["/entrypoint.sh"] \ No newline at end of file diff --git a/cluster/deploy.sh b/cluster/deploy.sh new file mode 100644 index 000000000..e6bdfc5d9 --- /dev/null +++ b/cluster/deploy.sh @@ -0,0 +1,67 @@ +#!/bin/bash + +PREFIX="BE_198020" +DB_NAME="BE_198020" +DB_USER="root" +DB_PASS="student" +DB_HOST="admin-mysql_db" +PORT="19802" +COMPOSE_FILE="docker-compose.yml" + +echo "Usuwanie starego stacka: $PREFIX..." +docker stack rm $PREFIX +echo "Czekam 20s na zwolnienie zasobów sieciowych..." +sleep 20 + +echo "Wdrażanie stacka $PREFIX..." +docker stack deploy -c $COMPOSE_FILE $PREFIX --with-registry-auth + +echo "Szukanie kontenera Prestashop..." +PS_CONTAINER="" +for i in {1..60}; do + RUNNING=$(docker service ps ${PREFIX}_prestashop \ + --filter "desired-state=running" \ + --format '{{.CurrentState}}' | grep -c Running) + + if [ "$RUNNING" -gt 0 ]; then + echo "Serwis Prestashop działa!" + break + fi + + echo "Próba $i/60: Serwis jeszcze nie działa..." + sleep 5 + if [ $i -eq 60 ]; then + echo "Serwis nie wystartował w wyznaczonym czasie" + break + fi +done + +echo "Inicjalizacja bazy danych z dump.sql..." + +DB_CONTAINER=$(docker ps -q -f name=admin-mysql_db) + +if [ ! -z "$DB_CONTAINER" ]; then + echo "Usuwanie bazy danych $DB_NAME (jeśli istnieje)..." + docker exec -i $DB_CONTAINER mysql -u$DB_USER -p$DB_PASS -e "DROP DATABASE IF EXISTS \`$DB_NAME\`;" + + echo "Tworzenie bazy danych $DB_NAME" + docker exec -i $DB_CONTAINER mysql -u$DB_USER -p$DB_PASS -e "CREATE DATABASE IF NOT EXISTS \`$DB_NAME\`;" + + echo "Import dump.sql do bazy $DB_NAME..." + docker exec -i $DB_CONTAINER mysql -u$DB_USER -p$DB_PASS $DB_NAME < dump.sql + echo "Baza została zainicjalizowana." + + echo "Aktualizacja adresów URL sklepu w bazie danych..." + docker exec -i $DB_CONTAINER mysql -u$DB_USER -p$DB_PASS $DB_NAME < '.*'/'database_host' => '$DB_SERVER'/g" "$FILE" + sed -i "s/'database_name' => '.*'/'database_name' => '$DB_NAME'/g" "$FILE" + sed -i "s/'database_user' => '.*'/'database_user' => '$DB_USER'/g" "$FILE" + sed -i "s/'database_password' => '.*'/'database_password' => '$DB_PASSWD'/g" "$FILE" + sed -i "s/'database_port' => '.*'/'database_port' => '$DB_PORT'/g" "$FILE" +fi + +HTACCESS_FILE="/var/www/html/.htaccess" +if [ -f "$HTACCESS_FILE" ]; then + echo "Podmiana wszystkich portów na $PUBLISHED_PORT w .htaccess..." + sed -i "s/8443/$PUBLISHED_PORT/g" $HTACCESS_FILE +fi + +exec apache2-foreground \ No newline at end of file