簡體   English   中英

如何使用Docker在Alpine Linux上部署Laravel Web應用程序?

[英]How to deploy a Laravel Web Application on Alpine Linux using Docker?

我使用PHP的基本映像在ECS上成功部署了Laravel Web應用程序,特別是來自https://hub.docker.com/_/php/的 7.3-apache-stretch

很清楚Docker中關於Alpine Linux圖像的討論(給出了最終圖像維度的顯着減少),我想給它一個運行,看看它是如何執行的。 不幸的是,雖然使用CLI版本很容易(使用7.3-cli-alpine3.9 ),但是沒有啟用apache的版本。 我需要的是一個Dockerfile ,用作我開發的基礎。

只有Apache

瀏覽SO,我發現如何在Docker中運行Apache 2上的Apache 2? 這引起了我的注意力https://github.com/nimmis/docker-alpine-apache ,它啟用了apache,但PHP完全缺失,所以我必須整合它。

使用FCGI運行Apache / NGINX和PHP

另一個問題,Docker中的PHP和Apache / httpd的Alpine變體使我們更接近,但暗示使用兩個容器,這不是我想要的。

Dockerfile應該如何讓我部署Laravel Web應用程序?

經過兩天的嘗試,我終於到了能夠在支持php的apache容器上部署Laravel應用程序的地步。 由於發現的問題數量很多,這里是最終的Dockerfile ,以及各部分的解釋:

# PHP Images can be found at https://hub.docker.com/_/php/
FROM php:7.3-alpine3.9

# The application will be copied in /home/application and the original document root will be replaced in the apache configuration 
COPY . /home/application/ 

# Custom Document Root
ENV APACHE_DOCUMENT_ROOT /home/application/public

# Concatenated RUN commands
RUN apk add --update apache2 php7-apache2 php7-mbstring php7-session php7-json php7-pdo php7-openssl php7-tokenizer php7-pdo php7-pdo_mysql php7-xml php7-simplexml\
    && chmod -R 777 /home/application/storage \
    && chown -R www-data:www-data /home/application \
    && mkdir -p /run/apache2 \
    && sed -i '/LoadModule rewrite_module/s/^#//g' /etc/apache2/httpd.conf \
    && sed -i '/LoadModule session_module/s/^#//g' /etc/apache2/httpd.conf \
    && sed -ri -e 's!/var/www/localhost/htdocs!${APACHE_DOCUMENT_ROOT}!g' /etc/apache2/httpd.conf \
    && sed -i 's/AllowOverride\ None/AllowOverride\ All/g' /etc/apache2/httpd.conf \
    && docker-php-ext-install pdo_mysql \
    && rm  -rf /tmp/* /var/cache/apk/*

# Launch the httpd in foreground
CMD rm -rf /run/apache2/* || true && /usr/sbin/httpd -DFOREGROUND

這是我在Dockerfile中進行的操作的簡短列表

  1. 首先,我基於高山分布將所有內容都基於PHP圖像。
  2. 我在/home/application上復制了我的所有Laravel源代碼
  3. 我將文檔根目錄設置為我的public Laravel文件夾
  4. 請求通過apk安裝操作系統軟件包(我的Laravel應用程序都需要它們)。 有關可用軟件包的完整列表,請訪問http://dl-cdn.alpinelinux.org/alpine/edge/community/x86_64/
  5. 擴展storage文件夾的權限
  6. 更改整個/home/application/文件夾的所有者
  7. 啟用所有需要的模塊(可能需要不同的模塊,具體取決於應用程序)
  8. 更改httpd.conf文件中的文檔根目錄
  9. 啟用AllowOverride All指令
  10. 啟用pdo_mysql擴展(否則命令將無法訪問mysql)
  11. 清理包裝系統的緩存
  12. 運行httpd

使用這個Dockerfile ,現在可以運行所有的Laravel Web應用程序,只需要在/home/application/中復制應用程序源代碼

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM