{"id":20639211,"url":"https://github.com/alexdremov/ushort","last_synced_at":"2026-04-08T16:01:38.382Z","repository":{"id":146181960,"uuid":"434984071","full_name":"alexdremov/ushort","owner":"alexdremov","description":"Extremely simple url shortener","archived":false,"fork":false,"pushed_at":"2022-03-02T10:29:06.000Z","size":146,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-04-17T19:50:21.279Z","etag":null,"topics":["express","node","sqlite","typescript"],"latest_commit_sha":null,"homepage":"","language":"CSS","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/alexdremov.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-12-04T18:54:07.000Z","updated_at":"2021-12-16T18:56:26.000Z","dependencies_parsed_at":null,"dependency_job_id":"d06e939a-cf3b-4db3-8281-899f0007a6c9","html_url":"https://github.com/alexdremov/ushort","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/alexdremov/ushort","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alexdremov%2Fushort","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alexdremov%2Fushort/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alexdremov%2Fushort/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alexdremov%2Fushort/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/alexdremov","download_url":"https://codeload.github.com/alexdremov/ushort/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alexdremov%2Fushort/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31562697,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-08T14:31:17.711Z","status":"ssl_error","status_checked_at":"2026-04-08T14:31:17.202Z","response_time":54,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["express","node","sqlite","typescript"],"created_at":"2024-11-16T15:23:00.079Z","updated_at":"2026-04-08T16:01:38.366Z","avatar_url":"https://github.com/alexdremov.png","language":"CSS","funding_links":[],"categories":[],"sub_categories":[],"readme":"# ushort\nExtremely simple url shortener\n- [GitHub](https://github.com/AlexRoar/ushort)\n  [Проект](http://alexdremov.me)\n- ## Description\n\t- Зарегистрировал домен на cheapname\n\t- Прописал домену в cheapname name servers digitalocean\n\t\t- n1.digitalocean.com ...\n\t- Добавил на digitalocean A запись в DNS моего домена для droplet\n\t- Быстро написал urlshortener на express с sqlite3\n\t- Подготовить `Dockerfile` и `.dockerignore`\n\t\t-\n\t\t  ```yaml\n\t\t  FROM node:14\n\t\t  WORKDIR /usr/src/app\n\t\t  COPY . .\n\t\t  RUN npm install\n\t\t  RUN npx tsc\n\t\t  ENV PORT=80\n\t\t  EXPOSE 80\n\t\t  CMD [\"npm\", \"start\"]\n\t\t  ```\n\t\t- Используется node:14\n\t\t- Устанавливается рабочая директория\n\t\t- Копирую все данные в дирректорию\n\t\t- Установка зависимостей\n\t\t- Компиляция TypeScript\n\t\t- Установка env для приложения\n\t\t- Запуск приложения\n\t- Подготавливаю файл docker-compose\n\t\t-\n\t\t  ```yaml\n\t\t  version: \"3.3\"\n\t\t  services:\n\t\t    web:\n\t\t      build: .\n\t\t      ports:\n\t\t        - \"80:80\"\n\t\t      volumes:\n\t\t        - myapp:/usr/src/db\n\t\t      expose:\n\t\t        - \"80\"\n\t\t  volumes:\n\t\t    myapp:\n\t\t      external: true\n\t\t  ```\n\t- Из интересного — `volumes` используятся для сохранения файла базы данных sqlite\n\t- Подготавливаю droplet для docker по гайду digitalocean — просто установка зависимостей\n\t\t- https://www.digitalocean.com/community/tutorials/docker-ubuntu-18-04-1-ru\n\t- Сервер можно запустить через `docker-compose -f docker-compose.yml up -d`\n\t- Записал эту команду в cron для `@reboot` — запускаться будет сразу после перезапуска droplet\n\t- Настроил action на GitHub — при push в main обновляются фалы с гита, перезапускается контейнер\n\t\t-\n\t\t  ```yaml\n\t\t  name: DigitalOcean deploy\n\t\t  \t\t\t  \n\t\t  # Controls when the workflow will run\n\t\t  on:\n\t\t    push:\n\t\t      branches: [ main ]\n\t\t  \t\t\t  \n\t\t    # Allows you to run this workflow manually from the Actions tab\n\t\t    workflow_dispatch:\n\t\t  \t\t\t  \n\t\t  jobs:\n\t\t    build:\n\t\t      runs-on: ubuntu-latest\n\t\t      steps:\n\t\t        - name: ssh-pipeline\n\t\t          # You may pin to the exact commit or the version.\n\t\t          # uses: cross-the-world/ssh-pipeline@7f022867934a210af826af99ef80d96f03a094d5\n\t\t          uses: cross-the-world/ssh-pipeline@v1.2.0\n\t\t          with:\n\t\t            # ssh remote host\n\t\t            host: ${{secrets.SSH_HOST}}\n\t\t            # ssh remote port\n\t\t            port: 22\n\t\t            # ssh remote user\n\t\t            user: ${{secrets.SSH_USER}}\n\t\t            # content of ssh private key. ex raw content of ~/.ssh/id_rsa\n\t\t            key: ${{secrets.SSH_PRIVATE_KEY}}\n\t\t            script: |\n\t\t              cd /root\n\t\t              rm -rf web\n\t\t              git clone https://github.com/alexRoar/ushort web\n\t\t              cd web\n\t\t              docker-compose -f docker-compose.yml down\n\t\t              docker-compose -f docker-compose.yml up -d\n\t\t  ```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falexdremov%2Fushort","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Falexdremov%2Fushort","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falexdremov%2Fushort/lists"}