Selaa lähdekoodia

update docker-compose file

Germey 3 vuotta sitten
vanhempi
sitoutus
e552819a4a
5 muutettua tiedostoa jossa 73 lisäystä ja 50 poistoa
  1. 1 1
      .github/workflows/build.yml
  2. 1 1
      .github/workflows/deploy.yml
  3. 50 44
      README.md
  4. 19 0
      build.yml
  5. 2 4
      docker-compose.yml

+ 1 - 1
.github/workflows/build.yml

@@ -16,7 +16,7 @@ jobs:
     - name: Docker Login
       run: docker login -u germey -p ${{ secrets.DOCKERHUB_LOGIN_PASSWORD }}
     - name: Build the Docker Image
-      run: docker-compose build
+      run: docker-compose -f build.yml build
     - name: Tag and Push Master Version
       run: |
         docker tag germey/proxypool germey/proxypool:master

+ 1 - 1
.github/workflows/deploy.yml

@@ -35,7 +35,7 @@ jobs:
           echo $BUILD_NUMBER
       - name: Build Push Deploy
         run: |
-          docker-compose build
+          docker-compose -f build.yml build
           docker tag germey/proxypool germey/proxypool:$BUILD_NUMBER
           docker push germey/proxypool
           docker push germey/proxypool:$BUILD_NUMBER

+ 50 - 44
README.md

@@ -7,10 +7,10 @@
 
 简易高效的代理池,提供如下功能:
 
