Skip to content

Commit 6908840

Browse files
committed
Various improvements.
1 parent 07fa3b6 commit 6908840

File tree

4 files changed

+76
-36
lines changed

4 files changed

+76
-36
lines changed

README.md

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,5 +14,6 @@ tags: [docker, container, laravel, php]
1414
## TODO
1515

1616
- [ ] Fix PHPMyAdmin work.
17-
- [ ] Fix Coder 80/443 ports proxy.
18-
- [ ] Download and unzip archive instead git clone for repositories.
17+
- [ ] Download and unzip archive instead git clone for some repositories.
18+
- [ ] Postgresql support
19+
- [ ] Support Docker inside Coder container

build/Dockerfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ RUN apt-get update \
2929
php8.3-ldap \
3030
php8.3-msgpack php8.3-igbinary php8.3-redis php8.3-swoole \
3131
php8.3-memcached php8.3-pcov php8.3-imagick php8.3-xdebug \
32-
php8.3-fpm libapache2-mod-php8.3 \
32+
php8.3-fpm libapache2-mod-php8.3 php8.3-mailparse \
3333
&& curl -sLS https://getcomposer.org/installer | php -- --install-dir=/usr/bin/ --filename=composer \
3434
&& curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg \
3535
&& 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 \

build/start.sh

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@ cd $WORKDIR
77
sudo chown -R $USER:$USER /var/www/html
88
sudo chown -R $USER:$USER /home/$USER
99

