알쓸전컴(알아두면 쓸모있는 전자 컴퓨터)

Apache2 Vue3(Vite) 배포 본문

Web /Vue js tip

Apache2 Vue3(Vite) 배포

백곳 2022. 8. 26. 13:14

Apache2 Vue3(Vite) 배포

해당 과정은 Apache2 에 Vue3 프로젝트를 여러개 배포 한다는 과정에 작성 되어 있습니다. 

응용하면 1개 배포는 쉽습니다. 


Vue3 프로젝트

vite.config.ts

export default defineConfig({
    plugins: [
    	vue()
    ],
    resolve: {
        alias: {
            '@': fileURLToPath(new URL('./src', import.meta.url))
        }
    },
    base: "/waferMap/",
})

저의 경우 base 를 "/waferMap" 으로 하여

접속 Url 

  - http://배포주소:포트/waferMap 

으로 설정 하도록 했습니다. 

 

Public 폴더안 img 참조 변경

저의 Vue Project 폴더 구조 안 Public 내 파일 입니다. 

index.html

<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="UTF-8"/>
    <link rel="icon" href="./logo.png"/>
    <link href="https://fonts.googleapis.com/css2?family=Fredoka+One&family=Lato:wght@700&family=Noto+Sans+KR&display=swap"
          rel="stylesheet"/>
    <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
    <title>Wafer Map</title>
</head>
<body>
<div id="app"></div>
<script type="module" src="/src/main.ts"></script>
</body>
</html>

<link rel="icon" href="./logo.png"/> 을 ./logo.png 로 ./을 붙혀서 상대 경로로 바꾸어야 제대로 설정 됩니다.

 

main.ts

export function baseUrl(){
    return import.meta.env.BASE_URL
}

main.ts 소스 내용중 위에 funtion을 저는 export 해주었습니다. 이유는 추후 설정할 .vue 에서 img 주소 설정 때문 입니다.

<template>
  <div style="display: flex">
    <nav style="width: 142px;min-width: 142px;height: 100vh; position: relative">
      <div style="position: absolute;top: 102px;left: 45px">
        <img :src="`${baseUrl()}logo.png`">
      </div>
  </div>
</template>

<script setup lang="ts">

import {baseUrl} from "@/main";

</script>

<style scoped>

</style>

위와 같이

import {baseUrl} from "@/main"; 

을 가져 와서 

<img :src="`${baseUrl()}logo.png`"> 

와 같이 public 폴더내 주소를 설정 해야 합니다. 그래야 추후 배포시 경로가 잘못 설정 되는 것을 막을수 있습니다. 


apache2 설정

/etc/apache2/apache2.conf

<Directory /var/www/>
	Options Indexes FollowSymLinks
	AllowOverride All
	Require all granted
</Directory>

기본 설정으로 AllowOverride None 으로 되어 있습니다 AllowOverride All 로 변경해 주세요.

이 설정을 하는 이유는 경로 접속후 경로를 찾지 못하면 .htaccess 파일의 내용을 참조해 경로를 이동한다는 내용입니다.

 

아래 명령어를 통해 폴더를 생성해 줍니다. 

sudo mkdir /var/www/html/waferMap 

그리고 Vue에서 build 한 dist 폴더내 파일을 업로드 해주세요.

위와 같은 상대가 됩니다. 

 

터미널의 현재 경로를 변경 해주세요.

cd /var/www/html/waferMap

 

.htaccess 파일을 만들어 줍니다.

sudo nano .htaccess

 

/var/www/html/waferMap/.htaccess

<IfModule mod_negotiation.c>
  Options -MultiViews
</IfModule>

<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteBase /waferMap/
  RewriteRule ^index\.html$ - [L]
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteRule . /waferMap/index.html [L]
</IfModule>

 

위와 같이 

RewriteBase /waferMap/

RewriteRule . /waferMap/index.html [L]

 

/waferMap/ 2개 부분만 자신의 환경에 맞춰 설정 하면 됩니다. 저는 경로를 waferMap 으로 했으니

waferMap 으로 설정 했습니다. 

 

만약 waferMap 같은 추가 경로를 가지고 있지 않다면  아래와 같이 설정 하면 됩니다. 

<IfModule mod_negotiation.c>
  Options -MultiViews
</IfModule>

<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteBase /
  RewriteRule ^index\.html$ - [L]
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteRule . /index.html [L]
</IfModule>

참조:https://router.vuejs.org/guide/essentials/history-mode.html#apache


apache 실행

 

1. sudo a2enmod rewrite 꼭 실행 시켜 줍니다. 그렇지 아니하면 .htaccess 적용이 되지 않습니다. 

2. sudo service apache2 restart  재 실행을 시켜 줍니다. 

 

그럼 Apache2에 Vue가 배포 되었음을 확인 할수 있습니다. 

 

Comments