-* 定时抓取免费代理网站,简易可扩展。
-* 使用 Redis 对代理进行存储并对代理可用性进行排序。
-* 定时测试和筛选,剔除不可用代理,留下可用代理。
-* 提供代理 API,随机取用测试通过的可用代理。
+- 定时抓取免费代理网站,简易可扩展。
+- 使用 Redis 对代理进行存储并对代理可用性进行排序。
+- 定时测试和筛选,剔除不可用代理,留下可用代理。
+- 提供代理 API,随机取用测试通过的可用代理。
 
 代理池原理解析可见「[如何搭建一个高效的代理池](https://cuiqingcai.com/7048.html)」,建议使用之前阅读。
 
@@ -33,8 +33,8 @@ cd ProxyPool
 
 如果使用 Docker,则需要安装如下环境:
 
-* Docker
-* Docker-Compose
+- Docker
+- Docker-Compose
 
 安装方法自行搜索即可。
 
@@ -42,8 +42,8 @@ cd ProxyPool
 
 常规方式要求有 Python 环境、Redis 环境,具体要求如下:
 
-* Python>=3.6
-* Redis
+- Python>=3.6
+- Redis
 
 ## Docker 运行
 
@@ -72,6 +72,12 @@ proxypool    | 2020-02-19 17:09:46,596 INFO success: tester entered RUNNING stat
 
 这时候访问 [http://localhost:5555/random](http://localhost:5555/random) 即可获取一个随机可用代理。
 
+当然你也可以选择自己 Build,直接运行如下命令即可:
+
+```
+docker-compose -f build.yml up
+```
+
 如果下载速度特别慢,可以自行修改 Dockerfile,修改:
 
 ```diff
@@ -118,7 +124,7 @@ export REDIS_CONNECTION_STRING='redis://@host:port/db'
 
 ### 安装依赖包
 
-这里强烈推荐使用 [Conda](https://docs.conda.io/projects/conda/en/latest/user-guide/tasks/manage-environments.html#creating-an-environment-with-commands) 
+这里强烈推荐使用 [Conda](https://docs.conda.io/projects/conda/en/latest/user-guide/tasks/manage-environments.html#creating-an-environment-with-commands)
 或 [virtualenv](https://virtualenv.pypa.io/en/latest/user_guide.html) 创建虚拟环境,Python 版本不低于 3.6。
 
 然后 pip 安装依赖即可:
@@ -198,15 +204,15 @@ if __name__ == '__main__':
 ```
 get random proxy 116.196.115.209:8080
 {
-  "args": {}, 
+  "args": {},
   "headers": {
-    "Accept": "*/*", 
-    "Accept-Encoding": "gzip, deflate", 
-    "Host": "httpbin.org", 
-    "User-Agent": "python-requests/2.22.0", 
+    "Accept": "*/*",
+    "Accept-Encoding": "gzip, deflate",
+    "Host": "httpbin.org",
+    "User-Agent": "python-requests/2.22.0",
     "X-Amzn-Trace-Id": "Root=1-5e4d7140-662d9053c0a2e513c7278364"
-  }, 
-  "origin": "116.196.115.209", 
+  },
+  "origin": "116.196.115.209",
   "url": "https://httpbin.org/get"
 }
 ```
@@ -219,41 +225,41 @@ get random proxy 116.196.115.209:8080
 
 ### 开关
 
-* ENABLE_TESTER:允许 Tester 启动,默认 true
-* ENABLE_GETTER:允许 Getter 启动,默认 true
-* ENABLE_SERVER:运行 Server 启动,默认 true
+- ENABLE_TESTER:允许 Tester 启动,默认 true
+- ENABLE_GETTER:允许 Getter 启动,默认 true
+- ENABLE_SERVER:运行 Server 启动,默认 true
 
 ### 环境
 
-* APP_ENV:运行环境,可以设置 dev、test、prod,即开发、测试、生产环境,默认 dev
-* APP_DEBUG:调试模式,可以设置 true 或 false,默认 true
+- APP_ENV:运行环境,可以设置 dev、test、prod,即开发、测试、生产环境,默认 dev
+- APP_DEBUG:调试模式,可以设置 true 或 false,默认 true
 
 ### Redis 连接
 
-* REDIS_HOST:Redis 的 Host
-* REDIS_PORT:Redis 的端口
-* REDIS_PASSWORD:Redis 的密码
-* REDIS_DB:Redis 的数据库索引,如 0、1
-* REDIS_CONNECTION_STRING:Redis 连接字符串
-* REDIS_KEY:Redis 储存代理使用字典的名称
+- REDIS_HOST:Redis 的 Host
+- REDIS_PORT:Redis 的端口
+- REDIS_PASSWORD:Redis 的密码
+- REDIS_DB:Redis 的数据库索引,如 0、1
+- REDIS_CONNECTION_STRING:Redis 连接字符串
+- REDIS_KEY:Redis 储存代理使用字典的名称
 
 ### 处理器
 
-* CYCLE_TESTER:Tester 运行周期,即间隔多久运行一次测试,默认 20 秒
-* CYCLE_GETTER:Getter 运行周期,即间隔多久运行一次代理获取,默认 100 秒
-* TEST_URL:测试 URL,默认百度
-* TEST_TIMEOUT:测试超时时间,默认 10 秒
-* TEST_BATCH:批量测试数量,默认 20 个代理
-* TEST_VALID_STATUS:测试有效的状态吗
-* API_HOST:代理 Server 运行 Host,默认 0.0.0.0
-* API_PORT:代理 Server 运行端口,默认 5555
-* API_THREADED:代理 Server 是否使用多线程,默认 true
+- CYCLE_TESTER:Tester 运行周期,即间隔多久运行一次测试,默认 20 秒
+- CYCLE_GETTER:Getter 运行周期,即间隔多久运行一次代理获取,默认 100 秒
+- TEST_URL:测试 URL,默认百度
+- TEST_TIMEOUT:测试超时时间,默认 10 秒
+- TEST_BATCH:批量测试数量,默认 20 个代理
+- TEST_VALID_STATUS:测试有效的状态吗
+- API_HOST:代理 Server 运行 Host,默认 0.0.0.0
+- API_PORT:代理 Server 运行端口,默认 5555
+- API_THREADED:代理 Server 是否使用多线程,默认 true
 
 ### 日志
 
-* LOG_DIR:日志相对路径
-* LOG_RUNTIME_FILE:运行日志文件名称
-* LOG_ERROR_FILE:错误日志文件名称
+- LOG_DIR:日志相对路径
+- LOG_RUNTIME_FILE:运行日志文件名称
+- LOG_ERROR_FILE:错误日志文件名称
 
 以上内容均可使用环境变量配置,即在运行前设置对应环境变量值即可,如更改测试地址和 Redis 键名:
 
@@ -267,7 +273,7 @@ export REDIS_KEY=proxies:weibo
 如果使用 Docker-Compose 启动代理池,则需要在 docker-compose.yml 文件里面指定环境变量,如:
 
 ```yaml
-version: '3'
+version: "3"
 services:
   redis:
     image: redis:alpine
@@ -278,7 +284,7 @@ services:
     restart: always
   proxypool:
     build: .
-    image: 'germey/proxypool'
+    image: "germey/proxypool"
     container_name: proxypool
     ports:
       - "5555:5555"
@@ -310,7 +316,7 @@ class Daili66Crawler(BaseCrawler):
     daili66 crawler, http://www.66ip.cn/1.html
     """
     urls = [BASE_URL.format(page=page) for page in range(1, MAX_PAGE + 1)]
-    
+
     def parse(self, html):
         """
         parse html file to get proxies
@@ -326,8 +332,8 @@ class Daili66Crawler(BaseCrawler):
 
 在这里只需要定义一个 Crawler 继承 BaseCrawler 即可,然后定义好 urls 变量和 parse 方法即可。
 
-* urls 变量即为爬取的代理网站网址列表,可以用程序定义也可写成固定内容。
-* parse 方法接收一个参数即 html,代理网址的 html,在 parse 方法里只需要写好 html 的解析,解析出 host 和 port,并构建 Proxy 对象 yield 返回即可。
+- urls 变量即为爬取的代理网站网址列表,可以用程序定义也可写成固定内容。
+- parse 方法接收一个参数即 html,代理网址的 html,在 parse 方法里只需要写好 html 的解析,解析出 host 和 port,并构建 Proxy 对象 yield 返回即可。
 
 网页的爬取不需要实现,BaseCrawler 已经有了默认实现,如需更改爬取方式,重写 crawl 方法即可。
 

+ 19 - 0
build.yml

@@ -0,0 +1,19 @@
+version: "3"
+services:
+  redis4proxypool:
+    image: redis:alpine
+    container_name: redis4proxypool
+    ports:
+      - "6374:6379"
+    # restart: always
+  proxypool:
+    build: .
+    image: "germey/proxypool"
+    container_name: proxypool
+    ports:
+      - "5555:5555"
+    restart: always
+    #    volumes:
+    #      - proxypool/crawlers/private:/app/proxypool/crawlers/private
+    environment:
+      REDIS_HOST: redis4proxypool

+ 2 - 4
docker-compose.yml

@@ -5,15 +5,13 @@ services:
     container_name: redis4proxypool
     ports:
       - "6374:6379"
-    # restart: always
   proxypool:
-    build: .
     image: "germey/proxypool"
     container_name: proxypool
     ports:
       - "5555:5555"
     restart: always
-    #    volumes:
-    #      - proxypool/crawlers/private:/app/proxypool/crawlers/private
+    # volumes:
+    #   - proxypool/crawlers/private:/app/proxypool/crawlers/private
     environment:
       REDIS_HOST: redis4proxypool