mirror of
https://github.com/penpot/penpot.git
synced 2025-01-04 13:50:12 -05:00
🎉 Fully automate dev setup with Gitpod.
This commit implements a fully-automated development setup using Gitpod.io, an online IDE for GitLab, GitHub, and Bitbucket that enables Dev-Environments-As-Code. This makes it easy for anyone to get a ready-to-code workspace for any branch, issue or pull request almost instantly with a single click. 🐳 Gitpod docker image with Clojure Signed-off-by: madmath03 <mb.mathieu.brunot@gmail.com> 🐳 Fix path to GitPod docker image Signed-off-by: madmath03 <mb.mathieu.brunot@gmail.com> 🐳 Use sudo for setup Signed-off-by: madmath03 <mb.mathieu.brunot@gmail.com> 🐳 More sudo commands Signed-off-by: madmath03 <mb.mathieu.brunot@gmail.com> 🐳 Remove penpot user in gitpod Signed-off-by: madmath03 <mb.mathieu.brunot@gmail.com> 🐳 Brew install redis Signed-off-by: madmath03 <mb.mathieu.brunot@gmail.com> 🔧 Init DB and penpot user Signed-off-by: madmath03 <mb.mathieu.brunot@gmail.com> 🐳 Switch user for installs Signed-off-by: madmath03 <mb.mathieu.brunot@gmail.com> 🔧 Improve startup and DB init Signed-off-by: madmath03 <mb.mathieu.brunot@gmail.com> 🔧 Configure gitpod tasks Signed-off-by: madmath03 <mb.mathieu.brunot@gmail.com> 🔧 Configure gitpod ports Signed-off-by: madmath03 <mb.mathieu.brunot@gmail.com> 🔧 Setup for mailhog Signed-off-by: madmath03 <mb.mathieu.brunot@gmail.com> 🐛 Use perms to install mailhog 🐛 Install mailhog before workspace creation Signed-off-by: mathieu.brunot <mathieu.brunot@monogramm.io> 🔧 Manage signed commits Signed-off-by: madmath03 <mb.mathieu.brunot@gmail.com> 🔧 Configure tasks to wait on ports 🔧 Improve Gitpod config Signed-off-by: madmath03 <mb.mathieu.brunot@gmail.com> ⬆️ Upgrade deps in gitpod Signed-off-by: madmath03 <mb.mathieu.brunot@gmail.com> 🎨 Use absolute path for cd Signed-off-by: madmath03 <mb.mathieu.brunot@gmail.com> 🔧 Add nginx conf Signed-off-by: madmath03 <mb.mathieu.brunot@gmail.com> 🔧 Fix nginx config for gitpod Signed-off-by: madmath03 <mb.mathieu.brunot@gmail.com> 🔧 Ensure nginx listens all incoming 🎨 Change layers order Signed-off-by: madmath03 <mb.mathieu.brunot@gmail.com> 🎨 Change layers order Signed-off-by: madmath03 <mb.mathieu.brunot@gmail.com> 🔧 Set Nginx logs permissions Signed-off-by: madmath03 <mb.mathieu.brunot@gmail.com> 🐛 Use sudo to create nginx logs Signed-off-by: madmath03 <mb.mathieu.brunot@gmail.com>
This commit is contained in:
parent
8b45ed9c0c
commit
43e75401d7
5 changed files with 327 additions and 0 deletions
84
.gitpod.yml
Normal file
84
.gitpod.yml
Normal file
|
@ -0,0 +1,84 @@
|
|||
image:
|
||||
file: docker/gitpod/Dockerfile
|
||||
|
||||
ports:
|
||||
# nginx
|
||||
- port: 3449
|
||||
onOpen: open-preview
|
||||
# frontend nREPL
|
||||
- port: 3447
|
||||
onOpen: ignore
|
||||
visibility: private
|
||||
# frontend shadow server
|
||||
- port: 3448
|
||||
onOpen: notify
|
||||
visibility: private
|
||||
- port: 6060
|
||||
- port: 9090
|
||||
# exporter shadow server
|
||||
- port: 9630
|
||||
onOpen: notify
|
||||
visibility: private
|
||||
# exporter http server
|
||||
- port: 6061
|
||||
onOpen: ignore
|
||||
# mailhog web interface
|
||||
- port: 8025
|
||||
onOpen: notify
|
||||
# mailhog postfix
|
||||
- port: 1025
|
||||
onOpen: ignore
|
||||
# postgres
|
||||
- port: 5432
|
||||
onOpen: ignore
|
||||
# redis
|
||||
- port: 6379
|
||||
onOpen: ignore
|
||||
# openldap
|
||||
- port: 389
|
||||
onOpen: ignore
|
||||
|
||||
tasks:
|
||||
# https://github.com/gitpod-io/gitpod/issues/666#issuecomment-534347856
|
||||
- before: >
|
||||
[[ ! -z ${GNUGPG} ]] &&
|
||||
cd ~ &&
|
||||
rm -rf .gnupg &&
|
||||
echo ${GNUGPG} | base64 -d | tar --no-same-owner -xzvf -
|
||||
name: signed terminal
|
||||
init: >
|
||||
[[ ! -z ${GNUGPG_KEY} ]] &&
|
||||
git config --global commit.gpgsign true &&
|
||||
git config --global user.signingkey ${GNUGPG_KEY}
|
||||
command: cd $GITPOD_REPO_ROOT
|
||||
|
||||
- init: yarn --cwd $GITPOD_REPO_ROOT/frontend/ install
|
||||
name: frontend shadow watch
|
||||
command: cd $GITPOD_REPO_ROOT/frontend/ && npx -y shadow-cljs watch main
|
||||
|
||||
- init: yarn --cwd $GITPOD_REPO_ROOT/exporter/ install
|
||||
name: exporter shadow watch
|
||||
command: gp await-port 3448 && cd $GITPOD_REPO_ROOT/exporter/ && npx -y shadow-cljs watch main
|
||||
|
||||
- name: exporter web server
|
||||
openMode: split-right
|
||||
command: gp await-port 9630 && cd $GITPOD_REPO_ROOT/exporter/ && ./scripts/wait-and-start.sh
|
||||
|
||||
- init: gp await-port 5432 && psql -f $GITPOD_REPO_ROOT/docker/gitpod/files/postgresql_init.sql
|
||||
name: backend
|
||||
command: cd $GITPOD_REPO_ROOT/backend/ && ./scripts/start-dev
|
||||
|
||||
- name: gulp
|
||||
command: gp await-port 3448 && cd $GITPOD_REPO_ROOT/frontend/ && npx -y gulp --theme=${PENPOT_THEME} watch
|
||||
|
||||
- name: redis
|
||||
command: redis-server
|
||||
|
||||
- before: go get github.com/mailhog/MailHog
|
||||
name: mailhog
|
||||
command: MailHog
|
||||
|
||||
- name: Nginx
|
||||
command: >
|
||||
nginx &&
|
||||
multitail /var/log/nginx/access.log -I /var/log/nginx/error.log
|
|
@ -5,6 +5,7 @@
|
|||
[![License: MPL-2.0][uri_license_image]][uri_license]
|
||||
[![Gitter](https://badges.gitter.im/sereno-xyz/community.svg)](https://gitter.im/penpot/community)
|
||||
[![Managed with Taiga.io](https://img.shields.io/badge/managed%20with-TAIGA.io-709f14.svg)](https://tree.taiga.io/project/penpot/ "Managed with Taiga.io")
|
||||
[![Gitpod ready-to-code](https://img.shields.io/badge/Gitpod-ready--to--code-blue?logo=gitpod)](https://gitpod.io/#https://github.com/penpot/penpot)
|
||||
|
||||
|
||||
# PENPOT #
|
||||
|
|
103
docker/gitpod/Dockerfile
Normal file
103
docker/gitpod/Dockerfile
Normal file
|
@ -0,0 +1,103 @@
|
|||
FROM gitpod/workspace-postgres
|
||||
|
||||
# Install custom tools, runtimes, etc.
|
||||
# For example "bastet", a command-line tetris clone:
|
||||
# RUN brew install bastet
|
||||
#
|
||||
# More information: https://www.gitpod.io/docs/config-docker/
|
||||
|
||||
RUN set -ex; \
|
||||
brew install redis; \
|
||||
brew install imagemagick; \
|
||||
brew install mailhog; \
|
||||
brew install openldap; \
|
||||
sudo mkdir -p /var/log/nginx; \
|
||||
sudo chown gitpod:gitpod /var/log/nginx
|
||||
|
||||
COPY docker/gitpod/files/nginx.conf /etc/nginx/nginx.conf
|
||||
|
||||
USER root
|
||||
|
||||
ENV CLOJURE_VERSION=1.10.3.814 \
|
||||
CLJKONDO_VERSION=2021.03.03 \
|
||||
LANG=en_US.UTF-8 \
|
||||
LC_ALL=en_US.UTF-8
|
||||
|
||||
RUN set -ex; \
|
||||
useradd -m -g users -s /bin/bash penpot; \
|
||||
passwd penpot -d; \
|
||||
echo "penpot ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers
|
||||
|
||||
RUN set -ex; \
|
||||
apt-get -qq update; \
|
||||
apt-get -qqy install \
|
||||
gconf-service \
|
||||
libasound2 \
|
||||
libatk1.0-0 \
|
||||
libatk-bridge2.0-0 \
|
||||
libcairo2 \
|
||||
libcups2 \
|
||||
libdbus-1-3 \
|
||||
libexpat1 \
|
||||
libfontconfig1 \
|
||||
libgcc1 \
|
||||
libgconf-2-4 \
|
||||
libgdk-pixbuf2.0-0 \
|
||||
libglib2.0-0 \
|
||||
libgtk-3-0 \
|
||||
libnspr4 \
|
||||
libpango-1.0-0 \
|
||||
libpangocairo-1.0-0 \
|
||||
libx11-6 \
|
||||
libx11-xcb1 \
|
||||
libxcb1 \
|
||||
libxcomposite1 \
|
||||
libxcursor1 \
|
||||
libxdamage1 \
|
||||
libxext6 \
|
||||
libxfixes3 \
|
||||
libxi6 \
|
||||
libxrandr2 \
|
||||
libxrender1 \
|
||||
libxss1 \
|
||||
libxtst6 \
|
||||
fonts-liberation \
|
||||
libappindicator1 \
|
||||
libnss3 \
|
||||
libgbm1 \
|
||||
; \
|
||||
rm -rf /var/lib/apt/lists/*;
|
||||
|
||||
RUN set -ex; \
|
||||
wget "https://download.clojure.org/install/linux-install-$CLOJURE_VERSION.sh"; \
|
||||
chmod +x "linux-install-$CLOJURE_VERSION.sh"; \
|
||||
"./linux-install-$CLOJURE_VERSION.sh"; \
|
||||
rm -rf "linux-install-$CLOJURE_VERSION.sh"
|
||||
|
||||
RUN set -ex; \
|
||||
cd /tmp; \
|
||||
wget "https://github.com/borkdude/clj-kondo/releases/download/v${CLJKONDO_VERSION}/clj-kondo-${CLJKONDO_VERSION}-linux-amd64.zip"; \
|
||||
unzip "clj-kondo-${CLJKONDO_VERSION}-linux-amd64.zip"; \
|
||||
sudo mv clj-kondo /usr/local/bin/; \
|
||||
rm "clj-kondo-${CLJKONDO_VERSION}-linux-amd64.zip";
|
||||
|
||||
USER gitpod
|
||||
|
||||
ENV PENPOT_SMTP_ENABLED=true \
|
||||
PENPOT_SMTP_HOST=localhost \
|
||||
PENPOT_SMTP_PORT=1025 \
|
||||
PENPOT_SMTP_USER= \
|
||||
PENPOT_SMTP_PASSWORD= \
|
||||
PENPOT_SMTP_SSL=false \
|
||||
PENPOT_SMTP_TLS=false \
|
||||
PENPOT_SMTP_DEFAULT_REPLY_TO=no-reply@example.com \
|
||||
PENPOT_SMTP_DEFAULT_FROM=no-reply@example.com \
|
||||
PENPOT_SMTP_ENABLED=true \
|
||||
PENPOT_SMTP_HOST=localhost \
|
||||
PENPOT_SMTP_PORT=1025 \
|
||||
PENPOT_SMTP_USER= \
|
||||
PENPOT_SMTP_PASSWORD= \
|
||||
PENPOT_SMTP_SSL=false \
|
||||
PENPOT_SMTP_TLS=false
|
||||
|
||||
# TODO Retrieve OpenLDAP from rroemhild/docker-test-openldap
|
136
docker/gitpod/files/nginx.conf
Normal file
136
docker/gitpod/files/nginx.conf
Normal file
|
@ -0,0 +1,136 @@
|
|||
# This Nginx config file is optional.
|
||||
# If you don't have this file, the Nginx config from the workspace-full docker image will be taken.
|
||||
|
||||
worker_processes auto;
|
||||
pid /var/run/nginx/nginx.pid;
|
||||
include /etc/nginx/modules-enabled/*.conf;
|
||||
|
||||
env GITPOD_REPO_ROOT;
|
||||
|
||||
events {
|
||||
worker_connections 768;
|
||||
# multi_accept on;
|
||||
}
|
||||
|
||||
http {
|
||||
sendfile on;
|
||||
tcp_nopush on;
|
||||
tcp_nodelay on;
|
||||
keepalive_timeout 65;
|
||||
types_hash_max_size 2048;
|
||||
# server_tokens off;
|
||||
|
||||
# server_names_hash_bucket_size 64;
|
||||
# server_name_in_redirect off;
|
||||
|
||||
include /etc/nginx/mime.types;
|
||||
default_type application/octet-stream;
|
||||
|
||||
access_log /var/log/nginx/access.log;
|
||||
error_log /var/log/nginx/error.log;
|
||||
|
||||
gzip on;
|
||||
|
||||
gzip_vary on;
|
||||
gzip_proxied any;
|
||||
gzip_comp_level 3;
|
||||
gzip_buffers 16 8k;
|
||||
gzip_http_version 1.1;
|
||||
|
||||
gzip_types text/plain text/css text/javascript application/javascript application/json application/transit+json;
|
||||
|
||||
map $http_upgrade $connection_upgrade {
|
||||
default upgrade;
|
||||
'' close;
|
||||
}
|
||||
|
||||
# include /etc/nginx/sites-enabled/*;
|
||||
|
||||
server {
|
||||
set_by_lua $gitpod_repo_root 'return os.getenv("GITPOD_REPO_ROOT")';
|
||||
|
||||
listen 0.0.0.0:3449 default_server;
|
||||
server_name _;
|
||||
|
||||
client_max_body_size 5M;
|
||||
charset utf-8;
|
||||
|
||||
proxy_http_version 1.1;
|
||||
proxy_set_header Host $http_host;
|
||||
proxy_set_header X-Real-IP $remote_addr;
|
||||
proxy_set_header X-Scheme $scheme;
|
||||
proxy_set_header X-Forwarded-Proto $scheme;
|
||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||
|
||||
resolver 8.8.8.8;
|
||||
|
||||
etag off;
|
||||
|
||||
root $gitpod_repo_root/frontend/resources/public;
|
||||
|
||||
location @handle_redirect {
|
||||
set $redirect_uri "$upstream_http_location";
|
||||
set $redirect_host "$upstream_http_x_host";
|
||||
set $redirect_cache_control "$upstream_http_cache_control";
|
||||
|
||||
proxy_buffering off;
|
||||
|
||||
proxy_set_header Host "$redirect_host";
|
||||
proxy_hide_header etag;
|
||||
proxy_hide_header x-amz-id-2;
|
||||
proxy_hide_header x-amz-request-id;
|
||||
proxy_hide_header x-amz-meta-server-side-encryption;
|
||||
proxy_hide_header x-amz-server-side-encryption;
|
||||
proxy_pass $redirect_uri;
|
||||
|
||||
add_header x-internal-redirect "$redirect_uri";
|
||||
add_header x-cache-control "$redirect_cache_control";
|
||||
add_header cache-control "$redirect_cache_control";
|
||||
}
|
||||
|
||||
location /assets {
|
||||
proxy_pass http://127.0.0.1:6060/assets;
|
||||
recursive_error_pages on;
|
||||
proxy_intercept_errors on;
|
||||
error_page 301 302 307 = @handle_redirect;
|
||||
}
|
||||
|
||||
location /internal/assets {
|
||||
internal;
|
||||
alias $gitpod_repo_root/backend/resources/public/assets;
|
||||
add_header x-internal-redirect "$upstream_http_x_accel_redirect";
|
||||
}
|
||||
|
||||
location /api {
|
||||
proxy_pass http://127.0.0.1:6060/api;
|
||||
}
|
||||
|
||||
location /webhooks {
|
||||
proxy_pass http://127.0.0.1:6060/webhooks;
|
||||
}
|
||||
|
||||
location /dbg {
|
||||
proxy_pass http://127.0.0.1:6060/dbg;
|
||||
}
|
||||
|
||||
location /export {
|
||||
proxy_pass http://127.0.0.1:6061;
|
||||
}
|
||||
|
||||
location /playground {
|
||||
alias $gitpod_repo_root/experiments/;
|
||||
add_header Cache-Control "no-cache, max-age=0";
|
||||
autoindex on;
|
||||
}
|
||||
|
||||
location /ws/notifications {
|
||||
proxy_set_header Upgrade $http_upgrade;
|
||||
proxy_set_header Connection 'upgrade';
|
||||
proxy_pass http://127.0.0.1:6060/ws/notifications;
|
||||
}
|
||||
|
||||
location / {
|
||||
add_header Cache-Control "no-cache, max-age=0";
|
||||
}
|
||||
}
|
||||
}
|
3
docker/gitpod/files/postgresql_init.sql
Normal file
3
docker/gitpod/files/postgresql_init.sql
Normal file
|
@ -0,0 +1,3 @@
|
|||
CREATE DATABASE penpot;
|
||||
CREATE USER penpot PASSWORD 'penpot';
|
||||
ALTER ROLE penpot SUPERUSER;
|
Loading…
Reference in a new issue