امروز درگیر ساخت 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 نخوردم.
:)