diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile new file mode 100644 index 0000000000..3a0b398d8d --- /dev/null +++ b/.devcontainer/Dockerfile @@ -0,0 +1,43 @@ +ARG VARIANT="8.0-apache-bullseye" +FROM mcr.microsoft.com/vscode/devcontainers/php:${VARIANT} + +ARG DEBIAN_FRONTEND=noninteractive + +RUN apt-get update -y; + +# Install MariaDB client +RUN apt-get install -y mariadb-client +COPY include/my.cnf /home/vscode/.my.cnf + +# Base packages +RUN apt install -y vim software-properties-common sudo nano gnupg2 + +RUN apt-get install -y \ + libpng-dev \ + libjpeg62-turbo-dev \ + libtool \ + libmagick++-dev \ + libmemcached-dev \ + libgraphicsmagick1-dev \ + libfreetype6-dev \ + libwebp-dev \ + librsvg2-2 \ + libzip-dev \ + libldap2-dev \ + libgmp-dev \ + libmagickcore-6.q16-6-extra \ + && docker-php-ext-configure gd --with-freetype --with-jpeg --with-webp \ + && docker-php-ext-install -j$(nproc) \ + pdo_mysql \ + gd \ + exif \ + zip \ + opcache \ + ctype \ + pcntl \ + ldap \ + gmp \ + intl + +RUN apt-get clean -y && rm -rf /var/lib/apt/lists/* + diff --git a/.devcontainer/README.MD b/.devcontainer/README.MD new file mode 100644 index 0000000000..21694a2e00 --- /dev/null +++ b/.devcontainer/README.MD @@ -0,0 +1,53 @@ + +This folder holds a devcontainer definition for Friendica. + +The main features are: + +- The development container is based on the PHP dev container image in variant that includes an Apache2 + webserver. The variant defines the PHP version and the OS it is based on. The currently used variant + is defined in the Dockerfile. + +- Creating a dev container from the Git repository should give you a running development environment + with no or optionally only a very little things to do after creation. + +- A MariaDB container is used for the database. It can be accessed in the dev container's terminal with simple + calling mysql. The needed parameters for the client are created and copied during setup. The runtime configuration + needs to use 127.0.0.1 instead of localhost as the latter causes PHP to try to use a socket connection which is not + available in this setup. + + +The development setup is: + +- After creation of the dev container the Apache2 web server shall be availaible through port forwarding on + port 8080 from your local development machine (http://localhost:8080/). This is also the url as configured + in local.config.php. You should be able to log in with user 'admin@friendica.local' and password 'admin'. + +- Important values are defined in the devcontainer.env file and applied during creation wherever possible. The + environment is also available during run/debug time to the application. + +- XDebug can be started by the launch configuration 'Listen for Xdebug'. The launch configuration is in .vscode/launch.json + (this file is added to git). + + +Open points: + +- Cron jobs / worker are not available. For a dev environment those are disabled by default (but can be optionally + enabled). + +- The creation of the container runs the postCreate.sh script. This includes a few setup steps that do not need to + be runned on a container rebuild (but on creation of the container). I plan to seperate steps from creation and rebuild + but it is not really a problem at the moment (it just gives some output stating Error where no error is). + +- Passing values from the local development machine (with $localEnv) does not seem to work. This would be handy to apply + a few settings differently based on user choice. + +- The dev container does not have an email MTA. + +- The devcontainer does currently not support TLS. + +- There are still a bit too much warnings logged at startup but that doesn't seem to be a problem. + +- Only the first launch configuration ('Listen for Xdebug') is working. + +- There is no port exposed on the container (only forwarded ports used). It would be handy to have the dev instance being able + to work as a normal instance in the fediverse. diff --git a/.devcontainer/devcontainer.env b/.devcontainer/devcontainer.env new file mode 100644 index 0000000000..f72d728d1c --- /dev/null +++ b/.devcontainer/devcontainer.env @@ -0,0 +1,17 @@ +#Database setup +MYSQL_HOST=127.0.0.1 +MYSQL_DATABASE=friendica +MYSQL_USER=friendica +MYSQL_PASSWORD=friendica + +#Webserver setup +ServerName=192.168.56.10.xip.io +ServerAlias=friendica.local +DocumentRoot=/var/www/html +APACHE_LOG_DIR=/var/log/apache2 + +#Test users +ADMIN_NICK=admin +ADMIN_PASSW=admin +USER_NICK=user +USER_PASSW=user diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json new file mode 100644 index 0000000000..c0eba0281b --- /dev/null +++ b/.devcontainer/devcontainer.json @@ -0,0 +1,41 @@ +// For format details, see https://aka.ms/devcontainer.json. For config options, see the +// README at: https://github.com/devcontainers/templates/tree/main/src/php-mariadb +{ + "name": "Friendica", + "dockerComposeFile": "docker-compose.yml", + "service": "app", + "workspaceFolder": "/workspaces/${localWorkspaceFolderBasename}", + + "remoteEnv": { + "workspaceFolder": "/workspaces/${localWorkspaceFolderBasename}", + "developmentUser": "vscode" + }, + + // Features to add to the dev container. More info: https://containers.dev/features. + // "features": {}, + + // For use with PHP or Apache (e.g.php -S localhost:8080 or apache2ctl start) + "forwardPorts": [3306, 8080], + + // Use 'postCreateCommand' to run commands after the container is created. + "postCreateCommand": "bash -c '.devcontainer/postCreate.sh && .devcontainer/postCreateApacheSetup.sh && .devcontainer/postCreateFriendicaSetup.sh'", + "postStartCommand": "service apache2 start", + + // Configure tool-specific properties. + "customizations": { + "vscode": { + "extensions": [ + "xdebug.php-debug", + "ms-azuretools.vscode-docker", + "donjayamanne.githistory", + "bmewburn.vscode-intelephense-client" + ], + "settings": { + "php.suggest.basic": false + } + } + }, + + // Uncomment to connect as root instead. More info: https://aka.ms/dev-containers-non-root. + "remoteUser": "vscode" +} diff --git a/.devcontainer/docker-compose.yml b/.devcontainer/docker-compose.yml new file mode 100644 index 0000000000..d17e06cb64 --- /dev/null +++ b/.devcontainer/docker-compose.yml @@ -0,0 +1,40 @@ +version: '3.8' + +services: + app: + build: + context: . + dockerfile: Dockerfile + + volumes: + - ../..:/workspaces:cached + env_file: "devcontainer.env" + + # Overrides default command so things don't shut down after the process ends. + command: sleep infinity + + # Runs app on the same network as the database container, allows "forwardPorts" in devcontainer.json function. + network_mode: service:db + + # Use "forwardPorts" in **devcontainer.json** to forward an app port locally. + # (Adding the "ports" property to this file will not forward from a Codespace.) + + db: + image: mariadb:10.4 + restart: unless-stopped + volumes: + - mariadb-data:/var/lib/mysql + env_file: "devcontainer.env" + environment: + MYSQL_ROOT_PASSWORD: root + command: ['mysqld', '--character-set-server=utf8mb4', '--collation-server=utf8mb4_unicode_ci'] + + # Add "forwardPorts": ["3306"] to **devcontainer.json** to forward MariaDB locally. + # (Adding the "ports" property to this file will not forward from a Codespace.) + +volumes: + mariadb-data: + +networks: + default: + \ No newline at end of file diff --git a/.devcontainer/include/001-friendica.conf b/.devcontainer/include/001-friendica.conf new file mode 100644 index 0000000000..da5a1eeb89 --- /dev/null +++ b/.devcontainer/include/001-friendica.conf @@ -0,0 +1,28 @@ + + ServerAdmin webmaster@localhost + ServerName ${ServerName} + ServerAlias ${ServerAlias} + + DocumentRoot ${DocumentRoot} + + + Options Indexes FollowSymLinks MultiViews + AllowOverride All + Order allow,deny + allow from all + + + + SetHandler server-status + Order deny,allow + Allow from all + + + # Possible values include: debug, info, notice, warn, error, crit, + # alert, emerg. + LogLevel warn + + ErrorLog ${APACHE_LOG_DIR}/${ServerName}-error.log + CustomLog ${APACHE_LOG_DIR}/${ServerName}-access.log combined + + diff --git a/.devcontainer/include/autoinstall.config.php b/.devcontainer/include/autoinstall.config.php new file mode 100644 index 0000000000..e3f80b5c14 --- /dev/null +++ b/.devcontainer/include/autoinstall.config.php @@ -0,0 +1,46 @@ + [ + 'hostname' => '${MYSQL_HOST}', + 'username' => '${MYSQL_USER}', + 'password' => '${MYSQL_PASSWORD}', + 'database' => '${MYSQL_DATABASE}', + 'charset' => 'utf8mb4', + ], + + // **************************************************************** + // The configuration below will be overruled by the admin panel. + // Changes made below will only have an effect if the database does + // not contain any configuration for the friendica system. + // **************************************************************** + + 'config' => [ + 'admin_email' => 'admin@friendica.local', + 'sitename' => 'Friendica Social Network', + 'register_policy' => \Friendica\Module\Register::OPEN, + 'register_text' => '', + ], + 'system' => [ + 'default_timezone' => 'UTC', + 'language' => 'en', + 'basepath' => '${workspaceFolder}', + 'url' => 'http://localhost:8080', + ], +]; diff --git a/.devcontainer/include/my.cnf b/.devcontainer/include/my.cnf new file mode 100644 index 0000000000..aae84a5709 --- /dev/null +++ b/.devcontainer/include/my.cnf @@ -0,0 +1,4 @@ +[client] +protocol = tcp +user = friendica +password = friendica diff --git a/.devcontainer/postCreate.sh b/.devcontainer/postCreate.sh new file mode 100755 index 0000000000..df12b72ad5 --- /dev/null +++ b/.devcontainer/postCreate.sh @@ -0,0 +1,18 @@ +#!/bin/bash +# + +# Prepare the workspace files with the values from the devcontainer.env file +set -a +source $workspaceFolder/.devcontainer/devcontainer.env + +echo ">>> Development Setup" +sudo apt-get update + +#Make the workspace directory the docroot +echo ">>> Symlink $DocumentRoot to $workspaceFolder" +sudo rm -rf $DocumentRoot +sudo ln -fs $workspaceFolder $DocumentRoot + +echo 'error_reporting=0' | sudo tee /usr/local/etc/php/conf.d/no-warn.ini + +exit 0 diff --git a/.devcontainer/postCreateApacheSetup.sh b/.devcontainer/postCreateApacheSetup.sh new file mode 100755 index 0000000000..441f9d184b --- /dev/null +++ b/.devcontainer/postCreateApacheSetup.sh @@ -0,0 +1,13 @@ +#!/bin/bash +# +source $workspaceFolder/.devcontainer/devcontainer.env + +echo ">>> Apache2 Configuration" +envsubst < $workspaceFolder/.devcontainer/include/001-friendica.conf > /tmp/001-friendica.conf + +sudo cp /tmp/001-friendica.conf /etc/apache2/sites-available/001-friendica.conf +sudo a2enmod rewrite actions +sudo a2ensite 001-friendica +sudo a2dissite 000-default + +exit 0 diff --git a/.devcontainer/postCreateFriendicaSetup.sh b/.devcontainer/postCreateFriendicaSetup.sh new file mode 100755 index 0000000000..5e3707e2e7 --- /dev/null +++ b/.devcontainer/postCreateFriendicaSetup.sh @@ -0,0 +1,28 @@ +#!/bin/bash +# +source $workspaceFolder/.devcontainer/devcontainer.env + +# Setup Friendica +echo ">>> Friendica Setup" +envsubst < $workspaceFolder/.devcontainer/include/autoinstall.config.php > /tmp/autoinstall.config.php + +cd $DocumentRoot + +# copy the .htaccess-dist file to .htaccess so that rewrite rules work +cp $DocumentRoot/.htaccess-dist $DocumentRoot/.htaccess + +bin/composer.phar --no-dev install + +# install friendica +bin/console autoinstall -f /tmp/autoinstall.config.php + +# add users +# (disable a bunch of validation because this is a dev install, deh, it needs invalid emails and stupid passwords) +bin/console config system disable_email_validation 1 +bin/console config system disable_password_exposed 1 +bin/console user add "$ADMIN_NICK" "$ADMIN_NICK" "$ADMIN_NICK@friendica.local" en http://friendica.local/profile/$ADMIN_NICK +bin/console user password "$ADMIN_NICK" "$ADMIN_PASSW" +bin/console user add "$USER_NICK" "$USER_NICK" "$USER_NICK@friendica.local" en http://friendica.local/profile/$USER_NICK +bin/console user password "$USER_NICK" "$USER_PASSW" + +exit 0 diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 0000000000..f33a02cd16 --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,12 @@ +# To get started with Dependabot version updates, you'll need to specify which +# package ecosystems to update and where the package manifests are located. +# Please see the documentation for more information: +# https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates +# https://containers.dev/guide/dependabot + +version: 2 +updates: + - package-ecosystem: "devcontainers" + directory: "/" + schedule: + interval: weekly diff --git a/.gitignore b/.gitignore index 723e94d4bc..bbc83a55df 100644 --- a/.gitignore +++ b/.gitignore @@ -35,6 +35,7 @@ robots.txt #Ignore config files from VSCode /.vscode/ +!/.vscode/launch.json #ignore smarty cache /view/smarty3/compiled/ diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 0000000000..7a99e991cc --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,19 @@ +{ + "version": "0.2.0", + "configurations": [ + { + "name": "Listen for Xdebug", + "type": "php", + "request": "launch", + "port": 9000, + "runtimeArgs": [ + "-dzend_extension=xdebug.so", + "-dxdebug.mode=debug", + "-dxdebug.start_with_request=yes", + "-dxdebug.client_host=127.0.0.1", + "-dxdebug.client_port=9000", + "-dxdebug.log=/tmp/xdebug.log" + ] + } + ] +}