2017-05-03 4 views
1

Ich dockerizing unsere aktuelle alte App. Wir benutzen mehrere Dienste, aber die, auf denen ich Probleme habe, sind die PHP, Apache und speziell die https für Apache. Ich benutze "php: 5.6.30-apache" Bild, also habe ich PHP und Apache vorinstalliert.Aktivieren Sie Apache SSL in Docker für lokale Entwicklung

Nun änderte ich den "000-default.conf" mit diesem Inhalt:

<VirtualHost *:80> 
    ServerAdmin [email protected] 
    DocumentRoot /var/www/html/app/htdocsAdmin 
    ServerName admin.local.app.io 
    CustomLog /var/log/apache2/app.admin.access.log "trueip_combined" 
    ErrorLog /var/log/apache2/app.admin.error.log 
    <Directory /var/www/html/app/htdocsAdmin> 
     AllowOverride Options FileInfo AuthConfig 
     Require all granted 
    </Directory> 
</VirtualHost> 

Das ist mein Docker-Datei:

FROM php:5.6.30-apache 

MAINTAINER Tzook Bar Noy 

ADD default /etc/apache2/sites-available/000-default.conf 


RUN apt-get update \ 
    && apt-get install -y apt-utils \ 
    && apt-get install -y php5-dev php5-memcached \ 
    && apt-get install -y memcached 



RUN apt-get update && apt-get install -y apt-utils 
RUN apt-get install -y libz-dev libmemcached-dev 
RUN pecl install memcached-2.2.0 
RUN echo extension=memcached.so >> /usr/local/etc/php/conf.d/memcached.ini 

RUN a2enmod rewrite 
RUN a2enmod ssl 


EXPOSE 80 
EXPOSE 443 

Sie die Memcached Sachen nichts dagegen, nur sehen, dass ich "ssl" aktivieren und Ports freigeben 80,443

Dies wird mit docker-compose ausgeführt:

php: 
build: 
    context: ./php 
    dockerfile: Dockerfile 
ports: 
    - "80:80" 
    - "443:443" 
volumes: 
    - ./../../:/var/www/html 
networks: 
    - appnet 
tty: true 

aber nach all dem, bekomme ich immer noch diese aus Chrom:

"ERR_SSL_PROTOCOL_ERROR" 

Als mein "Docker ps" Antwort in den Kommentaren angefordert: enter image description here

+0

Zwei Dinge: Sie wiederholen denselben Befehl zweimal in Ihrer Dockerdatei; und Sie müssen den Befehl 'docker run' anzeigen, den Sie verwendet haben. –

+0

@BurhanKhalid welcher Befehl ?? und ich führe dies mit docker-compose aus, einfach den relevanten Teil hier oben eingefügt. –

+0

Nachdem du 'docker-compose-up -d' ausgeführt hast, was ist die Ausgabe von' docker ps' und der Log-Datei für deinen Apache-Container? –

Antwort

1

Neben ssl ermöglicht und das Aussetzen Port 443 , müssen Sie ein (selbstsigniertes) Zertifikat + einen privaten Schlüssel erstellen und sicherstellen, dass Apache Zugriff darauf hat.

Ich empfehle openSSL mit einem selbst signierten Zertifikat zu erstellen:

openssl req -new -newkey rsa:4096 -days 3650 -nodes -x509 -subj \ 
    "/C=../ST=...../L=..../O=..../CN=..." \ 
    -keyout ./ssl.key -out ./ssl.crt 

Anstelle der Punkte (...) geben Sie Ihre 2-Buchstaben-Ländercode (/ C), der Name des Staates Bundesland oder Postleitzahl (/ ST), der Name des Orts (/ L), der Name Ihrer Organisation (/ O) und der Server FQDN (/ CN)

Dann fügen Sie die folgenden Zeilen zu Ihrer docker-Datei:

COPY ./path/to/ssl.crt /etc/apache2/ssl/ssl.crt 
COPY ./path/to/ssl.key /etc/apache2/ssl/ssl.key 
RUN mkdir -p /var/run/apache2/ 

Ich bin nicht sur Die letzte Zeile ist wirklich notwendig, aber in meinem Andock-Container war der Ordner noch nicht vorhanden, was dazu führte, dass Apache beim Start fehlschlug.

schließlich in 000-default.conf Datei benötigen Sie so etwas wie dies hinzuzufügen:

<VirtualHost *:443> 
    SSLEngine on 
    SSLCertificateFile /etc/apache2/ssl/ssl.crt 
    SSLCertificateKeyFile /etc/apache2/ssl/ssl.key 
    .... 
</VirtualHost> 

Beachten Sie, dass, wenn Sie selbst signierte Zertifikate verwenden die meisten Browser wird Sie warnen, dass „Ihre Verbindung ist nicht sicher“ (Firefox) oder "Ungültiges Zertifikat" (Chrome). Dies liegt daran, dass für eine vertrauenswürdige Zertifizierungsstelle keine gültige Sicherheitskette vorhanden ist. In den meisten Browsern können Sie Ihre Anfrage fortsetzen oder die Site als Ausnahme hinzufügen, sodass die Warnung nicht mehr angezeigt wird.

Verwandte Themen