aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSimon L <szaimen@e.mail.de>2023-04-10 14:03:38 +0200
committerGitHub <noreply@github.com>2023-04-10 14:03:38 +0200
commitefe2fb66c78a4b9a7865d5f1d969434d1d465473 (patch)
tree82e46fc6ec561ae9798d133e743fa3c4bf9a675f
parent0d484c58f87c3ebaa7f9946b7ba4946acf12f273 (diff)
parent849b7de6816f44213818f118b8110f02193bb283 (diff)
downloadnextcloud-server-efe2fb66c78a4b9a7865d5f1d969434d1d465473.tar.gz
nextcloud-server-efe2fb66c78a4b9a7865d5f1d969434d1d465473.zip
Merge pull request #37521 from nextcloud/update-improve-devcontainer
Update improve devcontainer
-rw-r--r--.devcontainer/Dockerfile95
-rw-r--r--.devcontainer/README.md72
-rw-r--r--.devcontainer/codespace.config.php5
-rw-r--r--.devcontainer/devcontainer.json27
-rw-r--r--.devcontainer/docker-compose.yml9
-rwxr-xr-x.devcontainer/entrypoint.sh5
-rw-r--r--.devcontainer/launch.json14
-rwxr-xr-x.devcontainer/setup.sh25
-rw-r--r--.gitattributes1
9 files changed, 212 insertions, 41 deletions
diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile
index 4374d03954f..6605e2b6499 100644
--- a/.devcontainer/Dockerfile
+++ b/.devcontainer/Dockerfile
@@ -1,34 +1,56 @@
-FROM ubuntu:focal
+FROM ubuntu:jammy
ARG DEBIAN_FRONTEND=noninteractive
# PHP
-RUN apt-get update -y
+RUN apt-get update -y && \
+ apt install -y apache2 vim software-properties-common sudo nano gnupg2
+
RUN apt-get install --no-install-recommends -y \
- php7.4 \
- php7.4-gd \
- php7.4-zip \
- php7.4-curl \
- php7.4-xml \
- php7.4-mbstring \
- php7.4-sqlite \
- php7.4-xdebug \
- php7.4-pgsql \
- php7.4-intl \
- php7.4-imagick \
- php7.4-gmp \
- php7.4-apcu \
- php7.4-bcmath \
+ php8.1 \
+ php8.1-common \
+ php8.1-gd \
+ php8.1-zip \
+ php8.1-curl \
+ php8.1-xml \
+ php8.1-xmlrpc \
+ php8.1-mbstring \
+ php8.1-sqlite \
+ php8.1-xdebug \
+ php8.1-pgsql \
+ php8.1-intl \
+ php8.1-imagick \
+ php8.1-gmp \
+ php8.1-apcu \
+ php8.1-bcmath \
+ php8.1-redis \
+ php8.1-soap \
+ php8.1-imap \
+ php8.1-opcache \
+ php8.1-cli \
+ php8.1-dev \
libmagickcore-6.q16-3-extra \
curl \
- vim \
lsof \
make \
- nodejs \
- npm
+ unzip
+
+# Composer
+RUN curl -sS https://getcomposer.org/installer -o /tmp/composer-setup.php && \
+ curl -sS https://composer.github.io/installer.sig -o /tmp/composer-setup.sig && \
+ php -r "if (hash_file('sha384', '/tmp/composer-setup.php') !== trim(file_get_contents('/tmp/composer-setup.sig'))) { echo 'Composer installation failed, invalid hash'; exit(1); }" && \
+ php /tmp/composer-setup.php --install-dir=/usr/local/bin --filename=composer && \
+ rm /tmp/composer-setup.php /tmp/composer-setup.sig
-RUN echo "xdebug.remote_enable = 1" >> /etc/php/7.4/cli/conf.d/20-xdebug.ini
-RUN echo "xdebug.remote_autostart = 1" >> /etc/php/7.4/cli/conf.d/20-xdebug.ini
+RUN echo "xdebug.remote_enable = 1" >> /etc/php/8.1/cli/conf.d/20-xdebug.ini && \
+ echo "xdebug.remote_autostart = 1" >> /etc/php/8.1/cli/conf.d/20-xdebug.ini && \
+ echo "apc.enable_cli=1" >> /etc/php/8.1/cli/conf.d/20-apcu.ini
+
+# Autostart XDebug for apache
+RUN { \
+ echo "xdebug.mode=debug"; \
+ echo "xdebug.start_with_request=yes"; \
+} >> /etc/php/8.1/apache2/conf.d/20-xdebug.ini
# Docker
RUN apt-get -y install \
@@ -36,12 +58,29 @@ RUN apt-get -y install \
ca-certificates \
curl \
gnupg-agent \
- software-properties-common
-RUN curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add -
-RUN add-apt-repository \
+ software-properties-common && \
+ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add - && \
+ add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
- stable"
-RUN apt-get update -y
-RUN apt-get install -y docker-ce docker-ce-cli containerd.io
-RUN ln -s /var/run/docker-host.sock /var/run/docker.sock
+ stable" && \
+ apt-get update -y && \
+ apt-get install -y docker-ce docker-ce-cli containerd.io && \
+ ln -s /var/run/docker-host.sock /var/run/docker.sock
+
+# Dedicated DevContainer user runs Apache
+ENV APACHE_RUN_USER=devcontainer
+ENV APACHE_RUN_GROUP=devcontainer
+RUN useradd -ms /bin/bash ${APACHE_RUN_USER} && \
+ adduser ${APACHE_RUN_USER} sudo && \
+ echo '%sudo ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers && \
+ sed -ri "s/^export APACHE_RUN_USER=.*$/export APACHE_RUN_USER=${APACHE_RUN_USER}/" "/etc/apache2/envvars" && \
+ sed -ri "s/^export APACHE_RUN_GROUP=.*$/export APACHE_RUN_GROUP=${APACHE_RUN_GROUP}/" "/etc/apache2/envvars"
+
+USER devcontainer
+
+# NVM
+RUN curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash
+RUN bash --login -i -c 'source /home/devcontainer/.bashrc && nvm install 16'
+
+WORKDIR /var/www/html
diff --git a/.devcontainer/README.md b/.devcontainer/README.md
new file mode 100644
index 00000000000..da540711fc8
--- /dev/null
+++ b/.devcontainer/README.md
@@ -0,0 +1,72 @@
+# Nextcloud DevContainer
+
+## Usage
+
+Make sure you have the [VSCode DevContainer](https://code.visualstudio.com/docs/devcontainers/containers) extensions installed. If you open the project, VSCode will ask you if you want to open it inside of the DevContainer. If that's not the case, use <kbd>F1</kbd>&rarr;*Dev Containers: Open Folder in Container*.
+
+Alternatively open the project directly in [GitHub Codespaces](https://github.com/features/codespaces).
+
+That's already it. Everything else will be configured automatically by the Containers startup routine.
+
+## Credentials
+
+On first start the Container installs and configures Nextcloud with the following credentials:
+
+**Nextcloud Admin Login**
+
+Username: `admin` <br>
+Password: `admin`
+
+**Postgres credentials**
+
+Username: `postgres` <br>
+Password: `postgres` <br>
+Database: `postgres`
+
+## Services
+
+The following services will be started:
+
+| Service | Local port | Description |
+|---------|------------|-------------|
+| Nextcloud (served via Apache) | `80` | The main application |
+| Mailhog | `8025` | SMTP email delivery for testing |
+| Adminer | `8080` | Database viewer. Use credentials from above and connect to `localhost` to get access to the NC database |
+
+## Permissions
+
+The container runs with the user `devcontainer` who is also running the Apache2 process. All mounted source files have
+proper permissions so that this user can access everything which is inside the current workspace. If you need to
+get root permissions for whatever reason, use `sudo su` or `sudo <command>` (for example `sudo service apache2 restart`).
+Everything else (like building the application, adjusting files, ...) should be done as `devcontainer` user.
+
+## NodeJs and NVM
+
+The container comes with [`nvm`](https://github.com/nvm-sh/nvm) and Node 16 installed. This should be sufficient to
+build Nextcloud Core sources via `make`. If you need a different Node Version (for example for
+app development), you can easily switch between different versions by running:
+
+```bash
+# Install and use Node 14
+nvm install 14
+nvm use 14
+
+# Check version
+node -v
+
+# Switch back to Node 16
+nvm use 16
+
+# Check version
+node -v
+```
+
+Note that `nvm` is only installed for the user `devcontainer` and won't work out of the box for
+any other user.
+
+## Debugging
+
+The Apache webserver is already configured to automatically try to connect to a debugger process
+listening on port `9003`. To start the VSCode debugger process, use the delivered debug profile `Listen for XDebug`.
+After you started the VSCode debugger, just navigate to the appropriate Nextcloud URL to get your
+debug hits. \ No newline at end of file
diff --git a/.devcontainer/codespace.config.php b/.devcontainer/codespace.config.php
index 5d883c3c9df..3c525763540 100644
--- a/.devcontainer/codespace.config.php
+++ b/.devcontainer/codespace.config.php
@@ -14,6 +14,9 @@ $CONFIG = [
];
if(is_string($codespaceName) && !empty($codespaceName) && is_string($codespaceDomain) && !empty($codespaceDomain)) {
- $CONFIG['overwritehost'] = $codespaceName . '-80.' . $codespaceDomain;
+ $host = $codespaceName . '-80.' . $codespaceDomain;
+ $CONFIG['overwritehost'] = $host;
+ $CONFIG['overwrite.cli.url'] = 'https://' . $host;
$CONFIG['overwriteprotocol'] = 'https';
+ $CONFIG['trusted_domains'] = [ $host ];
}
diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json
index f86a8cf3430..3fb1bf42e44 100644
--- a/.devcontainer/devcontainer.json
+++ b/.devcontainer/devcontainer.json
@@ -8,15 +8,20 @@
8080,
8025
],
- "runArgs": [
- "--privileged"
- ],
- "extensions": [
- "felixfbecker.php-debug",
- "felixfbecker.php-intellisense",
- "ms-azuretools.vscode-docker"
- ],
- "settings": {
- "php.suggest.basic": false,
- }
+ "customizations": {
+ "vscode": {
+ "extensions": [
+ "felixfbecker.php-debug",
+ "felixfbecker.php-intellisense",
+ "ms-azuretools.vscode-docker",
+ "xdebug.php-debug",
+ "donjayamanne.githistory"
+ ],
+ "settings": {
+ "php.suggest.basic": false
+ }
+ }
+ },
+ "workspaceFolder": "/var/www/html",
+ "remoteUser": "devcontainer"
}
diff --git a/.devcontainer/docker-compose.yml b/.devcontainer/docker-compose.yml
index ada819429f4..a30bba74a66 100644
--- a/.devcontainer/docker-compose.yml
+++ b/.devcontainer/docker-compose.yml
@@ -5,7 +5,8 @@ services:
volumes:
- .:/workspace:cached
- /var/run/docker.sock:/var/run/docker-host.sock
- command: /bin/sh -c "while sleep 1000; do :; done"
+ - ..:/var/www/html
+ command: /var/www/html/.devcontainer/entrypoint.sh
ports:
- 80:80
- 8080:8080
@@ -16,6 +17,9 @@ services:
restart: always
environment:
POSTGRES_PASSWORD: postgres
+ PGDATA: /data/postgres
+ volumes:
+ - db:/data/postgres
network_mode: service:nextclouddev
adminer:
@@ -27,3 +31,6 @@ services:
image: mailhog/mailhog
restart: always
network_mode: service:nextclouddev
+
+volumes:
+ db:
diff --git a/.devcontainer/entrypoint.sh b/.devcontainer/entrypoint.sh
new file mode 100755
index 00000000000..952f6f8aad6
--- /dev/null
+++ b/.devcontainer/entrypoint.sh
@@ -0,0 +1,5 @@
+#!/bin/bash
+
+sudo service apache2 start
+
+while sleep 1000; do :; done
diff --git a/.devcontainer/launch.json b/.devcontainer/launch.json
new file mode 100644
index 00000000000..8103dd29461
--- /dev/null
+++ b/.devcontainer/launch.json
@@ -0,0 +1,14 @@
+{
+ // Use IntelliSense to learn about possible attributes.
+ // Hover to view descriptions of existing attributes.
+ // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
+ "version": "0.2.0",
+ "configurations": [
+ {
+ "name": "Listen for Xdebug",
+ "type": "php",
+ "request": "launch",
+ "port": 9003
+ }
+ ]
+}
diff --git a/.devcontainer/setup.sh b/.devcontainer/setup.sh
index 9d2e3d73f98..3485d4f7257 100755
--- a/.devcontainer/setup.sh
+++ b/.devcontainer/setup.sh
@@ -2,7 +2,32 @@
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )/../" >/dev/null 2>&1 && pwd )"
cd $DIR/
+
+# Set git safe.directory
+git config --global --add safe.directory /var/www/html
+git config --global --add safe.directory /var/www/html/3rdparty
+
git submodule update --init
# Codespace config
cp .devcontainer/codespace.config.php config/codespace.config.php
+
+# VSCode debugger profile
+mkdir -p .vscode && cp .devcontainer/launch.json .vscode/launch.json
+
+# Onetime installation setup
+if [[ ! $(sudo -u ${APACHE_RUN_USER} php occ status) =~ installed:[[:space:]]*true ]]; then
+ echo "Running NC installation"
+ sudo -u ${APACHE_RUN_USER} php occ maintenance:install \
+ --verbose \
+ --database=pgsql \
+ --database-name=postgres \
+ --database-host=127.0.0.1 \
+ --database-port=5432 \
+ --database-user=postgres \
+ --database-pass=postgres \
+ --admin-user admin \
+ --admin-pass admin
+fi
+
+sudo service apache2 restart
diff --git a/.gitattributes b/.gitattributes
index 7f8fd14dd1d..baaf0e69fe0 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -1,3 +1,4 @@
/dist/* binary
/package-lock.json merge=binary
/core/css/*.css* binary
+/.devcontainer/*.sh text eol=lf