ساخت docker image برای اپلیکیشن انگولار

امروز درگیر ساخت docker image برای اپلیکیشن انگولار بودم. و دوست دارم این تجربه رو با شما عزیزان به اشتراک بگذارم.

اول که برای ساخت bundle، دستور ng build --prod رو اجرا کردم. بعد از اینکه فایل ها در پوشه

/dist/<project_name>

ذخیره شد، نوبت به تعریف Dockerfile در روت پروژه رسید. برای ساخت docker image از nginx:alpine استفاده کردم و فایل Dockerfile رو با محتوای زیر ساختم:

FROM nginx:alpine
COPY ./dist/<project_name> /usr/share/nginx/html


بعدش در روت پروژه دستور مربوط به ساخت image رو زدم و ساخته شد:

docker build .


وقتی که image رو ران کردم، متوجه شدم مشکل redirect دارم. یعنی مثلا وقتی پروژه رو از مسیر /login اجرا میکنم، اپلیکیشن ارور 404 میده.

برای حل این مشکل اول دستور docker ps رو اجرا کردم و container_id مربوط به اپلیکیشن رو پیدا کردم. بعدش با دستور زیر default.conf سرویس nginx رو از container به هاست کپی کردم:

docker cp 8fd28785b69e:/etc/nginx/conf.d/default.conf .

مقدار 8fd28785b69e در واقع CONTAINER ID مربوط به اپلیکیشن هست.

در تنظیم default.conf ، داخل بخش مربوط به لوکیشن روت، خط مربوط به try_files رو اضافه کردم:

server {
    ....
    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
        try_files $uri $uri/ /index.html;
    }
    ....
}


فایل default.conf رو داخل فولدر nginx گذاشتم و دستور کپی زیر رو به Dockerfile اضافه کردم.

COPY ./nginx/default.conf /etc/nginx/conf.d/default.conf

دوباره image رو ساختم و ران کردم. این بار اپلیکیشن درست بالا اومد و به خطای 404 نخوردم.

:)