「🏗️」 wip: FTP should be working but f*ck it let's drink beers
This commit is contained in:
@ -1,21 +1,56 @@
|
|||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"bytes"
|
||||||
"os"
|
"os"
|
||||||
|
|
||||||
"fmt"
|
"fmt"
|
||||||
"log"
|
"log"
|
||||||
"os/exec"
|
"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"
|
_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() {
|
func main() {
|
||||||
args := os.Args
|
args := os.Args
|
||||||
|
|
||||||
if args[1] == "vsftpd" {
|
if args[1] == "vsftpd" {
|
||||||
_log.Log("note", "Entrypoint script for VSFTPD Server started")
|
_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")
|
dir, err := os.ReadDir("/docker-entrypoint.d")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatal(err)
|
log.Fatal(err)
|
||||||
@ -40,8 +75,7 @@ func main() {
|
|||||||
cmd.Stderr = os.Stderr
|
cmd.Stderr = os.Stderr
|
||||||
cmd.Stdin = os.Stdin
|
cmd.Stdin = os.Stdin
|
||||||
if err := cmd.Run(); err != nil {
|
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)
|
os.Exit(1)
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -9,9 +9,6 @@ networks:
|
|||||||
inception:
|
inception:
|
||||||
external: false
|
external: false
|
||||||
|
|
||||||
include:
|
|
||||||
- docker/bonus/compose.yml
|
|
||||||
|
|
||||||
services:
|
services:
|
||||||
nginx:
|
nginx:
|
||||||
container_name: inception-nginx
|
container_name: inception-nginx
|
||||||
@ -85,3 +82,33 @@ services:
|
|||||||
volumes:
|
volumes:
|
||||||
- wp-db:/var/lib/mysql
|
- wp-db:/var/lib/mysql
|
||||||
restart: unless-stopped
|
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
|
||||||
|
|
||||||
|
@ -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
|
|
||||||
|
|
@ -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 maintainer="KeyZox"
|
||||||
LABEL version="0.1"
|
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 21
|
||||||
EXPOSE 30000-30100
|
EXPOSE 30000-30100
|
||||||
|
|
||||||
CMD [ "vsftpd" ]
|
STOPSIGNAL SIGQUIT
|
||||||
|
|
||||||
|
CMD [ "vsftpd", "/etc/vsftpd/vsftpd.conf" ]
|
||||||
|
@ -9,10 +9,10 @@ ftpd_banner=Welcome to your WordPress FTP server.
|
|||||||
chroot_local_user=YES
|
chroot_local_user=YES
|
||||||
allow_writeable_chroot=YES
|
allow_writeable_chroot=YES
|
||||||
user_sub_token=$USER
|
user_sub_token=$USER
|
||||||
local_root=/var/www/wordpress
|
local_root=/var/ftp
|
||||||
|
|
||||||
listen=YES
|
listen=YES
|
||||||
listen_port=21
|
listen_port=2100
|
||||||
listen_address=0.0.0.0
|
listen_address=0.0.0.0
|
||||||
seccomp_sandbox=NO
|
seccomp_sandbox=NO
|
||||||
|
|
||||||
|
@ -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
|
FROM scratch
|
||||||
ADD docker/alpine/alpine-minirootfs-3.21.2-x86_64.tar.gz /
|
ADD docker/alpine/alpine-minirootfs-3.21.2-x86_64.tar.gz /
|
||||||
|
|
||||||
@ -7,6 +22,9 @@ LABEL maintainer="KeyZox"
|
|||||||
RUN addgroup mysql \
|
RUN addgroup mysql \
|
||||||
&& adduser -S -G mysql mysql -h /var/lib/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
|
RUN mkdir /build
|
||||||
|
|
||||||
COPY go.mod /build/go.mod
|
COPY go.mod /build/go.mod
|
||||||
@ -14,18 +32,12 @@ COPY cmd /build/cmd
|
|||||||
COPY internal /build/internal
|
COPY internal /build/internal
|
||||||
|
|
||||||
RUN apk add --no-cache go mariadb tzdata mariadb-client \
|
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-healthcheck \
|
||||||
&& chmod +x /docker-entrypoint \
|
&& chmod +x /docker-entrypoint \
|
||||||
&& apk del go \
|
&& apk del go \
|
||||||
&& mkdir -p /etc/mysql/conf.d /etc/mysql/mariadb.conf.d/ /run/mariadb /run/mysqld \
|
&& mkdir -p /etc/mysql/conf.d /etc/mysql/mariadb.conf.d/ /run/mariadb /run/mysqld \
|
||||||
&& chmod ugo+rwx,o+t /run/mariadb \
|
&& chmod ugo+rwx,o+t /run/mariadb \
|
||||||
&& chown -R mysql:mysql /var/lib/mysql /run/mariadb /run/mysqld \
|
&& chown -R mysql:mysql /var/lib/mysql /run/mariadb /run/mysqld \
|
||||||
&& rm -Rf /build \
|
|
||||||
&& rm -rf /var/cache/apk/*
|
&& rm -rf /var/cache/apk/*
|
||||||
|
|
||||||
ENV LANG=C.UTF-8
|
ENV LANG=C.UTF-8
|
||||||
@ -39,4 +51,4 @@ WORKDIR /var/lib/mysql
|
|||||||
|
|
||||||
EXPOSE 3306
|
EXPOSE 3306
|
||||||
CMD [ "mariadbd", "--user=mysql" ]
|
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
|
||||||
|
@ -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
|
FROM scratch
|
||||||
ADD docker/alpine/alpine-minirootfs-3.21.2-x86_64.tar.gz /
|
ADD docker/alpine/alpine-minirootfs-3.21.2-x86_64.tar.gz /
|
||||||
|
|
||||||
LABEL version="0.1"
|
LABEL version="0.1"
|
||||||
LABEL maintainer="KeyZox"
|
LABEL maintainer="KeyZox"
|
||||||
|
|
||||||
COPY go.mod /build/go.mod
|
COPY --from=builder /build/entrypoint /docker-entrypoint
|
||||||
COPY cmd /build/cmd
|
|
||||||
COPY internal /build/internal
|
|
||||||
|
|
||||||
RUN set -x \
|
RUN set -x \
|
||||||
&& addgroup -g 101 -S nginx\
|
&& addgroup -g 101 -S nginx\
|
||||||
&& adduser -S -D -H -u 101 -h /var/cache/nginx -s /sbin/nologin -G nginx -g nginx 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 \
|
&& apk add --no-cache 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 \
|
|
||||||
&& chmod +x /docker-entrypoint \
|
&& chmod +x /docker-entrypoint \
|
||||||
&& apk del go \
|
|
||||||
&& ln -sf /dev/stdout /var/log/nginx/access.log \
|
&& ln -sf /dev/stdout /var/log/nginx/access.log \
|
||||||
&& ln -sf /dev/stderr /var/log/nginx/error.log \
|
&& ln -sf /dev/stderr /var/log/nginx/error.log \
|
||||||
&& rm -Rf /build \
|
|
||||||
&& rm -rf /var/cache/apk/* \
|
&& rm -rf /var/cache/apk/* \
|
||||||
&& mkdir -p /var/www/html \
|
&& mkdir -p /var/www/html \
|
||||||
&& mkdir -p /etc/nginx/conf.d \
|
&& mkdir -p /etc/nginx/conf.d \
|
||||||
|
@ -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
|
FROM scratch
|
||||||
ADD docker/alpine/alpine-minirootfs-3.21.2-x86_64.tar.gz /
|
ADD docker/alpine/alpine-minirootfs-3.21.2-x86_64.tar.gz /
|
||||||
|
|
||||||
LABEL version="0.1"
|
LABEL version="0.1"
|
||||||
LABEL maintainer="KeyZox"
|
LABEL maintainer="KeyZox"
|
||||||
|
|
||||||
RUN set -x \
|
COPY --from=builder /build/entrypoint /docker-entrypoint
|
||||||
&& 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 docker/wordpress/www-docker.conf /www-docker.conf
|
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-phar php84-xml php84-curl php84-zip \
|
||||||
php84-intl php84-mbstring php84-iconv \
|
php84-intl php84-mbstring php84-iconv \
|
||||||
php84 php84-mysqli php84-fpm php84-json \
|
php84 php84-mysqli php84-fpm php84-json \
|
||||||
php84-zlib php84-session php84-dom \
|
php84-zlib php84-session php84-dom \
|
||||||
php84-xmlreader php84-pdo php84-gd \
|
php84-xmlreader php84-pdo php84-gd \
|
||||||
php84-opcache php84-ctype \
|
php84-opcache php84-ctype \
|
||||||
&& cd /build \
|
|
||||||
&& curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar \
|
&& curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar \
|
||||||
&& chmod +x wp-cli.phar \
|
&& chmod +x wp-cli.phar \
|
||||||
&& mv wp-cli.phar /usr/local/bin/wp \
|
&& 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 \
|
&& chmod +x /docker-entrypoint \
|
||||||
&& apk del go \
|
|
||||||
&& rm -Rf /build \
|
&& rm -Rf /build \
|
||||||
&& mkdir /docker-entrypoint.d
|
&& mkdir /docker-entrypoint.d
|
||||||
|
|
||||||
|
19
srcs/internal/cmd/cmd.go
Normal file
19
srcs/internal/cmd/cmd.go
Normal 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])
|
||||||
|
}
|
||||||
|
}
|
Reference in New Issue
Block a user