{"id":17422225,"url":"https://github.com/alexzhangs/shadowsocks-libev-v2ray","last_synced_at":"2026-04-30T13:32:34.898Z","repository":{"id":238540043,"uuid":"796778510","full_name":"alexzhangs/shadowsocks-libev-v2ray","owner":"alexzhangs","description":"A v2ray-plugin ready Docker image, using acme.sh to automate certificate provision and renew","archived":false,"fork":false,"pushed_at":"2024-06-04T14:18:31.000Z","size":34,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-05-18T04:36:24.417Z","etag":null,"topics":["docker","shadowsocks-libev","v2ray-plugin"],"latest_commit_sha":null,"homepage":"","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/alexzhangs.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","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":"2024-05-06T15:59:13.000Z","updated_at":"2024-05-25T21:08:25.000Z","dependencies_parsed_at":"2024-06-04T16:04:26.869Z","dependency_job_id":"8d0e5e84-b3f2-4b14-8bf5-bbc28a0a272d","html_url":"https://github.com/alexzhangs/shadowsocks-libev-v2ray","commit_stats":null,"previous_names":["alexzhangs/shadowsocks-libev-v2ray"],"tags_count":8,"template":false,"template_full_name":null,"purl":"pkg:github/alexzhangs/shadowsocks-libev-v2ray","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alexzhangs%2Fshadowsocks-libev-v2ray","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alexzhangs%2Fshadowsocks-libev-v2ray/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alexzhangs%2Fshadowsocks-libev-v2ray/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alexzhangs%2Fshadowsocks-libev-v2ray/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/alexzhangs","download_url":"https://codeload.github.com/alexzhangs/shadowsocks-libev-v2ray/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alexzhangs%2Fshadowsocks-libev-v2ray/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32466333,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-30T13:12:12.517Z","status":"ssl_error","status_checked_at":"2026-04-30T13:12:06.837Z","response_time":57,"last_error":"SSL_read: 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":["docker","shadowsocks-libev","v2ray-plugin"],"created_at":"2024-10-17T03:13:58.731Z","updated_at":"2026-04-30T13:32:34.878Z","avatar_url":"https://github.com/alexzhangs.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"[![License](https://img.shields.io/github/license/alexzhangs/shadowsocks-libev-v2ray.svg?style=flat-square)](https://github.com/alexzhangs/shadowsocks-libev-v2ray/)\n[![GitHub last commit](https://img.shields.io/github/last-commit/alexzhangs/shadowsocks-libev-v2ray.svg?style=flat-square)](https://github.com/alexzhangs/shadowsocks-libev-v2ray/commits/main)\n[![GitHub issues](https://img.shields.io/github/issues/alexzhangs/shadowsocks-libev-v2ray.svg?style=flat-square)](https://github.com/alexzhangs/shadowsocks-libev-v2ray/issues)\n[![GitHub pull requests](https://img.shields.io/github/issues-pr/alexzhangs/shadowsocks-libev-v2ray.svg?style=flat-square)](https://github.com/alexzhangs/shadowsocks-libev-v2ray/pulls)\n[![GitHub tag](https://img.shields.io/github/v/tag/alexzhangs/shadowsocks-libev-v2ray?sort=date)](https://github.com/alexzhangs/shadowsocks-libev-v2ray/tags)\n\n[![GitHub Actions - CI Docker Build and Push](https://github.com/alexzhangs/shadowsocks-libev-v2ray/actions/workflows/ci-docker.yml/badge.svg)](https://github.com/alexzhangs/shadowsocks-libev-v2ray/actions/workflows/ci-docker.yml)\n[![Docker Image Version](https://img.shields.io/docker/v/alexzhangs/shadowsocks-libev-v2ray?label=docker%20image)](https://hub.docker.com/r/alexzhangs/shadowsocks-libev-v2ray)\n\n# shadowsocks-libev-v2ray\nA v2ray-plugin ready shadowsocks-libev Docker image, using acme.sh to automate certificate provision and renew\n\n## Dependencies\n- [shadowsocks-libev](https://github.com/shadowsocks/shadowsocks-libev)\n- [v2ray-plugin](https://github.com/shadowsocks/v2ray-plugin)\n- [acme.sh](https://github.com/acmesh-official/acme.sh)\n\n## Usage\n\nStart a shadowsocks manager service with v2ray-plugin enabled (automated verfication with name.com), no live port:\n\n\n```sh\nMGR_PORT=6001 SS_PORTS=8381-8385 ENCRYPT=aes-256-cfb DOMAIN=v2ray.ss.yourdomain.com\n\nDNS=dns_namecom DNS_ENV=Namecom_Username=your_username,Namecom_Token=your_password\n\ndocker run -e V2RAY=1 -e DOMAIN=$DOMAIN \\\n  -e DNS=$DNS -e DNS_ENV=$DNS_ENV \\\n  --restart=always -d -p $MGR_PORT:$MGR_PORT/UDP -p $SS_PORTS:$SS_PORTS \\\n  --name ss-manager-v2ray alexzhangs/shadowsocks-libev-v2ray \\\n  ss-manager --manager-address 0.0.0.0:$MGR_PORT \\\n    --executable /usr/local/bin/ss-server -m $ENCRYPT -s 0.0.0.0 \\\n    --plugin v2ray-plugin --plugin-opts \"server;tls;host=$DOMAIN\"\n```\n\nMore usage examples can be found in the [Dockerfile](Dockerfile) and the [docker-entrypoint.sh](docker-entrypoint.sh).\n\n## Certificates Renewal\n\nacme.sh always sets up a daily cron job to check and renew the certificates automatically.\n\n```sh\n# crontab -l | grep acme.sh\n10 21 * * * \"/root/.acme.sh\"/acme.sh --cron --home \"/root/.acme.sh\" \u003e /dev/null\n```\n\nFor now, acme.sh certificates have a maximum 90-day validity period, and will be renewed automatically on the 60th day.\n\nThis project sets up a renew hook command `reboot` at the certificate issue time, as long as the `ss-server` and `ss-manager` commands handle the `SIGINT` signal properly, and combined with the `--restart=always` option, the container will be restarted automatically after the certificate renewal.\n\nAs a result, the container handles the certificate renewal automatically without interfering with the host.\n\nHowever, if you are running the container with the `ss-manager` command, after the container is restarted, all the ports created by the multi-user API will be lost, and you are responsible for re-creating them. The project [shadowsocks-manager](https://github.com/alexzhangs/shadowsocks-manager) uses heartbeat to monitor the `ss-manager` service and re-create the ports automatically.\n\n\n## Certificate Management\n\nList all the certificates inside the container:\n\n```sh\nacme.sh --list\n```\n\nRun below command to check the certificate details inside the container:\n\n```sh\nopenssl x509 -text -in /root/.acme.sh/$DOMAIN/fullchain.cer\n```\n\n## CI/CD\n\nGithub Actions is currently used for the CI/CD.\n\nThe CI/CD workflows are defined in the `.github/workflows` directory.\n\n* ci-docker.yml: Build and push the docker image to Docker Hub. It can be triggered by the Github release.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falexzhangs%2Fshadowsocks-libev-v2ray","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Falexzhangs%2Fshadowsocks-libev-v2ray","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falexzhangs%2Fshadowsocks-libev-v2ray/lists"}