Profile picture

[Docker] URL 단축 시스템 구축 - Yourls

JaehyoJJAng2023년 05월 05일

Yourls

가끔씩 어떤 사이트의 URL 주소를 복사해서 누군가에게 공유를 해야하는 상황이 있을 때 해당 사이트의 URL을 복사하고 붙여넣었을 때 아래 처럼 길게 나와서 흠칫 하는 경우가 종종 있다.

https://cafe.naver.com/ArticleList.nhn?search.clubid=30219408&search.menuid=23&search.boardtype=I&search.totalCount=201&search.cafeId=30219408&search.page=2

저런 긴 URL을 단축해주는 서비스가 Yourls이다. 이와 비슷한 유명 서비스로는 bit.ly가 있다.
image


bit.ly라는 좋은 서비스가 있음에도 왜 Yourls를 써야하는가?
Yourls는 오픈 소스로 배포되어 있어 도커를 통해 해당 서비스를 자체 호스팅할 수 있다.
또한, 단축된 URL의 통계를 수집할 수 있다는 점에서 써볼만 하다는 생각이 든다.


1. 사용할 도커 이미지


image
해당 도커 이미지에는 Apache와 PHP가 설치되고 MySQL은 별도의 스택으로 묶어서 실행되도록 docker-compose를 이용해보도록 하자.


환경 변수

Yourls 서비스를 올릴 때 참고할 만한 환경변수는 아래와 같다.

옵션 설명
-e YOURLS_DB_HOST=... 기본 값은 연결된 mysql 컨테이너의 IP 및 포트
-e YOURLS_DB_USER=... 기본값은 "루트"
-e YOURLS_DB_PASS=... 기본 값 MYSQL_ROOT_PASSWORD은 연결된 mysql 컨테이너의 환경 변수 값
-e YOURLS_DB_NAME=... 기본 값은 "yourls"
-e YOURLS_COOKIEKEY=... 기본 값은 고유한 임의의 SHA1
-e YOURLS_SITE=... 사용자의 인스턴스 URL
-e YOURLS_USER=... yourls 인스턴스 사용자 이름
-e YOURLS_PASS=... yourls 인스턴스 사용자 비밀번호

2. 컨테이너 생성

서버로 접근해 docker 설정 파일을 생성할 폴더를 생성하고 yaml 파일을 작성해보도록 하자.

$ mkdir -p /docker/yourls
$ cd /docker/yourls
$ vim ./docker-compose.yaml

docker-compose.yaml

version: "3"

services:
  yourls:
    depends_on:
      - "mysql"
    image: yourls
    restart: always
    ports:
      - "80:80"
    environment:
      - YOURLS_DB_HOST=mysql
      - YOURLS_DB_PASS=secret
      - YOURLS_SITE=http://15.164.222.216
      - YOURLS_USER=jaehyo
      - YOURLS_PASS=secret
    container_name: yourls

  mysql:
    image: mysql:5.7
    platform: linux/amd64 # m1 Mac 인 경우 해당 옵션 사용
    restart: always
    volumes:
      - "my-data:/var/lib/mysql"
    environment:
      - MYSQL_ROOT_PASSWORD=secret
      - MYSQL_DATABASE=yourls

volumes:
  my-data: {}

3. 접속

컨테이너가 정상적으로 생성되었다면 위에서 http://<IP주소>/admin/install으로 접근해주도록 하자.
image


아래처럼 로그인을 하면 관리페이지가 나온다.
Username / Password는 위에 yourls 컨테이너 환경변수에서 지정한 값을 넣어주면 된다.
image


사용법은 URL 부분에 단축시킬 URL을 넣고 Shorten The URL을 클릭해주면 끝이다.
image


Loading script...