-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;
# 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 \
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
"postStartCommand": "service apache2 start",
"forwardPorts": [
- 80,
- 443,
- 3306,
8080
],
"php.suggest.basic": false
}
}
- },
+ }
// Uncomment to connect as root instead. More info: https://aka.ms/dev-containers-non-root.
- "remoteUser": "vscode"
+ //"remoteUser": "root"
}
--- /dev/null
+<?php
+
+/**
+ * If nothing else set, use APCu as a caching driver (best performance for local caching)
+ */
+
+return [
+ 'system' => [
+ 'cache_driver' => 'apcu',
+ ],
+];
--- /dev/null
+<?php
+
+if (getenv('REDIS_HOST')) {
+ return [
+ 'system' => [
+ '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 [];
+}
'default_timezone' => 'UTC',
'language' => 'en',
'basepath' => '${workspaceFolder}',
- 'url' => 'http://${ServerName}:${ServerPort}',
- 'pidfile' => '/tmp/daemon.pid',
+ 'url' => 'http://${ServerName}:${ServerPort}'
],
];
--- /dev/null
+<?php
+
+/**
+ * Fallback config to make it possible overwriting config values
+ * because of docker environment variables
+ *
+ * This doesn't affect DB configurations, but will replace other config values
+ */
+
+$config = [
+ 'system' => [
+ // 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;
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
-echo 'error_reporting=0' | sudo tee /usr/local/etc/php/conf.d/no-warn.ini
-
-# create log file
-mkdir -p log
-touch log/friendica.log
-chmod 666 log/friendica.log
+# 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
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
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
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