전에 ushort.io에서 개인 도메인을 통한 단축 URL만들기에 대한 글을 썼었는데 (xeriars.com/246)
최근에 오라클 클라우드와 GCP (Google Cloud Platform) VM 인스턴스를 통한 평생무료서버가 몇 개 생겨서
뭘 설치할까 고민하다가 설치형 단축 URL 애플리케이션(오픈소스)으로 유명한 YOURLS를 설치하기로 했다.
일단 기본적으로 GCP에 VM 인스턴스 생성하는 방법은 인터넷에 널려있으니 이건 넘어가도록하고,
APM 설치 후 YOURLS(Your Own URL Shortener)를 설치해서 운영하는 방법이다.
여러가지 리눅스 배포판이 있지만 무난한 우분투 리눅스 20.04.01 LTS 기준으로 설명한다.
일단 GCP 생성 후 SSH로 접속후에는 APM부터 설치해주어야 한다. 다음의 명령을 입력한다.
$apt update && apt -y upgrade
$apt -y install software-properties-common
$add-apt-repository ppa:ondrej/php
$apt update
$apt -y install php7.4 php7.4-mysql
$apt -y install apache2
$apt -y install software-properties-common
$apt-key adv --fetch-keys 'https://mariadb.org/mariadb_release_signing_key.asc'
$add-apt-repository 'deb [arch=amd64,arm64,ppc64el] https://ftp.harukasan.org/mariadb/repo/10.5/ubuntu focal main'
$apt update
$apt -y install mariadb-server
$apt -y install nano git
MariaDB 대신 mysql을 사용해도 되는데, 개량판인 MariaDB가 더 나은 것 같아 이것으로 설치했다.
다음으로는 git과 nano를 설치해준다. nano 대신 다른 편집기를 사용해도 된다만, 개인적으론 이게 더 편했다.
여기까지 설치했으면 일단 기본 준비는 끝.
이제 YOURLS를 다운로드하고 설치할 차례다.
$cd /tmp
$wget https://github.com/YOURLS/YOURLS/archive/1.7.9.tar.gz
$tar zxvf 1.7.9.tar.gz
/tmp에 YOURLS를 다운로드 받는다. git에 올라온 최신버전은 1.7.10이나 어쩐지 공지에는 이 내용이 없고 공식적인 최신버전은 여전히 1.7.9이므로 일단 저것으로 진행한다.
압축까지 풀었으면 apache2 웹서버 경로로 파일을 이동시켜 줄 차례.
$mv YOURLS-1.7.9 /var/www/html/urls
$cd /var/www/html/urls/user
YOURLS-1.7.9 폴더를 urls로 이름을 바꿔 이동하나, 이건 자유롭게 해줘도 무방하다.
이제 데이터베이스를 생성할 차례.
$mysql -u root -p
데이터 베이스에 루트계정으로 접속한다. 아직 루트계정에 암호가 설정되지 않았을테니 암호를 물어보면 엔터를 친다.
$create database yourls;
$use mysql;
$CREATE USER '아이디'@'localhost' IDENTIFIED BY '패스워드';
$GRANT ALL PRIVILEGES ON 데이터베이스.* TO '아이디'@'localhost';
$FLUSH PRIVILEGES;
$quit;
만일 MySQL 루트 계정 패스워드를 변경하고 싶다면 다음과 같이 입력한다.
$mysqladmin -u아이디 -p기존패스워드 password 신규패스워드
예시 $mysqladmin -uroot -proot password 1q2w3e4r!@
설정파일을 만들기 전에, 한글패치를 만드신 분이 있으니 한글패치를 적용한다.
$cd /var/www/html/urls/user/languages
$git clone https://github.com/at4am/YOURLS-ko_KR.git
$mv YOURLS-ko_KR/ko_KR.po ./
$mv YOURLS-ko_KR/ko_KR.mo ./
이제 YOURLS 설정파일을 만들 차례다. 다음과 같이 입력한다.
$cd /var/www/html/urls/user
$cp config-sample.php config.php
$nano config.php
자신있으면 mv로 해도 무방하긴 한데, 그래도 혹시 몰라 cp로 했다.
nano로 config.php를 열어주면 여러가지 설정파일이 나오는데, 이 글에서는 필요한 것만 세팅한다.
상세 설명은 공식홈페이지의 내용을 참조 (https://s.xeriars.com/KJIg)
/** MySQL database 아이디 */
define( 'YOURLS_DB_USER', 'yourls' );
/** MySQL database 패스워드 */
define( 'YOURLS_DB_PASS', '1q2w3e4r!@' );
/** YOURLS 를 적용 할 도메인명. https를 적용하려면 https라고 써준다. */
define( 'YOURLS_SITE', 'https://s.xeriars.com' );
/** 서버 타임존 설정. 우리나라는 GMT+9 이므로 아래와 같이 입력 */
define( 'YOURLS_HOURS_OFFSET', 9 );
/** YOURLS 언어설정 */
define( 'YOURLS_LANG', 'ko_KR' );
/** 랜덤 쿠키값 입력 */
/** https://api.yourls.org/services/cookiekey/1.0/ 에 접속한 후 나온 값을 입력해주면 된다. */
define( 'YOURLS_COOKIEKEY', 'Zb0ZhUp%smJj$f#~qAEv}qnM6nZbc72w]$ZDZwF{' );
/** 로그인 시 사용할 아이디 / 패스워드 입력. */
$yourls_user_passwords = array(
'yourls' => '1q2w3e4r!@',
// 아이디, 패스워드를 추가하려면 아래와 같이 입력한다.
// 'username2' => 'password2',
// You can have one or more 'login'=>'password' lines
);
/** 단축URL 무작위 생성방식: 36 또는 62 입력 */
define( 'YOURLS_URL_CONVERT', 62 );
/*
* 36: 전부 소문자로 생성 (예: 13jkm)
* 62: 숫자,대소문자로 생성 (ie: 13jKm or 13JKm)
전부 입력해준 후에는 ctrl + o 를 눌러 저장해주고 ctrl + x로 빠져나온다.
$chmod 666 config.php
위의 설정파일에서 지정한 로그인 아이디, 패스워드 중 패스워드는 나중에 암호화가 되므로 chmod를 통해 읽기, 쓰기 권한을 지정해주어야 한다.
$cd /var/www/html/urls
$nano .htaccess
이제 .htaccess를 생성해줄 차례다. 아래 내용을 넣어주고 저장해주면 끝.
# BEGIN YOURLS
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^.*$ /yourls-loader.php [L]
</IfModule>
# END YOURLS
(선택사항) 아까 config.php에서 https로 설정해주었으므로 SSL 인증서 발급이 필요하다.
certbot을 이용하면 간단하게 해결 가능한 부분이므로 이 부분을 같이 진행한다.
DNS에서 일단 서버 IP를 A record로 넣어주고 proxy 연결은 풀어준다. 인증서 발급 전에 proxy로 연결되면 클라우드 플레어 CDN으로 연결되어 정상적인 IP를 찾지 못하므로 발급 후 proxy로 해주면 된다.
이제 certbot을 설치한다.
$sudo snap install --classic certbot
$certbot --apache
중간에 물어보는건 메일주소, 약관동의, 메일링리스트 가입동의, 도메인 입력까지 4가지이므로
각각 입맛에 맞춰 입력해주면 된다.
이런식으로 에러가 난 상태면 DNS 설정이 제대로 안된 상태이거나, DNS 설정 후 아직 반영이 안된 상태이므로
조금 기다렸다가 다시 인증서 발급을 시도하면 된다.
인증서 발급이 완료되면 ssl, rewrite는 자동으로 활성화 되므로 a2enmod로 활성화 할 필요는 없다.
$cd /etc/apache2/sites-available
$ls -al
$nano 000-default-le-ssl.conf
인증서를 생성하면서 도메인에 맞는 설정파일이 생성, 등록되었으므로 이것을 기준으로 수정하면 된다.
기본으로 생성되는건 000-default-le-ssl.conf이므로 이 파일을 수정한다.
혹시 맘에 들지 않으면 a2dissite로 등록 해제 후 *.conf 이름을 변경해준 뒤 다시 a2ensite로 등록.
*.conf 를 nano로 열어 경로를 변경해준다. 빨간 박스처럼 수정해주면 된다.
저장 후 다시 빠져나온다.
이제 끝이 보이긴 하는데 아직 하나 더 수정해줄 파일이 남아있다.
$nano /etc/apache2/apache2.conf
우분투 기준이므로 다른 버전은 httpd.conf를 수정해주면 된다.
172번째줄 쯤 AllowOverride None을 ALL로 변경해준다.
이것이 수정되지 않으면 URL이 생성되도 접속이 안되는 문제가 생긴다.
이제 아파치를 재시작해준다.
$service apache2 restart
또는
$/etc/init.d/apache2 restart
이제 https://설정한도메인/admin/install.php 로 접속한다.
“YOURLS 설치하기” 클릭
.htaccess 파일이 에러가 나는 경우가 있는데, 미리 생성해서 그런것이므로 별 문제는 없다.
설치가 완료되었으므로 YOURLS 관리페이지(https://설정한도메인/admin)로 접속해보자.
아까 config.php에서 설정한 아이디와 비밀번호를 입력하고 로그인한다.
이 화면까지 보인다면 설치가 완료 된 것이다. 이제 테스트를 해보자.
구글에서 이 블로그의 도메인인 xeriars를 검색한 url은 다음과 같다.
이 url을 입력후 “URL” 단축하기를 클릭.
생성된 URL은 s.xeriars.com/C8ZE 이며 Random ShortURLs Settings 플러그인을 사용하여
4자리로 생성되도록 했기 때문에 이런 형식으로 생성되었다.
(*서버 보안 강화 차원에서 해외 IP로는 접속이 안되게 막아둔 상태이다.)
생성 전 “사용자 정의 단축 URL”에 원하는 단어를 넣으면 https://도메인/xxxx 형식으로도 생성이 가능하다.
여기까지가 끝이면 좋겠지만, 현 상태에서는 https://사용자도메인 으로 접속하면 아래와 같이 나온다.
이렇게 된 이유는 index.html이나 index.php가 없기 때문인데,
아까 아파치 설정파일에서 루트경로를 수정해주어서 그렇다.
기본적으로는 /var/www/html이 루트경로이나 아까 설정해준 것은 /var/www/html/urls 였으니
저 파일 목록을 보면 index.html이나 index.php가 없는 것을 알 수 있다.
로그인 경로는 /var/www/html/urls/admin/index.php 이므로 이것을 심볼릭 링크로 걸어주면 된다.
심볼릭 링크는 윈도우로 치면 단축아이콘 정도로 생각하면 된다.
$ln -s /var/www/html/urls/admin/index.php /var/www/html/urls/index.php
$mv sample-robots.txt robots.txt
$service apache2 restart
하는김에 robots.txt 도 설정해줘서 웹 크롤러가 /admin 까지 크롤링 하는걸 막아준다.
아파치를 재시작해주고 나면 https://사용자도메인 으로 접속했을때
이제 저 보기 싫은 파일 탐색창 대신 로그인 화면이 바로 뜨게 된다.
이렇게 yourls 설치를 통한 개인도메인 사용 단축 URL글은 끝이 났다.
아무래도 설치형이다보니 전에 소개했던 ushort.io 보단 압도적으로 복잡하지만, 일단 무료인 점과
한번 고생해서 설치를 해두면, 구글에서 서비스를 종료하지 않는 한 지속적 이용이 가능한게 장점이다.
또한 광고에서 자유로운 점과 도메인도 맘대로 바꿔줄 수 있는 것도 장점으로 작용한다.
리눅스를 처음 접하거나 복잡해서 어려울 수도 있지만 차근차근 따라하다보면 그렇게 어려운건 아니니
필요한 사람들에게 도움이 되는 글이었으면 좋겠다.