diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json new file mode 100644 index 00000000..4fc90a3a --- /dev/null +++ b/.devcontainer/devcontainer.json @@ -0,0 +1,27 @@ +{ + "name": "Passman Dev Container", + "dockerFile": "../Dockerfile", + "context": "..", + "overrideCommand": false, + "build": { + "target": "dev" + }, + "appPort": ["3001:3001", "9001:80", "9002:443"], + "customizations": { + "vscodium": { + "extensions": [ + "devsense.phptools-vscode", + "devsense.composer-php-vscode", + "gydunhn.javascript-essentials" + ], + "settings": { + "terminal.integrated.shell.linux": "/bin/bash" + } + } + }, + "containerUser": "root", + "remoteUser": "www-data", + "workspaceFolder": "/var/www/passman", + "workspaceMount": "source=${localWorkspaceFolder},target=/var/www/passman,type=bind,consistency=cache", + "runArgs": ["--log-opt", "max-size=10M", "--log-opt", "max-file=3"] +} \ No newline at end of file diff --git a/Dockerfile b/Dockerfile index 659031cf..8199b11c 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,6 +1,6 @@ # Nextcloud - passman - custom dev container -FROM ubuntu:20.04 +FROM ubuntu:24.04 AS base RUN /bin/bash -c "export DEBIAN_FRONTEND=noninteractive" && \ /bin/bash -c "debconf-set-selections <<< 'mariadb-server mysql-server/root_password password PASS'" && \ /bin/bash -c "debconf-set-selections <<< 'mariadb-server mysql-server/root_password_again password PASS'" && \ @@ -13,20 +13,19 @@ RUN /bin/bash -c "export DEBIAN_FRONTEND=noninteractive" && \ cowsay-off \ git \ curl \ - libapache2-mod-php7.4 \ + libapache2-mod-php \ mariadb-server \ - php7.4 \ - php7.4-mysql \ - php7.4-curl \ - php-dompdf \ - php7.4-gd \ - php7.4-mbstring \ - php7.4-xml \ - php7.4-zip \ - php7.4-intl \ - php7.4-bcmath \ - php7.4-gmp \ - php7.4-imagick \ + php \ + php-mysql \ + php-curl \ + php-gd \ + php-mbstring \ + php-xml \ + php-zip \ + php-intl \ + php-bcmath \ + php-gmp \ + php-imagick \ phpunit \ wget \ openssh-server \ @@ -35,7 +34,7 @@ RUN /bin/bash -c "export DEBIAN_FRONTEND=noninteractive" && \ composer \ sudo -RUN gem install sass && \ +RUN npm install -g sass && \ a2enmod ssl && \ ln -s /etc/apache2/sites-available/default-ssl.conf /etc/apache2/sites-enabled && \ git clone https://github.com/nextcloud/passman /var/www/passman && \ @@ -44,8 +43,8 @@ RUN gem install sass && \ ADD https://raw.githubusercontent.com/nextcloud/travis_ci/master/before_install.sh /var/www/passman -RUN service mysql restart && \ - mysql -uroot -pPASS -e "SET PASSWORD = PASSWORD('');" && \ +RUN service mariadb restart && \ + mariadb -uroot -pPASS -e "SET PASSWORD = PASSWORD('');" && \ sed -i '0,/.*SSLCertificateChainFile.*/s/.*SSLCertificateChainFile.*/SSLCertificateChainFile \/etc\/ssl\/private\/fullchain.pem/' /etc/apache2/sites-enabled/default-ssl.conf && \ sed -i '0,/.*ssl-cert-snakeoil.pem.*/s/.*ssl-cert-snakeoil.pem.*/SSLCertificateFile \/etc\/ssl\/private\/cert.pem/' /etc/apache2/sites-enabled/default-ssl.conf && \ sed -i '0,/.*SSLCertificateKeyFile.*/s/.*SSLCertificateKeyFile.*/SSLCertificateKeyFile \/etc\/ssl\/private\/privkey.pem/' /etc/apache2/sites-enabled/default-ssl.conf && \ @@ -53,12 +52,12 @@ RUN service mysql restart && \ cd /var/www/passman && \ chmod +x before_install.sh && \ sleep 1 && \ - /bin/bash -c "./before_install.sh passman stable21 mysql; exit 0" && \ + /bin/bash -c "./before_install.sh passman stable31 mysql; exit 0" && \ rm /var/www/server/apps/passman/before_install.sh && \ mv /var/www/server/* /var/www/html/ && \ cd /var/www/html/ && \ chmod +x occ && \ - service mysql restart && \ + service mariadb restart && \ ./occ maintenance:install --database-name oc_autotest --database-user oc_autotest --admin-user admin --admin-pass admin --database mysql --database-pass 'owncloud' && \ sed -i 's/\/var\/www\/server/\/var\/www\/html/g' /var/www/html/config/config.php && \ cat /var/www/html/config/config.php && \ @@ -82,4 +81,25 @@ RUN chmod +x /entrypoint.sh ENTRYPOINT ["/entrypoint.sh"] CMD [] +FROM base AS dev +ENV DEV=1 +RUN npm install -g browser-sync +COPY auto-reload.sh / +RUN chmod +x /auto-reload.sh +RUN openssl req -x509 -nodes -days 365 \ + -newkey rsa:2048 \ + -keyout /etc/ssl/private/privkey.pem \ + -out /etc/ssl/private/cert.pem \ + -subj "/C=DE/ST=Berlin/L=Berlin/O=MyCompany/OU=IT/CN=localhost" \ + && cp /etc/ssl/private/cert.pem /etc/ssl/private/fullchain.pem \ + && chsh -s /bin/bash www-data \ + && cd /var/www/html \ + && service mariadb restart \ + && ./occ config:system:set trusted_domains 5 --value=localhost \ + && ./occ config:system:set trusted_domains 6 --value=0.0.0.0 + +EXPOSE 3001 + +FROM base AS prod + #/usr/games/cowsay -f dragon.cow "you might now login using username:admin password:admin" && \ diff --git a/auto-reload.sh b/auto-reload.sh new file mode 100644 index 00000000..55600356 --- /dev/null +++ b/auto-reload.sh @@ -0,0 +1,3 @@ +#!/bin/bash +# Beobachte HTML/PHP/JS/CSS Änderungen in /var/www/html +browser-sync start --proxy "http://0.0.0.0:80" --files "/var/www/passman/**/*.*" --no-ui --no-notify --host 0.0.0.0 --listen 0.0.0.0 --port 3001 diff --git a/entrypoint.sh b/entrypoint.sh index 9aa9d190..0b93e2ee 100644 --- a/entrypoint.sh +++ b/entrypoint.sh @@ -3,16 +3,21 @@ # SIGTERM-handler term_handler() { service apache2 stop - service mysql stop + service mariadb stop exit 0 } set -x service ssh start -service mysql start +service mariadb start service apache2 start +# Start file watch for browser hot reload inside the devcontainer +if [ "$DEV" = "1" ]; then + /auto-reload.sh & +fi + trap 'kill ${!}; term_handler' SIGTERM