diff --git a/.devcontainer/.env b/.devcontainer/.env index fdfc59f864..396ac9ebfe 100644 --- a/.devcontainer/.env +++ b/.devcontainer/.env @@ -4,6 +4,9 @@ MYSQL_DATABASE=friendica MYSQL_USER=friendica MYSQL_PASSWORD=friendica +#Redis +REDIS_HOST=127.0.0.1 + #Webserver setup ServerName=localhost ServerPort=8080 diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile index 626f3bf18e..4867640812 100644 --- a/.devcontainer/Dockerfile +++ b/.devcontainer/Dockerfile @@ -1,7 +1,11 @@ -ARG VARIANT="8.0-apache-bullseye" +ARG VARIANT="8.2-apache-bullseye" FROM mcr.microsoft.com/vscode/devcontainers/php:${VARIANT} ARG DEBIAN_FRONTEND=noninteractive +ARG apcu_version=5.1.23 +ARG memcached_version=3.2.0 +ARG redis_version=6.0.2 +ARG imagick_version=3.7.0 RUN apt-get update -y; @@ -11,12 +15,22 @@ RUN apt-get install -y mariadb-client # Base packages RUN apt install -y vim software-properties-common sudo nano gnupg2 -RUN apt-get install -y \ +# entrypoint.sh and cron.sh dependencies +RUN apt-get install -y --no-install-recommends \ + rsync \ + bzip2 \ + msmtp \ + tini + +RUN apt-get install -y --no-install-recommends \ + bash \ libpng-dev \ libjpeg62-turbo-dev \ libtool \ libmagick++-dev \ libmemcached-dev \ + zlib1g-dev \ + libssl-dev \ libgraphicsmagick1-dev \ libfreetype6-dev \ libwebp-dev \ @@ -25,18 +39,58 @@ RUN apt-get install -y \ 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 + ; \ + \ + 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 + +# pecl will claim success even if one install fails, so we need to perform each install separately +RUN pecl install apcu-${apcu_version}; \ + pecl install memcached-${memcached_version}; \ + pecl install redis-${redis_version}; \ + pecl install imagick-${imagick_version}; \ + docker-php-ext-enable \ + apcu \ + memcached \ + redis \ + imagick RUN apt-get clean -y && rm -rf /var/lib/apt/lists/* +ENV PHP_MEMORY_LIMIT 512M +ENV PHP_UPLOAD_LIMIT 512M + +RUN { \ + echo 'opcache.enable=1' ; \ + echo 'opcache.interned_strings_buffer=8'; \ + echo 'opcache.max_accelerated_files=10000'; \ + echo 'opcache.memory_consumption=128'; \ + echo 'opcache.save_comments=1'; \ + echo 'opcache.revalidte_freq=1'; \ + } > /usr/local/etc/php/conf.d/opcache-recommended.ini; \ + \ + echo 'apc.enable_cli=1' >> /usr/local/etc/php/conf.d/docker-php-ext-apcu.ini; \ + \ + { \ + echo 'memory_limit=${PHP_MEMORY_LIMIT}'; \ + echo 'upload_max_filesize=${PHP_UPLOAD_LIMIT}'; \ + echo 'post_max_size=${PHP_UPLOAD_LIMIT}'; \ + } > /usr/local/etc/php/conf.d/friendica.ini; \ + ln -s /usr/local/etc/php/php.ini-production /usr/local/etc/php/php.ini; \ + \ + mkdir /var/www/data; \ + chmod -R g=u /var/www diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 4bf546aaba..50d0fb384d 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -18,21 +18,25 @@ "postCreateCommand": "bash -c '.devcontainer/postCreate.sh && .devcontainer/postCreateApacheSetup.sh && .devcontainer/postCreateFriendicaSetup.sh'", "postStartCommand": "service apache2 start", + "forwardPorts": [ + 8080 + ], + // Configure tool-specific properties. "customizations": { "vscode": { "extensions": [ - "xdebug.php-debug", + "bmewburn.vscode-intelephense-client", "ms-azuretools.vscode-docker", - "donjayamanne.githistory", - "bmewburn.vscode-intelephense-client" + "xdebug.php-debug", + "donjayamanne.githistory" ], "settings": { "php.suggest.basic": false } } - }, + } // Uncomment to connect as root instead. More info: https://aka.ms/dev-containers-non-root. - "remoteUser": "vscode" + //"remoteUser": "root" } diff --git a/.devcontainer/docker-compose.yml b/.devcontainer/docker-compose.yml index 74a16d6187..4463ebad86 100644 --- a/.devcontainer/docker-compose.yml +++ b/.devcontainer/docker-compose.yml @@ -37,7 +37,13 @@ services: # Runs app on the same network as the app container, allows "forwardPorts" in devcontainer.json function. network_mode: service:app - + + redis: + image: redis:latest + restart: unless-stopped + env_file: ".env" + network_mode: service:app + volumes: mariadb-data: diff --git a/.devcontainer/include/00apcu.config.php b/.devcontainer/include/00apcu.config.php new file mode 100644 index 0000000000..2e5ebcf53e --- /dev/null +++ b/.devcontainer/include/00apcu.config.php @@ -0,0 +1,11 @@ + [ + 'cache_driver' => 'apcu', + ], +]; diff --git a/.devcontainer/include/01redis.config.php b/.devcontainer/include/01redis.config.php new file mode 100644 index 0000000000..2ea29bd749 --- /dev/null +++ b/.devcontainer/include/01redis.config.php @@ -0,0 +1,17 @@ + [ + 'session_handler' => 'cache', + 'distributed_cache_driver' => 'redis', + 'lock_driver' => 'redis', + 'redis_host' => getenv('REDIS_HOST'), + 'redis_port' => (getenv('REDIS_PORT') ?: ''), + 'redis_password' => (getenv('REDIS_PW') ?: ''), + 'redis_db' => (getenv('REDIS_DB') ?: 0), + ], + ]; +} else { + return []; +} diff --git a/.devcontainer/include/autoinstall.config.php b/.devcontainer/include/autoinstall.config.php index b61ba46c31..c9e2026354 100644 --- a/.devcontainer/include/autoinstall.config.php +++ b/.devcontainer/include/autoinstall.config.php @@ -31,6 +31,6 @@ return [ 'default_timezone' => 'UTC', 'language' => 'en', 'basepath' => '${workspaceFolder}', - 'url' => 'http://${ServerName}:${ServerPort}', + 'url' => 'http://${ServerName}:${ServerPort}' ], ]; diff --git a/.devcontainer/include/zz-docker.config.php b/.devcontainer/include/zz-docker.config.php new file mode 100644 index 0000000000..a74a08bbb9 --- /dev/null +++ b/.devcontainer/include/zz-docker.config.php @@ -0,0 +1,34 @@ + [ + // Necessary because otherwise the daemon isn't working + 'pidfile' => '/tmp/friendica.pid', + + 'logfile' => '/var/www/html/friendica.log', + 'loglevel' => 'notice', + ], + 'storage' => [ + 'filesystem_path' => '/var/www/html/storage', + ], +]; + +if (!empty(getenv('FRIENDICA_NO_VALIDATION'))) { + $config['system']['disable_url_validation'] = true; + $config['system']['disable_email_validation'] = true; +} + +if (!empty(getenv('SMTP_DOMAIN'))) { + $smtp_from = !empty(getenv('SMTP_FROM')) ? getenv('SMTP_FROM') : 'no-reply'; + + $config['config']['sender_email'] = $smtp_from . "@" . getenv('SMTP_DOMAIN'); +} + +return $config; diff --git a/.vscode/launch.json b/.devcontainer/launch.json similarity index 100% rename from .vscode/launch.json rename to .devcontainer/launch.json diff --git a/.devcontainer/postCreate.sh b/.devcontainer/postCreate.sh index e5b338d93d..0ee0c93764 100755 --- a/.devcontainer/postCreate.sh +++ b/.devcontainer/postCreate.sh @@ -8,13 +8,20 @@ source $workspaceFolder/.devcontainer/.env echo ">>> Development Setup" sudo apt-get update +# VSCode debugger profile +mkdir -p .vscode && cp .devcontainer/launch.json .vscode/launch.json + envsubst < $workspaceFolder/.devcontainer/include/my.cnf > /home/vscode/.my.cnf -#Make the workspace directory the docroot +# Make the workspace directory the docroot echo ">>> Symlink $DocumentRoot to $workspaceFolder" sudo rm -rf $DocumentRoot sudo ln -fs $workspaceFolder $DocumentRoot +# Set proper permissions +sudo chown -R $developmentUser:www-data $workspaceFolder +sudo chmod -R g=u $workspaceFolder + 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 index ca4f87aa2b..d393a76a58 100755 --- a/.devcontainer/postCreateApacheSetup.sh +++ b/.devcontainer/postCreateApacheSetup.sh @@ -17,7 +17,15 @@ sudo chmod 644 /etc/ssl/private/friendica.key sudo chmod 644 /etc/ssl/certs/friendica.crt sudo cp /tmp/001-friendica.conf /etc/apache2/sites-available/001-friendica.conf -sudo a2enmod rewrite actions ssl +sudo a2enmod rewrite actions ssl remoteip +{ + echo RemoteIPHeader X-Real-IP ; + echo RemoteIPTrustedProxy 10.0.0.0/8 ; + echo RemoteIPTrustedProxy 172.16.0.0/12 ; + echo RemoteIPTrustedProxy 192.168.0.0/16 ; +} | sudo tee /etc/apache2/conf-available/remoteip.conf > /dev/null +sudo a2enconf remoteip + sudo a2ensite 001-friendica sudo a2dissite 000-default diff --git a/.devcontainer/postCreateFriendicaSetup.sh b/.devcontainer/postCreateFriendicaSetup.sh index f575988a82..c1c518ca20 100755 --- a/.devcontainer/postCreateFriendicaSetup.sh +++ b/.devcontainer/postCreateFriendicaSetup.sh @@ -9,6 +9,9 @@ FRIENDICA_PHP_PATH=$(which php) export FRIENDICA_PHP_PATH envsubst < $workspaceFolder/.devcontainer/include/autoinstall.config.php > /tmp/autoinstall.config.php +cp $workspaceFolder/.devcontainer/include/00apcu.config.php $workspaceFolder/config/00apcu.config.php +cp $workspaceFolder/.devcontainer/include/01redis.config.php $workspaceFolder/config/01redis.config.php +cp $workspaceFolder/.devcontainer/include/zz-docker.config.php $workspaceFolder/config/zz-docker.config.php cd $DocumentRoot @@ -30,4 +33,11 @@ bin/console user password "$ADMIN_NICK" "$ADMIN_PASSW" bin/console user add "$USER_NICK" "$USER_NICK" "$USER_NICK@$ServerAlias" en http://friendica.local/profile/$USER_NICK bin/console user password "$USER_NICK" "$USER_PASSW" +# create log file +#mkdir -p $workspaceFolder/log +#touch $workspaceFolder/log/friendica.log +#chmod 666 $workspaceFolder/log/friendica.log +touch $workspaceFolder/friendica.log +chmod 666 $workspaceFolder/friendica.log + exit 0 diff --git a/.gitignore b/.gitignore index ce397308bf..3a673832bd 100644 --- a/.gitignore +++ b/.gitignore @@ -39,7 +39,6 @@ robots.txt #Ignore config files from VSCode /.vscode/ -!/.vscode/launch.json #ignore smarty cache /view/smarty3/compiled/