--- /dev/null
+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/*
+
--- /dev/null
+
+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.
--- /dev/null
+#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
--- /dev/null
+// 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"
+}
--- /dev/null
+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
--- /dev/null
+<VirtualHost *:8080>
+ ServerAdmin webmaster@localhost
+ ServerName ${ServerName}
+ ServerAlias ${ServerAlias}
+
+ DocumentRoot ${DocumentRoot}
+
+ <Directory ${DocumentRoot}>
+ Options Indexes FollowSymLinks MultiViews
+ AllowOverride All
+ Order allow,deny
+ allow from all
+ </Directory>
+
+ <Location /server-status>
+ SetHandler server-status
+ Order deny,allow
+ Allow from all
+ </Location>
+
+ # 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
+
+</VirtualHost>
--- /dev/null
+<?php
+
+// Local configuration
+
+/* If automatic system installation fails:
+ *
+ * Copy this file to local.config.php
+ *
+ * Why local.config.php? Because it contains sensitive information which could
+ * give somebody complete control of your database. Apache's default
+ * configuration will interpret any .php file as a script and won't show the values
+ *
+ * Then set the following for your MySQL installation
+ *
+ * If you're unsure about what any of the config keys below do, please check the static/defaults.config.php file for
+ * detailed documentation of their data type and behavior.
+ */
+
+return [
+ 'database' => [
+ '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',
+ ],
+];
--- /dev/null
+[client]
+protocol = tcp
+user = friendica
+password = friendica
--- /dev/null
+#!/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
--- /dev/null
+#!/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
--- /dev/null
+#!/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
--- /dev/null
+# 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
#Ignore config files from VSCode
/.vscode/
+!/.vscode/launch.json
#ignore smarty cache
/view/smarty3/compiled/
--- /dev/null
+{
+ "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"
+ ]
+ }
+ ]
+}