1
0

🏗️」 wip: FTP should be working but f*ck it let's drink beers

This commit is contained in:
2025-03-02 18:22:11 +01:00
parent d82f107bd6
commit 2673f6ef0b
9 changed files with 173 additions and 60 deletions

View File

@ -1,21 +1,56 @@
package main
import (
"bytes"
"os"
"fmt"
"log"
"os/exec"
"git.keyzox.me/42_adjoly/inception/internal/cmd"
"git.keyzox.me/42_adjoly/inception/internal/env"
_log "git.keyzox.me/42_adjoly/inception/internal/log"
)
func configFtp() {
_log.Log("note", "Configuring VSFTPD...")
ftpUser := env.FileEnv("FTP_USER", "ftp")
ftpPass := env.FileEnv("FTP_PASS", "ftppass")
cmd.ExecCmd([]string{"adduser", ftpUser, "--disabled-password"})
var stdin bytes.Buffer
stdin.WriteString(fmt.Sprintf("%s:%s", ftpUser, ftpPass))
cmd := exec.Command("/usr/sbin/chpasswd")
cmd.Stdin = &stdin
err := cmd.Run()
if err != nil {
log.Fatal(err)
}
_, err = os.Create("/etc/vsftpd.check")
if err != nil {
log.Fatal("could not create check file :O")
}
os.WriteFile("/etc/vsftpd/vsftpd.userlist", []byte(ftpUser), 0766)
_log.Log("note", "VSFTPD configured ;D")
}
func main() {
args := os.Args
if args[1] == "vsftpd" {
_log.Log("note", "Entrypoint script for VSFTPD Server started")
_, err := os.ReadFile("/etc/vsftpd.check")
if err != nil {
configFtp()
} else {
_log.Log("note", "VSFTPD already configured, skipping...")
}
dir, err := os.ReadDir("/docker-entrypoint.d")
if err != nil {
log.Fatal(err)
@ -40,8 +75,7 @@ func main() {
cmd.Stderr = os.Stderr
cmd.Stdin = os.Stdin
if err := cmd.Run(); err != nil {
fmt.Printf("Error running NGINX: %v\n", err)
fmt.Printf("Error running VSFTPD: %v\n", err)
os.Exit(1)
}
}

View File

@ -9,9 +9,6 @@ networks:
inception:
external: false
include:
- docker/bonus/compose.yml
services:
nginx:
container_name: inception-nginx
@ -85,3 +82,33 @@ services:
volumes:
- wp-db:/var/lib/mysql
restart: unless-stopped
ftp:
build:
context: .
dockerfile: docker/bonus/vsftpd/Dockerfile
ports:
- 2100:2100
- 30000-30100:30000-30100
volumes:
- wp-site:/var/ftp
environment:
- FTP_USER=kanel
- FTP_PASS=legoat
depends_on:
nginx:
condition: service_started
wordpress-php:
condition: service_healthy
static-site:
build: docker/bonus/static-site
ports:
- 8080:443
depends_on:
- nginx
environment:
- TZ=Europe/Paris
- NGINX_SSL_KEY_FILE=/etc/nginx/ssl/kanel-wp.key
- NGINX_SSL_CERT_FILE=/etc/nginx/ssl/kanel-wp.crt

View File

@ -1,22 +0,0 @@
services:
static-site:
build: static-site
ports:
- 8080:443
depends_on:
- nginx
environment:
- TZ=Europe/Paris
- NGINX_SSL_KEY_FILE=/etc/nginx/ssl/kanel-wp.key
- NGINX_SSL_CERT_FILE=/etc/nginx/ssl/kanel-wp.crt
ftp:
build: vsftp
ports:
- 2100:21
- 30000-30100:30000-30100
depends_on:
nginx:
condition: service_started
wordpress-php:
condition: service_healthy

View File

@ -1,11 +1,39 @@
FROM inception-nginx
FROM scratch as builder
ADD docker/alpine/alpine-minirootfs-3.21.2-x86_64.tar.gz /
RUN apk add --no-cache go
WORKDIR /build
COPY go.mod /build/go.mod
COPY cmd /build/cmd
COPY internal /build/internal
RUN cd /build \
&& go build git.keyzox.me/42_adjoly/inception/cmd/vsftpd/entrypoint
FROM scratch
ADD docker/alpine/alpine-minirootfs-3.21.2-x86_64.tar.gz /
LABEL maintainer="KeyZox"
LABEL version="0.1"
RUN apk add vsftpd
COPY --from=builder /build/entrypoint /docker-entrypoint
COPY docker/bonus/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf
RUN apk add vsftpd \
&& mkdir -p /var/ftp \
&& mkdir -p /docker-entrypoint.d
VOLUME /var/ftp
ENTRYPOINT [ "/docker-entrypoint" ]
WORKDIR /etc/vsftpd
EXPOSE 21
EXPOSE 30000-30100
CMD [ "vsftpd" ]
STOPSIGNAL SIGQUIT
CMD [ "vsftpd", "/etc/vsftpd/vsftpd.conf" ]

View File

@ -9,10 +9,10 @@ ftpd_banner=Welcome to your WordPress FTP server.
chroot_local_user=YES
allow_writeable_chroot=YES
user_sub_token=$USER
local_root=/var/www/wordpress
local_root=/var/ftp
listen=YES
listen_port=21
listen_port=2100
listen_address=0.0.0.0
seccomp_sandbox=NO

View File

@ -1,3 +1,18 @@
FROM scratch AS builder
ADD docker/alpine/alpine-minirootfs-3.21.2-x86_64.tar.gz /
RUN apk add go
WORKDIR /build
COPY go.mod /build/go.mod
COPY cmd /build/cmd
COPY internal /build/internal
RUN cd /build \
&& go build git.keyzox.me/42_adjoly/inception/cmd/mariadb/entrypoint \
&& go build git.keyzox.me/42_adjoly/inception/cmd/mariadb/healthcheck
FROM scratch
ADD docker/alpine/alpine-minirootfs-3.21.2-x86_64.tar.gz /
@ -7,6 +22,9 @@ LABEL maintainer="KeyZox"
RUN addgroup mysql \
&& adduser -S -G mysql mysql -h /var/lib/mysql
COPY --from=builder /build/entrypoint /docker-entrypoint
COPY --from=builder /build/healthcheck /docker-healthcheck
RUN mkdir /build
COPY go.mod /build/go.mod
@ -14,18 +32,12 @@ COPY cmd /build/cmd
COPY internal /build/internal
RUN apk add --no-cache go mariadb tzdata mariadb-client \
&& cd /build \
&& go build git.keyzox.me/42_adjoly/inception/cmd/mariadb/entrypoint \
&& go build git.keyzox.me/42_adjoly/inception/cmd/mariadb/healthcheck \
&& cp /build/entrypoint /docker-entrypoint \
&& cp /build/healthcheck /docker-healthcheck \
&& chmod +x /docker-healthcheck \
&& chmod +x /docker-entrypoint \
&& apk del go \
&& mkdir -p /etc/mysql/conf.d /etc/mysql/mariadb.conf.d/ /run/mariadb /run/mysqld \
&& chmod ugo+rwx,o+t /run/mariadb \
&& chown -R mysql:mysql /var/lib/mysql /run/mariadb /run/mysqld \
&& rm -Rf /build \
&& rm -rf /var/cache/apk/*
ENV LANG=C.UTF-8
@ -39,4 +51,4 @@ WORKDIR /var/lib/mysql
EXPOSE 3306
CMD [ "mariadbd", "--user=mysql" ]
HEALTHCHECK --interval=30s --timeout=10s --retries=3 --start-period=3s --start-interval=2s CMD /docker-healthcheck
HEALTHCHECK --interval=30s --timeout=10s --retries=3 --start-period=1s --start-interval=2s CMD /docker-healthcheck

View File

@ -1,26 +1,34 @@
FROM scratch AS builder
ADD docker/alpine/alpine-minirootfs-3.21.2-x86_64.tar.gz /
RUN apk add --no-cache go
WORKDIR /build
COPY go.sum /build/go.sum
COPY go.mod /build/go.mod
COPY cmd /build/cmd
COPY internal /build/internal
RUN cd /build \
&& go get git.keyzox.me/42_adjoly/inception/cmd/nginx/entrypoint \
&& go build git.keyzox.me/42_adjoly/inception/cmd/nginx/entrypoint
FROM scratch
ADD docker/alpine/alpine-minirootfs-3.21.2-x86_64.tar.gz /
LABEL version="0.1"
LABEL maintainer="KeyZox"
COPY go.mod /build/go.mod
COPY cmd /build/cmd
COPY internal /build/internal
COPY --from=builder /build/entrypoint /docker-entrypoint
RUN set -x \
&& addgroup -g 101 -S nginx\
&& adduser -S -D -H -u 101 -h /var/cache/nginx -s /sbin/nologin -G nginx -g nginx nginx \
&& apk add --no-cache go nginx openssl tzdata envsubst curl \
&& cd /build \
&& go get git.keyzox.me/42_adjoly/inception/cmd/nginx/entrypoint \
&& go build git.keyzox.me/42_adjoly/inception/cmd/nginx/entrypoint \
&& cp /build/entrypoint /docker-entrypoint \
&& apk add --no-cache nginx openssl tzdata envsubst curl \
&& chmod +x /docker-entrypoint \
&& apk del go \
&& ln -sf /dev/stdout /var/log/nginx/access.log \
&& ln -sf /dev/stderr /var/log/nginx/error.log \
&& rm -Rf /build \
&& rm -rf /var/cache/apk/* \
&& mkdir -p /var/www/html \
&& mkdir -p /etc/nginx/conf.d \

View File

@ -1,32 +1,39 @@
FROM scratch AS builder
ADD docker/alpine/alpine-minirootfs-3.21.2-x86_64.tar.gz /
RUN apk add go
WORKDIR /build
COPY go.mod /build/go.mod
COPY cmd /build/cmd
COPY internal /build/internal
RUN cd /build \
&& go build git.keyzox.me/42_adjoly/inception/cmd/wordpress/entrypoint
FROM scratch
ADD docker/alpine/alpine-minirootfs-3.21.2-x86_64.tar.gz /
LABEL version="0.1"
LABEL maintainer="KeyZox"
RUN set -x \
&& adduser -u 82 -D -S -G www-data www-data
COPY go.mod /build/go.mod
COPY cmd /build/cmd
COPY internal /build/internal
COPY --from=builder /build/entrypoint /docker-entrypoint
COPY docker/wordpress/www-docker.conf /www-docker.conf
RUN apk add --no-cache go curl tzdata fcgi \
RUN set -x \
&& adduser -u 82 -D -S -G www-data www-data \
&& apk add --no-cache curl tzdata fcgi \
php84-phar php84-xml php84-curl php84-zip \
php84-intl php84-mbstring php84-iconv \
php84 php84-mysqli php84-fpm php84-json \
php84-zlib php84-session php84-dom \
php84-xmlreader php84-pdo php84-gd \
php84-opcache php84-ctype \
&& cd /build \
&& curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar \
&& chmod +x wp-cli.phar \
&& mv wp-cli.phar /usr/local/bin/wp \
&& go build git.keyzox.me/42_adjoly/inception/cmd/wordpress/entrypoint \
&& cp /build/entrypoint /docker-entrypoint \
&& chmod +x /docker-entrypoint \
&& apk del go \
&& rm -Rf /build \
&& mkdir /docker-entrypoint.d

19
srcs/internal/cmd/cmd.go Normal file
View File

@ -0,0 +1,19 @@
package cmd
import (
"os"
"os/exec"
_log "git.keyzox.me/42_adjoly/inception/internal/log"
)
func ExecCmd(cmdStr []string) {
cmd := exec.Command(cmdStr[0], cmdStr...)
cmd.Env = os.Environ()
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr
cmd.Stdin = os.Stdin
if err := cmd.Run(); err != nil {
_log.Log("error", "Could not execute : " + cmdStr[0])
}
}