常用环境部署(五)——Docker部署airflow和Centos安装Python3.5

📅 2026/8/1 19:21:00
常用环境部署(五)——Docker部署airflow和Centos安装Python3.5
一、CentOS 7下安装Python3.51、安装python3.5可能使用的依赖yum install openssl-devel bzip2-devel expat-devel gdbm-devel readline-devel sqlite-devel2、下载Pythoncd /datawget https://www.python.org/ftp/python/3.5.0/Python-3.5.0.tgz3、解压下载的安装包tar -zxvf Python-3.5.0.tgz4、配置编译sudo mkdir /data/python3 cd /data/Python-3.5.0 ./configure --prefix/data/python3 make make install5、备份旧版本python链接新版本python在/usr/bin中有python、python2、python2.7三个文件依次指向后者sudo mv python python.bak sudo ln -s /data/python3/bin/python3 /usr/bin/python6、修改yum配置文件sudo vi /usr/bin/yum将第一行指定的python2.7版本改为python(#!/usr/bin/python2.7 改为 #!/usr/bin/python)7、执行命令python可以看到python版本为3.5.0退出命令exit()二、Docker-compose部署airflow1、在服务器上新建目录/data/airflowmkdir -p /data/airflow2、在/data/airflow/目录下新建一个文件docker-compose.yml打开文件输入下面内容然后保存。# 下载地址 curl -LfO https://airflow.apache.org/docs/apache-airflow/2.2.5/docker-compose.yamlvim docker-compose.yml# Licensed to the Apache Software Foundation (ASF) under one # or more contributor license agreements. See the NOTICE file # distributed with this work for additional information # regarding copyright ownership. The ASF licenses this file # to you under the Apache License, Version 2.0 (the # License); you may not use this file except in compliance # with the License. You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, # software distributed under the License is distributed on an # AS IS BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY # KIND, either express or implied. See the License for the # specific language governing permissions and limitations # under the License. # # Basic Airflow cluster configuration for CeleryExecutor with Redis and PostgreSQL. # # WARNING: This configuration is for local development. Do not use it in a production deployment. # # This configuration supports basic configuration using environment variables or an .env file # The following variables are supported: # # AIRFLOW_IMAGE_NAME - Docker image name used to run Airflow. # Default: apache/airflow:2.2.5 # AIRFLOW_UID - User ID in Airflow containers # Default: 50000 # Those configurations are useful mostly in case of standalone testing/running Airflow in test/try-out mode # # _AIRFLOW_WWW_USER_USERNAME - Username for the administrator account (if requested). # Default: airflow # _AIRFLOW_WWW_USER_PASSWORD - Password for the administrator account (if requested). # Default: airflow # _PIP_ADDITIONAL_REQUIREMENTS - Additional PIP requirements to add when starting all containers. # Default: # # Feel free to modify this file to suit your needs. --- version: 3 x-airflow-common: airflow-common # In order to add custom dependencies or upgrade provider packages you can use your extended image. # Comment the image line, place your Dockerfile in the directory where you placed the docker-compose.yaml # and uncomment the build line below, Then run docker-compose build to build the images. image: ${AIRFLOW_IMAGE_NAME:-apache/airflow:2.2.5} # build: . environment: airflow-common-env AIRFLOW__CORE__EXECUTOR: CeleryExecutor AIRFLOW__CORE__SQL_ALCHEMY_CONN: postgresqlpsycopg2://airflow:airflowpostgres/airflow AIRFLOW__CELERY__RESULT_BACKEND: dbpostgresql://airflow:airflowpostgres/airflow AIRFLOW__CELERY__BROKER_URL: redis://:redis:6379/0 AIRFLOW__CORE__FERNET_KEY: AIRFLOW__CORE__DAGS_ARE_PAUSED_AT_CREATION: true AIRFLOW__CORE__LOAD_EXAMPLES: true AIRFLOW__API__AUTH_BACKEND: airflow.api.auth.backend.basic_auth _PIP_ADDITIONAL_REQUIREMENTS: ${_PIP_ADDITIONAL_REQUIREMENTS:-} volumes: - ./dags:/opt/airflow/dags - ./logs:/opt/airflow/logs - ./plugins:/opt/airflow/plugins user: ${AIRFLOW_UID:-50000}:0 depends_on: airflow-common-depends-on redis: condition: service_healthy postgres: condition: service_healthy services: postgres: image: postgres:latest privileged: true environment: POSTGRES_USER: airflow POSTGRES_PASSWORD: airflow POSTGRES_DB: airflow volumes: - postgres-db-volume:/var/lib/postgresql/data healthcheck: test: [CMD, pg_isready, -U, airflow] interval: 5s retries: 5 restart: always redis: image: redis:latest expose: - 6379 healthcheck: test: [CMD, redis-cli, ping] interval: 5s timeout: 30s retries: 50 restart: always airflow-webserver: : *airflow-common command: webserver ports: - 8080:8080 healthcheck: test: [CMD, curl, --fail, http://localhost:8080/health] interval: 10s timeout: 10s retries: 5 restart: always depends_on: : *airflow-common-depends-on airflow-init: condition: service_completed_successfully airflow-scheduler: : *airflow-common command: scheduler healthcheck: test: [CMD-SHELL, airflow jobs check --job-type SchedulerJob --hostname $${HOSTNAME}] interval: 10s timeout: 10s retries: 5 restart: always depends_on: : *airflow-common-depends-on airflow-init: condition: service_completed_successfully airflow-worker: : *airflow-common command: celery worker healthcheck: test: - CMD-SHELL - celery --app airflow.executors.celery_executor.app inspect ping -d celery$${HOSTNAME} interval: 10s timeout: 10s retries: 5 environment: : *airflow-common-env # Required to handle warm shutdown of the celery workers properly # See https://airflow.apache.org/docs/docker-stack/entrypoint.html#signal-propagation DUMB_INIT_SETSID: 0 restart: always depends_on: : *airflow-common-depends-on airflow-init: condition: service_completed_successfully airflow-triggerer: : *airflow-common command: triggerer healthcheck: test: [CMD-SHELL, airflow jobs check --job-type TriggererJob --hostname $${HOSTNAME}] interval: 10s timeout: 10s retries: 5 restart: always depends_on: : *airflow-common-depends-on airflow-init: condition: service_completed_successfully airflow-init: : *airflow-common entrypoint: /bin/bash # yamllint disable rule:line-length command: - -c - | function ver() { printf %04d%04d%04d%04d $${1//./ } } airflow_version$$(gosu airflow airflow version) airflow_version_comparable$$(ver $${airflow_version}) min_airflow_version2.2.0 min_airflow_version_comparable$$(ver $${min_airflow_version}) if (( airflow_version_comparable min_airflow_version_comparable )); then echo echo -e \033[1;31mERROR!!!: Too old Airflow version $${airflow_version}!\e[0m echo The minimum Airflow version supported: $${min_airflow_version}. Only use this or higher! echo exit 1 fi if [[ -z ${AIRFLOW_UID} ]]; then echo echo -e \033[1;33mWARNING!!!: AIRFLOW_UID not set!\e[0m echo If you are on Linux, you SHOULD follow the instructions below to set echo AIRFLOW_UID environment variable, otherwise files will be owned by root. echo For other operating systems you can get rid of the warning with manually created .env file: echo See: https://airflow.apache.org/docs/apache-airflow/stable/start/docker.html#setting-the-right-airflow-user echo fi one_meg1048576 mem_available$$(($$(getconf _PHYS_PAGES) * $$(getconf PAGE_SIZE) / one_meg)) cpus_available$$(grep -cE cpu[0-9] /proc/stat) disk_available$$(df / | tail -1 | awk {print $$4}) warning_resourcesfalse if (( mem_available 4000 )) ; then echo echo -e \033[1;33mWARNING!!!: Not enough memory available for Docker.\e[0m echo At least 4GB of memory required. You have $$(numfmt --to iec $$((mem_available * one_meg))) echo warning_resourcestrue fi if (( cpus_available 2 )); then echo echo -e \033[1;33mWARNING!!!: Not enough CPUS available for Docker.\e[0m echo At least 2 CPUs recommended. You have $${cpus_available} echo warning_resourcestrue fi if (( disk_available one_meg * 10 )); then echo echo -e \033[1;33mWARNING!!!: Not enough Disk space available for Docker.\e[0m echo At least 10 GBs recommended. You have $$(numfmt --to iec $$((disk_available * 1024 ))) echo warning_resourcestrue fi if [[ $${warning_resources} true ]]; then echo echo -e \033[1;33mWARNING!!!: You have not enough resources to run Airflow (see above)!\e[0m echo Please follow the instructions to increase amount of resources available: echo https://airflow.apache.org/docs/apache-airflow/stable/start/docker.html#before-you-begin echo fi mkdir -p /sources/logs /sources/dags /sources/plugins chown -R ${AIRFLOW_UID}:0 /sources/{logs,dags,plugins} exec /entrypoint airflow version # yamllint enable rule:line-length environment: : *airflow-common-env _AIRFLOW_DB_UPGRADE: true _AIRFLOW_WWW_USER_CREATE: true _AIRFLOW_WWW_USER_USERNAME: ${_AIRFLOW_WWW_USER_USERNAME:-airflow} _AIRFLOW_WWW_USER_PASSWORD: ${_AIRFLOW_WWW_USER_PASSWORD:-airflow} user: 0:0 volumes: - .:/sources airflow-cli: : *airflow-common profiles: - debug environment: : *airflow-common-env CONNECTION_CHECK_MAX_COUNT: 0 # Workaround for entrypoint issue. See: https://github.com/apache/airflow/issues/16252 command: - bash - -c - airflow flower: : *airflow-common command: celery flower ports: - 5555:5555 healthcheck: test: [CMD, curl, --fail, http://localhost:5555/] interval: 10s timeout: 10s retries: 5 restart: always depends_on: : *airflow-common-depends-on airflow-init: condition: service_completed_successfully volumes: postgres-db-volume:# 按下Esc :wq1把这两个参数改成下面下个选择postgres的latest版本privilegedtrue就是提升权限image: postgres:latest privileged: true2在这里你用docker-compose config -q是会一个警告的为了不报这个警告官网也推荐了以下这个方式mkdir -p ./dags ./logs ./plugins echo -e AIRFLOW_UID$(id -u) .env3接执行即可可以查看到.env.env是隐藏文件的内容是有AIRFLOW_UID0初始化docker-compose up airflow-init3、docker-compose后台启动airflowdocker-compose -f docker-compose.yaml up -d4、默认是8080端口注意不要和Tomcat冲突了浏览器访问http://IP:8080 默认账号airflow 默认密码airflow