Skip to content

Commit a0e6381

Browse files
committed
Init commit.
0 parents  commit a0e6381

File tree

8 files changed

+537
-0
lines changed

8 files changed

+537
-0
lines changed
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
name: Update Coder Template
2+
3+
on:
4+
release:
5+
types: [ released, prereleased ]
6+
7+
jobs:
8+
update:
9+
runs-on: ubuntu-latest
10+
steps:
11+
- name: Checkout
12+
uses: actions/checkout@v3
13+
- name: Get latest commit hash
14+
id: latest_commit
15+
run: echo "hash=$(git rev-parse --short HEAD)" >> $GITHUB_OUTPUT
16+
- name: Get commit title
17+
id: commit_title
18+
run: echo "title=$(git log -1 --pretty=%s)" >> $GITHUB_OUTPUT
19+
20+
- name: Update Coder Template
21+
uses: matifali/update-coder-template@v3
22+
with:
23+
id: coder-php-laravel
24+
dir: coder-php-laravel
25+
url: ${{ secrets.CODER_URL }}
26+
name: ${{ steps.latest_commit.outputs.hash }}
27+
message: ${{ steps.commit_title.outputs.title }}
28+
coder_session_token: ${{ secrets.CODER_SESSION_TOKEN }}

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
.idea

README.md

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
---
2+
display_name: Laravel (PHP 8.3)
3+
description: Coder Template for Laravel (PHP 8.3)
4+
icon: https://laravel.com/img/logomark.min.svg
5+
maintainer_github: vkambulov
6+
verified: true
7+
tags: [docker, container, laravel, php]
8+
---
9+
10+
# Remote Development for Laravel
11+
12+
[Coder Template](https://coder.com/docs/v2/latest/templates) for [Laravel](https://laravel.com) with PHP 8.3.
13+
14+
## TODO
15+
16+
- [ ] Fix PHPMyAdmin work.
17+
- [ ] Fix Coder 80/443 ports proxy.
18+
- [ ] Download and unzip archive instead git clone for repositories.

build/Dockerfile

Lines changed: 105 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,105 @@
1+
FROM ubuntu:22.04
2+
3+
ARG NODE_VERSION=20
4+
ARG POSTGRES_VERSION=15
5+
ARG USER=coder
6+
7+
WORKDIR $WORKDIR
8+
9+
ENV DEBIAN_FRONTEND noninteractive
10+
ENV TZ=UTC
11+
12+
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
13+
14+
RUN apt-get update \
15+
&& mkdir -p /etc/apt/keyrings \
16+
&& apt-get install -y gnupg gosu curl ca-certificates zip unzip supervisor sqlite3 libcap2-bin libpng-dev python2 dnsutils librsvg2-bin fswatch ffmpeg \
17+
build-essential htop jq locales man python3 python3-pip software-properties-common sudo systemd systemd-sysv wget rsync nano phpmyadmin apache2 \
18+
&& add-apt-repository ppa:git-core/ppa \
19+
&& apt-get install --yes git \
20+
&& curl -sS 'https://keyserver.ubuntu.com/pks/lookup?op=get&search=0x14aa40ec0831756756d7f66c4f4ea0aae5267a6c' | gpg --dearmor | tee /etc/apt/keyrings/ppa_ondrej_php.gpg > /dev/null \
21+
&& echo "deb [signed-by=/etc/apt/keyrings/ppa_ondrej_php.gpg] https://ppa.launchpadcontent.net/ondrej/php/ubuntu jammy main" > /etc/apt/sources.list.d/ppa_ondrej_php.list \
22+
&& apt-get update \
23+
&& apt-get install -y php8.3-cli php8.3-dev \
24+
php8.3-pgsql php8.3-sqlite3 php8.3-gd \
25+
php8.3-curl \
26+
php8.3-imap php8.3-mysql php8.3-mbstring \
27+
php8.3-xml php8.3-zip php8.3-bcmath php8.3-soap \
28+
php8.3-intl php8.3-readline \
29+
php8.3-ldap \
30+
php8.3-msgpack php8.3-igbinary php8.3-redis php8.3-swoole \
31+
php8.3-memcached php8.3-pcov php8.3-imagick php8.3-xdebug \
32+
php8.3-fpm libapache2-mod-php8.3 \
33+
&& curl -sLS https://getcomposer.org/installer | php -- --install-dir=/usr/bin/ --filename=composer \
34+
&& curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg \
35+
&& echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_$NODE_VERSION.x nodistro main" > /etc/apt/sources.list.d/nodesource.list \
36+
&& apt-get update \
37+
&& apt-get install -y nodejs \
38+
&& npm install -g npm \
39+
&& npm install -g pnpm \
40+
&& npm install -g bun \
41+
&& curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | gpg --dearmor | tee /etc/apt/keyrings/yarn.gpg >/dev/null \
42+
&& echo "deb [signed-by=/etc/apt/keyrings/yarn.gpg] https://dl.yarnpkg.com/debian/ stable main" > /etc/apt/sources.list.d/yarn.list \
43+
&& curl -sS https://www.postgresql.org/media/keys/ACCC4CF8.asc | gpg --dearmor | tee /etc/apt/keyrings/pgdg.gpg >/dev/null \
44+
&& echo "deb [signed-by=/etc/apt/keyrings/pgdg.gpg] http://apt.postgresql.org/pub/repos/apt jammy-pgdg main" > /etc/apt/sources.list.d/pgdg.list \
45+
&& curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg \
46+
&& echo "deb [arch=amd64 signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu jammy stable" > /etc/apt/sources.list.d/docker.list \
47+
&& curl -fsSL https://packages.redis.io/gpg | sudo gpg --dearmor -o /usr/share/keyrings/redis-archive-keyring.gpg \
48+
&& echo "deb [signed-by=/usr/share/keyrings/redis-archive-keyring.gpg] https://packages.redis.io/deb $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/redis.list \
49+
&& apt-get update \
50+
&& apt-get install -y yarn \
51+
&& apt-get install -y mysql-server mysql-client \
52+
&& apt-get install -y postgresql-$POSTGRES_VERSION \
53+
&& apt-get install -y containerd.io docker-ce docker-ce-cli docker-buildx-plugin docker-compose-plugin \
54+
&& apt-get install -y redis
55+
56+
RUN apt-get -y autoremove \
57+
&& apt-get clean \
58+
&& rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
59+
60+
RUN sed -i -e 's/# en_US.UTF-8 UTF-8/en_US.UTF-8 UTF-8/' /etc/locale.gen && \
61+
dpkg-reconfigure --frontend=noninteractive locales && \
62+
update-locale LANG=en_US.UTF-8
63+
64+
ENV LANG en_US.UTF-8
65+
66+
RUN setcap "cap_net_bind_service=+ep" /usr/bin/php8.3
67+
68+
RUN ln -s /usr/libexec/docker/cli-plugins/docker-compose /usr/bin/docker-compose
69+
70+
COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf
71+
COPY php.ini /etc/php/8.3/cli/conf.d/99-sail.ini
72+
73+
# Setting up phpmyadmin
74+
RUN mkdir -p /ssl
75+
RUN openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
76+
-keyout /ssl/apache.key -out /ssl/apache.crt \
77+
-subj "/C=US/ST=State/L=City/O=Organization/OU=Organizational Unit/CN=localhost"
78+
79+
RUN a2enmod ssl
80+
RUN sed -ri -e 's,80,4443,' /etc/apache2/sites-available/000-default.conf
81+
RUN sed -i -e '/^<\/VirtualHost>/i SSLEngine on' /etc/apache2/sites-available/000-default.conf
82+
RUN sed -i -e '/^<\/VirtualHost>/i SSLCertificateFile /ssl/apache.crt' /etc/apache2/sites-available/000-default.conf
83+
RUN sed -i -e '/^<\/VirtualHost>/i SSLCertificateKeyFile /ssl/apache.key' /etc/apache2/sites-available/000-default.conf
84+
85+
RUN sed -ri -e 's,80,8080,' /etc/apache2/ports.conf
86+
RUN sed -ri -e 's,443,4443,' /etc/apache2/ports.conf
87+
88+
# RUN echo "\$cfg['ForceSSL'] = 'true';" >> /etc/phpmyadmin/config.inc.php
89+
# RUN sed -i "/\$cfg\['Servers'\]\[\$i\]\['auth_type'\] = 'cookie';/c\\\$cfg\['Servers'\]\[\$i\]\['auth_type'\] = 'http';" /etc/phpmyadmin/config.inc.php
90+
RUN ln -s /etc/phpmyadmin/apache.conf /etc/apache2/conf-available/phpmyadmin.conf
91+
RUN a2enconf phpmyadmin.conf
92+
RUN a2enconf php8.3-fpm
93+
# RUN sed -i "/VirtualHost \*:80/c\\<VirtualHost \*:8080\>" /etc/apache2/sites-enabled/000-default.conf
94+
# RUN sed -i "/Listen 80/c\Listen 8080" /etc/apache2/ports.conf
95+
RUN apachectl configtest
96+
97+
COPY start.sh /usr/local/bin/start.sh
98+
RUN chmod +x /usr/local/bin/start.sh
99+
RUN sed -i -e 's/\r$//' /usr/local/bin/start.sh
100+
101+
RUN useradd --groups sudo --create-home --shell /bin/bash $USER \
102+
&& echo "${USER} ALL=(ALL) NOPASSWD:ALL" >/etc/sudoers.d/${USER} \
103+
&& chmod 0440 /etc/sudoers.d/${USER}
104+
105+
USER ${USER}

build/php.ini

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
[PHP]
2+
post_max_size = 100M
3+
upload_max_filesize = 100M
4+
variables_order = EGPCS
5+
pcov.directory = .
6+
7+
[opcache]
8+
opcache.enable_cli=1

build/start.sh

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
#!/bin/bash
2+
3+
set -e
4+
5+
cd $WORKDIR
6+
7+
sudo chown -R $USER:$USER /var/www/html
8+
sudo chown -R $USER:$USER /home/$USER
9+
10+
if [ ! -z "$WWWUSER" ]; then
11+
sudo usermod -u $WWWUSER $USER
12+
fi
13+
14+
sudo systemctl enable docker
15+
16+
sudo service mysql start
17+
sudo service postgresql start
18+
sudo service redis-server start
19+
sudo service apache2 start
20+
sudo service apache2 reload
21+
22+
# install and start code-server
23+
curl -fsSL https://code-server.dev/install.sh | sh -s -- --method=standalone --prefix=/tmp/code-server --version 4.22.1
24+
/tmp/code-server/bin/code-server --auth none --port 13337 >/tmp/code-server.log 2>&1 &
25+
26+
if [ -z "$(ls -A $WORKDIR)" ]; then
27+
git clone $GIT_URL $WORKDIR
28+
fi
29+
30+
/usr/bin/php8.3 /usr/bin/composer install
31+
32+
npm i
33+
npm run build
34+
35+
if [ ! -e ".env" ]; then
36+
cp .env.example .env
37+
38+
sed -i 's/^DB_CONNECTION=.*/DB_CONNECTION=mysql/' .env
39+
40+
sed -i 's/^# DB_USERNAME=.*/DB_USERNAME=sail/' .env
41+
sed -i 's/^DB_USERNAME=.*/DB_USERNAME=sail/' .env
42+
43+
sed -i 's/^# DB_DATABASE=.*/DB_DATABASE=laravel/' .env
44+
sed -i 's/^DB_DATABASE=.*/DB_DATABASE=laravel/' .env
45+
46+
sed -i 's/^# DB_PASSWORD=.*/DB_PASSWORD=password/' .env
47+
sed -i 's/^DB_PASSWORD=.*/DB_PASSWORD=password/' .env
48+
49+
sed -i 's/^REDIS_CLIENT=.*/REDIS_CLIENT=redis/' .env
50+
51+
sudo mysql --user=root <<-EOSQL
52+
CREATE USER 'sail'@'%' IDENTIFIED BY 'password';
53+
CREATE DATABASE IF NOT EXISTS laravel;
54+
GRANT ALL PRIVILEGES ON \`laravel%\`.* TO 'sail'@'%';
55+
EOSQL
56+
57+
/usr/bin/php8.3 artisan key:generate
58+
/usr/bin/php8.3 artisan migrate
59+
fi
60+
61+
sudo /usr/bin/supervisord -s -c /etc/supervisor/conf.d/supervisord.conf >/tmp/supervisor.log 2>&1 &

build/supervisord.conf

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
[supervisord]
2+
nodaemon=true
3+
user=root
4+
logfile=/var/log/supervisor/supervisord.log
5+
pidfile=/var/run/supervisord.pid
6+
7+
[program:php]
8+
command=/usr/bin/php8.3 -d variables_order=EGPCS /var/www/html/project/artisan serve --host=0.0.0.0 --port=80
9+
user=coder
10+
environment=LARAVEL_SAIL="1"
11+
stdout_logfile=/dev/stdout
12+
stdout_logfile_maxbytes=0
13+
stderr_logfile=/dev/stderr
14+
stderr_logfile_maxbytes=0

0 commit comments

Comments
 (0)