10+
sudo rm -rf $WORKDIR/*
11+
1012
if [ ! -z "$WWWUSER" ]; then
1113
sudo usermod -u $WWWUSER $USER
1214
fi
@@ -20,7 +22,7 @@ sudo service apache2 start
2022
sudo service apache2 reload
2123

2224
# 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
25+
curl -fsSL https://code-server.dev/install.sh | sh -s -- --method=standalone --prefix=/tmp/code-server
2426
/tmp/code-server/bin/code-server --auth none --port 13337 >/tmp/code-server.log 2>&1 &
2527

2628
if [ -z "$(ls -A $WORKDIR)" ]; then
@@ -56,6 +58,10 @@ EOSQL
5658

5759
/usr/bin/php8.3 artisan key:generate
5860
/usr/bin/php8.3 artisan migrate
61+
62+
if $SEED; then
63+
/usr/bin/php8.3 artisan db:seed
64+
fi
5965
fi
6066

6167
sudo /usr/bin/supervisord -s -c /etc/supervisor/conf.d/supervisord.conf >/tmp/supervisor.log 2>&1 &

main.tf

Lines changed: 65 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -26,16 +26,16 @@ module "filebrowser" {
2626
source = "registry.coder.com/modules/filebrowser/coder"
2727
version = "1.0.8"
2828
agent_id = coder_agent.main.id
29-
folder = "/var/www/html/project"
29+
folder = "/var/www/html"
3030
}
3131

3232
module "jetbrains_gateway" {
3333
source = "registry.coder.com/modules/jetbrains-gateway/coder"
3434
version = "1.0.9"
3535
agent_id = coder_agent.main.id
3636
agent_name = "main"
37-
folder = "/var/www/html/project"
38-
jetbrains_ides = ["GO", "WS", "IU", "PS"]
37+
folder = "/var/www/html"
38+
jetbrains_ides = ["WS", "IU", "PS"]
3939
default = "IU"
4040
}
4141

@@ -63,17 +63,33 @@ resource "coder_app" "phpmyadmin" {
6363
subdomain = false
6464
}
6565

66+
resource "coder_app" "code-server" {
67+
agent_id = coder_agent.main.id
68+
slug = "code-server"
69+
display_name = "VS Code Online"
70+
url = "http://localhost:13337/?folder=/var/www/html"
71+
icon = "/icon/code.svg"
72+
subdomain = false
73+
share = "owner"
74+
75+
healthcheck {
76+
url = "http://localhost:13337/healthz"
77+
interval = 5
78+
threshold = 6
79+
}
80+
}
81+
6682
resource "coder_agent" "main" {
6783
arch = data.coder_provisioner.me.arch
6884
os = "linux"
6985
startup_script = "/usr/local/bin/start.sh"
7086

71-
# dir = "/var/www/html/project"
87+
dir = "/var/www/html"
7288

7389
env = {
74-
GIT_AUTHOR_NAME = coalesce(data.coder_workspace.me.owner_name, data.coder_workspace.me.owner)
90+
GIT_AUTHOR_NAME = data.coder_workspace.me.owner
7591
GIT_AUTHOR_EMAIL = data.coder_workspace.me.owner_email
76-
GIT_COMMITTER_NAME = coalesce(data.coder_workspace.me.owner_name, data.coder_workspace.me.owner)
92+
GIT_COMMITTER_NAME = data.coder_workspace.me.owner
7793
GIT_COMMITTER_EMAIL = data.coder_workspace.me.owner_email
7894
GITHUB_TOKEN = data.coder_external_auth.github.access_token
7995
}
@@ -121,7 +137,6 @@ resource "coder_agent" "main" {
121137
metadata {
122138
display_name = "Load Average (Host)"
123139
key = "6_load_host"
124-
# get load avg scaled by number of cores
125140
script = <<EOT
126141
echo "`cat /proc/loadavg | awk '{ print $1 }'` `nproc`" | awk '{ printf "%0.2f", $1/$2 }'
127142
EOT
@@ -140,22 +155,6 @@ resource "coder_agent" "main" {
140155
}
141156
}
142157

143-
resource "coder_app" "code-server" {
144-
agent_id = coder_agent.main.id
145-
slug = "code-server"
146-
display_name = "code-server"
147-
url = "http://localhost:13337/?folder=/var/www/html"
148-
icon = "/icon/code.svg"
149-
subdomain = false
150-
share = "owner"
151-
152-
healthcheck {
153-
url = "http://localhost:13337/healthz"
154-
interval = 5
155-
threshold = 6
156-
}
157-
}
158-
159158
resource "docker_volume" "workspaces" {
160159
name = "coder-${data.coder_workspace.me.id}"
161160
# Protect the volume from being deleted due to changes in attributes.
@@ -211,14 +210,52 @@ data "coder_parameter" "custom_repo_url" {
211210
mutable = true
212211
}
213212

213+
data "coder_parameter" "home_volume" {
214+
name = "home_volume"
215+
display_name = "Home folder volume"
216+
order = 3
217+
description = "Select how the Home folder volume will be used."
218+
mutable = true
219+
220+
option {
221+
name = "Local"
222+
description = "The volume name will only be associated with this project"
223+
value = "${docker_volume.workspaces.name}-home"
224+
}
225+
option {
226+
name = "Global"
227+
description = "The volume can be reused for other projects"
228+
value = "coder-home"
229+
}
230+
}
231+
232+
data "coder_parameter" "laravel_seed" {
233+
name = "laravel_seed"
234+
display_name = "Run Laravel Seeder?"
235+
order = 4
236+
description = "Run db:seed command after setting up project."
237+
type = "bool"
238+
mutable = true
239+
default = false
240+
241+
option {
242+
name = "Yes"
243+
value = true
244+
}
245+
option {
246+
name = "No"
247+
value = false
248+
}
249+
}
250+
214251
resource "docker_image" "main" {
215252
name = "coder-${data.coder_workspace.me.id}"
216253

217254
build {
218255
context = "./build"
219256
build_args = {
220257
USER = "coder"
221-
WORKDIR = "/var/www/html/project"
258+
WORKDIR = "/var/www/html"
222259
}
223260
}
224261

@@ -230,10 +267,6 @@ resource "docker_image" "main" {
230267
resource "docker_container" "workspace" {
231268
count = data.coder_workspace.me.start_count
232269

233-
# Find the latest version here:
234-
# https://github.com/coder/envbuilder/tags
235-
# image = "ghcr.io/coder/envbuilder:0.2.8"
236-
237270
image = docker_image.main.name
238271

239272
# Uses lower() to avoid Docker restriction on container names.
@@ -250,7 +283,8 @@ resource "docker_container" "workspace" {
250283
"CODER_AGENT_URL=${replace(data.coder_workspace.me.access_url, "/localhost|127\\.0\\.0\\.1/", "host.docker.internal")}",
251284
"INIT_SCRIPT=${replace(coder_agent.main.init_script, "/localhost|127\\.0\\.0\\.1/", "host.docker.internal")}",
252285
"GIT_URL=${data.coder_parameter.repo.value == "custom" ? data.coder_parameter.custom_repo_url.value : data.coder_parameter.repo.value}",
253-
"WORKDIR=/var/www/html/project"
286+
"WORKDIR=/var/www/html",
287+
"SEED=${data.coder_parameter.laravel_seed.value}"
254288
]
255289

256290
host {
@@ -259,7 +293,7 @@ resource "docker_container" "workspace" {
259293
}
260294

261295
volumes {
262-
container_path = "/var/www/html/project"
296+
container_path = "/var/www/html"
263297
volume_name = docker_volume.workspaces.name
264298
read_only = false
265299
}
@@ -278,11 +312,10 @@ resource "docker_container" "workspace" {
278312

279313
volumes {
280314
container_path = "/home/coder"
281-
volume_name = "${docker_volume.workspaces.name}-home"
315+
volume_name = data.coder_parameter.home_volume.value
282316
read_only = false
283317
}
284318

285-
# Add labels in Docker to keep track of orphan resources.
286319
labels {
287320
label = "coder.owner"
288321
value = data.coder_workspace.me.owner

0 commit comments

Comments
 (0)