이 저장소에는 Rust로 작성된 CGI 디스패치 링크 쇼트너의 소스 코드가 포함되어 있습니다. 아래 지침을 사용 하여이 프로젝트를 자신의 환경에서 호스팅 할 수 있습니다.
웹의 링크가 점점 더 부풀어 오르고 있습니다. 친구는 친구를 멀티 라인 링크를 보내지 않습니다! 그러나 타사 링크 서비스는 개인 정보의 악몽입니다. 그러나 주로 Rust를 배우고 싶었고 이것은 간단한 프로젝트처럼 보였습니다.
이 프로젝트는 최소하고 단순해야합니다. 사용자 기능 :
소프트웨어 기능 :

이 프로젝트를 설치하는 권장 방법은 Docker 이미지를 사용하는 것입니다. 그러나 특히 API를 사용하려는 경우 자신의 웹 서버에 바이너리를 직접 설치할 수도 있습니다.
먼저 데이터 파일에 대한 디렉토리를 준비하십시오. UID 82 (Debian/Ubuntu의 www-data)를 가진 사용자가 소유해야합니다.
$ mkdir -p ${STORAGE} /smrs/data
$ sudo chown 82:82 ${STORAGE} /smrs/data다음은 Docker-Compose Stanza의 예입니다.
smrs :
image : ghcr.io/igor47/smrs:v0.1.1
restart : unless-stopped
container_name : smrs
labels :
- " traefik.enable=true "
- " traefik.http.routers.smrs.rule=Host(`example.com`,`www.example.com`) "
- " traefik.http.routers.smrs.tls=true "
- " traefik.http.routers.smrs.tls.certresolver=letsencrypt "
- " traefik.http.routers.smrs.entrypoints=https "
- " traefik.http.services.smrs.loadbalancer.server.port=8000 "
volumes :
- ${STORAGE}/smrs/data:/smrs/data이것은 Traefik을 컨테이너 포트 8000의 리버스 프록시로 사용합니다. 자체 리버스 프록시를 사용하거나 포트를 직접 노출시킬 수 있습니다.
저장소를 복제하고 바이너리를 작성하십시오.
$ cargo build --release 웹 서버 경로 어딘가에 파일 target/release/smrs 넣으십시오. 이진을 CGI 스크립트로 실행하려면 서버를 구성해야합니다. 컨테이너 내부에서 apache2 사용합니다. 구성 파일은이 repo에서 conf/smrs.conf에 있습니다.
Rust Binary는 다음 API 엔드 포인트를 구현합니다.
GET /session 현재 세션을 { session: string } 으로 반환합니다.POST /session 세션 쿠키를 주어진 값으로 설정합니다 { session: string }POST /save -Not -In -Use가 아닌 경우 URL을 저장 { url: string, token: string }GET /to/<token - 주어진 토큰의 URL로 리디렉션하거나 404 반환합니다.GET /list 현재 session 에서 저장된 모든 토큰 및 URL 목록을 { links: [{ token: string, url: string, created_at: i32 }] 로 반환합니다.POST /forget 주어진 토큰을 삭제 된 것으로 표시하거나 404 : { token: string } 이 프로젝트를 로컬로 실행하려면 cargo make 도구를 설치하고 devenv 작업을 실행할 수 있습니다.
$ cargo make devenv DEV 환경은 LocalHost : 8000/에서 액세스 할 수 있습니다. 이렇게하면 htdocs dir를 컨테이너에 바인딩하여 코드를 반복하고 다시로드 할 수 있습니다. Rust Binary를 반복하려면 iter 작업을 실행하여 이진을 로컬로 구축하고 컨테이너에 복사 할 수 있습니다.
$ cargo make iter환영! 그러나이 프로젝트는 최소한이라는 것을 명심하십시오. 나는 원하지 않는 너무 많은 종속성이나 기능을 추가하는 PRS를 허용하지 않을 것입니다.
MIT. 포크하고 원하는 것을 자유롭게하십시오.