Debian Docker Webserver
Das Erstellen eines Docker-Containers, der einen Debian-Server mit Apache, Nginx, MariaDB, Python, PHP, mehreren virtuellen Domains, einem Mailserver und FTP umfasst, ist eine anspruchsvolle Aufgabe. Hier ist eine detaillierte Anleitung, die Schritt für Schritt beschreibt, wie du einen solchen Container erstellen kannst.
1. Voraussetzungen
- Installierter Docker auf deinem System (Linux, Windows, oder macOS).
- Grundkenntnisse im Umgang mit der Kommandozeile.
- Texteditor wie
nano
odervim
, um Konfigurationsdateien zu bearbeiten.
2. Dockerfile Erstellen
Beginnen wir mit dem Erstellen eines Dockerfile
, das alle notwendigen Komponenten enthält.
# Basis-Image von Debian
FROM debian:latest
# Autor-Label
LABEL maintainer="dein_name@example.com"
# System aktualisieren und Grundpakete installieren
RUN apt-get update && apt-get upgrade -y && \
apt-get install -y \
apache2 \
nginx \
mariadb-server \
php \
php-mysql \
python3 \
python3-pip \
curl \
wget \
unzip \
sudo \
vim \
ufw \
vsftpd \
postfix \
mailutils \
openssl \
ssl-cert
# Installiere PHP-Module
RUN apt-get install -y \
php-cli \
php-cgi \
php-fpm \
php-json \
php-common \
php-mysql \
php-zip \
php-gd \
php-mbstring \
php-xml \
php-curl
# Erstelle Verzeichnisse für virtuelle Domains
RUN mkdir -p /var/www/domain1.com/public_html \
/var/www/domain2.com/public_html \
/var/www/domain3.com/public_html \
/var/www/domain4.com/public_html
# Berechtigungen für Web-Verzeichnisse setzen
RUN chown -R www-data:www-data /var/www/*
# Konfiguriere Apache
RUN a2enmod rewrite
COPY ./apache-config /etc/apache2/sites-available/
# Konfiguriere Nginx
COPY ./nginx-config /etc/nginx/sites-available/
# Aktivieren der Apache-Sites und Deaktivieren der Standard-Site
RUN a2ensite domain1.com.conf \
&& a2ensite domain2.com.conf \
&& a2ensite domain3.com.conf \
&& a2ensite domain4.com.conf \
&& a2dissite 000-default.conf \
&& systemctl reload apache2
# Starte den Datenbankdienst
RUN service mysql start && \
mysql -e "CREATE USER 'admin'@'localhost' IDENTIFIED BY 'password';" && \
mysql -e "GRANT ALL PRIVILEGES ON *.* TO 'admin'@'localhost';" && \
mysql -e "FLUSH PRIVILEGES;" && \
mysql_secure_installation
# SSL Zertifikate generieren
RUN openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
-keyout /etc/ssl/private/apache-selfsigned.key \
-out /etc/ssl/certs/apache-selfsigned.crt \
-subj "/C=DE/ST=Berlin/L=Berlin/O=Example Company/OU=IT Department/CN=example.com"
# Kopiere Startskript
COPY ./start.sh /start.sh
RUN chmod +x /start.sh
# Exponiere die notwendigen Ports
EXPOSE 80 443 3306 21 25
# Startbefehl beim Containerstart
CMD ["/start.sh"]
3. Konfiguration der virtuellen Domains für Apache
Erstelle die Konfigurationsdateien für die virtuellen Hosts von Apache.
mkdir apache-config
Erstelle eine Konfigurationsdatei für jede Domain, z.B. apache-config/domain1.com.conf
:
<VirtualHost *:80>
ServerAdmin admin@domain1.com
ServerName domain1.com
ServerAlias www.domain1.com
DocumentRoot /var/www/domain1.com/public_html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
<VirtualHost *:443>
ServerAdmin admin@domain1.com
ServerName domain1.com
ServerAlias www.domain1.com
DocumentRoot /var/www/domain1.com/public_html
SSLEngine on
SSLCertificateFile /etc/ssl/certs/apache-selfsigned.crt
SSLCertificateKeyFile /etc/ssl/private/apache-selfsigned.key
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
Kopiere diese Konfiguration und passe sie für jede Domain (domain2.com.conf
, domain3.com.conf
, domain4.com.conf
) entsprechend an.
4. Konfiguration der virtuellen Domains für Nginx
Erstelle ebenfalls die Nginx-Konfigurationsdateien.
mkdir nginx-config
Beispiel für nginx-config/domain1.com.conf
:
server {
listen 80;
server_name domain1.com www.domain1.com;
root /var/www/domain1.com/public_html;
index index.php index.html index.htm;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
}
location ~ /\.ht {
deny all;
}
}
server {
listen 443 ssl;
server_name domain1.com www.domain1.com;
root /var/www/domain1.com/public_html;
index index.php index.html index.htm;
ssl_certificate /etc/ssl/certs/apache-selfsigned.crt;
ssl_certificate_key /etc/ssl/private/apache-selfsigned.key;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
}
location ~ /\.ht {
deny all;
}
}
Wiederhole dies für die anderen Domains.
5. Start-Skript erstellen
Erstelle ein Startskript start.sh
, um alle Dienste beim Start des Containers zu starten.
#!/bin/bash
# Starte MariaDB
service mysql start
# Starte Apache
service apache2 start
# Starte Nginx
service nginx start
# Starte Postfix
service postfix start
# Starte vsftpd
service vsftpd start
# Halte den Container aktiv
tail -f /dev/null
6. Container bauen und starten
- Erstelle das Docker-Image:
docker build -t my-smartserver .
- Starte den Container:
docker run -d --name smartserver -p 80:80 -p 443:443 -p 3306:3306 -p 21:21 -p 25:25 my-smartserver
7. Zugang zum Container
Du kannst auf den Container zugreifen, um Einstellungen oder Wartungen vorzunehmen:
docker exec -it smartserver /bin/bash
Fazit
Mit dieser Anleitung hast du einen Docker-Container erstellt, der einen Debian-basierten Server mit Apache, Nginx, MariaDB, Python, PHP, mehreren virtuellen Domains, einem Mailserver und FTP-Server enthält. Dieser Server bietet eine flexible und leistungsfähige Umgebung für Webentwicklung und Hosting. Passe die Konfigurationen nach deinen Bedürfnissen an, und erweitere die Funktionalitäten nach Bedarf.